diff --git a/CHANGELOG b/CHANGELOG
index 57ee5361281d2c7e7e96a1db3fd64903dfe42986..b1a713108c08a45f9917ff560de5d201e373cc1d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,7 +1,12 @@
 Please view this file on the master branch, on stable branches it's out of date.
+v 8.11.0 (unreleased)
+  - Fix of 'Commits being passed to custom hooks are already reachable when using the UI'
+  - Limit git rev-list output count to one in forced push check
 
 v 8.10.0 (unreleased)
+  - Fix profile activity heatmap to show correct day name (eanplatter)
   - Expose {should,force}_remove_source_branch (Ben Boeckel)
+  - Add the functionality to be able to rename a file. !5049 (tiagonbotelho)
   - Disable PostgreSQL statement timeout during migrations
   - Fix projects dropdown loading performance with a simplified api cal. !5113 (tiagonbotelho)
   - Fix commit builds API, return all builds for all pipelines for given commit. !4849
@@ -16,25 +21,34 @@ v 8.10.0 (unreleased)
   - Align flash messages with left side of page content !4959 (winniehell)
   - Display tooltip for "Copy to Clipboard" button !5164 (winniehell)
   - Use default cursor for table header of project files !5165 (winniehell)
+  - Store when and yaml variables in builds table
   - Display last commit of deleted branch in push events !4699 (winniehell)
   - Escape file extension when parsing search results !5141 (winniehell)
   - Apply the trusted_proxies config to the rack request object for use with rack_attack
   - Upgrade to Rails 4.2.7. !5236
+  - Allow to pull code with deploy key from public projects
   - Add Sidekiq queue duration to transaction metrics.
   - Add a new column `artifacts_size` to table `ci_builds` !4964
   - Let Workhorse serve format-patch diffs
   - Display tooltip for mentioned users and groups !5261 (winniehell)
+  - Allow build email service to be tested
   - Added day name to contribution calendar tooltips
   - Make images fit to the size of the viewport !4810
   - Fix check for New Branch button on Issue page !4630 (winniehell)
+  - Fix GFM autocomplete not working on wiki pages
   - Fix MR-auto-close text added to description. !4836
   - Support U2F devices in Firefox. !5177
   - Fix issue, preventing users w/o push access to sort tags !5105 (redetection)
   - Add Spring EmojiOne updates.
+  - Added Rake task for tracking deployments !5320
+  - Fix fetching LFS objects for private CI projects
+  - Add the new 2016 Emoji! Adds 72 new emoji including bacon, facepalm, and selfie. !5237
   - Add syntax for multiline blockquote using `>>>` fence !3954
   - Fix viewing notification settings when a project is pending deletion
   - Updated compare dropdown menus to use GL dropdown
+  - Redirects back to issue after clicking login link
   - Eager load award emoji on notes
+  - Allow to define manual actions/builds on Pipelines and Environments
   - Fix pagination when sorting by columns with lots of ties (like priority)
   - The Markdown reference parsers now re-use query results to prevent running the same queries multiple times !5020
   - Updated project header design
@@ -47,21 +61,28 @@ v 8.10.0 (unreleased)
   - Render inline diffs for multiple changed lines following eachother
   - Wildcards for protected branches. !4665
   - Allow importing from Github using Personal Access Tokens. (Eric K Idema)
+  - API: Expose `due_date` for issues (Robert Schilling)
   - API: Todos !3188 (Robert Schilling)
   - API: Expose shared groups for projects and shared projects for groups !5050 (Robert Schilling)
+  - API: Expose `developers_can_push` and `developers_can_merge` for branches !5208 (Robert Schilling)
   - Add "Enabled Git access protocols" to Application Settings
   - Diffs will create button/diff form on demand no on server side
   - Reduce size of HTML used by diff comment forms
+  - Protected branches have a "Developers can Merge" setting. !4892 (original implementation by Mathias Vestergaard)
   - Fix user creation with stronger minimum password requirements !4054 (nathan-pmt)
   - Only show New Snippet button to users that can create snippets.
   - PipelinesFinder uses git cache data
+  - Track a user who created a pipeline
   - Actually render old and new sections of parallel diff next to each other
   - Throttle the update of `project.pushes_since_gc` to 1 minute.
   - Allow expanding and collapsing files in diff view (!4990)
   - Collapse large diffs by default (!4990)
   - Fix mentioned users list on diff notes
+  - Fix creation of deployment on build that is retried, redeployed or rollback
+  - Don't parse Rinku returned value to DocFragment when it didn't change the original html string.
   - Check for conflicts with existing Project's wiki path when creating a new project.
   - Show last push widget in upstream after push to fork
+  - Fix stage status shown for pipelines
   - Cache todos pending/done dashboard query counts.
   - Don't instantiate a git tree on Projects show default view
   - Bump Rinku to 2.0.0
@@ -84,7 +105,9 @@ v 8.10.0 (unreleased)
   - More descriptive message for git hooks and file locks
   - Aliases of award emoji should be stored as original name. !5060 (dixpac)
   - Handle custom Git hook result in GitLab UI
+  - Allow to access Container Registry for Public and Internal projects
   - Allow '?', or '&' for label names
+  - Support redirected blobs for Container Registry integration
   - Fix importer for GitHub Pull Requests when a branch was reused across Pull Requests
   - Add date when user joined the team on the member page
   - Fix 404 redirect after validation fails importing a GitLab project
@@ -92,6 +115,7 @@ v 8.10.0 (unreleased)
   - Add min value for project limit field on user's form !3622 (jastkand)
   - Reset project pushes_since_gc when we enqueue the git gc call
   - Add reminder to not paste private SSH keys !4399 (Ingo Blechschmidt)
+  - Collapsed diffs lines/size don't acumulate to overflow diffs.
   - Remove duplicate `description` field in `MergeRequest` entities (Ben Boeckel)
   - Style of import project buttons were fixed in the new project page. !5183 (rdemirbay)
   - Fix GitHub client requests when rate limit is disabled
@@ -103,7 +127,14 @@ v 8.10.0 (unreleased)
   - Fix last update timestamp on issues not preserved on gitlab.com and project imports
   - Fix issues importing projects from EE to CE
   - Fix creating group with space in group path
+  - Improve cron_jobs loading error messages !5318
   - Create Todos for Issue author when assign or mention himself (Katarzyna Kobierska)
+  - Limit the number of retries on error to 3 for exporting projects
+  - Allow empty repositories on project import/export
+  - Render only commit message title in builds (Katarzyna Kobierska Ula Budziszewska)
+  - Allow bulk (un)subscription from issues in issue index
+  - Fix MR diff encoding issues exporting GitLab projects
+  - Export and import avatar as part of project import/export
 
 v 8.9.6
   - Fix importing of events under notes for GitLab projects. !5154
@@ -112,6 +143,7 @@ v 8.9.6
   - Fix broken migration in MySQL. !5005
   - Overwrite Host and X-Forwarded-Host headers in NGINX !5213
   - Keeps issue number when importing from Gitlab.com
+  - Add Pending tab for Builds (Katarzyna Kobierska, Urszula Budziszewska)
 
 v 8.9.7 (unreleased)
   - Fix import_data wrongly saved as a result of an invalid import_url
diff --git a/Gemfile b/Gemfile
index 81e8ff60ad5283a5b28c55b737dff792c89ec7e1..c5df68839d540de237546be8c55c801003c0a365 100644
--- a/Gemfile
+++ b/Gemfile
@@ -52,7 +52,7 @@ gem 'browser', '~> 2.2'
 
 # Extracting information from a git repository
 # Provide access to Gitlab::Git library
-gem 'gitlab_git', '~> 10.2'
+gem 'gitlab_git', '~> 10.3.2'
 
 # LDAP Auth
 # GitLab fork with several improvements to original library. For full list of changes
@@ -223,7 +223,7 @@ gem 'jquery-turbolinks', '~> 2.1.0'
 gem 'addressable',        '~> 2.3.8'
 gem 'bootstrap-sass',     '~> 3.3.0'
 gem 'font-awesome-rails', '~> 4.6.1'
-gem 'gemojione',          '~> 2.6'
+gem 'gemojione',          '~> 3.0'
 gem 'gon',                '~> 6.0.1'
 gem 'jquery-atwho-rails', '~> 1.3.2'
 gem 'jquery-rails',       '~> 4.1.0'
@@ -349,3 +349,6 @@ gem 'health_check', '~> 2.1.0'
 # System information
 gem 'vmstat', '~> 2.1.0'
 gem 'sys-filesystem', '~> 1.1.6'
+
+# Secure headers for Content Security Policy
+gem 'secure_headers', '~> 3.3'
diff --git a/Gemfile.lock b/Gemfile.lock
index 0987fd5665a02dc5b91aefb2e16a99f200341dfd..363904a4baab968b7d98e174b4262eaee518d840 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -255,7 +255,7 @@ GEM
       ruby-progressbar (~> 1.4)
     gemnasium-gitlab-service (0.2.6)
       rugged (~> 0.21)
-    gemojione (2.6.1)
+    gemojione (3.0.1)
       json
     get_process_mem (0.2.0)
     gherkin-ruby (0.3.2)
@@ -274,7 +274,7 @@ GEM
       diff-lcs (~> 1.1)
       mime-types (>= 1.16, < 3)
       posix-spawn (~> 0.3)
-    gitlab_git (10.2.3)
+    gitlab_git (10.3.2)
       activesupport (~> 4.0)
       charlock_holmes (~> 0.7.3)
       github-linguist (~> 4.7.0)
@@ -578,7 +578,7 @@ GEM
       railties (>= 4.2.0, < 5.1)
     rinku (2.0.0)
     rotp (2.1.2)
-    rouge (2.0.3)
+    rouge (2.0.5)
     rqrcode (0.7.0)
       chunky_png
     rqrcode-rails3 (0.1.7)
@@ -645,6 +645,8 @@ GEM
     sdoc (0.3.20)
       json (>= 1.1.3)
       rdoc (~> 3.10)
+    secure_headers (3.3.2)
+      useragent
     seed-fu (2.3.6)
       activerecord (>= 3.1)
       activesupport (>= 3.1)
@@ -767,6 +769,7 @@ GEM
       get_process_mem (~> 0)
       unicorn (>= 4, < 6)
     uniform_notifier (1.9.0)
+    useragent (0.16.7)
     uuid (2.3.8)
       macaddr (~> 1.0)
     version_sorter (2.0.0)
@@ -857,11 +860,11 @@ DEPENDENCIES
   foreman (~> 0.78.0)
   fuubar (~> 2.0.0)
   gemnasium-gitlab-service (~> 0.2)
-  gemojione (~> 2.6)
+  gemojione (~> 3.0)
   github-linguist (~> 4.7.0)
   github-markup (~> 1.4)
   gitlab-flowdock-git-hook (~> 1.0.1)
-  gitlab_git (~> 10.2)
+  gitlab_git (~> 10.3.2)
   gitlab_meta (= 7.0)
   gitlab_omniauth-ldap (~> 1.2.1)
   gollum-lib (~> 4.2)
@@ -944,6 +947,7 @@ DEPENDENCIES
   sass-rails (~> 5.0.0)
   scss_lint (~> 0.47.0)
   sdoc (~> 0.3.20)
+  secure_headers (~> 3.3)
   seed-fu (~> 2.3.5)
   select2-rails (~> 3.5.9)
   sentry-raven (~> 1.1.0)
diff --git a/MAINTENANCE.md b/MAINTENANCE.md
index d3d36670693aa4c9b5b51a44e37542b077d2c9cd..1efb2a35f6d9f9a12c8741f2dcae0bafa5d04847 100644
--- a/MAINTENANCE.md
+++ b/MAINTENANCE.md
@@ -1,15 +1,35 @@
 # GitLab Maintenance Policy
 
-GitLab is a fast moving and evolving project. We currently don't have the resources to support many releases concurrently. We support exactly one stable release at any given time.
+GitLab follows the [Semantic Versioning](http://semver.org/) for its releases:
+`(Major).(Minor).(Patch)` in a [pragmatic way].
 
-GitLab follows the [Semantic Versioning](http://semver.org/) for its releases: `(Major).(Minor).(Patch)` in a [pragmatic way](https://gist.github.com/jashkenas/cbd2b088e20279ae2c8e).
+- **Major version**: Whenever there is something significant or any backwards
+  incompatible changes are introduced to the public API.
+- **Minor version**: When new, backwards compatible functionality is introduced
+  to the public API or a minor feature is introduced, or when a set of smaller
+  features is rolled out.
+- **Patch number**: When backwards compatible bug fixes are introduced that fix
+  incorrect behavior.
 
-- **Major version**: Whenever there is something significant or any backwards incompatible changes are introduced to the public API.
-- **Minor version**: When new, backwards compatible functionality is introduced to the public API or a minor feature is introduced, or when a set of smaller features is rolled out.
-- **Patch number**: When backwards compatible bug fixes are introduced that fix incorrect behavior.
+The current stable release will receive security patches and bug fixes
+(eg. `8.9.0` -> `8.9.1`). Feature releases will mark the next supported stable
+release where the minor version is increased numerically by increments of one
+(eg. `8.9 -> 8.10`).
 
-The current stable release will receive security patches and bug fixes (eg. `5.0` -> `5.0.1`).  Feature releases will mark the next supported stable release where the minor version is increased numerically by increments of one (eg. `5.0 -> 5.1`).
+Our current policy is to support one stable release at any given time, but for
+medium-level security issues, we may consider [backporting to the previous two
+monthly releases][rel-sec].
 
-We encourage everyone to run the latest stable release to ensure that you can easily upgrade to the most secure and feature rich GitLab experience. In order to make sure you can easily run the most recent stable release, we are working hard to keep the update process simple and reliable.
+We encourage everyone to run the latest stable release to ensure that you can
+easily upgrade to the most secure and feature-rich GitLab experience. In order
+to make sure you can easily run the most recent stable release, we are working
+hard to keep the update process simple and reliable.
 
-More information about the release procedures can be found in the doc/release directory.
+More information about the release procedures can be found in our
+[release-tools documentation][rel]. You may also want to read our
+[Responsible Disclosure Policy][disclosure].
+
+[rel-sec]: https://gitlab.com/gitlab-org/release-tools/blob/master/doc/security.md#backporting
+[rel]: https://gitlab.com/gitlab-org/release-tools/blob/master/doc/
+[disclosure]: https://about.gitlab.com/disclosure/
+[pragmatic way]: https://gist.github.com/jashkenas/cbd2b088e20279ae2c8e
diff --git a/app/assets/images/emoji.png b/app/assets/images/emoji.png
index 6bacb0e92b6a4ec9b6b019a0c6cca0acaa33775e..6f1a34a559127963b82b87cf7bc00fa634545a78 100644
Binary files a/app/assets/images/emoji.png and b/app/assets/images/emoji.png differ
diff --git a/app/assets/images/emoji@2x.png b/app/assets/images/emoji@2x.png
index 99588b566160a76f8a41eb160ed225b3bb609a00..dc9cae1d44cf0282dab99202430b4ae0c710d37a 100644
Binary files a/app/assets/images/emoji@2x.png and b/app/assets/images/emoji@2x.png differ
diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee
index 1b0d0db89542b8361aaeb3a0905b223b35f7254f..951530e03a507e47f1d6467762fffea50126e2db 100644
--- a/app/assets/javascripts/gl_dropdown.js.coffee
+++ b/app/assets/javascripts/gl_dropdown.js.coffee
@@ -250,6 +250,8 @@ class GitLabDropdown
         if self.options.clicked
           self.options.clicked(selected, $el, e)
 
+        $el.trigger('blur')
+
   # Finds an element inside wrapper element
   getElement: (selector) ->
     @dropdown.find selector
diff --git a/app/assets/javascripts/issues-bulk-assignment.js.coffee b/app/assets/javascripts/issues-bulk-assignment.js.coffee
index 6b0e69dbae7a5e52cbd9c8ce5f93b357b4e17845..3d09ea08e3b1833d8813fd12c18811db7636286d 100644
--- a/app/assets/javascripts/issues-bulk-assignment.js.coffee
+++ b/app/assets/javascripts/issues-bulk-assignment.js.coffee
@@ -85,12 +85,13 @@ class @IssuableBulkActions
   getFormDataAsObject: ->
     formData =
       update:
-        state_event       : @form.find('input[name="update[state_event]"]').val()
-        assignee_id       : @form.find('input[name="update[assignee_id]"]').val()
-        milestone_id      : @form.find('input[name="update[milestone_id]"]').val()
-        issues_ids        : @form.find('input[name="update[issues_ids]"]').val()
-        add_label_ids     : []
-        remove_label_ids  : []
+        state_event        : @form.find('input[name="update[state_event]"]').val()
+        assignee_id        : @form.find('input[name="update[assignee_id]"]').val()
+        milestone_id       : @form.find('input[name="update[milestone_id]"]').val()
+        issues_ids         : @form.find('input[name="update[issues_ids]"]').val()
+        subscription_event : @form.find('input[name="update[subscription_event]"]').val()
+        add_label_ids      : []
+        remove_label_ids   : []
 
     if @willUpdateLabels
       @getLabelsToApply().map (id) ->
diff --git a/app/assets/javascripts/lib/utils/datetime_utility.js.coffee b/app/assets/javascripts/lib/utils/datetime_utility.js.coffee
index 178963fe0aa2bfa5810677bb49d80da41973c9d6..2371e913844ca27bc7282d99431bcc0d24e5c273 100644
--- a/app/assets/javascripts/lib/utils/datetime_utility.js.coffee
+++ b/app/assets/javascripts/lib/utils/datetime_utility.js.coffee
@@ -2,7 +2,7 @@
 
   w.gl ?= {}
   w.gl.utils ?= {}
-  w.gl.utils.days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
+  w.gl.utils.days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
 
   w.gl.utils.formatDate = (datetime) ->
     dateFormat(datetime, 'mmm d, yyyy h:MMtt Z')
diff --git a/app/assets/javascripts/protected_branches.js.coffee b/app/assets/javascripts/protected_branches.js.coffee
index 79c2306e4d25de078caaa95f8d001708fac40d1a..14afef2e2ee39034d07d56139bb088a2f3114114 100644
--- a/app/assets/javascripts/protected_branches.js.coffee
+++ b/app/assets/javascripts/protected_branches.js.coffee
@@ -1,18 +1,18 @@
 $ ->
   $(".protected-branches-list :checkbox").change (e) ->
     name = $(this).attr("name")
-    if name == "developers_can_push"
+    if name == "developers_can_push" || name == "developers_can_merge"
       id = $(this).val()
-      checked = $(this).is(":checked")
+      can_push = $(this).is(":checked")
       url = $(this).data("url")
       $.ajax
-        type: "PUT"
+        type: "PATCH"
         url: url
         dataType: "json"
         data:
           id: id
           protected_branch:
-            developers_can_push: checked
+            "#{name}": can_push
 
         success: ->
           row = $(e.target)
diff --git a/app/assets/javascripts/subscription_select.js.coffee b/app/assets/javascripts/subscription_select.js.coffee
new file mode 100644
index 0000000000000000000000000000000000000000..e5eb7a50d803351557579aade6834be2badde712
--- /dev/null
+++ b/app/assets/javascripts/subscription_select.js.coffee
@@ -0,0 +1,18 @@
+class @SubscriptionSelect
+  constructor: ->
+    $('.js-subscription-event').each (i, el) ->
+      fieldName = $(el).data("field-name")
+
+      $(el).glDropdown(
+        selectable: true
+        fieldName: fieldName
+        toggleLabel: (selected, el, instance) =>
+          label = 'Subscription'
+          $item = instance.dropdown.find('.is-active')
+          label = $item.text() if $item.length
+          label
+        clicked: (item, $el, e)->
+          e.preventDefault()
+        id: (obj, el) ->
+          $(el).data("id")
+      )
diff --git a/app/assets/stylesheets/framework/buttons.scss b/app/assets/stylesheets/framework/buttons.scss
index 590b8f54363bf06a0d738d1a38d47f80be57c95e..f87b8a2ad1cf33c5b90616dde8eb85a9497c3e89 100644
--- a/app/assets/stylesheets/framework/buttons.scss
+++ b/app/assets/stylesheets/framework/buttons.scss
@@ -49,6 +49,17 @@
     border-color: $border-dark;
     color: $color;
   }
+
+  svg {
+
+    path {
+      fill: $color;
+    }
+
+    use {
+      stroke: $color;
+    }
+  }
 }
 
 @mixin btn-green {
@@ -173,6 +184,13 @@
   .caret {
     margin-left: 5px;
   }
+
+  svg {
+    height: 15px;
+    width: auto;
+    position: relative;
+    top: 2px;
+  }
 }
 
 .btn-lg {
diff --git a/app/assets/stylesheets/framework/files.scss b/app/assets/stylesheets/framework/files.scss
index 71e4b50f2af57daede41477b34bb8301731b7101..407f1873431f823ead2ab6e2fa339223106235f7 100644
--- a/app/assets/stylesheets/framework/files.scss
+++ b/app/assets/stylesheets/framework/files.scss
@@ -70,7 +70,7 @@
     }
 
     &.wiki {
-      padding: $gl-padding;
+      padding: 30px $gl-padding;
 
       .highlight {
         margin-bottom: 9px;
diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss
index d52e8f0017292d3efc74b986a6790f2757668fa0..3fa4a22258dfa3eb25dda78b70c46802a2cc1134 100644
--- a/app/assets/stylesheets/framework/sidebar.scss
+++ b/app/assets/stylesheets/framework/sidebar.scss
@@ -198,6 +198,10 @@ header.header-pinned-nav {
 
   .sidebar-collapsed-icon {
     cursor: pointer;
+
+    .btn {
+      background-color: $gray-light;
+    }
   }
 }
 
diff --git a/app/assets/stylesheets/framework/typography.scss b/app/assets/stylesheets/framework/typography.scss
index 3575984b2290e118c133ea30bac20347ab220105..8659604cb8bf11c42f35102549fdb418308ce225 100644
--- a/app/assets/stylesheets/framework/typography.scss
+++ b/app/assets/stylesheets/framework/typography.scss
@@ -37,39 +37,41 @@
   }
 
   h1 {
-    font-size: 1.3em;
+    font-size: 2em;
     font-weight: 600;
-    margin: 24px 0 12px;
-    padding: 0 0 10px;
-    border-bottom: 1px solid #e7e9ed;
+    margin: 1em 0 10px;
+    padding: 0 0 0.3em;
+    border-bottom: 1px solid $btn-default-border;
     color: $gl-gray-dark;
   }
 
   h2 {
-    font-size: 1.2em;
+    font-size: 1.6em;
     font-weight: 600;
-    margin: 24px 0 12px;
+    margin: 1em 0 10px;
+    padding-bottom: 0.3em;
+    border-bottom: 1px solid $btn-default-border;
     color: $gl-gray-dark;
   }
 
   h3 {
-    margin: 24px 0 12px;
-    font-size: 1.1em;
+    margin: 1em 0 10px;
+    font-size: 1.4em;
   }
 
   h4 {
-    margin: 24px 0 12px;
-    font-size: 0.98em;
+    margin: 1em 0 10px;
+    font-size: 1.25em;
   }
 
   h5 {
-    margin: 24px 0 12px;
-    font-size: 0.95em;
+    margin: 1em 0 10px;
+    font-size: 1em;
   }
 
   h6 {
-    margin: 24px 0 12px;
-    font-size: 0.90em;
+    margin: 1em 0 10px;
+    font-size: 0.95em;
   }
 
   blockquote {
@@ -115,7 +117,7 @@
 
   ul, ol {
     padding: 0;
-    margin: 6px 0 6px 28px !important;
+    margin: 3px 0 3px 28px !important;
   }
 
   li {
diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss
index f0e7002e4cd6367ef27344df5fea1dc9872f2798..1882d4e888db70bd8e700269b9d84995b68df8e2 100644
--- a/app/assets/stylesheets/framework/variables.scss
+++ b/app/assets/stylesheets/framework/variables.scss
@@ -16,7 +16,7 @@ $border-color:          #e5e5e5;
 $focus-border-color:    #3aabf0;
 $table-border-color:    #f0f0f0;
 $background-color:      #fafafa;
-$dark-background-color: #f7f7f7;
+$dark-background-color: #f5f5f5;
 $table-text-gray:       #8f8f8f;
 
 /*
diff --git a/app/assets/stylesheets/pages/emojis.scss b/app/assets/stylesheets/pages/emojis.scss
index b731abc7450aa4cec8efe9bb2eacbd805a9f10f1..f17797b23819706aa4b129e5e6afb253b9dbfe8f 100644
--- a/app/assets/stylesheets/pages/emojis.scss
+++ b/app/assets/stylesheets/pages/emojis.scss
@@ -1,4 +1,4 @@
-.emoji-0023-20E3 { background-position: 0 0; }
+.emoji-0023-20E3 { background-position: 0 0px; }
 .emoji-002A-20E3 { background-position: -20px 0; }
 .emoji-0030-20E3 { background-position: 0 -20px; }
 .emoji-0031-20E3 { background-position: -20px -20px; }
@@ -452,1271 +452,1344 @@
 .emoji-1F391 { background-position: -420px -200px; }
 .emoji-1F392 { background-position: -420px -220px; }
 .emoji-1F393 { background-position: -420px -240px; }
-.emoji-1F394 { background-position: -420px -260px; }
-.emoji-1F395 { background-position: -420px -280px; }
-.emoji-1F396 { background-position: -420px -300px; }
-.emoji-1F397 { background-position: -420px -320px; }
-.emoji-1F398 { background-position: -420px -340px; }
-.emoji-1F399 { background-position: -420px -360px; }
-.emoji-1F39A { background-position: -420px -380px; }
-.emoji-1F39B { background-position: -420px -400px; }
-.emoji-1F39C { background-position: 0 -420px; }
-.emoji-1F39D { background-position: -20px -420px; }
-.emoji-1F39E { background-position: -40px -420px; }
-.emoji-1F39F { background-position: -60px -420px; }
-.emoji-1F3A0 { background-position: -80px -420px; }
-.emoji-1F3A1 { background-position: -100px -420px; }
-.emoji-1F3A2 { background-position: -120px -420px; }
-.emoji-1F3A3 { background-position: -140px -420px; }
-.emoji-1F3A4 { background-position: -160px -420px; }
-.emoji-1F3A5 { background-position: -180px -420px; }
-.emoji-1F3A6 { background-position: -200px -420px; }
-.emoji-1F3A7 { background-position: -220px -420px; }
-.emoji-1F3A8 { background-position: -240px -420px; }
-.emoji-1F3A9 { background-position: -260px -420px; }
-.emoji-1F3AA { background-position: -280px -420px; }
-.emoji-1F3AB { background-position: -300px -420px; }
-.emoji-1F3AC { background-position: -320px -420px; }
-.emoji-1F3AD { background-position: -340px -420px; }
-.emoji-1F3AE { background-position: -360px -420px; }
-.emoji-1F3AF { background-position: -380px -420px; }
-.emoji-1F3B0 { background-position: -400px -420px; }
-.emoji-1F3B1 { background-position: -420px -420px; }
-.emoji-1F3B2 { background-position: -440px 0; }
-.emoji-1F3B3 { background-position: -440px -20px; }
-.emoji-1F3B4 { background-position: -440px -40px; }
-.emoji-1F3B5 { background-position: -440px -60px; }
-.emoji-1F3B6 { background-position: -440px -80px; }
-.emoji-1F3B7 { background-position: -440px -100px; }
-.emoji-1F3B8 { background-position: -440px -120px; }
-.emoji-1F3B9 { background-position: -440px -140px; }
-.emoji-1F3BA { background-position: -440px -160px; }
-.emoji-1F3BB { background-position: -440px -180px; }
-.emoji-1F3BC { background-position: -440px -200px; }
-.emoji-1F3BD { background-position: -440px -220px; }
-.emoji-1F3BE { background-position: -440px -240px; }
-.emoji-1F3BF { background-position: -440px -260px; }
-.emoji-1F3C0 { background-position: -440px -280px; }
-.emoji-1F3C1 { background-position: -440px -300px; }
-.emoji-1F3C2 { background-position: -440px -320px; }
-.emoji-1F3C3 { background-position: -440px -340px; }
-.emoji-1F3C3-1F3FB { background-position: -440px -360px; }
-.emoji-1F3C3-1F3FC { background-position: -440px -380px; }
-.emoji-1F3C3-1F3FD { background-position: -440px -400px; }
-.emoji-1F3C3-1F3FE { background-position: -440px -420px; }
-.emoji-1F3C3-1F3FF { background-position: 0 -440px; }
-.emoji-1F3C4 { background-position: -20px -440px; }
-.emoji-1F3C4-1F3FB { background-position: -40px -440px; }
-.emoji-1F3C4-1F3FC { background-position: -60px -440px; }
-.emoji-1F3C4-1F3FD { background-position: -80px -440px; }
-.emoji-1F3C4-1F3FE { background-position: -100px -440px; }
-.emoji-1F3C4-1F3FF { background-position: -120px -440px; }
-.emoji-1F3C5 { background-position: -140px -440px; }
-.emoji-1F3C6 { background-position: -160px -440px; }
-.emoji-1F3C7 { background-position: -180px -440px; }
-.emoji-1F3C7-1F3FB { background-position: -200px -440px; }
-.emoji-1F3C7-1F3FC { background-position: -220px -440px; }
-.emoji-1F3C7-1F3FD { background-position: -240px -440px; }
-.emoji-1F3C7-1F3FE { background-position: -260px -440px; }
-.emoji-1F3C7-1F3FF { background-position: -280px -440px; }
-.emoji-1F3C8 { background-position: -300px -440px; }
-.emoji-1F3C9 { background-position: -320px -440px; }
-.emoji-1F3CA { background-position: -340px -440px; }
-.emoji-1F3CA-1F3FB { background-position: -360px -440px; }
-.emoji-1F3CA-1F3FC { background-position: -380px -440px; }
-.emoji-1F3CA-1F3FD { background-position: -400px -440px; }
-.emoji-1F3CA-1F3FE { background-position: -420px -440px; }
-.emoji-1F3CA-1F3FF { background-position: -440px -440px; }
-.emoji-1F3CB { background-position: -460px 0; }
-.emoji-1F3CB-1F3FB { background-position: -460px -20px; }
-.emoji-1F3CB-1F3FC { background-position: -460px -40px; }
-.emoji-1F3CB-1F3FD { background-position: -460px -60px; }
-.emoji-1F3CB-1F3FE { background-position: -460px -80px; }
-.emoji-1F3CB-1F3FF { background-position: -460px -100px; }
-.emoji-1F3CC { background-position: -460px -120px; }
-.emoji-1F3CD { background-position: -460px -140px; }
-.emoji-1F3CE { background-position: -460px -160px; }
-.emoji-1F3CF { background-position: -460px -180px; }
-.emoji-1F3D0 { background-position: -460px -200px; }
-.emoji-1F3D1 { background-position: -460px -220px; }
-.emoji-1F3D2 { background-position: -460px -240px; }
-.emoji-1F3D3 { background-position: -460px -260px; }
-.emoji-1F3D4 { background-position: -460px -280px; }
-.emoji-1F3D5 { background-position: -460px -300px; }
-.emoji-1F3D6 { background-position: -460px -320px; }
-.emoji-1F3D7 { background-position: -460px -340px; }
-.emoji-1F3D8 { background-position: -460px -360px; }
-.emoji-1F3D9 { background-position: -460px -380px; }
-.emoji-1F3DA { background-position: -460px -400px; }
-.emoji-1F3DB { background-position: -460px -420px; }
-.emoji-1F3DC { background-position: -460px -440px; }
-.emoji-1F3DD { background-position: 0 -460px; }
-.emoji-1F3DE { background-position: -20px -460px; }
-.emoji-1F3DF { background-position: -40px -460px; }
-.emoji-1F3E0 { background-position: -60px -460px; }
-.emoji-1F3E1 { background-position: -80px -460px; }
-.emoji-1F3E2 { background-position: -100px -460px; }
-.emoji-1F3E3 { background-position: -120px -460px; }
-.emoji-1F3E4 { background-position: -140px -460px; }
-.emoji-1F3E5 { background-position: -160px -460px; }
-.emoji-1F3E6 { background-position: -180px -460px; }
-.emoji-1F3E7 { background-position: -200px -460px; }
-.emoji-1F3E8 { background-position: -220px -460px; }
-.emoji-1F3E9 { background-position: -240px -460px; }
-.emoji-1F3EA { background-position: -260px -460px; }
-.emoji-1F3EB { background-position: -280px -460px; }
-.emoji-1F3EC { background-position: -300px -460px; }
-.emoji-1F3ED { background-position: -320px -460px; }
-.emoji-1F3EE { background-position: -340px -460px; }
-.emoji-1F3EF { background-position: -360px -460px; }
-.emoji-1F3F0 { background-position: -380px -460px; }
-.emoji-1F3F1 { background-position: -400px -460px; }
-.emoji-1F3F2 { background-position: -420px -460px; }
-.emoji-1F3F3 { background-position: -440px -460px; }
-.emoji-1F3F4 { background-position: -460px -460px; }
-.emoji-1F3F5 { background-position: -480px 0; }
-.emoji-1F3F6 { background-position: -480px -20px; }
-.emoji-1F3F7 { background-position: -480px -40px; }
-.emoji-1F3F8 { background-position: -480px -60px; }
-.emoji-1F3F9 { background-position: -480px -80px; }
-.emoji-1F3FA { background-position: -480px -100px; }
-.emoji-1F3FB { background-position: -480px -120px; }
-.emoji-1F3FC { background-position: -480px -140px; }
-.emoji-1F3FD { background-position: -480px -160px; }
-.emoji-1F3FE { background-position: -480px -180px; }
-.emoji-1F3FF { background-position: -480px -200px; }
-.emoji-1F400 { background-position: -480px -220px; }
-.emoji-1F401 { background-position: -480px -240px; }
-.emoji-1F402 { background-position: -480px -260px; }
-.emoji-1F403 { background-position: -480px -280px; }
-.emoji-1F404 { background-position: -480px -300px; }
-.emoji-1F405 { background-position: -480px -320px; }
-.emoji-1F406 { background-position: -480px -340px; }
-.emoji-1F407 { background-position: -480px -360px; }
-.emoji-1F408 { background-position: -480px -380px; }
-.emoji-1F409 { background-position: -480px -400px; }
-.emoji-1F40A { background-position: -480px -420px; }
-.emoji-1F40B { background-position: -480px -440px; }
-.emoji-1F40C { background-position: -480px -460px; }
-.emoji-1F40D { background-position: 0 -480px; }
-.emoji-1F40E { background-position: -20px -480px; }
-.emoji-1F40F { background-position: -40px -480px; }
-.emoji-1F410 { background-position: -60px -480px; }
-.emoji-1F411 { background-position: -80px -480px; }
-.emoji-1F412 { background-position: -100px -480px; }
-.emoji-1F413 { background-position: -120px -480px; }
-.emoji-1F414 { background-position: -140px -480px; }
-.emoji-1F415 { background-position: -160px -480px; }
-.emoji-1F416 { background-position: -180px -480px; }
-.emoji-1F417 { background-position: -200px -480px; }
-.emoji-1F418 { background-position: -220px -480px; }
-.emoji-1F419 { background-position: -240px -480px; }
-.emoji-1F41A { background-position: -260px -480px; }
-.emoji-1F41B { background-position: -280px -480px; }
-.emoji-1F41C { background-position: -300px -480px; }
-.emoji-1F41D { background-position: -320px -480px; }
-.emoji-1F41E { background-position: -340px -480px; }
-.emoji-1F41F { background-position: -360px -480px; }
-.emoji-1F420 { background-position: -380px -480px; }
-.emoji-1F421 { background-position: -400px -480px; }
-.emoji-1F422 { background-position: -420px -480px; }
-.emoji-1F423 { background-position: -440px -480px; }
-.emoji-1F424 { background-position: -460px -480px; }
-.emoji-1F425 { background-position: -480px -480px; }
-.emoji-1F426 { background-position: -500px 0; }
-.emoji-1F427 { background-position: -500px -20px; }
-.emoji-1F428 { background-position: -500px -40px; }
-.emoji-1F429 { background-position: -500px -60px; }
-.emoji-1F42A { background-position: -500px -80px; }
-.emoji-1F42B { background-position: -500px -100px; }
-.emoji-1F42C { background-position: -500px -120px; }
-.emoji-1F42D { background-position: -500px -140px; }
-.emoji-1F42E { background-position: -500px -160px; }
-.emoji-1F42F { background-position: -500px -180px; }
-.emoji-1F430 { background-position: -500px -200px; }
-.emoji-1F431 { background-position: -500px -220px; }
-.emoji-1F432 { background-position: -500px -240px; }
-.emoji-1F433 { background-position: -500px -260px; }
-.emoji-1F434 { background-position: -500px -280px; }
-.emoji-1F435 { background-position: -500px -300px; }
-.emoji-1F436 { background-position: -500px -320px; }
-.emoji-1F437 { background-position: -500px -340px; }
-.emoji-1F438 { background-position: -500px -360px; }
-.emoji-1F439 { background-position: -500px -380px; }
-.emoji-1F43A { background-position: -500px -400px; }
-.emoji-1F43B { background-position: -500px -420px; }
-.emoji-1F43C { background-position: -500px -440px; }
-.emoji-1F43D { background-position: -500px -460px; }
-.emoji-1F43E { background-position: -500px -480px; }
-.emoji-1F43F { background-position: 0 -500px; }
-.emoji-1F440 { background-position: -20px -500px; }
-.emoji-1F441 { background-position: -40px -500px; }
-.emoji-1F441-1F5E8 { background-position: -60px -500px; }
-.emoji-1F442 { background-position: -80px -500px; }
-.emoji-1F442-1F3FB { background-position: -100px -500px; }
-.emoji-1F442-1F3FC { background-position: -120px -500px; }
-.emoji-1F442-1F3FD { background-position: -140px -500px; }
-.emoji-1F442-1F3FE { background-position: -160px -500px; }
-.emoji-1F442-1F3FF { background-position: -180px -500px; }
-.emoji-1F443 { background-position: -200px -500px; }
-.emoji-1F443-1F3FB { background-position: -220px -500px; }
-.emoji-1F443-1F3FC { background-position: -240px -500px; }
-.emoji-1F443-1F3FD { background-position: -260px -500px; }
-.emoji-1F443-1F3FE { background-position: -280px -500px; }
-.emoji-1F443-1F3FF { background-position: -300px -500px; }
-.emoji-1F444 { background-position: -320px -500px; }
-.emoji-1F445 { background-position: -340px -500px; }
-.emoji-1F446 { background-position: -360px -500px; }
-.emoji-1F446-1F3FB { background-position: -380px -500px; }
-.emoji-1F446-1F3FC { background-position: -400px -500px; }
-.emoji-1F446-1F3FD { background-position: -420px -500px; }
-.emoji-1F446-1F3FE { background-position: -440px -500px; }
-.emoji-1F446-1F3FF { background-position: -460px -500px; }
-.emoji-1F447 { background-position: -480px -500px; }
-.emoji-1F447-1F3FB { background-position: -500px -500px; }
-.emoji-1F447-1F3FC { background-position: -520px 0; }
-.emoji-1F447-1F3FD { background-position: -520px -20px; }
-.emoji-1F447-1F3FE { background-position: -520px -40px; }
-.emoji-1F447-1F3FF { background-position: -520px -60px; }
-.emoji-1F448 { background-position: -520px -80px; }
-.emoji-1F448-1F3FB { background-position: -520px -100px; }
-.emoji-1F448-1F3FC { background-position: -520px -120px; }
-.emoji-1F448-1F3FD { background-position: -520px -140px; }
-.emoji-1F448-1F3FE { background-position: -520px -160px; }
-.emoji-1F448-1F3FF { background-position: -520px -180px; }
-.emoji-1F449 { background-position: -520px -200px; }
-.emoji-1F449-1F3FB { background-position: -520px -220px; }
-.emoji-1F449-1F3FC { background-position: -520px -240px; }
-.emoji-1F449-1F3FD { background-position: -520px -260px; }
-.emoji-1F449-1F3FE { background-position: -520px -280px; }
-.emoji-1F449-1F3FF { background-position: -520px -300px; }
-.emoji-1F44A { background-position: -520px -320px; }
-.emoji-1F44A-1F3FB { background-position: -520px -340px; }
-.emoji-1F44A-1F3FC { background-position: -520px -360px; }
-.emoji-1F44A-1F3FD { background-position: -520px -380px; }
-.emoji-1F44A-1F3FE { background-position: -520px -400px; }
-.emoji-1F44A-1F3FF { background-position: -520px -420px; }
-.emoji-1F44B { background-position: -520px -440px; }
-.emoji-1F44B-1F3FB { background-position: -520px -460px; }
-.emoji-1F44B-1F3FC { background-position: -520px -480px; }
-.emoji-1F44B-1F3FD { background-position: -520px -500px; }
-.emoji-1F44B-1F3FE { background-position: 0 -520px; }
-.emoji-1F44B-1F3FF { background-position: -20px -520px; }
-.emoji-1F44C { background-position: -40px -520px; }
-.emoji-1F44C-1F3FB { background-position: -60px -520px; }
-.emoji-1F44C-1F3FC { background-position: -80px -520px; }
-.emoji-1F44C-1F3FD { background-position: -100px -520px; }
-.emoji-1F44C-1F3FE { background-position: -120px -520px; }
-.emoji-1F44C-1F3FF { background-position: -140px -520px; }
-.emoji-1F44D { background-position: -160px -520px; }
-.emoji-1F44D-1F3FB { background-position: -180px -520px; }
-.emoji-1F44D-1F3FC { background-position: -200px -520px; }
-.emoji-1F44D-1F3FD { background-position: -220px -520px; }
-.emoji-1F44D-1F3FE { background-position: -240px -520px; }
-.emoji-1F44D-1F3FF { background-position: -260px -520px; }
-.emoji-1F44E { background-position: -280px -520px; }
-.emoji-1F44E-1F3FB { background-position: -300px -520px; }
-.emoji-1F44E-1F3FC { background-position: -320px -520px; }
-.emoji-1F44E-1F3FD { background-position: -340px -520px; }
-.emoji-1F44E-1F3FE { background-position: -360px -520px; }
-.emoji-1F44E-1F3FF { background-position: -380px -520px; }
-.emoji-1F44F { background-position: -400px -520px; }
-.emoji-1F44F-1F3FB { background-position: -420px -520px; }
-.emoji-1F44F-1F3FC { background-position: -440px -520px; }
-.emoji-1F44F-1F3FD { background-position: -460px -520px; }
-.emoji-1F44F-1F3FE { background-position: -480px -520px; }
-.emoji-1F44F-1F3FF { background-position: -500px -520px; }
-.emoji-1F450 { background-position: -520px -520px; }
-.emoji-1F450-1F3FB { background-position: -540px 0; }
-.emoji-1F450-1F3FC { background-position: -540px -20px; }
-.emoji-1F450-1F3FD { background-position: -540px -40px; }
-.emoji-1F450-1F3FE { background-position: -540px -60px; }
-.emoji-1F450-1F3FF { background-position: -540px -80px; }
-.emoji-1F451 { background-position: -540px -100px; }
-.emoji-1F452 { background-position: -540px -120px; }
-.emoji-1F453 { background-position: -540px -140px; }
-.emoji-1F454 { background-position: -540px -160px; }
-.emoji-1F455 { background-position: -540px -180px; }
-.emoji-1F456 { background-position: -540px -200px; }
-.emoji-1F457 { background-position: -540px -220px; }
-.emoji-1F458 { background-position: -540px -240px; }
-.emoji-1F459 { background-position: -540px -260px; }
-.emoji-1F45A { background-position: -540px -280px; }
-.emoji-1F45B { background-position: -540px -300px; }
-.emoji-1F45C { background-position: -540px -320px; }
-.emoji-1F45D { background-position: -540px -340px; }
-.emoji-1F45E { background-position: -540px -360px; }
-.emoji-1F45F { background-position: -540px -380px; }
-.emoji-1F460 { background-position: -540px -400px; }
-.emoji-1F461 { background-position: -540px -420px; }
-.emoji-1F462 { background-position: -540px -440px; }
-.emoji-1F463 { background-position: -540px -460px; }
-.emoji-1F464 { background-position: -540px -480px; }
-.emoji-1F465 { background-position: -540px -500px; }
-.emoji-1F466 { background-position: -540px -520px; }
-.emoji-1F466-1F3FB { background-position: 0 -540px; }
-.emoji-1F466-1F3FC { background-position: -20px -540px; }
-.emoji-1F466-1F3FD { background-position: -40px -540px; }
-.emoji-1F466-1F3FE { background-position: -60px -540px; }
-.emoji-1F466-1F3FF { background-position: -80px -540px; }
-.emoji-1F467 { background-position: -100px -540px; }
-.emoji-1F467-1F3FB { background-position: -120px -540px; }
-.emoji-1F467-1F3FC { background-position: -140px -540px; }
-.emoji-1F467-1F3FD { background-position: -160px -540px; }
-.emoji-1F467-1F3FE { background-position: -180px -540px; }
-.emoji-1F467-1F3FF { background-position: -200px -540px; }
-.emoji-1F468 { background-position: -220px -540px; }
-.emoji-1F468-1F3FB { background-position: -240px -540px; }
-.emoji-1F468-1F3FC { background-position: -260px -540px; }
-.emoji-1F468-1F3FD { background-position: -280px -540px; }
-.emoji-1F468-1F3FE { background-position: -300px -540px; }
-.emoji-1F468-1F3FF { background-position: -320px -540px; }
-.emoji-1F468-1F468-1F466 { background-position: -340px -540px; }
-.emoji-1F468-1F468-1F466-1F466 { background-position: -360px -540px; }
-.emoji-1F468-1F468-1F467 { background-position: -380px -540px; }
-.emoji-1F468-1F468-1F467-1F466 { background-position: -400px -540px; }
-.emoji-1F468-1F468-1F467-1F467 { background-position: -420px -540px; }
-.emoji-1F468-1F469-1F466-1F466 { background-position: -440px -540px; }
-.emoji-1F468-1F469-1F467 { background-position: -460px -540px; }
-.emoji-1F468-1F469-1F467-1F466 { background-position: -480px -540px; }
-.emoji-1F468-1F469-1F467-1F467 { background-position: -500px -540px; }
-.emoji-1F468-2764-1F468 { background-position: -520px -540px; }
-.emoji-1F468-2764-1F48B-1F468 { background-position: -540px -540px; }
-.emoji-1F469 { background-position: -560px 0; }
-.emoji-1F469-1F3FB { background-position: -560px -20px; }
-.emoji-1F469-1F3FC { background-position: -560px -40px; }
-.emoji-1F469-1F3FD { background-position: -560px -60px; }
-.emoji-1F469-1F3FE { background-position: -560px -80px; }
-.emoji-1F469-1F3FF { background-position: -560px -100px; }
-.emoji-1F469-1F469-1F466 { background-position: -560px -120px; }
-.emoji-1F469-1F469-1F466-1F466 { background-position: -560px -140px; }
-.emoji-1F469-1F469-1F467 { background-position: -560px -160px; }
-.emoji-1F469-1F469-1F467-1F466 { background-position: -560px -180px; }
-.emoji-1F469-1F469-1F467-1F467 { background-position: -560px -200px; }
-.emoji-1F469-2764-1F469 { background-position: -560px -220px; }
-.emoji-1F469-2764-1F48B-1F469 { background-position: -560px -240px; }
-.emoji-1F46A { background-position: -560px -260px; }
-.emoji-1F46B { background-position: -560px -280px; }
-.emoji-1F46C { background-position: -560px -300px; }
-.emoji-1F46D { background-position: -560px -320px; }
-.emoji-1F46E { background-position: -560px -340px; }
-.emoji-1F46E-1F3FB { background-position: -560px -360px; }
-.emoji-1F46E-1F3FC { background-position: -560px -380px; }
-.emoji-1F46E-1F3FD { background-position: -560px -400px; }
-.emoji-1F46E-1F3FE { background-position: -560px -420px; }
-.emoji-1F46E-1F3FF { background-position: -560px -440px; }
-.emoji-1F46F { background-position: -560px -460px; }
-.emoji-1F470 { background-position: -560px -480px; }
-.emoji-1F470-1F3FB { background-position: -560px -500px; }
-.emoji-1F470-1F3FC { background-position: -560px -520px; }
-.emoji-1F470-1F3FD { background-position: -560px -540px; }
-.emoji-1F470-1F3FE { background-position: 0 -560px; }
-.emoji-1F470-1F3FF { background-position: -20px -560px; }
-.emoji-1F471 { background-position: -40px -560px; }
-.emoji-1F471-1F3FB { background-position: -60px -560px; }
-.emoji-1F471-1F3FC { background-position: -80px -560px; }
-.emoji-1F471-1F3FD { background-position: -100px -560px; }
-.emoji-1F471-1F3FE { background-position: -120px -560px; }
-.emoji-1F471-1F3FF { background-position: -140px -560px; }
-.emoji-1F472 { background-position: -160px -560px; }
-.emoji-1F472-1F3FB { background-position: -180px -560px; }
-.emoji-1F472-1F3FC { background-position: -200px -560px; }
-.emoji-1F472-1F3FD { background-position: -220px -560px; }
-.emoji-1F472-1F3FE { background-position: -240px -560px; }
-.emoji-1F472-1F3FF { background-position: -260px -560px; }
-.emoji-1F473 { background-position: -280px -560px; }
-.emoji-1F473-1F3FB { background-position: -300px -560px; }
-.emoji-1F473-1F3FC { background-position: -320px -560px; }
-.emoji-1F473-1F3FD { background-position: -340px -560px; }
-.emoji-1F473-1F3FE { background-position: -360px -560px; }
-.emoji-1F473-1F3FF { background-position: -380px -560px; }
-.emoji-1F474 { background-position: -400px -560px; }
-.emoji-1F474-1F3FB { background-position: -420px -560px; }
-.emoji-1F474-1F3FC { background-position: -440px -560px; }
-.emoji-1F474-1F3FD { background-position: -460px -560px; }
-.emoji-1F474-1F3FE { background-position: -480px -560px; }
-.emoji-1F474-1F3FF { background-position: -500px -560px; }
-.emoji-1F475 { background-position: -520px -560px; }
-.emoji-1F475-1F3FB { background-position: -540px -560px; }
-.emoji-1F475-1F3FC { background-position: -560px -560px; }
-.emoji-1F475-1F3FD { background-position: -580px 0; }
-.emoji-1F475-1F3FE { background-position: -580px -20px; }
-.emoji-1F475-1F3FF { background-position: -580px -40px; }
-.emoji-1F476 { background-position: -580px -60px; }
-.emoji-1F476-1F3FB { background-position: -580px -80px; }
-.emoji-1F476-1F3FC { background-position: -580px -100px; }
-.emoji-1F476-1F3FD { background-position: -580px -120px; }
-.emoji-1F476-1F3FE { background-position: -580px -140px; }
-.emoji-1F476-1F3FF { background-position: -580px -160px; }
-.emoji-1F477 { background-position: -580px -180px; }
-.emoji-1F477-1F3FB { background-position: -580px -200px; }
-.emoji-1F477-1F3FC { background-position: -580px -220px; }
-.emoji-1F477-1F3FD { background-position: -580px -240px; }
-.emoji-1F477-1F3FE { background-position: -580px -260px; }
-.emoji-1F477-1F3FF { background-position: -580px -280px; }
-.emoji-1F478 { background-position: -580px -300px; }
-.emoji-1F478-1F3FB { background-position: -580px -320px; }
-.emoji-1F478-1F3FC { background-position: -580px -340px; }
-.emoji-1F478-1F3FD { background-position: -580px -360px; }
-.emoji-1F478-1F3FE { background-position: -580px -380px; }
-.emoji-1F478-1F3FF { background-position: -580px -400px; }
-.emoji-1F479 { background-position: -580px -420px; }
-.emoji-1F47A { background-position: -580px -440px; }
-.emoji-1F47B { background-position: -580px -460px; }
-.emoji-1F47C { background-position: -580px -480px; }
-.emoji-1F47C-1F3FB { background-position: -580px -500px; }
-.emoji-1F47C-1F3FC { background-position: -580px -520px; }
-.emoji-1F47C-1F3FD { background-position: -580px -540px; }
-.emoji-1F47C-1F3FE { background-position: -580px -560px; }
-.emoji-1F47C-1F3FF { background-position: 0 -580px; }
-.emoji-1F47D { background-position: -20px -580px; }
-.emoji-1F47E { background-position: -40px -580px; }
-.emoji-1F47F { background-position: -60px -580px; }
-.emoji-1F480 { background-position: -80px -580px; }
-.emoji-1F481 { background-position: -100px -580px; }
-.emoji-1F481-1F3FB { background-position: -120px -580px; }
-.emoji-1F481-1F3FC { background-position: -140px -580px; }
-.emoji-1F481-1F3FD { background-position: -160px -580px; }
-.emoji-1F481-1F3FE { background-position: -180px -580px; }
-.emoji-1F481-1F3FF { background-position: -200px -580px; }
-.emoji-1F482 { background-position: -220px -580px; }
-.emoji-1F482-1F3FB { background-position: -240px -580px; }
-.emoji-1F482-1F3FC { background-position: -260px -580px; }
-.emoji-1F482-1F3FD { background-position: -280px -580px; }
-.emoji-1F482-1F3FE { background-position: -300px -580px; }
-.emoji-1F482-1F3FF { background-position: -320px -580px; }
-.emoji-1F483 { background-position: -340px -580px; }
-.emoji-1F483-1F3FB { background-position: -360px -580px; }
-.emoji-1F483-1F3FC { background-position: -380px -580px; }
-.emoji-1F483-1F3FD { background-position: -400px -580px; }
-.emoji-1F483-1F3FE { background-position: -420px -580px; }
-.emoji-1F483-1F3FF { background-position: -440px -580px; }
-.emoji-1F484 { background-position: -460px -580px; }
-.emoji-1F485 { background-position: -480px -580px; }
-.emoji-1F485-1F3FB { background-position: -500px -580px; }
-.emoji-1F485-1F3FC { background-position: -520px -580px; }
-.emoji-1F485-1F3FD { background-position: -540px -580px; }
-.emoji-1F485-1F3FE { background-position: -560px -580px; }
-.emoji-1F485-1F3FF { background-position: -580px -580px; }
-.emoji-1F486 { background-position: -600px 0; }
-.emoji-1F486-1F3FB { background-position: -600px -20px; }
-.emoji-1F486-1F3FC { background-position: -600px -40px; }
-.emoji-1F486-1F3FD { background-position: -600px -60px; }
-.emoji-1F486-1F3FE { background-position: -600px -80px; }
-.emoji-1F486-1F3FF { background-position: -600px -100px; }
-.emoji-1F487 { background-position: -600px -120px; }
-.emoji-1F487-1F3FB { background-position: -600px -140px; }
-.emoji-1F487-1F3FC { background-position: -600px -160px; }
-.emoji-1F487-1F3FD { background-position: -600px -180px; }
-.emoji-1F487-1F3FE { background-position: -600px -200px; }
-.emoji-1F487-1F3FF { background-position: -600px -220px; }
-.emoji-1F488 { background-position: -600px -240px; }
-.emoji-1F489 { background-position: -600px -260px; }
-.emoji-1F48A { background-position: -600px -280px; }
-.emoji-1F48B { background-position: -600px -300px; }
-.emoji-1F48C { background-position: -600px -320px; }
-.emoji-1F48D { background-position: -600px -340px; }
-.emoji-1F48E { background-position: -600px -360px; }
-.emoji-1F48F { background-position: -600px -380px; }
-.emoji-1F490 { background-position: -600px -400px; }
-.emoji-1F491 { background-position: -600px -420px; }
-.emoji-1F492 { background-position: -600px -440px; }
-.emoji-1F493 { background-position: -600px -460px; }
-.emoji-1F494 { background-position: -600px -480px; }
-.emoji-1F495 { background-position: -600px -500px; }
-.emoji-1F496 { background-position: -600px -520px; }
-.emoji-1F497 { background-position: -600px -540px; }
-.emoji-1F498 { background-position: -600px -560px; }
-.emoji-1F499 { background-position: -600px -580px; }
-.emoji-1F49A { background-position: 0 -600px; }
-.emoji-1F49B { background-position: -20px -600px; }
-.emoji-1F49C { background-position: -40px -600px; }
-.emoji-1F49D { background-position: -60px -600px; }
-.emoji-1F49E { background-position: -80px -600px; }
-.emoji-1F49F { background-position: -100px -600px; }
-.emoji-1F4A0 { background-position: -120px -600px; }
-.emoji-1F4A1 { background-position: -140px -600px; }
-.emoji-1F4A2 { background-position: -160px -600px; }
-.emoji-1F4A3 { background-position: -180px -600px; }
-.emoji-1F4A4 { background-position: -200px -600px; }
-.emoji-1F4A5 { background-position: -220px -600px; }
-.emoji-1F4A6 { background-position: -240px -600px; }
-.emoji-1F4A7 { background-position: -260px -600px; }
-.emoji-1F4A8 { background-position: -280px -600px; }
-.emoji-1F4A9 { background-position: -300px -600px; }
-.emoji-1F4AA { background-position: -320px -600px; }
-.emoji-1F4AA-1F3FB { background-position: -340px -600px; }
-.emoji-1F4AA-1F3FC { background-position: -360px -600px; }
-.emoji-1F4AA-1F3FD { background-position: -380px -600px; }
-.emoji-1F4AA-1F3FE { background-position: -400px -600px; }
-.emoji-1F4AA-1F3FF { background-position: -420px -600px; }
-.emoji-1F4AB { background-position: -440px -600px; }
-.emoji-1F4AC { background-position: -460px -600px; }
-.emoji-1F4AD { background-position: -480px -600px; }
-.emoji-1F4AE { background-position: -500px -600px; }
-.emoji-1F4AF { background-position: -520px -600px; }
-.emoji-1F4B0 { background-position: -540px -600px; }
-.emoji-1F4B1 { background-position: -560px -600px; }
-.emoji-1F4B2 { background-position: -580px -600px; }
-.emoji-1F4B3 { background-position: -600px -600px; }
-.emoji-1F4B4 { background-position: -620px 0; }
-.emoji-1F4B5 { background-position: -620px -20px; }
-.emoji-1F4B6 { background-position: -620px -40px; }
-.emoji-1F4B7 { background-position: -620px -60px; }
-.emoji-1F4B8 { background-position: -620px -80px; }
-.emoji-1F4B9 { background-position: -620px -100px; }
-.emoji-1F4BA { background-position: -620px -120px; }
-.emoji-1F4BB { background-position: -620px -140px; }
-.emoji-1F4BC { background-position: -620px -160px; }
-.emoji-1F4BD { background-position: -620px -180px; }
-.emoji-1F4BE { background-position: -620px -200px; }
-.emoji-1F4BF { background-position: -620px -220px; }
-.emoji-1F4C0 { background-position: -620px -240px; }
-.emoji-1F4C1 { background-position: -620px -260px; }
-.emoji-1F4C2 { background-position: -620px -280px; }
-.emoji-1F4C3 { background-position: -620px -300px; }
-.emoji-1F4C4 { background-position: -620px -320px; }
-.emoji-1F4C5 { background-position: -620px -340px; }
-.emoji-1F4C6 { background-position: -620px -360px; }
-.emoji-1F4C7 { background-position: -620px -380px; }
-.emoji-1F4C8 { background-position: -620px -400px; }
-.emoji-1F4C9 { background-position: -620px -420px; }
-.emoji-1F4CA { background-position: -620px -440px; }
-.emoji-1F4CB { background-position: -620px -460px; }
-.emoji-1F4CC { background-position: -620px -480px; }
-.emoji-1F4CD { background-position: -620px -500px; }
-.emoji-1F4CE { background-position: -620px -520px; }
-.emoji-1F4CF { background-position: -620px -540px; }
-.emoji-1F4D0 { background-position: -620px -560px; }
-.emoji-1F4D1 { background-position: -620px -580px; }
-.emoji-1F4D2 { background-position: -620px -600px; }
-.emoji-1F4D3 { background-position: 0 -620px; }
-.emoji-1F4D4 { background-position: -20px -620px; }
-.emoji-1F4D5 { background-position: -40px -620px; }
-.emoji-1F4D6 { background-position: -60px -620px; }
-.emoji-1F4D7 { background-position: -80px -620px; }
-.emoji-1F4D8 { background-position: -100px -620px; }
-.emoji-1F4D9 { background-position: -120px -620px; }
-.emoji-1F4DA { background-position: -140px -620px; }
-.emoji-1F4DB { background-position: -160px -620px; }
-.emoji-1F4DC { background-position: -180px -620px; }
-.emoji-1F4DD { background-position: -200px -620px; }
-.emoji-1F4DE { background-position: -220px -620px; }
-.emoji-1F4DF { background-position: -240px -620px; }
-.emoji-1F4E0 { background-position: -260px -620px; }
-.emoji-1F4E1 { background-position: -280px -620px; }
-.emoji-1F4E2 { background-position: -300px -620px; }
-.emoji-1F4E3 { background-position: -320px -620px; }
-.emoji-1F4E4 { background-position: -340px -620px; }
-.emoji-1F4E5 { background-position: -360px -620px; }
-.emoji-1F4E6 { background-position: -380px -620px; }
-.emoji-1F4E7 { background-position: -400px -620px; }
-.emoji-1F4E8 { background-position: -420px -620px; }
-.emoji-1F4E9 { background-position: -440px -620px; }
-.emoji-1F4EA { background-position: -460px -620px; }
-.emoji-1F4EB { background-position: -480px -620px; }
-.emoji-1F4EC { background-position: -500px -620px; }
-.emoji-1F4ED { background-position: -520px -620px; }
-.emoji-1F4EE { background-position: -540px -620px; }
-.emoji-1F4EF { background-position: -560px -620px; }
-.emoji-1F4F0 { background-position: -580px -620px; }
-.emoji-1F4F1 { background-position: -600px -620px; }
-.emoji-1F4F2 { background-position: -620px -620px; }
-.emoji-1F4F3 { background-position: -640px 0; }
-.emoji-1F4F4 { background-position: -640px -20px; }
-.emoji-1F4F5 { background-position: -640px -40px; }
-.emoji-1F4F6 { background-position: -640px -60px; }
-.emoji-1F4F7 { background-position: -640px -80px; }
-.emoji-1F4F8 { background-position: -640px -100px; }
-.emoji-1F4F9 { background-position: -640px -120px; }
-.emoji-1F4FA { background-position: -640px -140px; }
-.emoji-1F4FB { background-position: -640px -160px; }
-.emoji-1F4FC { background-position: -640px -180px; }
-.emoji-1F4FD { background-position: -640px -200px; }
-.emoji-1F4FE { background-position: -640px -220px; }
-.emoji-1F4FF { background-position: -640px -240px; }
-.emoji-1F500 { background-position: -640px -260px; }
-.emoji-1F501 { background-position: -640px -280px; }
-.emoji-1F502 { background-position: -640px -300px; }
-.emoji-1F503 { background-position: -640px -320px; }
-.emoji-1F504 { background-position: -640px -340px; }
-.emoji-1F505 { background-position: -640px -360px; }
-.emoji-1F506 { background-position: -640px -380px; }
-.emoji-1F507 { background-position: -640px -400px; }
-.emoji-1F508 { background-position: -640px -420px; }
-.emoji-1F509 { background-position: -640px -440px; }
-.emoji-1F50A { background-position: -640px -460px; }
-.emoji-1F50B { background-position: -640px -480px; }
-.emoji-1F50C { background-position: -640px -500px; }
-.emoji-1F50D { background-position: -640px -520px; }
-.emoji-1F50E { background-position: -640px -540px; }
-.emoji-1F50F { background-position: -640px -560px; }
-.emoji-1F510 { background-position: -640px -580px; }
-.emoji-1F511 { background-position: -640px -600px; }
-.emoji-1F512 { background-position: -640px -620px; }
-.emoji-1F513 { background-position: 0 -640px; }
-.emoji-1F514 { background-position: -20px -640px; }
-.emoji-1F515 { background-position: -40px -640px; }
-.emoji-1F516 { background-position: -60px -640px; }
-.emoji-1F517 { background-position: -80px -640px; }
-.emoji-1F518 { background-position: -100px -640px; }
-.emoji-1F519 { background-position: -120px -640px; }
-.emoji-1F51A { background-position: -140px -640px; }
-.emoji-1F51B { background-position: -160px -640px; }
-.emoji-1F51C { background-position: -180px -640px; }
-.emoji-1F51D { background-position: -200px -640px; }
-.emoji-1F51E { background-position: -220px -640px; }
-.emoji-1F51F { background-position: -240px -640px; }
-.emoji-1F520 { background-position: -260px -640px; }
-.emoji-1F521 { background-position: -280px -640px; }
-.emoji-1F522 { background-position: -300px -640px; }
-.emoji-1F523 { background-position: -320px -640px; }
-.emoji-1F524 { background-position: -340px -640px; }
-.emoji-1F525 { background-position: -360px -640px; }
-.emoji-1F526 { background-position: -380px -640px; }
-.emoji-1F527 { background-position: -400px -640px; }
-.emoji-1F528 { background-position: -420px -640px; }
-.emoji-1F529 { background-position: -440px -640px; }
-.emoji-1F52A { background-position: -460px -640px; }
-.emoji-1F52B { background-position: -480px -640px; }
-.emoji-1F52C { background-position: -500px -640px; }
-.emoji-1F52D { background-position: -520px -640px; }
-.emoji-1F52E { background-position: -540px -640px; }
-.emoji-1F52F { background-position: -560px -640px; }
-.emoji-1F530 { background-position: -580px -640px; }
-.emoji-1F531 { background-position: -600px -640px; }
-.emoji-1F532 { background-position: -620px -640px; }
-.emoji-1F533 { background-position: -640px -640px; }
-.emoji-1F534 { background-position: -660px 0; }
-.emoji-1F535 { background-position: -660px -20px; }
-.emoji-1F536 { background-position: -660px -40px; }
-.emoji-1F537 { background-position: -660px -60px; }
-.emoji-1F538 { background-position: -660px -80px; }
-.emoji-1F539 { background-position: -660px -100px; }
-.emoji-1F53A { background-position: -660px -120px; }
-.emoji-1F53B { background-position: -660px -140px; }
-.emoji-1F53C { background-position: -660px -160px; }
-.emoji-1F53D { background-position: -660px -180px; }
-.emoji-1F546 { background-position: -660px -200px; }
-.emoji-1F547 { background-position: -660px -220px; }
-.emoji-1F548 { background-position: -660px -240px; }
-.emoji-1F549 { background-position: -660px -260px; }
-.emoji-1F54A { background-position: -660px -280px; }
-.emoji-1F54B { background-position: -660px -300px; }
-.emoji-1F54C { background-position: -660px -320px; }
-.emoji-1F54D { background-position: -660px -340px; }
-.emoji-1F54E { background-position: -660px -360px; }
-.emoji-1F550 { background-position: -660px -380px; }
-.emoji-1F551 { background-position: -660px -400px; }
-.emoji-1F552 { background-position: -660px -420px; }
-.emoji-1F553 { background-position: -660px -440px; }
-.emoji-1F554 { background-position: -660px -460px; }
-.emoji-1F555 { background-position: -660px -480px; }
-.emoji-1F556 { background-position: -660px -500px; }
-.emoji-1F557 { background-position: -660px -520px; }
-.emoji-1F558 { background-position: -660px -540px; }
-.emoji-1F559 { background-position: -660px -560px; }
-.emoji-1F55A { background-position: -660px -580px; }
-.emoji-1F55B { background-position: -660px -600px; }
-.emoji-1F55C { background-position: -660px -620px; }
-.emoji-1F55D { background-position: -660px -640px; }
-.emoji-1F55E { background-position: 0 -660px; }
-.emoji-1F55F { background-position: -20px -660px; }
-.emoji-1F560 { background-position: -40px -660px; }
-.emoji-1F561 { background-position: -60px -660px; }
-.emoji-1F562 { background-position: -80px -660px; }
-.emoji-1F563 { background-position: -100px -660px; }
-.emoji-1F564 { background-position: -120px -660px; }
-.emoji-1F565 { background-position: -140px -660px; }
-.emoji-1F566 { background-position: -160px -660px; }
-.emoji-1F567 { background-position: -180px -660px; }
-.emoji-1F568 { background-position: -200px -660px; }
-.emoji-1F569 { background-position: -220px -660px; }
-.emoji-1F56A { background-position: -240px -660px; }
-.emoji-1F56B { background-position: -260px -660px; }
-.emoji-1F56C { background-position: -280px -660px; }
-.emoji-1F56D { background-position: -300px -660px; }
-.emoji-1F56E { background-position: -320px -660px; }
-.emoji-1F56F { background-position: -340px -660px; }
-.emoji-1F570 { background-position: -360px -660px; }
-.emoji-1F571 { background-position: -380px -660px; }
-.emoji-1F572 { background-position: -400px -660px; }
-.emoji-1F573 { background-position: -420px -660px; }
-.emoji-1F574 { background-position: -440px -660px; }
-.emoji-1F575 { background-position: -460px -660px; }
-.emoji-1F575-1F3FB { background-position: -480px -660px; }
-.emoji-1F575-1F3FC { background-position: -500px -660px; }
-.emoji-1F575-1F3FD { background-position: -520px -660px; }
-.emoji-1F575-1F3FE { background-position: -540px -660px; }
-.emoji-1F575-1F3FF { background-position: -560px -660px; }
-.emoji-1F576 { background-position: -580px -660px; }
-.emoji-1F577 { background-position: -600px -660px; }
-.emoji-1F578 { background-position: -620px -660px; }
-.emoji-1F579 { background-position: -640px -660px; }
-.emoji-1F57B { background-position: -660px -660px; }
-.emoji-1F57E { background-position: -680px 0; }
-.emoji-1F57F { background-position: -680px -20px; }
-.emoji-1F581 { background-position: -680px -40px; }
-.emoji-1F582 { background-position: -680px -60px; }
-.emoji-1F583 { background-position: -680px -80px; }
-.emoji-1F585 { background-position: -680px -100px; }
-.emoji-1F586 { background-position: -680px -120px; }
-.emoji-1F587 { background-position: -680px -140px; }
-.emoji-1F588 { background-position: -680px -160px; }
-.emoji-1F589 { background-position: -680px -180px; }
-.emoji-1F58A { background-position: -680px -200px; }
-.emoji-1F58B { background-position: -680px -220px; }
-.emoji-1F58C { background-position: -680px -240px; }
-.emoji-1F58D { background-position: -680px -260px; }
-.emoji-1F58E { background-position: -680px -280px; }
-.emoji-1F58F { background-position: -680px -300px; }
-.emoji-1F590 { background-position: -680px -320px; }
-.emoji-1F590-1F3FB { background-position: -680px -340px; }
-.emoji-1F590-1F3FC { background-position: -680px -360px; }
-.emoji-1F590-1F3FD { background-position: -680px -380px; }
-.emoji-1F590-1F3FE { background-position: -680px -400px; }
-.emoji-1F590-1F3FF { background-position: -680px -420px; }
-.emoji-1F591 { background-position: -680px -440px; }
-.emoji-1F592 { background-position: -680px -460px; }
-.emoji-1F593 { background-position: -680px -480px; }
-.emoji-1F594 { background-position: -680px -500px; }
-.emoji-1F595 { background-position: -680px -520px; }
-.emoji-1F595-1F3FB { background-position: -680px -540px; }
-.emoji-1F595-1F3FC { background-position: -680px -560px; }
-.emoji-1F595-1F3FD { background-position: -680px -580px; }
-.emoji-1F595-1F3FE { background-position: -680px -600px; }
-.emoji-1F595-1F3FF { background-position: -680px -620px; }
-.emoji-1F596 { background-position: -680px -640px; }
-.emoji-1F596-1F3FB { background-position: -680px -660px; }
-.emoji-1F596-1F3FC { background-position: 0 -680px; }
-.emoji-1F596-1F3FD { background-position: -20px -680px; }
-.emoji-1F596-1F3FE { background-position: -40px -680px; }
-.emoji-1F596-1F3FF { background-position: -60px -680px; }
-.emoji-1F597 { background-position: -80px -680px; }
-.emoji-1F598 { background-position: -100px -680px; }
-.emoji-1F599 { background-position: -120px -680px; }
-.emoji-1F59E { background-position: -140px -680px; }
-.emoji-1F59F { background-position: -160px -680px; }
-.emoji-1F5A5 { background-position: -180px -680px; }
-.emoji-1F5A6 { background-position: -200px -680px; }
-.emoji-1F5A7 { background-position: -220px -680px; }
-.emoji-1F5A8 { background-position: -240px -680px; }
-.emoji-1F5A9 { background-position: -260px -680px; }
-.emoji-1F5AA { background-position: -280px -680px; }
-.emoji-1F5AB { background-position: -300px -680px; }
-.emoji-1F5AD { background-position: -320px -680px; }
-.emoji-1F5AE { background-position: -340px -680px; }
-.emoji-1F5AF { background-position: -360px -680px; }
-.emoji-1F5B1 { background-position: -380px -680px; }
-.emoji-1F5B2 { background-position: -400px -680px; }
-.emoji-1F5B3 { background-position: -420px -680px; }
-.emoji-1F5B4 { background-position: -440px -680px; }
-.emoji-1F5B8 { background-position: -460px -680px; }
-.emoji-1F5B9 { background-position: -480px -680px; }
-.emoji-1F5BC { background-position: -500px -680px; }
-.emoji-1F5BD { background-position: -520px -680px; }
-.emoji-1F5BE { background-position: -540px -680px; }
-.emoji-1F5C0 { background-position: -560px -680px; }
-.emoji-1F5C1 { background-position: -580px -680px; }
-.emoji-1F5C2 { background-position: -600px -680px; }
-.emoji-1F5C3 { background-position: -620px -680px; }
-.emoji-1F5C4 { background-position: -640px -680px; }
-.emoji-1F5C6 { background-position: -660px -680px; }
-.emoji-1F5C7 { background-position: -680px -680px; }
-.emoji-1F5C9 { background-position: -700px 0; }
-.emoji-1F5CA { background-position: -700px -20px; }
-.emoji-1F5CE { background-position: -700px -40px; }
-.emoji-1F5CF { background-position: -700px -60px; }
-.emoji-1F5D0 { background-position: -700px -80px; }
-.emoji-1F5D1 { background-position: -700px -100px; }
-.emoji-1F5D2 { background-position: -700px -120px; }
-.emoji-1F5D3 { background-position: -700px -140px; }
-.emoji-1F5D4 { background-position: -700px -160px; }
-.emoji-1F5D8 { background-position: -700px -180px; }
-.emoji-1F5D9 { background-position: -700px -200px; }
-.emoji-1F5DC { background-position: -700px -220px; }
-.emoji-1F5DD { background-position: -700px -240px; }
-.emoji-1F5DE { background-position: -700px -260px; }
-.emoji-1F5E0 { background-position: -700px -280px; }
-.emoji-1F5E1 { background-position: -700px -300px; }
-.emoji-1F5E2 { background-position: -700px -320px; }
-.emoji-1F5E3 { background-position: -700px -340px; }
-.emoji-1F5E8 { background-position: -700px -360px; }
-.emoji-1F5E9 { background-position: -700px -380px; }
-.emoji-1F5EA { background-position: -700px -400px; }
-.emoji-1F5EB { background-position: -700px -420px; }
-.emoji-1F5EC { background-position: -700px -440px; }
-.emoji-1F5ED { background-position: -700px -460px; }
-.emoji-1F5EE { background-position: -700px -480px; }
-.emoji-1F5EF { background-position: -700px -500px; }
-.emoji-1F5F0 { background-position: -700px -520px; }
-.emoji-1F5F1 { background-position: -700px -540px; }
-.emoji-1F5F2 { background-position: -700px -560px; }
-.emoji-1F5F3 { background-position: -700px -580px; }
-.emoji-1F5F4 { background-position: -700px -600px; }
-.emoji-1F5F5 { background-position: -700px -620px; }
-.emoji-1F5F8 { background-position: -700px -640px; }
-.emoji-1F5F9 { background-position: -700px -660px; }
-.emoji-1F5FA { background-position: -700px -680px; }
-.emoji-1F5FB { background-position: 0 -700px; }
-.emoji-1F5FC { background-position: -20px -700px; }
-.emoji-1F5FD { background-position: -40px -700px; }
-.emoji-1F5FE { background-position: -60px -700px; }
-.emoji-1F5FF { background-position: -80px -700px; }
-.emoji-1F600 { background-position: -100px -700px; }
-.emoji-1F601 { background-position: -120px -700px; }
-.emoji-1F602 { background-position: -140px -700px; }
-.emoji-1F603 { background-position: -160px -700px; }
-.emoji-1F604 { background-position: -180px -700px; }
-.emoji-1F605 { background-position: -200px -700px; }
-.emoji-1F606 { background-position: -220px -700px; }
-.emoji-1F607 { background-position: -240px -700px; }
-.emoji-1F608 { background-position: -260px -700px; }
-.emoji-1F609 { background-position: -280px -700px; }
-.emoji-1F60A { background-position: -300px -700px; }
-.emoji-1F60B { background-position: -320px -700px; }
-.emoji-1F60C { background-position: -340px -700px; }
-.emoji-1F60D { background-position: -360px -700px; }
-.emoji-1F60E { background-position: -380px -700px; }
-.emoji-1F60F { background-position: -400px -700px; }
-.emoji-1F610 { background-position: -420px -700px; }
-.emoji-1F611 { background-position: -440px -700px; }
-.emoji-1F612 { background-position: -460px -700px; }
-.emoji-1F613 { background-position: -480px -700px; }
-.emoji-1F614 { background-position: -500px -700px; }
-.emoji-1F615 { background-position: -520px -700px; }
-.emoji-1F616 { background-position: -540px -700px; }
-.emoji-1F617 { background-position: -560px -700px; }
-.emoji-1F618 { background-position: -580px -700px; }
-.emoji-1F619 { background-position: -600px -700px; }
-.emoji-1F61A { background-position: -620px -700px; }
-.emoji-1F61B { background-position: -640px -700px; }
-.emoji-1F61C { background-position: -660px -700px; }
-.emoji-1F61D { background-position: -680px -700px; }
-.emoji-1F61E { background-position: -700px -700px; }
-.emoji-1F61F { background-position: -720px 0; }
-.emoji-1F620 { background-position: -720px -20px; }
-.emoji-1F621 { background-position: -720px -40px; }
-.emoji-1F622 { background-position: -720px -60px; }
-.emoji-1F623 { background-position: -720px -80px; }
-.emoji-1F624 { background-position: -720px -100px; }
-.emoji-1F625 { background-position: -720px -120px; }
-.emoji-1F626 { background-position: -720px -140px; }
-.emoji-1F627 { background-position: -720px -160px; }
-.emoji-1F628 { background-position: -720px -180px; }
-.emoji-1F629 { background-position: -720px -200px; }
-.emoji-1F62A { background-position: -720px -220px; }
-.emoji-1F62B { background-position: -720px -240px; }
-.emoji-1F62C { background-position: -720px -260px; }
-.emoji-1F62D { background-position: -720px -280px; }
-.emoji-1F62E { background-position: -720px -300px; }
-.emoji-1F62F { background-position: -720px -320px; }
-.emoji-1F630 { background-position: -720px -340px; }
-.emoji-1F631 { background-position: -720px -360px; }
-.emoji-1F632 { background-position: -720px -380px; }
-.emoji-1F633 { background-position: -720px -400px; }
-.emoji-1F634 { background-position: -720px -420px; }
-.emoji-1F635 { background-position: -720px -440px; }
-.emoji-1F636 { background-position: -720px -460px; }
-.emoji-1F637 { background-position: -720px -480px; }
-.emoji-1F638 { background-position: -720px -500px; }
-.emoji-1F639 { background-position: -720px -520px; }
-.emoji-1F63A { background-position: -720px -540px; }
-.emoji-1F63B { background-position: -720px -560px; }
-.emoji-1F63C { background-position: -720px -580px; }
-.emoji-1F63D { background-position: -720px -600px; }
-.emoji-1F63E { background-position: -720px -620px; }
-.emoji-1F63F { background-position: -720px -640px; }
-.emoji-1F640 { background-position: -720px -660px; }
-.emoji-1F641 { background-position: -720px -680px; }
-.emoji-1F642 { background-position: -720px -700px; }
-.emoji-1F643 { background-position: 0 -720px; }
-.emoji-1F644 { background-position: -20px -720px; }
-.emoji-1F645 { background-position: -40px -720px; }
-.emoji-1F645-1F3FB { background-position: -60px -720px; }
-.emoji-1F645-1F3FC { background-position: -80px -720px; }
-.emoji-1F645-1F3FD { background-position: -100px -720px; }
-.emoji-1F645-1F3FE { background-position: -120px -720px; }
-.emoji-1F645-1F3FF { background-position: -140px -720px; }
-.emoji-1F646 { background-position: -160px -720px; }
-.emoji-1F646-1F3FB { background-position: -180px -720px; }
-.emoji-1F646-1F3FC { background-position: -200px -720px; }
-.emoji-1F646-1F3FD { background-position: -220px -720px; }
-.emoji-1F646-1F3FE { background-position: -240px -720px; }
-.emoji-1F646-1F3FF { background-position: -260px -720px; }
-.emoji-1F647 { background-position: -280px -720px; }
-.emoji-1F647-1F3FB { background-position: -300px -720px; }
-.emoji-1F647-1F3FC { background-position: -320px -720px; }
-.emoji-1F647-1F3FD { background-position: -340px -720px; }
-.emoji-1F647-1F3FE { background-position: -360px -720px; }
-.emoji-1F647-1F3FF { background-position: -380px -720px; }
-.emoji-1F648 { background-position: -400px -720px; }
-.emoji-1F649 { background-position: -420px -720px; }
-.emoji-1F64A { background-position: -440px -720px; }
-.emoji-1F64B { background-position: -460px -720px; }
-.emoji-1F64B-1F3FB { background-position: -480px -720px; }
-.emoji-1F64B-1F3FC { background-position: -500px -720px; }
-.emoji-1F64B-1F3FD { background-position: -520px -720px; }
-.emoji-1F64B-1F3FE { background-position: -540px -720px; }
-.emoji-1F64B-1F3FF { background-position: -560px -720px; }
-.emoji-1F64C { background-position: -580px -720px; }
-.emoji-1F64C-1F3FB { background-position: -600px -720px; }
-.emoji-1F64C-1F3FC { background-position: -620px -720px; }
-.emoji-1F64C-1F3FD { background-position: -640px -720px; }
-.emoji-1F64C-1F3FE { background-position: -660px -720px; }
-.emoji-1F64C-1F3FF { background-position: -680px -720px; }
-.emoji-1F64D { background-position: -700px -720px; }
-.emoji-1F64D-1F3FB { background-position: -720px -720px; }
-.emoji-1F64D-1F3FC { background-position: -740px 0; }
-.emoji-1F64D-1F3FD { background-position: -740px -20px; }
-.emoji-1F64D-1F3FE { background-position: -740px -40px; }
-.emoji-1F64D-1F3FF { background-position: -740px -60px; }
-.emoji-1F64E { background-position: -740px -80px; }
-.emoji-1F64E-1F3FB { background-position: -740px -100px; }
-.emoji-1F64E-1F3FC { background-position: -740px -120px; }
-.emoji-1F64E-1F3FD { background-position: -740px -140px; }
-.emoji-1F64E-1F3FE { background-position: -740px -160px; }
-.emoji-1F64E-1F3FF { background-position: -740px -180px; }
-.emoji-1F64F { background-position: -740px -200px; }
-.emoji-1F64F-1F3FB { background-position: -740px -220px; }
-.emoji-1F64F-1F3FC { background-position: -740px -240px; }
-.emoji-1F64F-1F3FD { background-position: -740px -260px; }
-.emoji-1F64F-1F3FE { background-position: -740px -280px; }
-.emoji-1F64F-1F3FF { background-position: -740px -300px; }
-.emoji-1F680 { background-position: -740px -320px; }
-.emoji-1F681 { background-position: -740px -340px; }
-.emoji-1F682 { background-position: -740px -360px; }
-.emoji-1F683 { background-position: -740px -380px; }
-.emoji-1F684 { background-position: -740px -400px; }
-.emoji-1F685 { background-position: -740px -420px; }
-.emoji-1F686 { background-position: -740px -440px; }
-.emoji-1F687 { background-position: -740px -460px; }
-.emoji-1F688 { background-position: -740px -480px; }
-.emoji-1F689 { background-position: -740px -500px; }
-.emoji-1F68A { background-position: -740px -520px; }
-.emoji-1F68B { background-position: -740px -540px; }
-.emoji-1F68C { background-position: -740px -560px; }
-.emoji-1F68D { background-position: -740px -580px; }
-.emoji-1F68E { background-position: -740px -600px; }
-.emoji-1F68F { background-position: -740px -620px; }
-.emoji-1F690 { background-position: -740px -640px; }
-.emoji-1F691 { background-position: -740px -660px; }
-.emoji-1F692 { background-position: -740px -680px; }
-.emoji-1F693 { background-position: -740px -700px; }
-.emoji-1F694 { background-position: -740px -720px; }
-.emoji-1F695 { background-position: 0 -740px; }
-.emoji-1F696 { background-position: -20px -740px; }
-.emoji-1F697 { background-position: -40px -740px; }
-.emoji-1F698 { background-position: -60px -740px; }
-.emoji-1F699 { background-position: -80px -740px; }
-.emoji-1F69A { background-position: -100px -740px; }
-.emoji-1F69B { background-position: -120px -740px; }
-.emoji-1F69C { background-position: -140px -740px; }
-.emoji-1F69D { background-position: -160px -740px; }
-.emoji-1F69E { background-position: -180px -740px; }
-.emoji-1F69F { background-position: -200px -740px; }
-.emoji-1F6A0 { background-position: -220px -740px; }
-.emoji-1F6A1 { background-position: -240px -740px; }
-.emoji-1F6A2 { background-position: -260px -740px; }
-.emoji-1F6A3 { background-position: -280px -740px; }
-.emoji-1F6A3-1F3FB { background-position: -300px -740px; }
-.emoji-1F6A3-1F3FC { background-position: -320px -740px; }
-.emoji-1F6A3-1F3FD { background-position: -340px -740px; }
-.emoji-1F6A3-1F3FE { background-position: -360px -740px; }
-.emoji-1F6A3-1F3FF { background-position: -380px -740px; }
-.emoji-1F6A4 { background-position: -400px -740px; }
-.emoji-1F6A5 { background-position: -420px -740px; }
-.emoji-1F6A6 { background-position: -440px -740px; }
-.emoji-1F6A7 { background-position: -460px -740px; }
-.emoji-1F6A8 { background-position: -480px -740px; }
-.emoji-1F6A9 { background-position: -500px -740px; }
-.emoji-1F6AA { background-position: -520px -740px; }
-.emoji-1F6AB { background-position: -540px -740px; }
-.emoji-1F6AC { background-position: -560px -740px; }
-.emoji-1F6AD { background-position: -580px -740px; }
-.emoji-1F6AE { background-position: -600px -740px; }
-.emoji-1F6AF { background-position: -620px -740px; }
-.emoji-1F6B0 { background-position: -640px -740px; }
-.emoji-1F6B1 { background-position: -660px -740px; }
-.emoji-1F6B2 { background-position: -680px -740px; }
-.emoji-1F6B3 { background-position: -700px -740px; }
-.emoji-1F6B4 { background-position: -720px -740px; }
-.emoji-1F6B4-1F3FB { background-position: -740px -740px; }
-.emoji-1F6B4-1F3FC { background-position: -760px 0; }
-.emoji-1F6B4-1F3FD { background-position: -760px -20px; }
-.emoji-1F6B4-1F3FE { background-position: -760px -40px; }
-.emoji-1F6B4-1F3FF { background-position: -760px -60px; }
-.emoji-1F6B5 { background-position: -760px -80px; }
-.emoji-1F6B5-1F3FB { background-position: -760px -100px; }
-.emoji-1F6B5-1F3FC { background-position: -760px -120px; }
-.emoji-1F6B5-1F3FD { background-position: -760px -140px; }
-.emoji-1F6B5-1F3FE { background-position: -760px -160px; }
-.emoji-1F6B5-1F3FF { background-position: -760px -180px; }
-.emoji-1F6B6 { background-position: -760px -200px; }
-.emoji-1F6B6-1F3FB { background-position: -760px -220px; }
-.emoji-1F6B6-1F3FC { background-position: -760px -240px; }
-.emoji-1F6B6-1F3FD { background-position: -760px -260px; }
-.emoji-1F6B6-1F3FE { background-position: -760px -280px; }
-.emoji-1F6B6-1F3FF { background-position: -760px -300px; }
-.emoji-1F6B7 { background-position: -760px -320px; }
-.emoji-1F6B8 { background-position: -760px -340px; }
-.emoji-1F6B9 { background-position: -760px -360px; }
-.emoji-1F6BA { background-position: -760px -380px; }
-.emoji-1F6BB { background-position: -760px -400px; }
-.emoji-1F6BC { background-position: -760px -420px; }
-.emoji-1F6BD { background-position: -760px -440px; }
-.emoji-1F6BE { background-position: -760px -460px; }
-.emoji-1F6BF { background-position: -760px -480px; }
-.emoji-1F6C0 { background-position: -760px -500px; }
-.emoji-1F6C0-1F3FB { background-position: -760px -520px; }
-.emoji-1F6C0-1F3FC { background-position: -760px -540px; }
-.emoji-1F6C0-1F3FD { background-position: -760px -560px; }
-.emoji-1F6C0-1F3FE { background-position: -760px -580px; }
-.emoji-1F6C0-1F3FF { background-position: -760px -600px; }
-.emoji-1F6C1 { background-position: -760px -620px; }
-.emoji-1F6C2 { background-position: -760px -640px; }
-.emoji-1F6C3 { background-position: -760px -660px; }
-.emoji-1F6C4 { background-position: -760px -680px; }
-.emoji-1F6C5 { background-position: -760px -700px; }
-.emoji-1F6C6 { background-position: -760px -720px; }
-.emoji-1F6C7 { background-position: -760px -740px; }
-.emoji-1F6C8 { background-position: 0 -760px; }
-.emoji-1F6C9 { background-position: -20px -760px; }
-.emoji-1F6CA { background-position: -40px -760px; }
-.emoji-1F6CB { background-position: -60px -760px; }
-.emoji-1F6CC { background-position: -80px -760px; }
-.emoji-1F6CD { background-position: -100px -760px; }
-.emoji-1F6CE { background-position: -120px -760px; }
-.emoji-1F6CF { background-position: -140px -760px; }
-.emoji-1F6D0 { background-position: -160px -760px; }
-.emoji-1F6E0 { background-position: -180px -760px; }
-.emoji-1F6E1 { background-position: -200px -760px; }
-.emoji-1F6E2 { background-position: -220px -760px; }
-.emoji-1F6E3 { background-position: -240px -760px; }
-.emoji-1F6E4 { background-position: -260px -760px; }
-.emoji-1F6E5 { background-position: -280px -760px; }
-.emoji-1F6E6 { background-position: -300px -760px; }
-.emoji-1F6E7 { background-position: -320px -760px; }
-.emoji-1F6E8 { background-position: -340px -760px; }
-.emoji-1F6E9 { background-position: -360px -760px; }
-.emoji-1F6EA { background-position: -380px -760px; }
-.emoji-1F6EB { background-position: -400px -760px; }
-.emoji-1F6EC { background-position: -420px -760px; }
-.emoji-1F6F0 { background-position: -440px -760px; }
-.emoji-1F6F1 { background-position: -460px -760px; }
-.emoji-1F6F2 { background-position: -480px -760px; }
-.emoji-1F6F3 { background-position: -500px -760px; }
-.emoji-1F910 { background-position: -520px -760px; }
-.emoji-1F911 { background-position: -540px -760px; }
-.emoji-1F912 { background-position: -560px -760px; }
-.emoji-1F913 { background-position: -580px -760px; }
-.emoji-1F914 { background-position: -600px -760px; }
-.emoji-1F915 { background-position: -620px -760px; }
-.emoji-1F916 { background-position: -640px -760px; }
-.emoji-1F917 { background-position: -660px -760px; }
-.emoji-1F918 { background-position: -680px -760px; }
-.emoji-1F918-1F3FB { background-position: -700px -760px; }
-.emoji-1F918-1F3FC { background-position: -720px -760px; }
-.emoji-1F918-1F3FD { background-position: -740px -760px; }
-.emoji-1F918-1F3FE { background-position: -760px -760px; }
-.emoji-1F918-1F3FF { background-position: -780px 0; }
-.emoji-1F980 { background-position: -780px -20px; }
-.emoji-1F981 { background-position: -780px -40px; }
-.emoji-1F982 { background-position: -780px -60px; }
-.emoji-1F983 { background-position: -780px -80px; }
-.emoji-1F984 { background-position: -780px -100px; }
-.emoji-1F9C0 { background-position: -780px -120px; }
-.emoji-203C { background-position: -780px -140px; }
-.emoji-2049 { background-position: -780px -160px; }
-.emoji-2122 { background-position: -780px -180px; }
-.emoji-2139 { background-position: -780px -200px; }
-.emoji-2194 { background-position: -780px -220px; }
-.emoji-2195 { background-position: -780px -240px; }
-.emoji-2196 { background-position: -780px -260px; }
-.emoji-2197 { background-position: -780px -280px; }
-.emoji-2198 { background-position: -780px -300px; }
-.emoji-2199 { background-position: -780px -320px; }
-.emoji-21A9 { background-position: -780px -340px; }
-.emoji-21AA { background-position: -780px -360px; }
-.emoji-231A { background-position: -780px -380px; }
-.emoji-231B { background-position: -780px -400px; }
-.emoji-2328 { background-position: -780px -420px; }
-.emoji-23E9 { background-position: -780px -440px; }
-.emoji-23EA { background-position: -780px -460px; }
-.emoji-23EB { background-position: -780px -480px; }
-.emoji-23EC { background-position: -780px -500px; }
-.emoji-23ED { background-position: -780px -520px; }
-.emoji-23EE { background-position: -780px -540px; }
-.emoji-23EF { background-position: -780px -560px; }
-.emoji-23F0 { background-position: -780px -580px; }
-.emoji-23F1 { background-position: -780px -600px; }
-.emoji-23F2 { background-position: -780px -620px; }
-.emoji-23F3 { background-position: -780px -640px; }
-.emoji-23F8 { background-position: -780px -660px; }
-.emoji-23F9 { background-position: -780px -680px; }
-.emoji-23FA { background-position: -780px -700px; }
-.emoji-24C2 { background-position: -780px -720px; }
-.emoji-25AA { background-position: -780px -740px; }
-.emoji-25AB { background-position: -780px -760px; }
-.emoji-25B6 { background-position: 0 -780px; }
-.emoji-25C0 { background-position: -20px -780px; }
-.emoji-25FB { background-position: -40px -780px; }
-.emoji-25FC { background-position: -60px -780px; }
-.emoji-25FD { background-position: -80px -780px; }
-.emoji-25FE { background-position: -100px -780px; }
-.emoji-2600 { background-position: -120px -780px; }
-.emoji-2601 { background-position: -140px -780px; }
-.emoji-2602 { background-position: -160px -780px; }
-.emoji-2603 { background-position: -180px -780px; }
-.emoji-2604 { background-position: -200px -780px; }
-.emoji-260E { background-position: -220px -780px; }
-.emoji-2611 { background-position: -240px -780px; }
-.emoji-2614 { background-position: -260px -780px; }
-.emoji-2615 { background-position: -280px -780px; }
-.emoji-2618 { background-position: -300px -780px; }
-.emoji-261D { background-position: -320px -780px; }
-.emoji-261D-1F3FB { background-position: -340px -780px; }
-.emoji-261D-1F3FC { background-position: -360px -780px; }
-.emoji-261D-1F3FD { background-position: -380px -780px; }
-.emoji-261D-1F3FE { background-position: -400px -780px; }
-.emoji-261D-1F3FF { background-position: -420px -780px; }
-.emoji-2620 { background-position: -440px -780px; }
-.emoji-2622 { background-position: -460px -780px; }
-.emoji-2623 { background-position: -480px -780px; }
-.emoji-2626 { background-position: -500px -780px; }
-.emoji-262A { background-position: -520px -780px; }
-.emoji-262E { background-position: -540px -780px; }
-.emoji-262F { background-position: -560px -780px; }
-.emoji-2638 { background-position: -580px -780px; }
-.emoji-2639 { background-position: -600px -780px; }
-.emoji-263A { background-position: -620px -780px; }
-.emoji-2648 { background-position: -640px -780px; }
-.emoji-2649 { background-position: -660px -780px; }
-.emoji-264A { background-position: -680px -780px; }
-.emoji-264B { background-position: -700px -780px; }
-.emoji-264C { background-position: -720px -780px; }
-.emoji-264D { background-position: -740px -780px; }
-.emoji-264E { background-position: -760px -780px; }
-.emoji-264F { background-position: -780px -780px; }
-.emoji-2650 { background-position: -800px 0; }
-.emoji-2651 { background-position: -800px -20px; }
-.emoji-2652 { background-position: -800px -40px; }
-.emoji-2653 { background-position: -800px -60px; }
-.emoji-2660 { background-position: -800px -80px; }
-.emoji-2663 { background-position: -800px -100px; }
-.emoji-2665 { background-position: -800px -120px; }
-.emoji-2666 { background-position: -800px -140px; }
-.emoji-2668 { background-position: -800px -160px; }
-.emoji-267B { background-position: -800px -180px; }
-.emoji-267F { background-position: -800px -200px; }
-.emoji-2692 { background-position: -800px -220px; }
-.emoji-2693 { background-position: -800px -240px; }
-.emoji-2694 { background-position: -800px -260px; }
-.emoji-2696 { background-position: -800px -280px; }
-.emoji-2697 { background-position: -800px -300px; }
-.emoji-2699 { background-position: -800px -320px; }
-.emoji-269B { background-position: -800px -340px; }
-.emoji-269C { background-position: -800px -360px; }
-.emoji-26A0 { background-position: -800px -380px; }
-.emoji-26A1 { background-position: -800px -400px; }
-.emoji-26AA { background-position: -800px -420px; }
-.emoji-26AB { background-position: -800px -440px; }
-.emoji-26B0 { background-position: -800px -460px; }
-.emoji-26B1 { background-position: -800px -480px; }
-.emoji-26BD { background-position: -800px -500px; }
-.emoji-26BE { background-position: -800px -520px; }
-.emoji-26C4 { background-position: -800px -540px; }
-.emoji-26C5 { background-position: -800px -560px; }
-.emoji-26C8 { background-position: -800px -580px; }
-.emoji-26CE { background-position: -800px -600px; }
-.emoji-26CF { background-position: -800px -620px; }
-.emoji-26D1 { background-position: -800px -640px; }
-.emoji-26D3 { background-position: -800px -660px; }
-.emoji-26D4 { background-position: -800px -680px; }
-.emoji-26E9 { background-position: -800px -700px; }
-.emoji-26EA { background-position: -800px -720px; }
-.emoji-26F0 { background-position: -800px -740px; }
-.emoji-26F1 { background-position: -800px -760px; }
-.emoji-26F2 { background-position: -800px -780px; }
-.emoji-26F3 { background-position: 0 -800px; }
-.emoji-26F4 { background-position: -20px -800px; }
-.emoji-26F5 { background-position: -40px -800px; }
-.emoji-26F7 { background-position: -60px -800px; }
-.emoji-26F8 { background-position: -80px -800px; }
-.emoji-26F9 { background-position: -100px -800px; }
-.emoji-26F9-1F3FB { background-position: -120px -800px; }
-.emoji-26F9-1F3FC { background-position: -140px -800px; }
-.emoji-26F9-1F3FD { background-position: -160px -800px; }
-.emoji-26F9-1F3FE { background-position: -180px -800px; }
-.emoji-26F9-1F3FF { background-position: -200px -800px; }
-.emoji-26FA { background-position: -220px -800px; }
-.emoji-26FD { background-position: -240px -800px; }
-.emoji-2702 { background-position: -260px -800px; }
-.emoji-2705 { background-position: -280px -800px; }
-.emoji-2708 { background-position: -300px -800px; }
-.emoji-2709 { background-position: -320px -800px; }
-.emoji-270A { background-position: -340px -800px; }
-.emoji-270A-1F3FB { background-position: -360px -800px; }
-.emoji-270A-1F3FC { background-position: -380px -800px; }
-.emoji-270A-1F3FD { background-position: -400px -800px; }
-.emoji-270A-1F3FE { background-position: -420px -800px; }
-.emoji-270A-1F3FF { background-position: -440px -800px; }
-.emoji-270B { background-position: -460px -800px; }
-.emoji-270B-1F3FB { background-position: -480px -800px; }
-.emoji-270B-1F3FC { background-position: -500px -800px; }
-.emoji-270B-1F3FD { background-position: -520px -800px; }
-.emoji-270B-1F3FE { background-position: -540px -800px; }
-.emoji-270B-1F3FF { background-position: -560px -800px; }
-.emoji-270C { background-position: -580px -800px; }
-.emoji-270C-1F3FB { background-position: -600px -800px; }
-.emoji-270C-1F3FC { background-position: -620px -800px; }
-.emoji-270C-1F3FD { background-position: -640px -800px; }
-.emoji-270C-1F3FE { background-position: -660px -800px; }
-.emoji-270C-1F3FF { background-position: -680px -800px; }
-.emoji-270D { background-position: -700px -800px; }
-.emoji-270D-1F3FB { background-position: -720px -800px; }
-.emoji-270D-1F3FC { background-position: -740px -800px; }
-.emoji-270D-1F3FD { background-position: -760px -800px; }
-.emoji-270D-1F3FE { background-position: -780px -800px; }
-.emoji-270D-1F3FF { background-position: -800px -800px; }
-.emoji-270F { background-position: -820px 0; }
-.emoji-2712 { background-position: -820px -20px; }
-.emoji-2714 { background-position: -820px -40px; }
-.emoji-2716 { background-position: -820px -60px; }
-.emoji-271D { background-position: -820px -80px; }
-.emoji-2721 { background-position: -820px -100px; }
-.emoji-2728 { background-position: -820px -120px; }
-.emoji-2733 { background-position: -820px -140px; }
-.emoji-2734 { background-position: -820px -160px; }
-.emoji-2744 { background-position: -820px -180px; }
-.emoji-2747 { background-position: -820px -200px; }
-.emoji-274C { background-position: -820px -220px; }
-.emoji-274E { background-position: -820px -240px; }
-.emoji-2753 { background-position: -820px -260px; }
-.emoji-2754 { background-position: -820px -280px; }
-.emoji-2755 { background-position: -820px -300px; }
-.emoji-2757 { background-position: -820px -320px; }
-.emoji-2763 { background-position: -820px -340px; }
-.emoji-2764 { background-position: -820px -360px; }
-.emoji-2795 { background-position: -820px -380px; }
-.emoji-2796 { background-position: -820px -400px; }
-.emoji-2797 { background-position: -820px -420px; }
-.emoji-27A1 { background-position: -820px -440px; }
-.emoji-27B0 { background-position: -820px -460px; }
-.emoji-27BF { background-position: -820px -480px; }
-.emoji-2934 { background-position: -820px -500px; }
-.emoji-2935 { background-position: -820px -520px; }
-.emoji-2B05 { background-position: -820px -540px; }
-.emoji-2B06 { background-position: -820px -560px; }
-.emoji-2B07 { background-position: -820px -580px; }
-.emoji-2B1B { background-position: -820px -600px; }
-.emoji-2B1C { background-position: -820px -620px; }
-.emoji-2B50 { background-position: -820px -640px; }
-.emoji-2B55 { background-position: -820px -660px; }
-.emoji-3030 { background-position: -820px -680px; }
-.emoji-303D { background-position: -820px -700px; }
-.emoji-3297 { background-position: -820px -720px; }
-.emoji-3299 { background-position: -820px -740px; }
+.emoji-1F396 { background-position: -420px -260px; }
+.emoji-1F397 { background-position: -420px -280px; }
+.emoji-1F399 { background-position: -420px -300px; }
+.emoji-1F39A { background-position: -420px -320px; }
+.emoji-1F39B { background-position: -420px -340px; }
+.emoji-1F39E { background-position: -420px -360px; }
+.emoji-1F39F { background-position: -420px -380px; }
+.emoji-1F3A0 { background-position: -420px -400px; }
+.emoji-1F3A1 { background-position: 0 -420px; }
+.emoji-1F3A2 { background-position: -20px -420px; }
+.emoji-1F3A3 { background-position: -40px -420px; }
+.emoji-1F3A4 { background-position: -60px -420px; }
+.emoji-1F3A5 { background-position: -80px -420px; }
+.emoji-1F3A6 { background-position: -100px -420px; }
+.emoji-1F3A7 { background-position: -120px -420px; }
+.emoji-1F3A8 { background-position: -140px -420px; }
+.emoji-1F3A9 { background-position: -160px -420px; }
+.emoji-1F3AA { background-position: -180px -420px; }
+.emoji-1F3AB { background-position: -200px -420px; }
+.emoji-1F3AC { background-position: -220px -420px; }
+.emoji-1F3AD { background-position: -240px -420px; }
+.emoji-1F3AE { background-position: -260px -420px; }
+.emoji-1F3AF { background-position: -280px -420px; }
+.emoji-1F3B0 { background-position: -300px -420px; }
+.emoji-1F3B1 { background-position: -320px -420px; }
+.emoji-1F3B2 { background-position: -340px -420px; }
+.emoji-1F3B3 { background-position: -360px -420px; }
+.emoji-1F3B4 { background-position: -380px -420px; }
+.emoji-1F3B5 { background-position: -400px -420px; }
+.emoji-1F3B6 { background-position: -420px -420px; }
+.emoji-1F3B7 { background-position: -440px 0; }
+.emoji-1F3B8 { background-position: -440px -20px; }
+.emoji-1F3B9 { background-position: -440px -40px; }
+.emoji-1F3BA { background-position: -440px -60px; }
+.emoji-1F3BB { background-position: -440px -80px; }
+.emoji-1F3BC { background-position: -440px -100px; }
+.emoji-1F3BD { background-position: -440px -120px; }
+.emoji-1F3BE { background-position: -440px -140px; }
+.emoji-1F3BF { background-position: -440px -160px; }
+.emoji-1F3C0 { background-position: -440px -180px; }
+.emoji-1F3C1 { background-position: -440px -200px; }
+.emoji-1F3C2 { background-position: -440px -220px; }
+.emoji-1F3C3 { background-position: -440px -240px; }
+.emoji-1F3C3-1F3FB { background-position: -440px -260px; }
+.emoji-1F3C3-1F3FC { background-position: -440px -280px; }
+.emoji-1F3C3-1F3FD { background-position: -440px -300px; }
+.emoji-1F3C3-1F3FE { background-position: -440px -320px; }
+.emoji-1F3C3-1F3FF { background-position: -440px -340px; }
+.emoji-1F3C4 { background-position: -440px -360px; }
+.emoji-1F3C4-1F3FB { background-position: -440px -380px; }
+.emoji-1F3C4-1F3FC { background-position: -440px -400px; }
+.emoji-1F3C4-1F3FD { background-position: -440px -420px; }
+.emoji-1F3C4-1F3FE { background-position: 0 -440px; }
+.emoji-1F3C4-1F3FF { background-position: -20px -440px; }
+.emoji-1F3C5 { background-position: -40px -440px; }
+.emoji-1F3C6 { background-position: -60px -440px; }
+.emoji-1F3C7 { background-position: -80px -440px; }
+.emoji-1F3C7-1F3FB { background-position: -100px -440px; }
+.emoji-1F3C7-1F3FC { background-position: -120px -440px; }
+.emoji-1F3C7-1F3FD { background-position: -140px -440px; }
+.emoji-1F3C7-1F3FE { background-position: -160px -440px; }
+.emoji-1F3C7-1F3FF { background-position: -180px -440px; }
+.emoji-1F3C8 { background-position: -200px -440px; }
+.emoji-1F3C9 { background-position: -220px -440px; }
+.emoji-1F3CA { background-position: -240px -440px; }
+.emoji-1F3CA-1F3FB { background-position: -260px -440px; }
+.emoji-1F3CA-1F3FC { background-position: -280px -440px; }
+.emoji-1F3CA-1F3FD { background-position: -300px -440px; }
+.emoji-1F3CA-1F3FE { background-position: -320px -440px; }
+.emoji-1F3CA-1F3FF { background-position: -340px -440px; }
+.emoji-1F3CB { background-position: -360px -440px; }
+.emoji-1F3CB-1F3FB { background-position: -380px -440px; }
+.emoji-1F3CB-1F3FC { background-position: -400px -440px; }
+.emoji-1F3CB-1F3FD { background-position: -420px -440px; }
+.emoji-1F3CB-1F3FE { background-position: -440px -440px; }
+.emoji-1F3CB-1F3FF { background-position: -460px 0; }
+.emoji-1F3CC { background-position: -460px -20px; }
+.emoji-1F3CD { background-position: -460px -40px; }
+.emoji-1F3CE { background-position: -460px -60px; }
+.emoji-1F3CF { background-position: -460px -80px; }
+.emoji-1F3D0 { background-position: -460px -100px; }
+.emoji-1F3D1 { background-position: -460px -120px; }
+.emoji-1F3D2 { background-position: -460px -140px; }
+.emoji-1F3D3 { background-position: -460px -160px; }
+.emoji-1F3D4 { background-position: -460px -180px; }
+.emoji-1F3D5 { background-position: -460px -200px; }
+.emoji-1F3D6 { background-position: -460px -220px; }
+.emoji-1F3D7 { background-position: -460px -240px; }
+.emoji-1F3D8 { background-position: -460px -260px; }
+.emoji-1F3D9 { background-position: -460px -280px; }
+.emoji-1F3DA { background-position: -460px -300px; }
+.emoji-1F3DB { background-position: -460px -320px; }
+.emoji-1F3DC { background-position: -460px -340px; }
+.emoji-1F3DD { background-position: -460px -360px; }
+.emoji-1F3DE { background-position: -460px -380px; }
+.emoji-1F3DF { background-position: -460px -400px; }
+.emoji-1F3E0 { background-position: -460px -420px; }
+.emoji-1F3E1 { background-position: -460px -440px; }
+.emoji-1F3E2 { background-position: 0 -460px; }
+.emoji-1F3E3 { background-position: -20px -460px; }
+.emoji-1F3E4 { background-position: -40px -460px; }
+.emoji-1F3E5 { background-position: -60px -460px; }
+.emoji-1F3E6 { background-position: -80px -460px; }
+.emoji-1F3E7 { background-position: -100px -460px; }
+.emoji-1F3E8 { background-position: -120px -460px; }
+.emoji-1F3E9 { background-position: -140px -460px; }
+.emoji-1F3EA { background-position: -160px -460px; }
+.emoji-1F3EB { background-position: -180px -460px; }
+.emoji-1F3EC { background-position: -200px -460px; }
+.emoji-1F3ED { background-position: -220px -460px; }
+.emoji-1F3EE { background-position: -240px -460px; }
+.emoji-1F3EF { background-position: -260px -460px; }
+.emoji-1F3F0 { background-position: -280px -460px; }
+.emoji-1F3F3 { background-position: -300px -460px; }
+.emoji-1F3F4 { background-position: -320px -460px; }
+.emoji-1F3F5 { background-position: -340px -460px; }
+.emoji-1F3F7 { background-position: -360px -460px; }
+.emoji-1F3F8 { background-position: -380px -460px; }
+.emoji-1F3F9 { background-position: -400px -460px; }
+.emoji-1F3FA { background-position: -420px -460px; }
+.emoji-1F3FB { background-position: -440px -460px; }
+.emoji-1F3FC { background-position: -460px -460px; }
+.emoji-1F3FD { background-position: -480px 0; }
+.emoji-1F3FE { background-position: -480px -20px; }
+.emoji-1F3FF { background-position: -480px -40px; }
+.emoji-1F400 { background-position: -480px -60px; }
+.emoji-1F401 { background-position: -480px -80px; }
+.emoji-1F402 { background-position: -480px -100px; }
+.emoji-1F403 { background-position: -480px -120px; }
+.emoji-1F404 { background-position: -480px -140px; }
+.emoji-1F405 { background-position: -480px -160px; }
+.emoji-1F406 { background-position: -480px -180px; }
+.emoji-1F407 { background-position: -480px -200px; }
+.emoji-1F408 { background-position: -480px -220px; }
+.emoji-1F409 { background-position: -480px -240px; }
+.emoji-1F40A { background-position: -480px -260px; }
+.emoji-1F40B { background-position: -480px -280px; }
+.emoji-1F40C { background-position: -480px -300px; }
+.emoji-1F40D { background-position: -480px -320px; }
+.emoji-1F40E { background-position: -480px -340px; }
+.emoji-1F40F { background-position: -480px -360px; }
+.emoji-1F410 { background-position: -480px -380px; }
+.emoji-1F411 { background-position: -480px -400px; }
+.emoji-1F412 { background-position: -480px -420px; }
+.emoji-1F413 { background-position: -480px -440px; }
+.emoji-1F414 { background-position: -480px -460px; }
+.emoji-1F415 { background-position: 0 -480px; }
+.emoji-1F416 { background-position: -20px -480px; }
+.emoji-1F417 { background-position: -40px -480px; }
+.emoji-1F418 { background-position: -60px -480px; }
+.emoji-1F419 { background-position: -80px -480px; }
+.emoji-1F41A { background-position: -100px -480px; }
+.emoji-1F41B { background-position: -120px -480px; }
+.emoji-1F41C { background-position: -140px -480px; }
+.emoji-1F41D { background-position: -160px -480px; }
+.emoji-1F41E { background-position: -180px -480px; }
+.emoji-1F41F { background-position: -200px -480px; }
+.emoji-1F420 { background-position: -220px -480px; }
+.emoji-1F421 { background-position: -240px -480px; }
+.emoji-1F422 { background-position: -260px -480px; }
+.emoji-1F423 { background-position: -280px -480px; }
+.emoji-1F424 { background-position: -300px -480px; }
+.emoji-1F425 { background-position: -320px -480px; }
+.emoji-1F426 { background-position: -340px -480px; }
+.emoji-1F427 { background-position: -360px -480px; }
+.emoji-1F428 { background-position: -380px -480px; }
+.emoji-1F429 { background-position: -400px -480px; }
+.emoji-1F42A { background-position: -420px -480px; }
+.emoji-1F42B { background-position: -440px -480px; }
+.emoji-1F42C { background-position: -460px -480px; }
+.emoji-1F42D { background-position: -480px -480px; }
+.emoji-1F42E { background-position: -500px 0; }
+.emoji-1F42F { background-position: -500px -20px; }
+.emoji-1F430 { background-position: -500px -40px; }
+.emoji-1F431 { background-position: -500px -60px; }
+.emoji-1F432 { background-position: -500px -80px; }
+.emoji-1F433 { background-position: -500px -100px; }
+.emoji-1F434 { background-position: -500px -120px; }
+.emoji-1F435 { background-position: -500px -140px; }
+.emoji-1F436 { background-position: -500px -160px; }
+.emoji-1F437 { background-position: -500px -180px; }
+.emoji-1F438 { background-position: -500px -200px; }
+.emoji-1F439 { background-position: -500px -220px; }
+.emoji-1F43A { background-position: -500px -240px; }
+.emoji-1F43B { background-position: -500px -260px; }
+.emoji-1F43C { background-position: -500px -280px; }
+.emoji-1F43D { background-position: -500px -300px; }
+.emoji-1F43E { background-position: -500px -320px; }
+.emoji-1F43F { background-position: -500px -340px; }
+.emoji-1F440 { background-position: -500px -360px; }
+.emoji-1F441 { background-position: -500px -380px; }
+.emoji-1F441-1F5E8 { background-position: -500px -400px; }
+.emoji-1F442 { background-position: -500px -420px; }
+.emoji-1F442-1F3FB { background-position: -500px -440px; }
+.emoji-1F442-1F3FC { background-position: -500px -460px; }
+.emoji-1F442-1F3FD { background-position: -500px -480px; }
+.emoji-1F442-1F3FE { background-position: 0 -500px; }
+.emoji-1F442-1F3FF { background-position: -20px -500px; }
+.emoji-1F443 { background-position: -40px -500px; }
+.emoji-1F443-1F3FB { background-position: -60px -500px; }
+.emoji-1F443-1F3FC { background-position: -80px -500px; }
+.emoji-1F443-1F3FD { background-position: -100px -500px; }
+.emoji-1F443-1F3FE { background-position: -120px -500px; }
+.emoji-1F443-1F3FF { background-position: -140px -500px; }
+.emoji-1F444 { background-position: -160px -500px; }
+.emoji-1F445 { background-position: -180px -500px; }
+.emoji-1F446 { background-position: -200px -500px; }
+.emoji-1F446-1F3FB { background-position: -220px -500px; }
+.emoji-1F446-1F3FC { background-position: -240px -500px; }
+.emoji-1F446-1F3FD { background-position: -260px -500px; }
+.emoji-1F446-1F3FE { background-position: -280px -500px; }
+.emoji-1F446-1F3FF { background-position: -300px -500px; }
+.emoji-1F447 { background-position: -320px -500px; }
+.emoji-1F447-1F3FB { background-position: -340px -500px; }
+.emoji-1F447-1F3FC { background-position: -360px -500px; }
+.emoji-1F447-1F3FD { background-position: -380px -500px; }
+.emoji-1F447-1F3FE { background-position: -400px -500px; }
+.emoji-1F447-1F3FF { background-position: -420px -500px; }
+.emoji-1F448 { background-position: -440px -500px; }
+.emoji-1F448-1F3FB { background-position: -460px -500px; }
+.emoji-1F448-1F3FC { background-position: -480px -500px; }
+.emoji-1F448-1F3FD { background-position: -500px -500px; }
+.emoji-1F448-1F3FE { background-position: -520px 0; }
+.emoji-1F448-1F3FF { background-position: -520px -20px; }
+.emoji-1F449 { background-position: -520px -40px; }
+.emoji-1F449-1F3FB { background-position: -520px -60px; }
+.emoji-1F449-1F3FC { background-position: -520px -80px; }
+.emoji-1F449-1F3FD { background-position: -520px -100px; }
+.emoji-1F449-1F3FE { background-position: -520px -120px; }
+.emoji-1F449-1F3FF { background-position: -520px -140px; }
+.emoji-1F44A { background-position: -520px -160px; }
+.emoji-1F44A-1F3FB { background-position: -520px -180px; }
+.emoji-1F44A-1F3FC { background-position: -520px -200px; }
+.emoji-1F44A-1F3FD { background-position: -520px -220px; }
+.emoji-1F44A-1F3FE { background-position: -520px -240px; }
+.emoji-1F44A-1F3FF { background-position: -520px -260px; }
+.emoji-1F44B { background-position: -520px -280px; }
+.emoji-1F44B-1F3FB { background-position: -520px -300px; }
+.emoji-1F44B-1F3FC { background-position: -520px -320px; }
+.emoji-1F44B-1F3FD { background-position: -520px -340px; }
+.emoji-1F44B-1F3FE { background-position: -520px -360px; }
+.emoji-1F44B-1F3FF { background-position: -520px -380px; }
+.emoji-1F44C { background-position: -520px -400px; }
+.emoji-1F44C-1F3FB { background-position: -520px -420px; }
+.emoji-1F44C-1F3FC { background-position: -520px -440px; }
+.emoji-1F44C-1F3FD { background-position: -520px -460px; }
+.emoji-1F44C-1F3FE { background-position: -520px -480px; }
+.emoji-1F44C-1F3FF { background-position: -520px -500px; }
+.emoji-1F44D { background-position: 0 -520px; }
+.emoji-1F44D-1F3FB { background-position: -20px -520px; }
+.emoji-1F44D-1F3FC { background-position: -40px -520px; }
+.emoji-1F44D-1F3FD { background-position: -60px -520px; }
+.emoji-1F44D-1F3FE { background-position: -80px -520px; }
+.emoji-1F44D-1F3FF { background-position: -100px -520px; }
+.emoji-1F44E { background-position: -120px -520px; }
+.emoji-1F44E-1F3FB { background-position: -140px -520px; }
+.emoji-1F44E-1F3FC { background-position: -160px -520px; }
+.emoji-1F44E-1F3FD { background-position: -180px -520px; }
+.emoji-1F44E-1F3FE { background-position: -200px -520px; }
+.emoji-1F44E-1F3FF { background-position: -220px -520px; }
+.emoji-1F44F { background-position: -240px -520px; }
+.emoji-1F44F-1F3FB { background-position: -260px -520px; }
+.emoji-1F44F-1F3FC { background-position: -280px -520px; }
+.emoji-1F44F-1F3FD { background-position: -300px -520px; }
+.emoji-1F44F-1F3FE { background-position: -320px -520px; }
+.emoji-1F44F-1F3FF { background-position: -340px -520px; }
+.emoji-1F450 { background-position: -360px -520px; }
+.emoji-1F450-1F3FB { background-position: -380px -520px; }
+.emoji-1F450-1F3FC { background-position: -400px -520px; }
+.emoji-1F450-1F3FD { background-position: -420px -520px; }
+.emoji-1F450-1F3FE { background-position: -440px -520px; }
+.emoji-1F450-1F3FF { background-position: -460px -520px; }
+.emoji-1F451 { background-position: -480px -520px; }
+.emoji-1F452 { background-position: -500px -520px; }
+.emoji-1F453 { background-position: -520px -520px; }
+.emoji-1F454 { background-position: -540px 0; }
+.emoji-1F455 { background-position: -540px -20px; }
+.emoji-1F456 { background-position: -540px -40px; }
+.emoji-1F457 { background-position: -540px -60px; }
+.emoji-1F458 { background-position: -540px -80px; }
+.emoji-1F459 { background-position: -540px -100px; }
+.emoji-1F45A { background-position: -540px -120px; }
+.emoji-1F45B { background-position: -540px -140px; }
+.emoji-1F45C { background-position: -540px -160px; }
+.emoji-1F45D { background-position: -540px -180px; }
+.emoji-1F45E { background-position: -540px -200px; }
+.emoji-1F45F { background-position: -540px -220px; }
+.emoji-1F460 { background-position: -540px -240px; }
+.emoji-1F461 { background-position: -540px -260px; }
+.emoji-1F462 { background-position: -540px -280px; }
+.emoji-1F463 { background-position: -540px -300px; }
+.emoji-1F464 { background-position: -540px -320px; }
+.emoji-1F465 { background-position: -540px -340px; }
+.emoji-1F466 { background-position: -540px -360px; }
+.emoji-1F466-1F3FB { background-position: -540px -380px; }
+.emoji-1F466-1F3FC { background-position: -540px -400px; }
+.emoji-1F466-1F3FD { background-position: -540px -420px; }
+.emoji-1F466-1F3FE { background-position: -540px -440px; }
+.emoji-1F466-1F3FF { background-position: -540px -460px; }
+.emoji-1F467 { background-position: -540px -480px; }
+.emoji-1F467-1F3FB { background-position: -540px -500px; }
+.emoji-1F467-1F3FC { background-position: -540px -520px; }
+.emoji-1F467-1F3FD { background-position: 0 -540px; }
+.emoji-1F467-1F3FE { background-position: -20px -540px; }
+.emoji-1F467-1F3FF { background-position: -40px -540px; }
+.emoji-1F468 { background-position: -60px -540px; }
+.emoji-1F468-1F3FB { background-position: -80px -540px; }
+.emoji-1F468-1F3FC { background-position: -100px -540px; }
+.emoji-1F468-1F3FD { background-position: -120px -540px; }
+.emoji-1F468-1F3FE { background-position: -140px -540px; }
+.emoji-1F468-1F3FF { background-position: -160px -540px; }
+.emoji-1F468-1F468-1F466 { background-position: -180px -540px; }
+.emoji-1F468-1F468-1F466-1F466 { background-position: -200px -540px; }
+.emoji-1F468-1F468-1F467 { background-position: -220px -540px; }
+.emoji-1F468-1F468-1F467-1F466 { background-position: -240px -540px; }
+.emoji-1F468-1F468-1F467-1F467 { background-position: -260px -540px; }
+.emoji-1F468-1F469-1F466-1F466 { background-position: -280px -540px; }
+.emoji-1F468-1F469-1F467 { background-position: -300px -540px; }
+.emoji-1F468-1F469-1F467-1F466 { background-position: -320px -540px; }
+.emoji-1F468-1F469-1F467-1F467 { background-position: -340px -540px; }
+.emoji-1F468-2764-1F468 { background-position: -360px -540px; }
+.emoji-1F468-2764-1F48B-1F468 { background-position: -380px -540px; }
+.emoji-1F469 { background-position: -400px -540px; }
+.emoji-1F469-1F3FB { background-position: -420px -540px; }
+.emoji-1F469-1F3FC { background-position: -440px -540px; }
+.emoji-1F469-1F3FD { background-position: -460px -540px; }
+.emoji-1F469-1F3FE { background-position: -480px -540px; }
+.emoji-1F469-1F3FF { background-position: -500px -540px; }
+.emoji-1F469-1F469-1F466 { background-position: -520px -540px; }
+.emoji-1F469-1F469-1F466-1F466 { background-position: -540px -540px; }
+.emoji-1F469-1F469-1F467 { background-position: -560px 0; }
+.emoji-1F469-1F469-1F467-1F466 { background-position: -560px -20px; }
+.emoji-1F469-1F469-1F467-1F467 { background-position: -560px -40px; }
+.emoji-1F469-2764-1F469 { background-position: -560px -60px; }
+.emoji-1F469-2764-1F48B-1F469 { background-position: -560px -80px; }
+.emoji-1F46A { background-position: -560px -100px; }
+.emoji-1F46B { background-position: -560px -120px; }
+.emoji-1F46C { background-position: -560px -140px; }
+.emoji-1F46D { background-position: -560px -160px; }
+.emoji-1F46E { background-position: -560px -180px; }
+.emoji-1F46E-1F3FB { background-position: -560px -200px; }
+.emoji-1F46E-1F3FC { background-position: -560px -220px; }
+.emoji-1F46E-1F3FD { background-position: -560px -240px; }
+.emoji-1F46E-1F3FE { background-position: -560px -260px; }
+.emoji-1F46E-1F3FF { background-position: -560px -280px; }
+.emoji-1F46F { background-position: -560px -300px; }
+.emoji-1F470 { background-position: -560px -320px; }
+.emoji-1F470-1F3FB { background-position: -560px -340px; }
+.emoji-1F470-1F3FC { background-position: -560px -360px; }
+.emoji-1F470-1F3FD { background-position: -560px -380px; }
+.emoji-1F470-1F3FE { background-position: -560px -400px; }
+.emoji-1F470-1F3FF { background-position: -560px -420px; }
+.emoji-1F471 { background-position: -560px -440px; }
+.emoji-1F471-1F3FB { background-position: -560px -460px; }
+.emoji-1F471-1F3FC { background-position: -560px -480px; }
+.emoji-1F471-1F3FD { background-position: -560px -500px; }
+.emoji-1F471-1F3FE { background-position: -560px -520px; }
+.emoji-1F471-1F3FF { background-position: -560px -540px; }
+.emoji-1F472 { background-position: 0 -560px; }
+.emoji-1F472-1F3FB { background-position: -20px -560px; }
+.emoji-1F472-1F3FC { background-position: -40px -560px; }
+.emoji-1F472-1F3FD { background-position: -60px -560px; }
+.emoji-1F472-1F3FE { background-position: -80px -560px; }
+.emoji-1F472-1F3FF { background-position: -100px -560px; }
+.emoji-1F473 { background-position: -120px -560px; }
+.emoji-1F473-1F3FB { background-position: -140px -560px; }
+.emoji-1F473-1F3FC { background-position: -160px -560px; }
+.emoji-1F473-1F3FD { background-position: -180px -560px; }
+.emoji-1F473-1F3FE { background-position: -200px -560px; }
+.emoji-1F473-1F3FF { background-position: -220px -560px; }
+.emoji-1F474 { background-position: -240px -560px; }
+.emoji-1F474-1F3FB { background-position: -260px -560px; }
+.emoji-1F474-1F3FC { background-position: -280px -560px; }
+.emoji-1F474-1F3FD { background-position: -300px -560px; }
+.emoji-1F474-1F3FE { background-position: -320px -560px; }
+.emoji-1F474-1F3FF { background-position: -340px -560px; }
+.emoji-1F475 { background-position: -360px -560px; }
+.emoji-1F475-1F3FB { background-position: -380px -560px; }
+.emoji-1F475-1F3FC { background-position: -400px -560px; }
+.emoji-1F475-1F3FD { background-position: -420px -560px; }
+.emoji-1F475-1F3FE { background-position: -440px -560px; }
+.emoji-1F475-1F3FF { background-position: -460px -560px; }
+.emoji-1F476 { background-position: -480px -560px; }
+.emoji-1F476-1F3FB { background-position: -500px -560px; }
+.emoji-1F476-1F3FC { background-position: -520px -560px; }
+.emoji-1F476-1F3FD { background-position: -540px -560px; }
+.emoji-1F476-1F3FE { background-position: -560px -560px; }
+.emoji-1F476-1F3FF { background-position: -580px 0; }
+.emoji-1F477 { background-position: -580px -20px; }
+.emoji-1F477-1F3FB { background-position: -580px -40px; }
+.emoji-1F477-1F3FC { background-position: -580px -60px; }
+.emoji-1F477-1F3FD { background-position: -580px -80px; }
+.emoji-1F477-1F3FE { background-position: -580px -100px; }
+.emoji-1F477-1F3FF { background-position: -580px -120px; }
+.emoji-1F478 { background-position: -580px -140px; }
+.emoji-1F478-1F3FB { background-position: -580px -160px; }
+.emoji-1F478-1F3FC { background-position: -580px -180px; }
+.emoji-1F478-1F3FD { background-position: -580px -200px; }
+.emoji-1F478-1F3FE { background-position: -580px -220px; }
+.emoji-1F478-1F3FF { background-position: -580px -240px; }
+.emoji-1F479 { background-position: -580px -260px; }
+.emoji-1F47A { background-position: -580px -280px; }
+.emoji-1F47B { background-position: -580px -300px; }
+.emoji-1F47C { background-position: -580px -320px; }
+.emoji-1F47C-1F3FB { background-position: -580px -340px; }
+.emoji-1F47C-1F3FC { background-position: -580px -360px; }
+.emoji-1F47C-1F3FD { background-position: -580px -380px; }
+.emoji-1F47C-1F3FE { background-position: -580px -400px; }
+.emoji-1F47C-1F3FF { background-position: -580px -420px; }
+.emoji-1F47D { background-position: -580px -440px; }
+.emoji-1F47E { background-position: -580px -460px; }
+.emoji-1F47F { background-position: -580px -480px; }
+.emoji-1F480 { background-position: -580px -500px; }
+.emoji-1F481 { background-position: -580px -520px; }
+.emoji-1F481-1F3FB { background-position: -580px -540px; }
+.emoji-1F481-1F3FC { background-position: -580px -560px; }
+.emoji-1F481-1F3FD { background-position: 0 -580px; }
+.emoji-1F481-1F3FE { background-position: -20px -580px; }
+.emoji-1F481-1F3FF { background-position: -40px -580px; }
+.emoji-1F482 { background-position: -60px -580px; }
+.emoji-1F482-1F3FB { background-position: -80px -580px; }
+.emoji-1F482-1F3FC { background-position: -100px -580px; }
+.emoji-1F482-1F3FD { background-position: -120px -580px; }
+.emoji-1F482-1F3FE { background-position: -140px -580px; }
+.emoji-1F482-1F3FF { background-position: -160px -580px; }
+.emoji-1F483 { background-position: -180px -580px; }
+.emoji-1F483-1F3FB { background-position: -200px -580px; }
+.emoji-1F483-1F3FC { background-position: -220px -580px; }
+.emoji-1F483-1F3FD { background-position: -240px -580px; }
+.emoji-1F483-1F3FE { background-position: -260px -580px; }
+.emoji-1F483-1F3FF { background-position: -280px -580px; }
+.emoji-1F484 { background-position: -300px -580px; }
+.emoji-1F485 { background-position: -320px -580px; }
+.emoji-1F485-1F3FB { background-position: -340px -580px; }
+.emoji-1F485-1F3FC { background-position: -360px -580px; }
+.emoji-1F485-1F3FD { background-position: -380px -580px; }
+.emoji-1F485-1F3FE { background-position: -400px -580px; }
+.emoji-1F485-1F3FF { background-position: -420px -580px; }
+.emoji-1F486 { background-position: -440px -580px; }
+.emoji-1F486-1F3FB { background-position: -460px -580px; }
+.emoji-1F486-1F3FC { background-position: -480px -580px; }
+.emoji-1F486-1F3FD { background-position: -500px -580px; }
+.emoji-1F486-1F3FE { background-position: -520px -580px; }
+.emoji-1F486-1F3FF { background-position: -540px -580px; }
+.emoji-1F487 { background-position: -560px -580px; }
+.emoji-1F487-1F3FB { background-position: -580px -580px; }
+.emoji-1F487-1F3FC { background-position: -600px 0; }
+.emoji-1F487-1F3FD { background-position: -600px -20px; }
+.emoji-1F487-1F3FE { background-position: -600px -40px; }
+.emoji-1F487-1F3FF { background-position: -600px -60px; }
+.emoji-1F488 { background-position: -600px -80px; }
+.emoji-1F489 { background-position: -600px -100px; }
+.emoji-1F48A { background-position: -600px -120px; }
+.emoji-1F48B { background-position: -600px -140px; }
+.emoji-1F48C { background-position: -600px -160px; }
+.emoji-1F48D { background-position: -600px -180px; }
+.emoji-1F48E { background-position: -600px -200px; }
+.emoji-1F48F { background-position: -600px -220px; }
+.emoji-1F490 { background-position: -600px -240px; }
+.emoji-1F491 { background-position: -600px -260px; }
+.emoji-1F492 { background-position: -600px -280px; }
+.emoji-1F493 { background-position: -600px -300px; }
+.emoji-1F494 { background-position: -600px -320px; }
+.emoji-1F495 { background-position: -600px -340px; }
+.emoji-1F496 { background-position: -600px -360px; }
+.emoji-1F497 { background-position: -600px -380px; }
+.emoji-1F498 { background-position: -600px -400px; }
+.emoji-1F499 { background-position: -600px -420px; }
+.emoji-1F49A { background-position: -600px -440px; }
+.emoji-1F49B { background-position: -600px -460px; }
+.emoji-1F49C { background-position: -600px -480px; }
+.emoji-1F49D { background-position: -600px -500px; }
+.emoji-1F49E { background-position: -600px -520px; }
+.emoji-1F49F { background-position: -600px -540px; }
+.emoji-1F4A0 { background-position: -600px -560px; }
+.emoji-1F4A1 { background-position: -600px -580px; }
+.emoji-1F4A2 { background-position: 0 -600px; }
+.emoji-1F4A3 { background-position: -20px -600px; }
+.emoji-1F4A4 { background-position: -40px -600px; }
+.emoji-1F4A5 { background-position: -60px -600px; }
+.emoji-1F4A6 { background-position: -80px -600px; }
+.emoji-1F4A7 { background-position: -100px -600px; }
+.emoji-1F4A8 { background-position: -120px -600px; }
+.emoji-1F4A9 { background-position: -140px -600px; }
+.emoji-1F4AA { background-position: -160px -600px; }
+.emoji-1F4AA-1F3FB { background-position: -180px -600px; }
+.emoji-1F4AA-1F3FC { background-position: -200px -600px; }
+.emoji-1F4AA-1F3FD { background-position: -220px -600px; }
+.emoji-1F4AA-1F3FE { background-position: -240px -600px; }
+.emoji-1F4AA-1F3FF { background-position: -260px -600px; }
+.emoji-1F4AB { background-position: -280px -600px; }
+.emoji-1F4AC { background-position: -300px -600px; }
+.emoji-1F4AD { background-position: -320px -600px; }
+.emoji-1F4AE { background-position: -340px -600px; }
+.emoji-1F4AF { background-position: -360px -600px; }
+.emoji-1F4B0 { background-position: -380px -600px; }
+.emoji-1F4B1 { background-position: -400px -600px; }
+.emoji-1F4B2 { background-position: -420px -600px; }
+.emoji-1F4B3 { background-position: -440px -600px; }
+.emoji-1F4B4 { background-position: -460px -600px; }
+.emoji-1F4B5 { background-position: -480px -600px; }
+.emoji-1F4B6 { background-position: -500px -600px; }
+.emoji-1F4B7 { background-position: -520px -600px; }
+.emoji-1F4B8 { background-position: -540px -600px; }
+.emoji-1F4B9 { background-position: -560px -600px; }
+.emoji-1F4BA { background-position: -580px -600px; }
+.emoji-1F4BB { background-position: -600px -600px; }
+.emoji-1F4BC { background-position: -620px 0; }
+.emoji-1F4BD { background-position: -620px -20px; }
+.emoji-1F4BE { background-position: -620px -40px; }
+.emoji-1F4BF { background-position: -620px -60px; }
+.emoji-1F4C0 { background-position: -620px -80px; }
+.emoji-1F4C1 { background-position: -620px -100px; }
+.emoji-1F4C2 { background-position: -620px -120px; }
+.emoji-1F4C3 { background-position: -620px -140px; }
+.emoji-1F4C4 { background-position: -620px -160px; }
+.emoji-1F4C5 { background-position: -620px -180px; }
+.emoji-1F4C6 { background-position: -620px -200px; }
+.emoji-1F4C7 { background-position: -620px -220px; }
+.emoji-1F4C8 { background-position: -620px -240px; }
+.emoji-1F4C9 { background-position: -620px -260px; }
+.emoji-1F4CA { background-position: -620px -280px; }
+.emoji-1F4CB { background-position: -620px -300px; }
+.emoji-1F4CC { background-position: -620px -320px; }
+.emoji-1F4CD { background-position: -620px -340px; }
+.emoji-1F4CE { background-position: -620px -360px; }
+.emoji-1F4CF { background-position: -620px -380px; }
+.emoji-1F4D0 { background-position: -620px -400px; }
+.emoji-1F4D1 { background-position: -620px -420px; }
+.emoji-1F4D2 { background-position: -620px -440px; }
+.emoji-1F4D3 { background-position: -620px -460px; }
+.emoji-1F4D4 { background-position: -620px -480px; }
+.emoji-1F4D5 { background-position: -620px -500px; }
+.emoji-1F4D6 { background-position: -620px -520px; }
+.emoji-1F4D7 { background-position: -620px -540px; }
+.emoji-1F4D8 { background-position: -620px -560px; }
+.emoji-1F4D9 { background-position: -620px -580px; }
+.emoji-1F4DA { background-position: -620px -600px; }
+.emoji-1F4DB { background-position: 0 -620px; }
+.emoji-1F4DC { background-position: -20px -620px; }
+.emoji-1F4DD { background-position: -40px -620px; }
+.emoji-1F4DE { background-position: -60px -620px; }
+.emoji-1F4DF { background-position: -80px -620px; }
+.emoji-1F4E0 { background-position: -100px -620px; }
+.emoji-1F4E1 { background-position: -120px -620px; }
+.emoji-1F4E2 { background-position: -140px -620px; }
+.emoji-1F4E3 { background-position: -160px -620px; }
+.emoji-1F4E4 { background-position: -180px -620px; }
+.emoji-1F4E5 { background-position: -200px -620px; }
+.emoji-1F4E6 { background-position: -220px -620px; }
+.emoji-1F4E7 { background-position: -240px -620px; }
+.emoji-1F4E8 { background-position: -260px -620px; }
+.emoji-1F4E9 { background-position: -280px -620px; }
+.emoji-1F4EA { background-position: -300px -620px; }
+.emoji-1F4EB { background-position: -320px -620px; }
+.emoji-1F4EC { background-position: -340px -620px; }
+.emoji-1F4ED { background-position: -360px -620px; }
+.emoji-1F4EE { background-position: -380px -620px; }
+.emoji-1F4EF { background-position: -400px -620px; }
+.emoji-1F4F0 { background-position: -420px -620px; }
+.emoji-1F4F1 { background-position: -440px -620px; }
+.emoji-1F4F2 { background-position: -460px -620px; }
+.emoji-1F4F3 { background-position: -480px -620px; }
+.emoji-1F4F4 { background-position: -500px -620px; }
+.emoji-1F4F5 { background-position: -520px -620px; }
+.emoji-1F4F6 { background-position: -540px -620px; }
+.emoji-1F4F7 { background-position: -560px -620px; }
+.emoji-1F4F8 { background-position: -580px -620px; }
+.emoji-1F4F9 { background-position: -600px -620px; }
+.emoji-1F4FA { background-position: -620px -620px; }
+.emoji-1F4FB { background-position: -640px 0; }
+.emoji-1F4FC { background-position: -640px -20px; }
+.emoji-1F4FD { background-position: -640px -40px; }
+.emoji-1F4FF { background-position: -640px -60px; }
+.emoji-1F500 { background-position: -640px -80px; }
+.emoji-1F501 { background-position: -640px -100px; }
+.emoji-1F502 { background-position: -640px -120px; }
+.emoji-1F503 { background-position: -640px -140px; }
+.emoji-1F504 { background-position: -640px -160px; }
+.emoji-1F505 { background-position: -640px -180px; }
+.emoji-1F506 { background-position: -640px -200px; }
+.emoji-1F507 { background-position: -640px -220px; }
+.emoji-1F508 { background-position: -640px -240px; }
+.emoji-1F509 { background-position: -640px -260px; }
+.emoji-1F50A { background-position: -640px -280px; }
+.emoji-1F50B { background-position: -640px -300px; }
+.emoji-1F50C { background-position: -640px -320px; }
+.emoji-1F50D { background-position: -640px -340px; }
+.emoji-1F50E { background-position: -640px -360px; }
+.emoji-1F50F { background-position: -640px -380px; }
+.emoji-1F510 { background-position: -640px -400px; }
+.emoji-1F511 { background-position: -640px -420px; }
+.emoji-1F512 { background-position: -640px -440px; }
+.emoji-1F513 { background-position: -640px -460px; }
+.emoji-1F514 { background-position: -640px -480px; }
+.emoji-1F515 { background-position: -640px -500px; }
+.emoji-1F516 { background-position: -640px -520px; }
+.emoji-1F517 { background-position: -640px -540px; }
+.emoji-1F518 { background-position: -640px -560px; }
+.emoji-1F519 { background-position: -640px -580px; }
+.emoji-1F51A { background-position: -640px -600px; }
+.emoji-1F51B { background-position: -640px -620px; }
+.emoji-1F51C { background-position: 0 -640px; }
+.emoji-1F51D { background-position: -20px -640px; }
+.emoji-1F51E { background-position: -40px -640px; }
+.emoji-1F51F { background-position: -60px -640px; }
+.emoji-1F520 { background-position: -80px -640px; }
+.emoji-1F521 { background-position: -100px -640px; }
+.emoji-1F522 { background-position: -120px -640px; }
+.emoji-1F523 { background-position: -140px -640px; }
+.emoji-1F524 { background-position: -160px -640px; }
+.emoji-1F525 { background-position: -180px -640px; }
+.emoji-1F526 { background-position: -200px -640px; }
+.emoji-1F527 { background-position: -220px -640px; }
+.emoji-1F528 { background-position: -240px -640px; }
+.emoji-1F529 { background-position: -260px -640px; }
+.emoji-1F52A { background-position: -280px -640px; }
+.emoji-1F52B { background-position: -300px -640px; }
+.emoji-1F52C { background-position: -320px -640px; }
+.emoji-1F52D { background-position: -340px -640px; }
+.emoji-1F52E { background-position: -360px -640px; }
+.emoji-1F52F { background-position: -380px -640px; }
+.emoji-1F530 { background-position: -400px -640px; }
+.emoji-1F531 { background-position: -420px -640px; }
+.emoji-1F532 { background-position: -440px -640px; }
+.emoji-1F533 { background-position: -460px -640px; }
+.emoji-1F534 { background-position: -480px -640px; }
+.emoji-1F535 { background-position: -500px -640px; }
+.emoji-1F536 { background-position: -520px -640px; }
+.emoji-1F537 { background-position: -540px -640px; }
+.emoji-1F538 { background-position: -560px -640px; }
+.emoji-1F539 { background-position: -580px -640px; }
+.emoji-1F53A { background-position: -600px -640px; }
+.emoji-1F53B { background-position: -620px -640px; }
+.emoji-1F53C { background-position: -640px -640px; }
+.emoji-1F53D { background-position: -660px 0; }
+.emoji-1F549 { background-position: -660px -20px; }
+.emoji-1F54A { background-position: -660px -40px; }
+.emoji-1F54B { background-position: -660px -60px; }
+.emoji-1F54C { background-position: -660px -80px; }
+.emoji-1F54D { background-position: -660px -100px; }
+.emoji-1F54E { background-position: -660px -120px; }
+.emoji-1F550 { background-position: -660px -140px; }
+.emoji-1F551 { background-position: -660px -160px; }
+.emoji-1F552 { background-position: -660px -180px; }
+.emoji-1F553 { background-position: -660px -200px; }
+.emoji-1F554 { background-position: -660px -220px; }
+.emoji-1F555 { background-position: -660px -240px; }
+.emoji-1F556 { background-position: -660px -260px; }
+.emoji-1F557 { background-position: -660px -280px; }
+.emoji-1F558 { background-position: -660px -300px; }
+.emoji-1F559 { background-position: -660px -320px; }
+.emoji-1F55A { background-position: -660px -340px; }
+.emoji-1F55B { background-position: -660px -360px; }
+.emoji-1F55C { background-position: -660px -380px; }
+.emoji-1F55D { background-position: -660px -400px; }
+.emoji-1F55E { background-position: -660px -420px; }
+.emoji-1F55F { background-position: -660px -440px; }
+.emoji-1F560 { background-position: -660px -460px; }
+.emoji-1F561 { background-position: -660px -480px; }
+.emoji-1F562 { background-position: -660px -500px; }
+.emoji-1F563 { background-position: -660px -520px; }
+.emoji-1F564 { background-position: -660px -540px; }
+.emoji-1F565 { background-position: -660px -560px; }
+.emoji-1F566 { background-position: -660px -580px; }
+.emoji-1F567 { background-position: -660px -600px; }
+.emoji-1F56F { background-position: -660px -620px; }
+.emoji-1F570 { background-position: -660px -640px; }
+.emoji-1F573 { background-position: 0 -660px; }
+.emoji-1F574 { background-position: -20px -660px; }
+.emoji-1F575 { background-position: -40px -660px; }
+.emoji-1F575-1F3FB { background-position: -60px -660px; }
+.emoji-1F575-1F3FC { background-position: -80px -660px; }
+.emoji-1F575-1F3FD { background-position: -100px -660px; }
+.emoji-1F575-1F3FE { background-position: -120px -660px; }
+.emoji-1F575-1F3FF { background-position: -140px -660px; }
+.emoji-1F576 { background-position: -160px -660px; }
+.emoji-1F577 { background-position: -180px -660px; }
+.emoji-1F578 { background-position: -200px -660px; }
+.emoji-1F579 { background-position: -220px -660px; }
+.emoji-1F57A { background-position: -240px -660px; }
+.emoji-1F57A-1F3FB { background-position: -260px -660px; }
+.emoji-1F57A-1F3FC { background-position: -280px -660px; }
+.emoji-1F57A-1F3FD { background-position: -300px -660px; }
+.emoji-1F57A-1F3FE { background-position: -320px -660px; }
+.emoji-1F57A-1F3FF { background-position: -340px -660px; }
+.emoji-1F587 { background-position: -360px -660px; }
+.emoji-1F58A { background-position: -380px -660px; }
+.emoji-1F58B { background-position: -400px -660px; }
+.emoji-1F58C { background-position: -420px -660px; }
+.emoji-1F58D { background-position: -440px -660px; }
+.emoji-1F590 { background-position: -460px -660px; }
+.emoji-1F590-1F3FB { background-position: -480px -660px; }
+.emoji-1F590-1F3FC { background-position: -500px -660px; }
+.emoji-1F590-1F3FD { background-position: -520px -660px; }
+.emoji-1F590-1F3FE { background-position: -540px -660px; }
+.emoji-1F590-1F3FF { background-position: -560px -660px; }
+.emoji-1F595 { background-position: -580px -660px; }
+.emoji-1F595-1F3FB { background-position: -600px -660px; }
+.emoji-1F595-1F3FC { background-position: -620px -660px; }
+.emoji-1F595-1F3FD { background-position: -640px -660px; }
+.emoji-1F595-1F3FE { background-position: -660px -660px; }
+.emoji-1F595-1F3FF { background-position: -680px 0; }
+.emoji-1F596 { background-position: -680px -20px; }
+.emoji-1F596-1F3FB { background-position: -680px -40px; }
+.emoji-1F596-1F3FC { background-position: -680px -60px; }
+.emoji-1F596-1F3FD { background-position: -680px -80px; }
+.emoji-1F596-1F3FE { background-position: -680px -100px; }
+.emoji-1F596-1F3FF { background-position: -680px -120px; }
+.emoji-1F5A4 { background-position: -680px -140px; }
+.emoji-1F5A5 { background-position: -680px -160px; }
+.emoji-1F5A8 { background-position: -680px -180px; }
+.emoji-1F5B1 { background-position: -680px -200px; }
+.emoji-1F5B2 { background-position: -680px -220px; }
+.emoji-1F5BC { background-position: -680px -240px; }
+.emoji-1F5C2 { background-position: -680px -260px; }
+.emoji-1F5C3 { background-position: -680px -280px; }
+.emoji-1F5C4 { background-position: -680px -300px; }
+.emoji-1F5D1 { background-position: -680px -320px; }
+.emoji-1F5D2 { background-position: -680px -340px; }
+.emoji-1F5D3 { background-position: -680px -360px; }
+.emoji-1F5DC { background-position: -680px -380px; }
+.emoji-1F5DD { background-position: -680px -400px; }
+.emoji-1F5DE { background-position: -680px -420px; }
+.emoji-1F5E1 { background-position: -680px -440px; }
+.emoji-1F5E3 { background-position: -680px -460px; }
+.emoji-1F5EF { background-position: -680px -480px; }
+.emoji-1F5F3 { background-position: -680px -500px; }
+.emoji-1F5FA { background-position: -680px -520px; }
+.emoji-1F5FB { background-position: -680px -540px; }
+.emoji-1F5FC { background-position: -680px -560px; }
+.emoji-1F5FD { background-position: -680px -580px; }
+.emoji-1F5FE { background-position: -680px -600px; }
+.emoji-1F5FF { background-position: -680px -620px; }
+.emoji-1F600 { background-position: -680px -640px; }
+.emoji-1F601 { background-position: -680px -660px; }
+.emoji-1F602 { background-position: 0 -680px; }
+.emoji-1F603 { background-position: -20px -680px; }
+.emoji-1F604 { background-position: -40px -680px; }
+.emoji-1F605 { background-position: -60px -680px; }
+.emoji-1F606 { background-position: -80px -680px; }
+.emoji-1F607 { background-position: -100px -680px; }
+.emoji-1F608 { background-position: -120px -680px; }
+.emoji-1F609 { background-position: -140px -680px; }
+.emoji-1F60A { background-position: -160px -680px; }
+.emoji-1F60B { background-position: -180px -680px; }
+.emoji-1F60C { background-position: -200px -680px; }
+.emoji-1F60D { background-position: -220px -680px; }
+.emoji-1F60E { background-position: -240px -680px; }
+.emoji-1F60F { background-position: -260px -680px; }
+.emoji-1F610 { background-position: -280px -680px; }
+.emoji-1F611 { background-position: -300px -680px; }
+.emoji-1F612 { background-position: -320px -680px; }
+.emoji-1F613 { background-position: -340px -680px; }
+.emoji-1F614 { background-position: -360px -680px; }
+.emoji-1F615 { background-position: -380px -680px; }
+.emoji-1F616 { background-position: -400px -680px; }
+.emoji-1F617 { background-position: -420px -680px; }
+.emoji-1F618 { background-position: -440px -680px; }
+.emoji-1F619 { background-position: -460px -680px; }
+.emoji-1F61A { background-position: -480px -680px; }
+.emoji-1F61B { background-position: -500px -680px; }
+.emoji-1F61C { background-position: -520px -680px; }
+.emoji-1F61D { background-position: -540px -680px; }
+.emoji-1F61E { background-position: -560px -680px; }
+.emoji-1F61F { background-position: -580px -680px; }
+.emoji-1F620 { background-position: -600px -680px; }
+.emoji-1F621 { background-position: -620px -680px; }
+.emoji-1F622 { background-position: -640px -680px; }
+.emoji-1F623 { background-position: -660px -680px; }
+.emoji-1F624 { background-position: -680px -680px; }
+.emoji-1F625 { background-position: -700px 0; }
+.emoji-1F626 { background-position: -700px -20px; }
+.emoji-1F627 { background-position: -700px -40px; }
+.emoji-1F628 { background-position: -700px -60px; }
+.emoji-1F629 { background-position: -700px -80px; }
+.emoji-1F62A { background-position: -700px -100px; }
+.emoji-1F62B { background-position: -700px -120px; }
+.emoji-1F62C { background-position: -700px -140px; }
+.emoji-1F62D { background-position: -700px -160px; }
+.emoji-1F62E { background-position: -700px -180px; }
+.emoji-1F62F { background-position: -700px -200px; }
+.emoji-1F630 { background-position: -700px -220px; }
+.emoji-1F631 { background-position: -700px -240px; }
+.emoji-1F632 { background-position: -700px -260px; }
+.emoji-1F633 { background-position: -700px -280px; }
+.emoji-1F634 { background-position: -700px -300px; }
+.emoji-1F635 { background-position: -700px -320px; }
+.emoji-1F636 { background-position: -700px -340px; }
+.emoji-1F637 { background-position: -700px -360px; }
+.emoji-1F638 { background-position: -700px -380px; }
+.emoji-1F639 { background-position: -700px -400px; }
+.emoji-1F63A { background-position: -700px -420px; }
+.emoji-1F63B { background-position: -700px -440px; }
+.emoji-1F63C { background-position: -700px -460px; }
+.emoji-1F63D { background-position: -700px -480px; }
+.emoji-1F63E { background-position: -700px -500px; }
+.emoji-1F63F { background-position: -700px -520px; }
+.emoji-1F640 { background-position: -700px -540px; }
+.emoji-1F641 { background-position: -700px -560px; }
+.emoji-1F642 { background-position: -700px -580px; }
+.emoji-1F643 { background-position: -700px -600px; }
+.emoji-1F644 { background-position: -700px -620px; }
+.emoji-1F645 { background-position: -700px -640px; }
+.emoji-1F645-1F3FB { background-position: -700px -660px; }
+.emoji-1F645-1F3FC { background-position: -700px -680px; }
+.emoji-1F645-1F3FD { background-position: 0 -700px; }
+.emoji-1F645-1F3FE { background-position: -20px -700px; }
+.emoji-1F645-1F3FF { background-position: -40px -700px; }
+.emoji-1F646 { background-position: -60px -700px; }
+.emoji-1F646-1F3FB { background-position: -80px -700px; }
+.emoji-1F646-1F3FC { background-position: -100px -700px; }
+.emoji-1F646-1F3FD { background-position: -120px -700px; }
+.emoji-1F646-1F3FE { background-position: -140px -700px; }
+.emoji-1F646-1F3FF { background-position: -160px -700px; }
+.emoji-1F647 { background-position: -180px -700px; }
+.emoji-1F647-1F3FB { background-position: -200px -700px; }
+.emoji-1F647-1F3FC { background-position: -220px -700px; }
+.emoji-1F647-1F3FD { background-position: -240px -700px; }
+.emoji-1F647-1F3FE { background-position: -260px -700px; }
+.emoji-1F647-1F3FF { background-position: -280px -700px; }
+.emoji-1F648 { background-position: -300px -700px; }
+.emoji-1F649 { background-position: -320px -700px; }
+.emoji-1F64A { background-position: -340px -700px; }
+.emoji-1F64B { background-position: -360px -700px; }
+.emoji-1F64B-1F3FB { background-position: -380px -700px; }
+.emoji-1F64B-1F3FC { background-position: -400px -700px; }
+.emoji-1F64B-1F3FD { background-position: -420px -700px; }
+.emoji-1F64B-1F3FE { background-position: -440px -700px; }
+.emoji-1F64B-1F3FF { background-position: -460px -700px; }
+.emoji-1F64C { background-position: -480px -700px; }
+.emoji-1F64C-1F3FB { background-position: -500px -700px; }
+.emoji-1F64C-1F3FC { background-position: -520px -700px; }
+.emoji-1F64C-1F3FD { background-position: -540px -700px; }
+.emoji-1F64C-1F3FE { background-position: -560px -700px; }
+.emoji-1F64C-1F3FF { background-position: -580px -700px; }
+.emoji-1F64D { background-position: -600px -700px; }
+.emoji-1F64D-1F3FB { background-position: -620px -700px; }
+.emoji-1F64D-1F3FC { background-position: -640px -700px; }
+.emoji-1F64D-1F3FD { background-position: -660px -700px; }
+.emoji-1F64D-1F3FE { background-position: -680px -700px; }
+.emoji-1F64D-1F3FF { background-position: -700px -700px; }
+.emoji-1F64E { background-position: -720px 0; }
+.emoji-1F64E-1F3FB { background-position: -720px -20px; }
+.emoji-1F64E-1F3FC { background-position: -720px -40px; }
+.emoji-1F64E-1F3FD { background-position: -720px -60px; }
+.emoji-1F64E-1F3FE { background-position: -720px -80px; }
+.emoji-1F64E-1F3FF { background-position: -720px -100px; }
+.emoji-1F64F { background-position: -720px -120px; }
+.emoji-1F64F-1F3FB { background-position: -720px -140px; }
+.emoji-1F64F-1F3FC { background-position: -720px -160px; }
+.emoji-1F64F-1F3FD { background-position: -720px -180px; }
+.emoji-1F64F-1F3FE { background-position: -720px -200px; }
+.emoji-1F64F-1F3FF { background-position: -720px -220px; }
+.emoji-1F680 { background-position: -720px -240px; }
+.emoji-1F681 { background-position: -720px -260px; }
+.emoji-1F682 { background-position: -720px -280px; }
+.emoji-1F683 { background-position: -720px -300px; }
+.emoji-1F684 { background-position: -720px -320px; }
+.emoji-1F685 { background-position: -720px -340px; }
+.emoji-1F686 { background-position: -720px -360px; }
+.emoji-1F687 { background-position: -720px -380px; }
+.emoji-1F688 { background-position: -720px -400px; }
+.emoji-1F689 { background-position: -720px -420px; }
+.emoji-1F68A { background-position: -720px -440px; }
+.emoji-1F68B { background-position: -720px -460px; }
+.emoji-1F68C { background-position: -720px -480px; }
+.emoji-1F68D { background-position: -720px -500px; }
+.emoji-1F68E { background-position: -720px -520px; }
+.emoji-1F68F { background-position: -720px -540px; }
+.emoji-1F690 { background-position: -720px -560px; }
+.emoji-1F691 { background-position: -720px -580px; }
+.emoji-1F692 { background-position: -720px -600px; }
+.emoji-1F693 { background-position: -720px -620px; }
+.emoji-1F694 { background-position: -720px -640px; }
+.emoji-1F695 { background-position: -720px -660px; }
+.emoji-1F696 { background-position: -720px -680px; }
+.emoji-1F697 { background-position: -720px -700px; }
+.emoji-1F698 { background-position: 0 -720px; }
+.emoji-1F699 { background-position: -20px -720px; }
+.emoji-1F69A { background-position: -40px -720px; }
+.emoji-1F69B { background-position: -60px -720px; }
+.emoji-1F69C { background-position: -80px -720px; }
+.emoji-1F69D { background-position: -100px -720px; }
+.emoji-1F69E { background-position: -120px -720px; }
+.emoji-1F69F { background-position: -140px -720px; }
+.emoji-1F6A0 { background-position: -160px -720px; }
+.emoji-1F6A1 { background-position: -180px -720px; }
+.emoji-1F6A2 { background-position: -200px -720px; }
+.emoji-1F6A3 { background-position: -220px -720px; }
+.emoji-1F6A3-1F3FB { background-position: -240px -720px; }
+.emoji-1F6A3-1F3FC { background-position: -260px -720px; }
+.emoji-1F6A3-1F3FD { background-position: -280px -720px; }
+.emoji-1F6A3-1F3FE { background-position: -300px -720px; }
+.emoji-1F6A3-1F3FF { background-position: -320px -720px; }
+.emoji-1F6A4 { background-position: -340px -720px; }
+.emoji-1F6A5 { background-position: -360px -720px; }
+.emoji-1F6A6 { background-position: -380px -720px; }
+.emoji-1F6A7 { background-position: -400px -720px; }
+.emoji-1F6A8 { background-position: -420px -720px; }
+.emoji-1F6A9 { background-position: -440px -720px; }
+.emoji-1F6AA { background-position: -460px -720px; }
+.emoji-1F6AB { background-position: -480px -720px; }
+.emoji-1F6AC { background-position: -500px -720px; }
+.emoji-1F6AD { background-position: -520px -720px; }
+.emoji-1F6AE { background-position: -540px -720px; }
+.emoji-1F6AF { background-position: -560px -720px; }
+.emoji-1F6B0 { background-position: -580px -720px; }
+.emoji-1F6B1 { background-position: -600px -720px; }
+.emoji-1F6B2 { background-position: -620px -720px; }
+.emoji-1F6B3 { background-position: -640px -720px; }
+.emoji-1F6B4 { background-position: -660px -720px; }
+.emoji-1F6B4-1F3FB { background-position: -680px -720px; }
+.emoji-1F6B4-1F3FC { background-position: -700px -720px; }
+.emoji-1F6B4-1F3FD { background-position: -720px -720px; }
+.emoji-1F6B4-1F3FE { background-position: -740px 0; }
+.emoji-1F6B4-1F3FF { background-position: -740px -20px; }
+.emoji-1F6B5 { background-position: -740px -40px; }
+.emoji-1F6B5-1F3FB { background-position: -740px -60px; }
+.emoji-1F6B5-1F3FC { background-position: -740px -80px; }
+.emoji-1F6B5-1F3FD { background-position: -740px -100px; }
+.emoji-1F6B5-1F3FE { background-position: -740px -120px; }
+.emoji-1F6B5-1F3FF { background-position: -740px -140px; }
+.emoji-1F6B6 { background-position: -740px -160px; }
+.emoji-1F6B6-1F3FB { background-position: -740px -180px; }
+.emoji-1F6B6-1F3FC { background-position: -740px -200px; }
+.emoji-1F6B6-1F3FD { background-position: -740px -220px; }
+.emoji-1F6B6-1F3FE { background-position: -740px -240px; }
+.emoji-1F6B6-1F3FF { background-position: -740px -260px; }
+.emoji-1F6B7 { background-position: -740px -280px; }
+.emoji-1F6B8 { background-position: -740px -300px; }
+.emoji-1F6B9 { background-position: -740px -320px; }
+.emoji-1F6BA { background-position: -740px -340px; }
+.emoji-1F6BB { background-position: -740px -360px; }
+.emoji-1F6BC { background-position: -740px -380px; }
+.emoji-1F6BD { background-position: -740px -400px; }
+.emoji-1F6BE { background-position: -740px -420px; }
+.emoji-1F6BF { background-position: -740px -440px; }
+.emoji-1F6C0 { background-position: -740px -460px; }
+.emoji-1F6C0-1F3FB { background-position: -740px -480px; }
+.emoji-1F6C0-1F3FC { background-position: -740px -500px; }
+.emoji-1F6C0-1F3FD { background-position: -740px -520px; }
+.emoji-1F6C0-1F3FE { background-position: -740px -540px; }
+.emoji-1F6C0-1F3FF { background-position: -740px -560px; }
+.emoji-1F6C1 { background-position: -740px -580px; }
+.emoji-1F6C2 { background-position: -740px -600px; }
+.emoji-1F6C3 { background-position: -740px -620px; }
+.emoji-1F6C4 { background-position: -740px -640px; }
+.emoji-1F6C5 { background-position: -740px -660px; }
+.emoji-1F6CB { background-position: -740px -680px; }
+.emoji-1F6CC { background-position: -740px -700px; }
+.emoji-1F6CD { background-position: -740px -720px; }
+.emoji-1F6CE { background-position: 0 -740px; }
+.emoji-1F6CF { background-position: -20px -740px; }
+.emoji-1F6D0 { background-position: -40px -740px; }
+.emoji-1F6D1 { background-position: -60px -740px; }
+.emoji-1F6D2 { background-position: -80px -740px; }
+.emoji-1F6E0 { background-position: -100px -740px; }
+.emoji-1F6E1 { background-position: -120px -740px; }
+.emoji-1F6E2 { background-position: -140px -740px; }
+.emoji-1F6E3 { background-position: -160px -740px; }
+.emoji-1F6E4 { background-position: -180px -740px; }
+.emoji-1F6E5 { background-position: -200px -740px; }
+.emoji-1F6E9 { background-position: -220px -740px; }
+.emoji-1F6EB { background-position: -240px -740px; }
+.emoji-1F6EC { background-position: -260px -740px; }
+.emoji-1F6F0 { background-position: -280px -740px; }
+.emoji-1F6F3 { background-position: -300px -740px; }
+.emoji-1F6F4 { background-position: -320px -740px; }
+.emoji-1F6F5 { background-position: -340px -740px; }
+.emoji-1F6F6 { background-position: -360px -740px; }
+.emoji-1F910 { background-position: -380px -740px; }
+.emoji-1F911 { background-position: -400px -740px; }
+.emoji-1F912 { background-position: -420px -740px; }
+.emoji-1F913 { background-position: -440px -740px; }
+.emoji-1F914 { background-position: -460px -740px; }
+.emoji-1F915 { background-position: -480px -740px; }
+.emoji-1F916 { background-position: -500px -740px; }
+.emoji-1F917 { background-position: -520px -740px; }
+.emoji-1F918 { background-position: -540px -740px; }
+.emoji-1F918-1F3FB { background-position: -560px -740px; }
+.emoji-1F918-1F3FC { background-position: -580px -740px; }
+.emoji-1F918-1F3FD { background-position: -600px -740px; }
+.emoji-1F918-1F3FE { background-position: -620px -740px; }
+.emoji-1F918-1F3FF { background-position: -640px -740px; }
+.emoji-1F919 { background-position: -660px -740px; }
+.emoji-1F919-1F3FB { background-position: -680px -740px; }
+.emoji-1F919-1F3FC { background-position: -700px -740px; }
+.emoji-1F919-1F3FD { background-position: -720px -740px; }
+.emoji-1F919-1F3FE { background-position: -740px -740px; }
+.emoji-1F919-1F3FF { background-position: -760px 0; }
+.emoji-1F91A { background-position: -760px -20px; }
+.emoji-1F91A-1F3FB { background-position: -760px -40px; }
+.emoji-1F91A-1F3FC { background-position: -760px -60px; }
+.emoji-1F91A-1F3FD { background-position: -760px -80px; }
+.emoji-1F91A-1F3FE { background-position: -760px -100px; }
+.emoji-1F91A-1F3FF { background-position: -760px -120px; }
+.emoji-1F91B { background-position: -760px -140px; }
+.emoji-1F91B-1F3FB { background-position: -760px -160px; }
+.emoji-1F91B-1F3FC { background-position: -760px -180px; }
+.emoji-1F91B-1F3FD { background-position: -760px -200px; }
+.emoji-1F91B-1F3FE { background-position: -760px -220px; }
+.emoji-1F91B-1F3FF { background-position: -760px -240px; }
+.emoji-1F91C { background-position: -760px -260px; }
+.emoji-1F91C-1F3FB { background-position: -760px -280px; }
+.emoji-1F91C-1F3FC { background-position: -760px -300px; }
+.emoji-1F91C-1F3FD { background-position: -760px -320px; }
+.emoji-1F91C-1F3FE { background-position: -760px -340px; }
+.emoji-1F91C-1F3FF { background-position: -760px -360px; }
+.emoji-1F91D { background-position: -760px -380px; }
+.emoji-1F91D-1F3FB { background-position: -760px -400px; }
+.emoji-1F91D-1F3FC { background-position: -760px -420px; }
+.emoji-1F91D-1F3FD { background-position: -760px -440px; }
+.emoji-1F91D-1F3FE { background-position: -760px -460px; }
+.emoji-1F91D-1F3FF { background-position: -760px -480px; }
+.emoji-1F91E { background-position: -760px -500px; }
+.emoji-1F91E-1F3FB { background-position: -760px -520px; }
+.emoji-1F91E-1F3FC { background-position: -760px -540px; }
+.emoji-1F91E-1F3FD { background-position: -760px -560px; }
+.emoji-1F91E-1F3FE { background-position: -760px -580px; }
+.emoji-1F91E-1F3FF { background-position: -760px -600px; }
+.emoji-1F920 { background-position: -760px -620px; }
+.emoji-1F921 { background-position: -760px -640px; }
+.emoji-1F922 { background-position: -760px -660px; }
+.emoji-1F923 { background-position: -760px -680px; }
+.emoji-1F924 { background-position: -760px -700px; }
+.emoji-1F925 { background-position: -760px -720px; }
+.emoji-1F926 { background-position: -760px -740px; }
+.emoji-1F926-1F3FB { background-position: 0 -760px; }
+.emoji-1F926-1F3FC { background-position: -20px -760px; }
+.emoji-1F926-1F3FD { background-position: -40px -760px; }
+.emoji-1F926-1F3FE { background-position: -60px -760px; }
+.emoji-1F926-1F3FF { background-position: -80px -760px; }
+.emoji-1F927 { background-position: -100px -760px; }
+.emoji-1F930 { background-position: -120px -760px; }
+.emoji-1F930-1F3FB { background-position: -140px -760px; }
+.emoji-1F930-1F3FC { background-position: -160px -760px; }
+.emoji-1F930-1F3FD { background-position: -180px -760px; }
+.emoji-1F930-1F3FE { background-position: -200px -760px; }
+.emoji-1F930-1F3FF { background-position: -220px -760px; }
+.emoji-1F933 { background-position: -240px -760px; }
+.emoji-1F933-1F3FB { background-position: -260px -760px; }
+.emoji-1F933-1F3FC { background-position: -280px -760px; }
+.emoji-1F933-1F3FD { background-position: -300px -760px; }
+.emoji-1F933-1F3FE { background-position: -320px -760px; }
+.emoji-1F933-1F3FF { background-position: -340px -760px; }
+.emoji-1F934 { background-position: -360px -760px; }
+.emoji-1F934-1F3FB { background-position: -380px -760px; }
+.emoji-1F934-1F3FC { background-position: -400px -760px; }
+.emoji-1F934-1F3FD { background-position: -420px -760px; }
+.emoji-1F934-1F3FE { background-position: -440px -760px; }
+.emoji-1F934-1F3FF { background-position: -460px -760px; }
+.emoji-1F935 { background-position: -480px -760px; }
+.emoji-1F935-1F3FB { background-position: -500px -760px; }
+.emoji-1F935-1F3FC { background-position: -520px -760px; }
+.emoji-1F935-1F3FD { background-position: -540px -760px; }
+.emoji-1F935-1F3FE { background-position: -560px -760px; }
+.emoji-1F935-1F3FF { background-position: -580px -760px; }
+.emoji-1F936 { background-position: -600px -760px; }
+.emoji-1F936-1F3FB { background-position: -620px -760px; }
+.emoji-1F936-1F3FC { background-position: -640px -760px; }
+.emoji-1F936-1F3FD { background-position: -660px -760px; }
+.emoji-1F936-1F3FE { background-position: -680px -760px; }
+.emoji-1F936-1F3FF { background-position: -700px -760px; }
+.emoji-1F937 { background-position: -720px -760px; }
+.emoji-1F937-1F3FB { background-position: -740px -760px; }
+.emoji-1F937-1F3FC { background-position: -760px -760px; }
+.emoji-1F937-1F3FD { background-position: -780px 0; }
+.emoji-1F937-1F3FE { background-position: -780px -20px; }
+.emoji-1F937-1F3FF { background-position: -780px -40px; }
+.emoji-1F938 { background-position: -780px -60px; }
+.emoji-1F938-1F3FB { background-position: -780px -80px; }
+.emoji-1F938-1F3FC { background-position: -780px -100px; }
+.emoji-1F938-1F3FD { background-position: -780px -120px; }
+.emoji-1F938-1F3FE { background-position: -780px -140px; }
+.emoji-1F938-1F3FF { background-position: -780px -160px; }
+.emoji-1F939 { background-position: -780px -180px; }
+.emoji-1F939-1F3FB { background-position: -780px -200px; }
+.emoji-1F939-1F3FC { background-position: -780px -220px; }
+.emoji-1F939-1F3FD { background-position: -780px -240px; }
+.emoji-1F939-1F3FE { background-position: -780px -260px; }
+.emoji-1F939-1F3FF { background-position: -780px -280px; }
+.emoji-1F93A { background-position: -780px -300px; }
+.emoji-1F93C { background-position: -780px -320px; }
+.emoji-1F93C-1F3FB { background-position: -780px -340px; }
+.emoji-1F93C-1F3FC { background-position: -780px -360px; }
+.emoji-1F93C-1F3FD { background-position: -780px -380px; }
+.emoji-1F93C-1F3FE { background-position: -780px -400px; }
+.emoji-1F93C-1F3FF { background-position: -780px -420px; }
+.emoji-1F93D { background-position: -780px -440px; }
+.emoji-1F93D-1F3FB { background-position: -780px -460px; }
+.emoji-1F93D-1F3FC { background-position: -780px -480px; }
+.emoji-1F93D-1F3FD { background-position: -780px -500px; }
+.emoji-1F93D-1F3FE { background-position: -780px -520px; }
+.emoji-1F93D-1F3FF { background-position: -780px -540px; }
+.emoji-1F93E { background-position: -780px -560px; }
+.emoji-1F93E-1F3FB { background-position: -780px -580px; }
+.emoji-1F93E-1F3FC { background-position: -780px -600px; }
+.emoji-1F93E-1F3FD { background-position: -780px -620px; }
+.emoji-1F93E-1F3FE { background-position: -780px -640px; }
+.emoji-1F93E-1F3FF { background-position: -780px -660px; }
+.emoji-1F940 { background-position: -780px -680px; }
+.emoji-1F941 { background-position: -780px -700px; }
+.emoji-1F942 { background-position: -780px -720px; }
+.emoji-1F943 { background-position: -780px -740px; }
+.emoji-1F944 { background-position: -780px -760px; }
+.emoji-1F945 { background-position: 0 -780px; }
+.emoji-1F947 { background-position: -20px -780px; }
+.emoji-1F948 { background-position: -40px -780px; }
+.emoji-1F949 { background-position: -60px -780px; }
+.emoji-1F94A { background-position: -80px -780px; }
+.emoji-1F94B { background-position: -100px -780px; }
+.emoji-1F950 { background-position: -120px -780px; }
+.emoji-1F951 { background-position: -140px -780px; }
+.emoji-1F952 { background-position: -160px -780px; }
+.emoji-1F953 { background-position: -180px -780px; }
+.emoji-1F954 { background-position: -200px -780px; }
+.emoji-1F955 { background-position: -220px -780px; }
+.emoji-1F956 { background-position: -240px -780px; }
+.emoji-1F957 { background-position: -260px -780px; }
+.emoji-1F958 { background-position: -280px -780px; }
+.emoji-1F959 { background-position: -300px -780px; }
+.emoji-1F95A { background-position: -320px -780px; }
+.emoji-1F95B { background-position: -340px -780px; }
+.emoji-1F95C { background-position: -360px -780px; }
+.emoji-1F95D { background-position: -380px -780px; }
+.emoji-1F95E { background-position: -400px -780px; }
+.emoji-1F980 { background-position: -420px -780px; }
+.emoji-1F981 { background-position: -440px -780px; }
+.emoji-1F982 { background-position: -460px -780px; }
+.emoji-1F983 { background-position: -480px -780px; }
+.emoji-1F984 { background-position: -500px -780px; }
+.emoji-1F985 { background-position: -520px -780px; }
+.emoji-1F986 { background-position: -540px -780px; }
+.emoji-1F987 { background-position: -560px -780px; }
+.emoji-1F988 { background-position: -580px -780px; }
+.emoji-1F989 { background-position: -600px -780px; }
+.emoji-1F98A { background-position: -620px -780px; }
+.emoji-1F98B { background-position: -640px -780px; }
+.emoji-1F98C { background-position: -660px -780px; }
+.emoji-1F98D { background-position: -680px -780px; }
+.emoji-1F98E { background-position: -700px -780px; }
+.emoji-1F98F { background-position: -720px -780px; }
+.emoji-1F990 { background-position: -740px -780px; }
+.emoji-1F991 { background-position: -760px -780px; }
+.emoji-1F9C0 { background-position: -780px -780px; }
+.emoji-203C { background-position: -800px 0; }
+.emoji-2049 { background-position: -800px -20px; }
+.emoji-2122 { background-position: -800px -40px; }
+.emoji-2139 { background-position: -800px -60px; }
+.emoji-2194 { background-position: -800px -80px; }
+.emoji-2195 { background-position: -800px -100px; }
+.emoji-2196 { background-position: -800px -120px; }
+.emoji-2197 { background-position: -800px -140px; }
+.emoji-2198 { background-position: -800px -160px; }
+.emoji-2199 { background-position: -800px -180px; }
+.emoji-21A9 { background-position: -800px -200px; }
+.emoji-21AA { background-position: -800px -220px; }
+.emoji-231A { background-position: -800px -240px; }
+.emoji-231B { background-position: -800px -260px; }
+.emoji-2328 { background-position: -800px -280px; }
+.emoji-23CF { background-position: -800px -300px; }
+.emoji-23E9 { background-position: -800px -320px; }
+.emoji-23EA { background-position: -800px -340px; }
+.emoji-23EB { background-position: -800px -360px; }
+.emoji-23EC { background-position: -800px -380px; }
+.emoji-23ED { background-position: -800px -400px; }
+.emoji-23EE { background-position: -800px -420px; }
+.emoji-23EF { background-position: -800px -440px; }
+.emoji-23F0 { background-position: -800px -460px; }
+.emoji-23F1 { background-position: -800px -480px; }
+.emoji-23F2 { background-position: -800px -500px; }
+.emoji-23F3 { background-position: -800px -520px; }
+.emoji-23F8 { background-position: -800px -540px; }
+.emoji-23F9 { background-position: -800px -560px; }
+.emoji-23FA { background-position: -800px -580px; }
+.emoji-24C2 { background-position: -800px -600px; }
+.emoji-25AA { background-position: -800px -620px; }
+.emoji-25AB { background-position: -800px -640px; }
+.emoji-25B6 { background-position: -800px -660px; }
+.emoji-25C0 { background-position: -800px -680px; }
+.emoji-25FB { background-position: -800px -700px; }
+.emoji-25FC { background-position: -800px -720px; }
+.emoji-25FD { background-position: -800px -740px; }
+.emoji-25FE { background-position: -800px -760px; }
+.emoji-2600 { background-position: -800px -780px; }
+.emoji-2601 { background-position: 0 -800px; }
+.emoji-2602 { background-position: -20px -800px; }
+.emoji-2603 { background-position: -40px -800px; }
+.emoji-2604 { background-position: -60px -800px; }
+.emoji-260E { background-position: -80px -800px; }
+.emoji-2611 { background-position: -100px -800px; }
+.emoji-2614 { background-position: -120px -800px; }
+.emoji-2615 { background-position: -140px -800px; }
+.emoji-2618 { background-position: -160px -800px; }
+.emoji-261D { background-position: -180px -800px; }
+.emoji-261D-1F3FB { background-position: -200px -800px; }
+.emoji-261D-1F3FC { background-position: -220px -800px; }
+.emoji-261D-1F3FD { background-position: -240px -800px; }
+.emoji-261D-1F3FE { background-position: -260px -800px; }
+.emoji-261D-1F3FF { background-position: -280px -800px; }
+.emoji-2620 { background-position: -300px -800px; }
+.emoji-2622 { background-position: -320px -800px; }
+.emoji-2623 { background-position: -340px -800px; }
+.emoji-2626 { background-position: -360px -800px; }
+.emoji-262A { background-position: -380px -800px; }
+.emoji-262E { background-position: -400px -800px; }
+.emoji-262F { background-position: -420px -800px; }
+.emoji-2638 { background-position: -440px -800px; }
+.emoji-2639 { background-position: -460px -800px; }
+.emoji-263A { background-position: -480px -800px; }
+.emoji-2648 { background-position: -500px -800px; }
+.emoji-2649 { background-position: -520px -800px; }
+.emoji-264A { background-position: -540px -800px; }
+.emoji-264B { background-position: -560px -800px; }
+.emoji-264C { background-position: -580px -800px; }
+.emoji-264D { background-position: -600px -800px; }
+.emoji-264E { background-position: -620px -800px; }
+.emoji-264F { background-position: -640px -800px; }
+.emoji-2650 { background-position: -660px -800px; }
+.emoji-2651 { background-position: -680px -800px; }
+.emoji-2652 { background-position: -700px -800px; }
+.emoji-2653 { background-position: -720px -800px; }
+.emoji-2660 { background-position: -740px -800px; }
+.emoji-2663 { background-position: -760px -800px; }
+.emoji-2665 { background-position: -780px -800px; }
+.emoji-2666 { background-position: -800px -800px; }
+.emoji-2668 { background-position: -820px 0; }
+.emoji-267B { background-position: -820px -20px; }
+.emoji-267F { background-position: -820px -40px; }
+.emoji-2692 { background-position: -820px -60px; }
+.emoji-2693 { background-position: -820px -80px; }
+.emoji-2694 { background-position: -820px -100px; }
+.emoji-2696 { background-position: -820px -120px; }
+.emoji-2697 { background-position: -820px -140px; }
+.emoji-2699 { background-position: -820px -160px; }
+.emoji-269B { background-position: -820px -180px; }
+.emoji-269C { background-position: -820px -200px; }
+.emoji-26A0 { background-position: -820px -220px; }
+.emoji-26A1 { background-position: -820px -240px; }
+.emoji-26AA { background-position: -820px -260px; }
+.emoji-26AB { background-position: -820px -280px; }
+.emoji-26B0 { background-position: -820px -300px; }
+.emoji-26B1 { background-position: -820px -320px; }
+.emoji-26BD { background-position: -820px -340px; }
+.emoji-26BE { background-position: -820px -360px; }
+.emoji-26C4 { background-position: -820px -380px; }
+.emoji-26C5 { background-position: -820px -400px; }
+.emoji-26C8 { background-position: -820px -420px; }
+.emoji-26CE { background-position: -820px -440px; }
+.emoji-26CF { background-position: -820px -460px; }
+.emoji-26D1 { background-position: -820px -480px; }
+.emoji-26D3 { background-position: -820px -500px; }
+.emoji-26D4 { background-position: -820px -520px; }
+.emoji-26E9 { background-position: -820px -540px; }
+.emoji-26EA { background-position: -820px -560px; }
+.emoji-26F0 { background-position: -820px -580px; }
+.emoji-26F1 { background-position: -820px -600px; }
+.emoji-26F2 { background-position: -820px -620px; }
+.emoji-26F3 { background-position: -820px -640px; }
+.emoji-26F4 { background-position: -820px -660px; }
+.emoji-26F5 { background-position: -820px -680px; }
+.emoji-26F7 { background-position: -820px -700px; }
+.emoji-26F8 { background-position: -820px -720px; }
+.emoji-26F9 { background-position: -820px -740px; }
+.emoji-26F9-1F3FB { background-position: -820px -760px; }
+.emoji-26F9-1F3FC { background-position: -820px -780px; }
+.emoji-26F9-1F3FD { background-position: -820px -800px; }
+.emoji-26F9-1F3FE { background-position: 0 -820px; }
+.emoji-26F9-1F3FF { background-position: -20px -820px; }
+.emoji-26FA { background-position: -40px -820px; }
+.emoji-26FD { background-position: -60px -820px; }
+.emoji-2702 { background-position: -80px -820px; }
+.emoji-2705 { background-position: -100px -820px; }
+.emoji-2708 { background-position: -120px -820px; }
+.emoji-2709 { background-position: -140px -820px; }
+.emoji-270A { background-position: -160px -820px; }
+.emoji-270A-1F3FB { background-position: -180px -820px; }
+.emoji-270A-1F3FC { background-position: -200px -820px; }
+.emoji-270A-1F3FD { background-position: -220px -820px; }
+.emoji-270A-1F3FE { background-position: -240px -820px; }
+.emoji-270A-1F3FF { background-position: -260px -820px; }
+.emoji-270B { background-position: -280px -820px; }
+.emoji-270B-1F3FB { background-position: -300px -820px; }
+.emoji-270B-1F3FC { background-position: -320px -820px; }
+.emoji-270B-1F3FD { background-position: -340px -820px; }
+.emoji-270B-1F3FE { background-position: -360px -820px; }
+.emoji-270B-1F3FF { background-position: -380px -820px; }
+.emoji-270C { background-position: -400px -820px; }
+.emoji-270C-1F3FB { background-position: -420px -820px; }
+.emoji-270C-1F3FC { background-position: -440px -820px; }
+.emoji-270C-1F3FD { background-position: -460px -820px; }
+.emoji-270C-1F3FE { background-position: -480px -820px; }
+.emoji-270C-1F3FF { background-position: -500px -820px; }
+.emoji-270D { background-position: -520px -820px; }
+.emoji-270D-1F3FB { background-position: -540px -820px; }
+.emoji-270D-1F3FC { background-position: -560px -820px; }
+.emoji-270D-1F3FD { background-position: -580px -820px; }
+.emoji-270D-1F3FE { background-position: -600px -820px; }
+.emoji-270D-1F3FF { background-position: -620px -820px; }
+.emoji-270F { background-position: -640px -820px; }
+.emoji-2712 { background-position: -660px -820px; }
+.emoji-2714 { background-position: -680px -820px; }
+.emoji-2716 { background-position: -700px -820px; }
+.emoji-271D { background-position: -720px -820px; }
+.emoji-2721 { background-position: -740px -820px; }
+.emoji-2728 { background-position: -760px -820px; }
+.emoji-2733 { background-position: -780px -820px; }
+.emoji-2734 { background-position: -800px -820px; }
+.emoji-2744 { background-position: -820px -820px; }
+.emoji-2747 { background-position: -840px 0; }
+.emoji-274C { background-position: -840px -20px; }
+.emoji-274E { background-position: -840px -40px; }
+.emoji-2753 { background-position: -840px -60px; }
+.emoji-2754 { background-position: -840px -80px; }
+.emoji-2755 { background-position: -840px -100px; }
+.emoji-2757 { background-position: -840px -120px; }
+.emoji-2763 { background-position: -840px -140px; }
+.emoji-2764 { background-position: -840px -160px; }
+.emoji-2795 { background-position: -840px -180px; }
+.emoji-2796 { background-position: -840px -200px; }
+.emoji-2797 { background-position: -840px -220px; }
+.emoji-27A1 { background-position: -840px -240px; }
+.emoji-27B0 { background-position: -840px -260px; }
+.emoji-27BF { background-position: -840px -280px; }
+.emoji-2934 { background-position: -840px -300px; }
+.emoji-2935 { background-position: -840px -320px; }
+.emoji-2B05 { background-position: -840px -340px; }
+.emoji-2B06 { background-position: -840px -360px; }
+.emoji-2B07 { background-position: -840px -380px; }
+.emoji-2B1B { background-position: -840px -400px; }
+.emoji-2B1C { background-position: -840px -420px; }
+.emoji-2B50 { background-position: -840px -440px; }
+.emoji-2B55 { background-position: -840px -460px; }
+.emoji-3030 { background-position: -840px -480px; }
+.emoji-303D { background-position: -840px -500px; }
+.emoji-3297 { background-position: -840px -520px; }
+.emoji-3299 { background-position: -840px -540px; }
 
 .emoji-icon {
   background-image: image-url('emoji.png');
@@ -1731,6 +1804,6 @@
          only screen and (min-resolution: 192dpi),
          only screen and (min-resolution: 2dppx) {
     background-image: image-url('emoji@2x.png');
-    background-size: 840px 820px;
+    background-size: 860px 840px;
   }
 }
diff --git a/app/assets/stylesheets/pages/issuable.scss b/app/assets/stylesheets/pages/issuable.scss
index 542fa244689ac63dda5428540aac9667c3892a22..ded437625eefa25a61f77523ba213b113f137e27 100644
--- a/app/assets/stylesheets/pages/issuable.scss
+++ b/app/assets/stylesheets/pages/issuable.scss
@@ -122,7 +122,8 @@
 
     button {
       float: right;
-      padding: 3px 5px;
+      padding: 1px 5px;
+      background-color: $gray-light;
     }
   }
 
diff --git a/app/assets/stylesheets/pages/issues.scss b/app/assets/stylesheets/pages/issues.scss
index 0e4d8c140aa2d7a6cdc77d58022ca6e88f9af32f..ee3b2d2b8017221a2a674fe29c80e5e3c244cc62 100644
--- a/app/assets/stylesheets/pages/issues.scss
+++ b/app/assets/stylesheets/pages/issues.scss
@@ -63,7 +63,7 @@ form.edit-issue {
 .merge-request,
 .issue {
   &.today {
-    background: #f8feef;
+    background: #f3fff2;
     border-color: #e1e8d5;
   }
 
@@ -78,6 +78,14 @@ form.edit-issue {
   }
 }
 
+.merge-request-ci-status {
+  svg {
+    margin-right: 4px;
+    position: relative;
+    top: 1px;
+  }
+}
+
 @media (max-width: $screen-xs-max) {
   .issue-btn-group {
     width: 100%;
diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss
index 15c6c9f231aa06cecce6b713ac1186e722a8a749..5254faf723db65efbbdaf28711eb79fba5153d24 100644
--- a/app/assets/stylesheets/pages/merge_requests.scss
+++ b/app/assets/stylesheets/pages/merge_requests.scss
@@ -60,8 +60,10 @@
   .ci_widget {
     border-bottom: 1px solid #eef0f2;
 
-    i {
+    svg {
       margin-right: 4px;
+      position: relative;
+      top: 1px;
     }
 
     &.ci-success {
@@ -196,6 +198,16 @@
 
     .merge-request-title {
       margin-bottom: 2px;
+
+      .ci-status-link {
+
+        svg {
+          height: 16px;
+          width: 16px;
+          position: relative;
+          top: 3px;
+        }
+      }
     }
   }
 
@@ -270,7 +282,7 @@
 
     .item-title {
       @media (min-width: $screen-sm-min) {
-        width: 49%;
+        width: 45%;
       }
     }
 
diff --git a/app/assets/stylesheets/pages/pipelines.scss b/app/assets/stylesheets/pages/pipelines.scss
index a0334207c683fe4f933c8b3a454321c13070c749..a404f108dc47dad9e94a2aa16c2df4b52cbd8f56 100644
--- a/app/assets/stylesheets/pages/pipelines.scss
+++ b/app/assets/stylesheets/pages/pipelines.scss
@@ -1,7 +1,7 @@
 .pipelines {
   .stage {
-    max-width: 80px;
-    width: 80px;
+    max-width: 90px;
+    width: 90px;
     overflow: hidden;
     text-overflow: ellipsis;
     white-space: nowrap;
@@ -30,13 +30,17 @@
 }
 
 .table.builds {
-  min-width: 1100px;
+  min-width: 1200px;
 
   tr {
     th {
-      padding: 16px;
+      padding: 16px 8px;
       border: none;
     }
+
+    td {
+      padding: 10px 8px;
+    }
   }
 
   tbody {
@@ -45,6 +49,14 @@
 
   .commit-link {
 
+    .ci-status {
+
+      svg {
+        top: 1px;
+        margin-right: 0;
+      }
+    }
+
     a:hover {
       text-decoration: none;
     }
@@ -53,9 +65,8 @@
   .branch-commit {
 
     .branch-name {
-      margin-left: 8px;
       font-weight: bold;
-      max-width: 180px;
+      max-width: 150px;
       overflow: hidden;
       display: inline-block;
       white-space: nowrap;
@@ -64,10 +75,15 @@
     }
 
     svg {
-      margin: 0 6px;
       height: 14px;
       width: auto;
       vertical-align: middle;
+      fill: $table-text-gray;
+    }
+
+    .fa {
+      font-size: 12px;
+      color: $table-text-gray;
     }
 
     .commit-id {
@@ -100,6 +116,31 @@
     }
   }
 
+  .icon-container {
+    display: inline-block;
+    text-align: right;
+    width: 20px;
+
+    .fa {
+      position: relative;
+      right: 3px;
+    }
+
+    svg {
+      position: relative;
+      right: 1px;
+    }
+  }
+
+  .stage-cell {
+
+    svg {
+      height: 18px;
+      width: 18px;
+      vertical-align: middle;
+    }
+  }
+
   .duration,
   .finished-at {
     color: $table-text-gray;
@@ -107,21 +148,19 @@
 
     .fa {
       font-size: 12px;
+      margin-right: 4px;
     }
 
     svg {
-      height: 12px;
-      width: auto;
+      width: 12px;
+      height: auto;
       vertical-align: middle;
-    }
-
-    .fa,
-    svg {
-      margin-right: 5px;
+      margin-right: 4px;
     }
   }
 
   .pipeline-actions {
+    min-width: 140px;
 
     .btn {
       margin: 0;
diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss
index ea9f7cf054050abea65ec987b99fc9d0bb891818..63853335fb6ede7692ea731b5d4a7e3307130d80 100644
--- a/app/assets/stylesheets/pages/projects.scss
+++ b/app/assets/stylesheets/pages/projects.scss
@@ -129,6 +129,17 @@
       color: $layout-link-gray;
     }
 
+    svg {
+
+      path {
+        fill: $layout-link-gray;
+      }
+
+      use {
+        stroke: $layout-link-gray;
+      }
+    }
+
     .fa-caret-down {
       margin-left: 3px;
     }
@@ -486,6 +497,11 @@ pre.light-well {
       > span {
         margin-left: 10px;
       }
+
+      svg {
+        position: relative;
+        top: 2px;
+      }
     }
   }
 
diff --git a/app/assets/stylesheets/pages/status.scss b/app/assets/stylesheets/pages/status.scss
index c6b053150be4cc3c92ee33ba241349816b6bb26a..a22d4b6f6be66b02eaa675a32e9eb62926b5bb79 100644
--- a/app/assets/stylesheets/pages/status.scss
+++ b/app/assets/stylesheets/pages/status.scss
@@ -41,6 +41,14 @@
       color: $blue-normal;
       border-color: $blue-normal;
     }
+
+    svg {
+      height: 13px;
+      width: 13px;
+      position: relative;
+      top: 1px;
+      margin: 0 3px;
+    }
   }
 
   .ci-status-icon-success {
diff --git a/app/assets/stylesheets/pages/tags.scss b/app/assets/stylesheets/pages/tags.scss
new file mode 100644
index 0000000000000000000000000000000000000000..24ebd3e7cfa940722d2c4254389489883cd8fca7
--- /dev/null
+++ b/app/assets/stylesheets/pages/tags.scss
@@ -0,0 +1,7 @@
+.tag-buttons {
+  line-height: 40px;
+
+  .btn:not(.dropdown-toggle) {
+    margin-left: 10px;
+  }
+}
diff --git a/app/assets/stylesheets/pages/tree.scss b/app/assets/stylesheets/pages/tree.scss
index 42a20e9775fc045699d5729727ca6459083d5367..390977297fb4c34bc3f4783775e5d003c0fd74ba 100644
--- a/app/assets/stylesheets/pages/tree.scss
+++ b/app/assets/stylesheets/pages/tree.scss
@@ -19,7 +19,7 @@
       border-top: 1px solid $table-border-gray;
 
       td, th {
-        line-height: 23px;
+        line-height: 21px;
       }
 
       &:hover {
diff --git a/app/controllers/admin/builds_controller.rb b/app/controllers/admin/builds_controller.rb
index 0db91eaaf2e5b9ad4d3fc3560454b27fee5bbc67..88f3c0e2fd4f3cefc472f72b0661139426036991 100644
--- a/app/controllers/admin/builds_controller.rb
+++ b/app/controllers/admin/builds_controller.rb
@@ -5,8 +5,10 @@ class Admin::BuildsController < Admin::ApplicationController
     @builds = @all_builds.order('created_at DESC')
     @builds =
       case @scope
+      when 'pending'
+        @builds.pending.reverse_order
       when 'running'
-        @builds.running_or_pending.reverse_order
+        @builds.running.reverse_order
       when 'finished'
         @builds.finished
       else
diff --git a/app/controllers/concerns/creates_commit.rb b/app/controllers/concerns/creates_commit.rb
index dacb5679dd300fde4a034ba762960ee5a41610e7..f2b8f297bc27886a536478ba77aeb82304cfaa56 100644
--- a/app/controllers/concerns/creates_commit.rb
+++ b/app/controllers/concerns/creates_commit.rb
@@ -7,7 +7,8 @@ module CreatesCommit
     commit_params = @commit_params.merge(
       source_project: @project,
       source_branch: @ref,
-      target_branch: @target_branch
+      target_branch: @target_branch,
+      previous_path: @previous_path
     )
 
     result = service.new(@tree_edit_project, current_user, commit_params).execute
diff --git a/app/controllers/concerns/diff_for_path.rb b/app/controllers/concerns/diff_for_path.rb
index e09b8789eb239ef8b83f1eef2d59710ede432de3..026d8b2e1e0f691e21cdce694f535a8b8a603071 100644
--- a/app/controllers/concerns/diff_for_path.rb
+++ b/app/controllers/concerns/diff_for_path.rb
@@ -10,7 +10,6 @@ module DiffForPath
 
     diff_commit = commit_for_diff(diff_file)
     blob = diff_file.blob(diff_commit)
-    @expand_all_diffs = true
 
     locals = {
       diff_file: diff_file,
diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb
index 5356fdf010df794cc86314602ecd9c21a31b809a..eda3727a28de2ebc788e41fbc12f86dd46831b79 100644
--- a/app/controllers/projects/blob_controller.rb
+++ b/app/controllers/projects/blob_controller.rb
@@ -38,6 +38,12 @@ class Projects::BlobController < Projects::ApplicationController
   end
 
   def update
+    if params[:file_path].present?
+      @previous_path = @path
+      @path = params[:file_path]
+      @commit_params[:file_path] = @path
+    end
+
     after_edit_path =
       if from_merge_request && @target_branch == @ref
         diffs_namespace_project_merge_request_path(from_merge_request.target_project.namespace, from_merge_request.target_project, from_merge_request) +
diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb
index ef3051d7519c8e4d551b04b13cf7367bab34e4cf..553b62741a5de091ad536aa467686d2ac1794014 100644
--- a/app/controllers/projects/builds_controller.rb
+++ b/app/controllers/projects/builds_controller.rb
@@ -1,6 +1,6 @@
 class Projects::BuildsController < Projects::ApplicationController
   before_action :build, except: [:index, :cancel_all]
-  before_action :authorize_read_build!, except: [:cancel, :cancel_all, :retry]
+  before_action :authorize_read_build!, except: [:cancel, :cancel_all, :retry, :play]
   before_action :authorize_update_build!, except: [:index, :show, :status, :raw]
   layout 'project'
 
@@ -10,8 +10,10 @@ class Projects::BuildsController < Projects::ApplicationController
     @builds = @all_builds.order('created_at DESC')
     @builds =
       case @scope
+      when 'pending'
+        @builds.pending.reverse_order
       when 'running'
-        @builds.running_or_pending.reverse_order
+        @builds.running.reverse_order
       when 'finished'
         @builds.finished
       else
@@ -47,14 +49,19 @@ class Projects::BuildsController < Projects::ApplicationController
   end
 
   def retry
-    unless @build.retryable?
-      return render_404
-    end
+    return render_404 unless @build.retryable?
 
     build = Ci::Build.retry(@build, current_user)
     redirect_to build_path(build)
   end
 
+  def play
+    return render_404 unless @build.playable?
+
+    build = @build.play(current_user)
+    redirect_to build_path(build)
+  end
+
   def cancel
     @build.cancel
     redirect_to build_path(@build)
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index b6e80762e3c5a00637c60af3957d856c34861d76..fa663c9bda4f0e24ca5133bdbca33a1cbe7ae395 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -226,6 +226,7 @@ class Projects::IssuesController < Projects::ApplicationController
       :assignee_id,
       :milestone_id,
       :state_event,
+      :subscription_event,
       label_ids: [],
       add_label_ids: [],
       remove_label_ids: []
diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb
index 80dad758afa298d229abad2aaafc3a33b251b39c..10dca47fdede1c49b774663d3a28c6f35899c48e 100644
--- a/app/controllers/projects/protected_branches_controller.rb
+++ b/app/controllers/projects/protected_branches_controller.rb
@@ -50,6 +50,6 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController
   end
 
   def protected_branch_params
-    params.require(:protected_branch).permit(:name, :developers_can_push)
+    params.require(:protected_branch).permit(:name, :developers_can_push, :developers_can_merge)
   end
 end
diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb
index 739681f4085b8e4594c3e2f47183760340dd4cec..1b91882048e3626313b6344abaf272ad66fc3857 100644
--- a/app/controllers/projects/services_controller.rb
+++ b/app/controllers/projects/services_controller.rb
@@ -45,8 +45,9 @@ class Projects::ServicesController < Projects::ApplicationController
   end
 
   def test
-    data = Gitlab::PushDataBuilder.build_sample(project, current_user)
+    data = @service.test_data(project, current_user)
     outcome = @service.test(data)
+
     if outcome[:success]
       message = { notice: 'We sent a request to the provided URL' }
     else
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 1803aa8eab475e6540a8acf874d85657556b5070..4e5bcff9cf843eaf67752959a628997d28241ebe 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -5,7 +5,7 @@ class ProjectsController < Projects::ApplicationController
   before_action :project, except: [:new, :create]
   before_action :repository, except: [:new, :create]
   before_action :assign_ref_vars, only: [:show], if: :repo_exists?
-  before_action :tree, only: [:show], if: :project_view_files?
+  before_action :tree, only: [:show], if: [:repo_exists?, :project_view_files?]
 
   # Authorize
   before_action :authorize_admin_project!, only: [:edit, :update, :housekeeping, :download_export, :export, :remove_export, :generate_new_export]
diff --git a/app/helpers/branches_helper.rb b/app/helpers/branches_helper.rb
index 601df5c18df14c353313da58554c7f6236d9582b..bfd23aa4e043f62f850ecb8d79c441d3fb6365bc 100644
--- a/app/helpers/branches_helper.rb
+++ b/app/helpers/branches_helper.rb
@@ -12,7 +12,7 @@ module BranchesHelper
   def can_push_branch?(project, branch_name)
     return false unless project.repository.branch_exists?(branch_name)
 
-    ::Gitlab::GitAccess.new(current_user, project, 'web').can_push_to_branch?(branch_name)
+    ::Gitlab::UserAccess.new(current_user, project: project).can_push_to_branch?(branch_name)
   end
 
   def project_branches
diff --git a/app/helpers/ci_status_helper.rb b/app/helpers/ci_status_helper.rb
index e6c99c9959e159ed78089c022ce869246f9b397c..59a8365d60b403cfe02fe9ab20335562ee9d029e 100644
--- a/app/helpers/ci_status_helper.rb
+++ b/app/helpers/ci_status_helper.rb
@@ -26,18 +26,20 @@ module CiStatusHelper
     icon_name =
       case status
       when 'success'
-        'check'
+        'icon_status_success'
+      when 'success_with_warnings'
+        'icon_status_warning'
       when 'failed'
-        'close'
+        'icon_status_failed'
       when 'pending'
-        'clock-o'
+        'icon_status_pending'
       when 'running'
-        'spinner'
+        'icon_status_running'
       else
-        'circle'
+        'icon_status_cancel'
       end
 
-    icon(icon_name + ' fw')
+    custom_icon(icon_name)
   end
 
   def render_commit_status(commit, tooltip_placement: 'auto left', cssclass: '')
diff --git a/app/helpers/diff_helper.rb b/app/helpers/diff_helper.rb
index adab901700cc17047ddffa7efbf00450ca826d82..75b029365f93a54c40c875ee72b6ebe652beae58 100644
--- a/app/helpers/diff_helper.rb
+++ b/app/helpers/diff_helper.rb
@@ -9,7 +9,7 @@ module DiffHelper
   end
 
   def expand_all_diffs?
-    @expand_all_diffs || params[:expand_all_diffs].present?
+    params[:expand_all_diffs].present?
   end
 
   def diff_view
@@ -23,13 +23,14 @@ module DiffHelper
   end
 
   def diff_options
-    default_options = Commit.max_diff_options
+    options = { ignore_whitespace_change: hide_whitespace?, no_collapse: expand_all_diffs? }
 
     if action_name == 'diff_for_path'
-      default_options[:paths] = params.values_at(:old_path, :new_path)
+      options[:no_collapse] = true
+      options[:paths] = params.values_at(:old_path, :new_path)
     end
 
-    default_options.merge(ignore_whitespace_change: hide_whitespace?)
+    Commit.max_diff_options.merge(options)
   end
 
   def safe_diff_files(diffs, diff_refs: nil, repository: nil)
diff --git a/app/helpers/time_helper.rb b/app/helpers/time_helper.rb
index 8cb82c2d5cccb0e3025e4668694b70ec42e019d4..1926f03af07f49d47a296dd3573505cfdb04e396 100644
--- a/app/helpers/time_helper.rb
+++ b/app/helpers/time_helper.rb
@@ -1,14 +1,4 @@
 module TimeHelper
-  def duration_in_words(finished_at, started_at)
-    if finished_at && started_at
-      interval_in_seconds = finished_at.to_i - started_at.to_i
-    elsif started_at
-      interval_in_seconds = Time.now.to_i - started_at.to_i
-    end
-
-    time_interval_in_words(interval_in_seconds)
-  end
-
   def time_interval_in_words(interval_in_seconds)
     minutes = interval_in_seconds / 60
     seconds = interval_in_seconds - minutes * 60
@@ -25,9 +15,19 @@ module TimeHelper
   end
 
   def duration_in_numbers(finished_at, started_at)
-    diff_in_seconds = finished_at.to_i - started_at.to_i
-    time_format = diff_in_seconds < 1.hour ? "%M:%S" : "%H:%M:%S"
+    interval = interval_in_seconds(started_at, finished_at)
+    time_format = interval < 1.hour ? "%M:%S" : "%H:%M:%S"
 
-    Time.at(diff_in_seconds).utc.strftime(time_format)
+    Time.at(interval).utc.strftime(time_format)
+  end
+
+  private
+
+  def interval_in_seconds(started_at, finished_at = nil)
+    if started_at && finished_at
+      finished_at.to_i - started_at.to_i
+    elsif started_at
+      Time.now.to_i - started_at.to_i
+    end
   end
 end
diff --git a/app/mailers/emails/builds.rb b/app/mailers/emails/builds.rb
index 2f86d1be57625ee969cebef8b1e15c70b862ad91..3853af6201ac9509fc963581f2e586ba91efa727 100644
--- a/app/mailers/emails/builds.rb
+++ b/app/mailers/emails/builds.rb
@@ -6,6 +6,7 @@ module Emails
 
       add_project_headers
       add_build_headers('failed')
+
       mail(to: to, subject: subject("Build failed for #{@project.name}", @build.short_sha))
     end
 
diff --git a/app/models/ability.rb b/app/models/ability.rb
index eeb0ceba08113b9d385ee63cbfb8b3cf30dc3dc9..6fd18f2ee24bd0dea3b42d0aff4c9317eeac8534 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -204,7 +204,8 @@ class Ability
         :download_code,
         :fork_project,
         :read_commit_status,
-        :read_pipeline
+        :read_pipeline,
+        :read_container_image
       ]
     end
 
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index e189dbac2856dbbd26f35129b2fb2d7aaf60fb3a..e02351ce3391d86ce15283981a83d99d6ccf094b 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -5,6 +5,7 @@ module Ci
     belongs_to :erased_by, class_name: 'User'
 
     serialize :options
+    serialize :yaml_variables
 
     validates :coverage, numericality: true, allow_blank: true
     validates_presence_of :ref
@@ -14,6 +15,7 @@ module Ci
     scope :with_artifacts, ->() { where.not(artifacts_file: nil) }
     scope :with_expired_artifacts, ->() { with_artifacts.where('artifacts_expire_at < ?', Time.now) }
     scope :last_month, ->() { where('created_at > ?', Date.today - 1.month) }
+    scope :manual_actions, ->() { where(when: :manual) }
 
     mount_uploader :artifacts_file, ArtifactUploader
     mount_uploader :artifacts_metadata, ArtifactUploader
@@ -52,7 +54,10 @@ module Ci
         new_build.stage = build.stage
         new_build.stage_idx = build.stage_idx
         new_build.trigger_request = build.trigger_request
+        new_build.yaml_variables = build.yaml_variables
+        new_build.when = build.when
         new_build.user = user
+        new_build.environment = build.environment
         new_build.save
         MergeRequests::AddTodoWhenBuildFailsService.new(build.project, nil).close(new_build)
         new_build
@@ -87,6 +92,29 @@ module Ci
       end
     end
 
+    def manual?
+      self.when == 'manual'
+    end
+
+    def other_actions
+      pipeline.manual_actions.where.not(id: self)
+    end
+
+    def playable?
+      project.builds_enabled? && commands.present? && manual?
+    end
+
+    def play(current_user = nil)
+      # Try to queue a current build
+      if self.queue
+        self.update(user: current_user)
+        self
+      else
+        # Otherwise we need to create a duplicate
+        Ci::Build.retry(self, current_user)
+      end
+    end
+
     def retryable?
       project.builds_enabled? && commands.present? && complete?
     end
@@ -376,6 +404,14 @@ module Ci
       self.update(artifacts_expire_at: nil)
     end
 
+    def when
+      read_attribute(:when) || build_attributes_from_config[:when] || 'on_success'
+    end
+
+    def yaml_variables
+      read_attribute(:yaml_variables) || build_attributes_from_config[:yaml_variables] || []
+    end
+
     private
 
     def update_artifacts_size
@@ -394,30 +430,6 @@ module Ci
       self.update(erased_by: user, erased_at: Time.now, artifacts_expire_at: nil)
     end
 
-    def yaml_variables
-      global_yaml_variables + job_yaml_variables
-    end
-
-    def global_yaml_variables
-      if pipeline.config_processor
-        pipeline.config_processor.global_variables.map do |key, value|
-          { key: key, value: value, public: true }
-        end
-      else
-        []
-      end
-    end
-
-    def job_yaml_variables
-      if pipeline.config_processor
-        pipeline.config_processor.job_variables(name).map do |key, value|
-          { key: key, value: value, public: true }
-        end
-      else
-        []
-      end
-    end
-
     def project_variables
       project.variables.map do |variable|
         { key: variable.key, value: variable.value, public: false }
@@ -442,5 +454,11 @@ module Ci
       variables << { key: :CI_BUILD_TRIGGERED, value: 'true', public: true } if trigger_request
       variables
     end
+
+    def build_attributes_from_config
+      return {} unless pipeline.config_processor
+      
+      pipeline.config_processor.build_attributes(name)
+    end
   end
 end
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 7d743ce99f03b0c816250b1e9e05ac2fbaa26b2d..aca8607f4e87d7d2a668ee9a02b3e3e6046e3c8e 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -6,6 +6,8 @@ module Ci
     self.table_name = 'ci_commits'
 
     belongs_to :project, class_name: '::Project', foreign_key: :gl_project_id
+    belongs_to :user
+
     has_many :statuses, class_name: 'CommitStatus', foreign_key: :commit_id
     has_many :builds, class_name: 'Ci::Build', foreign_key: :commit_id
     has_many :trigger_requests, dependent: :destroy, class_name: 'Ci::TriggerRequest', foreign_key: :commit_id
@@ -49,6 +51,10 @@ module Ci
       commit.try(:message)
     end
 
+    def git_commit_title
+      commit.try(:title)
+    end
+
     def short_sha
       Ci::Pipeline.truncate_sha(sha)
     end
@@ -63,6 +69,10 @@ module Ci
       !tag?
     end
 
+    def manual_actions
+      builds.latest.manual_actions
+    end
+
     def retryable?
       builds.latest.any? do |build|
         build.failed? && build.retryable?
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index e437e3417a8388a602c6870cc731ea0a6428a717..535db26240a7985ce568c15d3238e78e1daac355 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -22,6 +22,10 @@ class CommitStatus < ActiveRecord::Base
   scope :ignored, -> { where(allow_failure: true, status: [:failed, :canceled]) }
 
   state_machine :status, initial: :pending do
+    event :queue do
+      transition skipped: :pending
+    end
+
     event :run do
       transition pending: :running
     end
diff --git a/app/models/concerns/statuseable.rb b/app/models/concerns/statuseable.rb
index 3ef91caad473004a1d618739246eb15ec0fa209f..44c6b30f2788a89a4425950f6b0d70eaafc6f7b5 100644
--- a/app/models/concerns/statuseable.rb
+++ b/app/models/concerns/statuseable.rb
@@ -16,10 +16,10 @@ module Statuseable
 
       deduce_status = "(CASE
         WHEN (#{builds})=0 THEN NULL
-        WHEN (#{builds})=(#{success})+(#{ignored}) THEN 'success'
-        WHEN (#{builds})=(#{pending}) THEN 'pending'
-        WHEN (#{builds})=(#{canceled})+(#{success})+(#{ignored}) THEN 'canceled'
         WHEN (#{builds})=(#{skipped}) THEN 'skipped'
+        WHEN (#{builds})=(#{success})+(#{ignored})+(#{skipped}) THEN 'success'
+        WHEN (#{builds})=(#{pending})+(#{skipped}) THEN 'pending'
+        WHEN (#{builds})=(#{canceled})+(#{success})+(#{ignored})+(#{skipped}) THEN 'canceled'
         WHEN (#{running})+(#{pending})>0 THEN 'running'
         ELSE 'failed'
       END)"
diff --git a/app/models/deployment.rb b/app/models/deployment.rb
index 520026c18dd5d96c5dedb739d3187bbaa60d779f..1a7cd60817e7505fdc40728091efb6f53a843283 100644
--- a/app/models/deployment.rb
+++ b/app/models/deployment.rb
@@ -32,4 +32,8 @@ class Deployment < ActiveRecord::Base
   def keep_around_commit
     project.repository.keep_around(self.sha)
   end
+
+  def manual_actions
+    deployable.try(:other_actions)
+  end
 end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 157901378d32167ee1e84a90e3ec46e826b8d354..471e32f3b60d3f78feac807b429d62452688176f 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -552,7 +552,13 @@ class MergeRequest < ActiveRecord::Base
   end
 
   def can_be_merged_by?(user)
-    ::Gitlab::GitAccess.new(user, project, 'web').can_push_to_branch?(target_branch)
+    access = ::Gitlab::UserAccess.new(user, project: project)
+    access.can_push_to_branch?(target_branch) || access.can_merge_to_branch?(target_branch)
+  end
+
+  def can_be_merged_via_command_line_by?(user)
+    access = ::Gitlab::UserAccess.new(user, project: project)
+    access.can_push_to_branch?(target_branch)
   end
 
   def mergeable_ci_state?
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index feaba925bad1197818dd18d623d0a2013b9e48c3..3f520c8f3ffa8146669e94bebfe992299d72d790 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -1,6 +1,7 @@
 class MergeRequestDiff < ActiveRecord::Base
   include Sortable
   include Importable
+  include EncodingHelper
 
   # Prevent store of diff if commits amount more then 500
   COMMITS_SAFE_SIZE = 100
@@ -211,6 +212,14 @@ class MergeRequestDiff < ActiveRecord::Base
     branch_base_commit.try(:sha)
   end
 
+  def utf8_st_diffs
+    st_diffs.map do |diff|
+      diff.each do |k, v|
+        diff[k] = encode_utf8(v) if v.respond_to?(:encoding)
+      end
+    end
+  end
+
   #
   # #save or #update_attributes providing changes on serialized attributes do a lot of
   # serialization and deserialization calls resulting in bad performance.
diff --git a/app/models/project.rb b/app/models/project.rb
index e7b9835692dbdc4a7eabb3f1fb4d9fbee5f6275e..a805f5d97bc61bab97d16404cf5beb561bb220df 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -162,7 +162,7 @@ class Project < ActiveRecord::Base
   validates :namespace, presence: true
   validates_uniqueness_of :name, scope: :namespace_id
   validates_uniqueness_of :path, scope: :namespace_id
-  validates :import_url, addressable_url: true, if: :import_url
+  validates :import_url, addressable_url: true, if: :external_import?
   validates :star_count, numericality: { greater_than_or_equal_to: 0 }
   validate :check_limit, on: :create
   validate :avatar_type,
@@ -482,7 +482,7 @@ class Project < ActiveRecord::Base
   end
 
   def create_or_update_import_data(data: nil, credentials: nil)
-    return unless valid_import_url?
+    return unless import_url.present? && valid_import_url?
 
     project_import_data = import_data || build_import_data
     if data
@@ -838,6 +838,10 @@ class Project < ActiveRecord::Base
     protected_branches.matching(branch_name).any?(&:developers_can_push)
   end
 
+  def developers_can_merge_to_protected_branch?(branch_name)
+    protected_branches.matching(branch_name).any?(&:developers_can_merge)
+  end
+
   def forked?
     !(forked_project_link.nil? || forked_project_link.forked_from_project.nil?)
   end
@@ -1038,8 +1042,8 @@ class Project < ActiveRecord::Base
     pipelines.order(id: :desc).find_by(sha: sha, ref: ref)
   end
 
-  def ensure_pipeline(sha, ref)
-    pipeline(sha, ref) || pipelines.create(sha: sha, ref: ref)
+  def ensure_pipeline(sha, ref, current_user = nil)
+    pipeline(sha, ref) || pipelines.create(sha: sha, ref: ref, user: current_user)
   end
 
   def enable_ci
diff --git a/app/models/project_services/builds_email_service.rb b/app/models/project_services/builds_email_service.rb
index 54da4d74fc5b21f7f45fcab78d25a1009da9c180..5e166471077ca69cf939591f81f74d9d8fca78b4 100644
--- a/app/models/project_services/builds_email_service.rb
+++ b/app/models/project_services/builds_email_service.rb
@@ -42,6 +42,19 @@ class BuildsEmailService < Service
     end
   end
 
+  def can_test?
+    project.builds.count > 0
+  end
+
+  def disabled_title
+    "Please setup a build on your repository."
+  end
+
+  def test_data(project = nil, user = nil)
+    build = project.builds.last
+    Gitlab::BuildDataBuilder.build(build)
+  end
+
   def fields
     [
       { type: 'textarea', name: 'recipients', placeholder: 'Emails separated by comma' },
@@ -50,6 +63,20 @@ class BuildsEmailService < Service
     ]
   end
 
+  def test(data)
+    begin
+      # bypass build status verification when testing
+      data[:build_status] = "failed"
+      data[:build_allow_failure] = false
+
+      result = execute(data)
+    rescue StandardError => error
+      return { success: false, result: error }
+    end
+
+    { success: true, result: result }
+  end
+
   def should_build_be_notified?(data)
     case data[:build_status]
     when 'success'
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 5b670cb4b8fa6c8a3dc504affbc886cad045afc2..1a2ac90da51386212b8d19737727403d9eeb8c68 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -704,6 +704,7 @@ class Repository
       options[:commit] = {
         message: message,
         branch: ref,
+        update_ref: false,
       }
 
       raw_repository.mkdir(path, options)
@@ -719,6 +720,7 @@ class Repository
       options[:commit] = {
         message: message,
         branch: ref,
+        update_ref: false,
       }
 
       options[:file] = {
@@ -731,6 +733,33 @@ class Repository
     end
   end
 
+  def update_file(user, path, content, branch:, previous_path:, message:)
+    commit_with_hooks(user, branch) do |ref|
+      committer = user_to_committer(user)
+      options = {}
+      options[:committer] = committer
+      options[:author] = committer
+      options[:commit] = {
+        message: message,
+        branch: ref,
+        update_ref: false
+      }
+
+      options[:file] = {
+        content: content,
+        path: path,
+        update: true
+      }
+
+      if previous_path
+        options[:file][:previous_path] = previous_path
+        Gitlab::Git::Blob.rename(raw_repository, options)
+      else
+        Gitlab::Git::Blob.commit(raw_repository, options)
+      end
+    end
+  end
+
   def remove_file(user, path, message, branch)
     commit_with_hooks(user, branch) do |ref|
       committer = user_to_committer(user)
@@ -739,7 +768,8 @@ class Repository
       options[:author] = committer
       options[:commit] = {
         message: message,
-        branch: ref
+        branch: ref,
+        update_ref: false,
       }
 
       options[:file] = {
@@ -769,9 +799,9 @@ class Repository
     end
   end
 
-  def merge(user, source_sha, target_branch, options = {})
-    our_commit = rugged.branches[target_branch].target
-    their_commit = rugged.lookup(source_sha)
+  def merge(user, merge_request, options = {})
+    our_commit = rugged.branches[merge_request.target_branch].target
+    their_commit = rugged.lookup(merge_request.diff_head_sha)
 
     raise "Invalid merge target" if our_commit.nil?
     raise "Invalid merge source" if their_commit.nil?
@@ -779,14 +809,15 @@ class Repository
     merge_index = rugged.merge_commits(our_commit, their_commit)
     return false if merge_index.conflicts?
 
-    commit_with_hooks(user, target_branch) do |ref|
+    commit_with_hooks(user, merge_request.target_branch) do
       actual_options = options.merge(
         parents: [our_commit, their_commit],
         tree: merge_index.write_tree(rugged),
-        update_ref: ref
       )
 
-      Rugged::Commit.create(rugged, actual_options)
+      commit_id = Rugged::Commit.create(rugged, actual_options)
+      merge_request.update(in_progress_merge_commit_sha: commit_id)
+      commit_id
     end
   end
 
@@ -796,15 +827,14 @@ class Repository
 
     return false unless revert_tree_id
 
-    commit_with_hooks(user, base_branch) do |ref|
+    commit_with_hooks(user, base_branch) do
       committer = user_to_committer(user)
       source_sha = Rugged::Commit.create(rugged,
         message: commit.revert_message,
         author: committer,
         committer: committer,
         tree: revert_tree_id,
-        parents: [rugged.lookup(source_sha)],
-        update_ref: ref)
+        parents: [rugged.lookup(source_sha)])
     end
   end
 
@@ -814,7 +844,7 @@ class Repository
 
     return false unless cherry_pick_tree_id
 
-    commit_with_hooks(user, base_branch) do |ref|
+    commit_with_hooks(user, base_branch) do
       committer = user_to_committer(user)
       source_sha = Rugged::Commit.create(rugged,
         message: commit.message,
@@ -825,8 +855,7 @@ class Repository
         },
         committer: committer,
         tree: cherry_pick_tree_id,
-        parents: [rugged.lookup(source_sha)],
-        update_ref: ref)
+        parents: [rugged.lookup(source_sha)])
     end
   end
 
@@ -927,20 +956,6 @@ class Repository
     Gitlab::Popen.popen(args, path_to_repo)
   end
 
-  def with_tmp_ref(oldrev = nil)
-    random_string = SecureRandom.hex
-    tmp_ref = "refs/tmp/#{random_string}/head"
-
-    if oldrev && !Gitlab::Git.blank_ref?(oldrev)
-      rugged.references.create(tmp_ref, oldrev)
-    end
-
-    # Make commit in tmp ref
-    yield(tmp_ref)
-  ensure
-    rugged.references.delete(tmp_ref) rescue nil
-  end
-
   def commit_with_hooks(current_user, branch)
     update_autocrlf_option
 
@@ -953,33 +968,31 @@ class Repository
       oldrev = target_branch.target
     end
 
-    with_tmp_ref(oldrev) do |tmp_ref|
-      # Make commit in tmp ref
-      newrev = yield(tmp_ref)
+    # Make commit
+    newrev = yield(ref)
 
-      unless newrev
-        raise CommitError.new('Failed to create commit')
-      end
+    unless newrev
+      raise CommitError.new('Failed to create commit')
+    end
 
-      GitHooksService.new.execute(current_user, path_to_repo, oldrev, newrev, ref) do
-        if was_empty || !target_branch
-          # Create branch
-          rugged.references.create(ref, newrev)
+    GitHooksService.new.execute(current_user, path_to_repo, oldrev, newrev, ref) do
+      if was_empty || !target_branch
+        # Create branch
+        rugged.references.create(ref, newrev)
+      else
+        # Update head
+        current_head = find_branch(branch).target
+
+        # Make sure target branch was not changed during pre-receive hook
+        if current_head == oldrev
+          rugged.references.update(ref, newrev)
         else
-          # Update head
-          current_head = find_branch(branch).target
-
-          # Make sure target branch was not changed during pre-receive hook
-          if current_head == oldrev
-            rugged.references.update(ref, newrev)
-          else
-            raise CommitError.new('Commit was rejected because branch received new push')
-          end
+          raise CommitError.new('Commit was rejected because branch received new push')
         end
       end
-
-      newrev
     end
+
+    newrev
   end
 
   def ls_files(ref)
diff --git a/app/models/service.rb b/app/models/service.rb
index d7a32c282679221a095f523ee0b6bdb08e2517c3..5432f8c7ab43ebb648fda1ab30a183da61972e84 100644
--- a/app/models/service.rb
+++ b/app/models/service.rb
@@ -76,6 +76,10 @@ class Service < ActiveRecord::Base
     []
   end
 
+  def test_data(project, user)
+    Gitlab::PushDataBuilder.build_sample(project, user)
+  end
+
   def supported_events
     %w(push tag_push issue merge_request wiki_page)
   end
@@ -94,6 +98,11 @@ class Service < ActiveRecord::Base
     !project.empty_repo?
   end
 
+  # reason why service cannot be tested
+  def disabled_title
+    "Please setup a project repository."
+  end
+
   # Provide convenient accessor methods
   # for each serialized property.
   # Also keep track of updated properties in a similar way as ActiveModel::Dirty
diff --git a/app/models/user.rb b/app/models/user.rb
index 7a72c2021503a340872a62ea97d1804b1b41e4a8..975e935fa2049e3f11a822f595f7027ab2a9f6b5 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -85,6 +85,7 @@ class User < ActiveRecord::Base
   has_one  :abuse_report,             dependent: :destroy
   has_many :spam_logs,                dependent: :destroy
   has_many :builds,                   dependent: :nullify, class_name: 'Ci::Build'
+  has_many :pipelines,                dependent: :nullify, class_name: 'Ci::Pipeline'
   has_many :todos,                    dependent: :destroy
   has_many :notification_settings,    dependent: :destroy
   has_many :award_emoji,              dependent: :destroy
@@ -853,7 +854,7 @@ class User < ActiveRecord::Base
                  groups.joins(:shared_projects).select(:project_id)]
 
     if min_access_level
-      scope = { access_level: Gitlab::Access.values.select { |access| access >= min_access_level } }
+      scope = { access_level: Gitlab::Access.all_values.select { |access| access >= min_access_level } }
       relations = [relations.shift] + relations.map { |relation| relation.where(members: scope) }
     end
 
diff --git a/app/services/ci/create_builds_service.rb b/app/services/ci/create_builds_service.rb
index 2dcb052d274e25513203989c509582900a7ff18f..4946f7076fdd515ee1781bccd9bf2af28336ca1d 100644
--- a/app/services/ci/create_builds_service.rb
+++ b/app/services/ci/create_builds_service.rb
@@ -15,7 +15,7 @@ module Ci
           status == 'success'
         when 'on_failure'
           status == 'failed'
-        when 'always'
+        when 'always', 'manual'
           %w(success failed).include?(status)
         end
       end
@@ -36,7 +36,9 @@ module Ci
                            :allow_failure,
                            :stage,
                            :stage_idx,
-                           :environment)
+                           :environment,
+                           :when,
+                           :yaml_variables)
 
         build_attrs.merge!(pipeline: @pipeline,
                            ref: @pipeline.ref,
@@ -45,6 +47,10 @@ module Ci
                            user: user,
                            project: @pipeline.project)
 
+        # TODO: The proper implementation for this is in
+        # https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5295
+        build_attrs[:status] = 'skipped' if build_attrs[:when] == 'manual'
+
         ##
         # We do not persist new builds here.
         # Those will be persisted when @pipeline is saved.
diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb
index b1ee68741902327a40c346f436d197147b7945d7..be91bf0db85a30408b71731674fdf4c02d3fb339 100644
--- a/app/services/ci/create_pipeline_service.rb
+++ b/app/services/ci/create_pipeline_service.rb
@@ -2,6 +2,7 @@ module Ci
   class CreatePipelineService < BaseService
     def execute
       pipeline = project.pipelines.new(params)
+      pipeline.user = current_user
 
       unless ref_names.include?(params[:ref])
         pipeline.errors.add(:base, 'Reference not found')
diff --git a/app/services/commits/change_service.rb b/app/services/commits/change_service.rb
index c578097376a632d349d73257be0072d40b0dc8bc..ed73d8cb8c2a13f911d4d8a86131a9ed62f8b10d 100644
--- a/app/services/commits/change_service.rb
+++ b/app/services/commits/change_service.rb
@@ -23,7 +23,7 @@ module Commits
     private
 
     def check_push_permissions
-      allowed = ::Gitlab::GitAccess.new(current_user, project, 'web').can_push_to_branch?(@target_branch)
+      allowed = ::Gitlab::UserAccess.new(current_user, project: project).can_push_to_branch?(@target_branch)
 
       unless allowed
         raise ValidationError.new('You are not allowed to push into this branch')
@@ -31,7 +31,7 @@ module Commits
 
       true
     end
-    
+
     def create_target_branch(new_branch)
       # Temporary branch exists and contains the change commit
       return success if repository.find_branch(new_branch)
diff --git a/app/services/create_branch_service.rb b/app/services/create_branch_service.rb
index d874582d54ffee63a64cd3a1e2a5fc0f053abd89..757fc35a78fdf54f0a6c58498c6f371dbf94b48e 100644
--- a/app/services/create_branch_service.rb
+++ b/app/services/create_branch_service.rb
@@ -15,21 +15,19 @@ class CreateBranchService < BaseService
       return error('Branch already exists')
     end
 
-    new_branch = nil
-
-    if source_project != @project
-      repository.with_tmp_ref do |tmp_ref|
-        repository.fetch_ref(
-          source_project.repository.path_to_repo,
-          "refs/heads/#{ref}",
-          tmp_ref
-        )
-
-        new_branch = repository.add_branch(current_user, branch_name, tmp_ref)
-      end
-    else
-      new_branch = repository.add_branch(current_user, branch_name, ref)
-    end
+    new_branch = if source_project != @project
+                   repository.fetch_ref(
+                     source_project.repository.path_to_repo,
+                     "refs/heads/#{ref}",
+                     "refs/heads/#{branch_name}"
+                   )
+
+                   repository.after_create_branch
+
+                   repository.find_branch(branch_name)
+                 else
+                   repository.add_branch(current_user, branch_name, ref)
+                 end
 
     if new_branch
       success(new_branch)
diff --git a/app/services/create_commit_builds_service.rb b/app/services/create_commit_builds_service.rb
index f947e8f452eafb64cd82380fd7249ab30c8298c6..0b66b854deabd245b02259f8cb9cd7e3c424176d 100644
--- a/app/services/create_commit_builds_service.rb
+++ b/app/services/create_commit_builds_service.rb
@@ -14,7 +14,13 @@ class CreateCommitBuildsService
       return false
     end
 
-    @pipeline = Ci::Pipeline.new(project: project, sha: sha, ref: ref, before_sha: before_sha, tag: tag)
+    @pipeline = Ci::Pipeline.new(
+      project: project,
+      sha: sha,
+      ref: ref,
+      before_sha: before_sha,
+      tag: tag,
+      user: user)
 
     ##
     # Skip creating pipeline if no gitlab-ci.yml is found
diff --git a/app/services/files/base_service.rb b/app/services/files/base_service.rb
index 37c5e321b39e1886e0eaf173223edd43f4d471b5..c4a206f785e3b493b30a6b1abc74ec5ddf668902 100644
--- a/app/services/files/base_service.rb
+++ b/app/services/files/base_service.rb
@@ -9,12 +9,14 @@ module Files
 
       @commit_message = params[:commit_message]
       @file_path      = params[:file_path]
+      @previous_path  = params[:previous_path]
       @file_content   = if params[:file_content_encoding] == 'base64'
                           Base64.decode64(params[:file_content])
                         else
                           params[:file_content]
                         end
 
+      # Validate parameters
       validate
 
       # Create new branch if it different from source_branch
@@ -42,7 +44,7 @@ module Files
     end
 
     def validate
-      allowed = ::Gitlab::GitAccess.new(current_user, project, 'web').can_push_to_branch?(@target_branch)
+      allowed = ::Gitlab::UserAccess.new(current_user, project: project).can_push_to_branch?(@target_branch)
 
       unless allowed
         raise_error("You are not allowed to push into this branch")
diff --git a/app/services/files/update_service.rb b/app/services/files/update_service.rb
index 1960dc7d949c1abb2612d024227da98050a1c5e9..8d2b5083179e0ed50c507a355e9067a6d5d05d67 100644
--- a/app/services/files/update_service.rb
+++ b/app/services/files/update_service.rb
@@ -3,7 +3,10 @@ require_relative "base_service"
 module Files
   class UpdateService < Files::BaseService
     def commit
-      repository.commit_file(current_user, @file_path, @file_content, @commit_message, @target_branch, true)
+      repository.update_file(current_user, @file_path, @file_content,
+                             branch: @target_branch,
+                             previous_path: @previous_path,
+                             message: @commit_message)
     end
   end
 end
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index a886f35981f42c8c21d05b35c6ae1fc6900392a9..e02b50ff9a2d8440bc1ffdc582699f70439e0ca8 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -89,7 +89,8 @@ class GitPushService < BaseService
     # Set protection on the default branch if configured
     if current_application_settings.default_branch_protection != PROTECTION_NONE
       developers_can_push = current_application_settings.default_branch_protection == PROTECTION_DEV_CAN_PUSH ? true : false
-      @project.protected_branches.create({ name: @project.default_branch, developers_can_push: developers_can_push })
+      developers_can_merge = current_application_settings.default_branch_protection == PROTECTION_DEV_CAN_MERGE ? true : false
+      @project.protected_branches.create({ name: @project.default_branch, developers_can_push: developers_can_push, developers_can_merge: developers_can_merge })
     end
   end
 
diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb
index e3dc569152cda3af69f5719f6a94fffa0461095a..2d96efe1042c955fc984e0c895ae6ae9e84a6100 100644
--- a/app/services/issuable_base_service.rb
+++ b/app/services/issuable_base_service.rb
@@ -101,6 +101,7 @@ class IssuableBaseService < BaseService
 
   def update(issuable)
     change_state(issuable)
+    change_subscription(issuable)
     filter_params
     old_labels = issuable.labels.to_a
 
@@ -124,6 +125,15 @@ class IssuableBaseService < BaseService
     end
   end
 
+  def change_subscription(issuable)
+    case params.delete(:subscription_event)
+    when 'subscribe'
+      issuable.subscribe(current_user)
+    when 'unsubscribe'
+      issuable.unsubscribe(current_user)
+    end
+  end
+
   def has_changes?(issuable, old_labels: [])
     valid_attrs = [:title, :description, :assignee_id, :milestone_id, :target_branch]
 
diff --git a/app/services/issues/bulk_update_service.rb b/app/services/issues/bulk_update_service.rb
index cd08c3a0cb97aff548f4e4b634809d247f3b008e..7e19a73f71a22491f18dff6be77ba9698ce03641 100644
--- a/app/services/issues/bulk_update_service.rb
+++ b/app/services/issues/bulk_update_service.rb
@@ -4,7 +4,7 @@ module Issues
       issues_ids   = params.delete(:issues_ids).split(",")
       issue_params = params
 
-      %i(state_event milestone_id assignee_id add_label_ids remove_label_ids).each do |key|
+      %i(state_event milestone_id assignee_id add_label_ids remove_label_ids subscription_event).each do |key|
         issue_params.delete(key) unless issue_params[key].present?
       end
 
diff --git a/app/services/merge_requests/merge_service.rb b/app/services/merge_requests/merge_service.rb
index f1b1d90c4578f81058ac5de0d88aab343c16b166..0dac0614141b69cc350a8bbb0ee11fae4d332a17 100644
--- a/app/services/merge_requests/merge_service.rb
+++ b/app/services/merge_requests/merge_service.rb
@@ -34,7 +34,7 @@ module MergeRequests
         committer: committer
       }
 
-      commit_id = repository.merge(current_user, merge_request.diff_head_sha, merge_request.target_branch, options)
+      commit_id = repository.merge(current_user, merge_request, options)
       merge_request.update(merge_commit_sha: commit_id)
     rescue GitHooksService::PreReceiveError => e
       merge_request.update(merge_error: e.message)
@@ -43,6 +43,8 @@ module MergeRequests
       merge_request.update(merge_error: "Something went wrong during merge")
       Rails.logger.error(e.message)
       false
+    ensure
+      merge_request.update(in_progress_merge_commit_sha: nil)
     end
 
     def after_merge
diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb
index b11ecd97a5798560971da3d7c8dad6737512f32c..1daf6bbf553a8f23e628ebb84cfa926edd9a6387 100644
--- a/app/services/merge_requests/refresh_service.rb
+++ b/app/services/merge_requests/refresh_service.rb
@@ -48,7 +48,7 @@ module MergeRequests
     end
 
     def force_push?
-      Gitlab::ForcePushCheck.force_push?(@project, @oldrev, @newrev)
+      Gitlab::Checks::ForcePush.force_push?(@project, @oldrev, @newrev)
     end
 
     # Refresh merge request diff if we push to source or target branch of merge request
diff --git a/app/services/projects/import_export/export_service.rb b/app/services/projects/import_export/export_service.rb
index 998789d64d226a987f7c48313e9af16bbe485c08..06252c7b625a4df7b87fcb98c60c058de7c76002 100644
--- a/app/services/projects/import_export/export_service.rb
+++ b/app/services/projects/import_export/export_service.rb
@@ -9,7 +9,7 @@ module Projects
       private
 
       def save_all
-        if [version_saver, project_tree_saver, uploads_saver, repo_saver, wiki_repo_saver].all?(&:save)
+        if [version_saver, avatar_saver, project_tree_saver, uploads_saver, repo_saver, wiki_repo_saver].all?(&:save)
           Gitlab::ImportExport::Saver.save(project: project, shared: @shared)
           notify_success
         else
@@ -21,6 +21,10 @@ module Projects
         Gitlab::ImportExport::VersionSaver.new(shared: @shared)
       end
 
+      def avatar_saver
+        Gitlab::ImportExport::AvatarSaver.new(project: project, shared: @shared)
+      end
+
       def project_tree_saver
         Gitlab::ImportExport::ProjectTreeSaver.new(project: project, shared: @shared)
       end
diff --git a/app/uploaders/avatar_uploader.rb b/app/uploaders/avatar_uploader.rb
index 6135c3ad96f4e5c3916f426d08cc177880829a2a..03d9329a14eaa25c7a635ecfa4d796033be3b169 100644
--- a/app/uploaders/avatar_uploader.rb
+++ b/app/uploaders/avatar_uploader.rb
@@ -14,4 +14,8 @@ class AvatarUploader < CarrierWave::Uploader::Base
   def reset_events_cache(file)
     model.reset_events_cache if model.is_a?(User)
   end
+
+  def exists?
+    model.avatar.file && model.avatar.file.exists?
+  end
 end
diff --git a/app/views/admin/builds/index.html.haml b/app/views/admin/builds/index.html.haml
index 9ea3cca0ecb0e8cc691ec951fceeb55b0def3ccb..3d77634d8fafe6b9ce72261c28845377a5599795 100644
--- a/app/views/admin/builds/index.html.haml
+++ b/app/views/admin/builds/index.html.haml
@@ -10,15 +10,20 @@
           All
           %span.badge.js-totalbuilds-count= @all_builds.count(:id)
 
+      %li{class: ('active' if @scope == 'pending')}
+        = link_to admin_builds_path(scope: :pending) do
+          Pending
+          %span.badge= number_with_delimiter(@all_builds.pending.count(:id))
+
       %li{class: ('active' if @scope == 'running')}
         = link_to admin_builds_path(scope: :running) do
           Running
-          %span.badge.js-running-count= number_with_delimiter(@all_builds.running_or_pending.count(:id))
+          %span.badge= number_with_delimiter(@all_builds.running.count(:id))
 
       %li{class: ('active' if @scope == 'finished')}
         = link_to admin_builds_path(scope: :finished) do
           Finished
-          %span.badge.js-running-count= number_with_delimiter(@all_builds.finished.count(:id))
+          %span.badge= number_with_delimiter(@all_builds.finished.count(:id))
 
     .nav-controls
       - if @all_builds.running_or_pending.any?
diff --git a/app/views/emojis/index.html.haml b/app/views/emojis/index.html.haml
index 8b38b4c2bd4a9b354774f3333779167983ead07b..790d90ad3ee5f5b52de5bf9a7aca479ce9765831 100644
--- a/app/views/emojis/index.html.haml
+++ b/app/views/emojis/index.html.haml
@@ -1,5 +1,5 @@
 .emoji-menu
-  = text_field_tag :emoji_search, "", class: "emoji-search search-input form-control", placeholder: "Seach emojis"
+  = text_field_tag :emoji_search, "", class: "emoji-search search-input form-control", placeholder: "Search emoji"
   .emoji-menu-content
     - Gitlab::AwardEmoji.emoji_by_category.each do |category, emojis|
       %h5.emoji-menu-title
diff --git a/app/views/layouts/_init_auto_complete.html.haml b/app/views/layouts/_init_auto_complete.html.haml
index 12e7ed0e792be75ebfb04955795c57a0ef3eee05..351100f3523383a3a723f261f6ab5fe96b6fcab0 100644
--- a/app/views/layouts/_init_auto_complete.html.haml
+++ b/app/views/layouts/_init_auto_complete.html.haml
@@ -1,7 +1,7 @@
 - project = @target_project || @project
+- noteable_class = @noteable.class if @noteable.present?
 
-- if @noteable
-  :javascript
-    GitLab.GfmAutoComplete.dataSource = "#{autocomplete_sources_namespace_project_path(project.namespace, project, type: @noteable.class, type_id: params[:id])}"
-    GitLab.GfmAutoComplete.cachedData = undefined;
-    GitLab.GfmAutoComplete.setup();
+:javascript
+  GitLab.GfmAutoComplete.dataSource = "#{autocomplete_sources_namespace_project_path(project.namespace, project, type: noteable_class, type_id: params[:id])}"
+  GitLab.GfmAutoComplete.cachedData = undefined;
+  GitLab.GfmAutoComplete.setup();
diff --git a/app/views/projects/blob/_editor.html.haml b/app/views/projects/blob/_editor.html.haml
index 29c7d45074a2241d5f20bb0a78b4443a0cec8184..ff379bafb26759800baee0a81780423ada586aa7 100644
--- a/app/views/projects/blob/_editor.html.haml
+++ b/app/views/projects/blob/_editor.html.haml
@@ -4,7 +4,9 @@
       = icon('code-fork')
       = ref
     %span.editor-file-name
-      = @path
+      - if current_action?(:edit) || current_action?(:update)
+        = text_field_tag 'file_path', (params[:file_path] || @path),
+                                      class: 'form-control new-file-path'
 
     - if current_action?(:new) || current_action?(:create)
       %span.editor-file-name
diff --git a/app/views/projects/builds/_sidebar.html.haml b/app/views/projects/builds/_sidebar.html.haml
index cab21f0cf19568bad1443c6cc5d64d5902cfd01e..dc57b49f27a7386b45db0f36f663298c727f2d8f 100644
--- a/app/views/projects/builds/_sidebar.html.haml
+++ b/app/views/projects/builds/_sidebar.html.haml
@@ -49,7 +49,7 @@
     - if @build.duration
       %p.build-detail-row
         %span.build-light-text Duration:
-        #{duration_in_words(@build.finished_at, @build.started_at)}
+        = time_interval_in_words(@build.duration)
     - if @build.finished_at
       %p.build-detail-row
         %span.build-light-text Finished:
@@ -94,9 +94,9 @@
 
   .block
     .title
-      Commit message
+      Commit title
     %p.build-light-text.append-bottom-0
-      #{@build.pipeline.git_commit_message}
+      #{@build.pipeline.git_commit_title}
 
   - if @build.tags.any?
     .block
diff --git a/app/views/projects/builds/index.html.haml b/app/views/projects/builds/index.html.haml
index 85c31dfd918207433a70ee6a27b9988e4a715cab..2af625f69cd378e0b66786baf7f1d9d5012459c0 100644
--- a/app/views/projects/builds/index.html.haml
+++ b/app/views/projects/builds/index.html.haml
@@ -11,17 +11,22 @@
           %span.badge.js-totalbuilds-count
             = number_with_delimiter(@all_builds.count(:id))
 
+      %li{class: ('active' if @scope == 'pending')}
+        = link_to project_builds_path(@project, scope: :pending) do
+          Pending
+          %span.badge
+            = number_with_delimiter(@all_builds.pending.count(:id))
 
       %li{class: ('active' if @scope == 'running')}
         = link_to project_builds_path(@project, scope: :running) do
           Running
-          %span.badge.js-running-count
-            = number_with_delimiter(@all_builds.running_or_pending.count(:id))
+          %span.badge
+            = number_with_delimiter(@all_builds.running.count(:id))
 
       %li{class: ('active' if @scope == 'finished')}
         = link_to project_builds_path(@project, scope: :finished) do
           Finished
-          %span.badge.js-running-count
+          %span.badge
             = number_with_delimiter(@all_builds.finished.count(:id))
 
     .nav-controls
diff --git a/app/views/projects/buttons/_fork.html.haml b/app/views/projects/buttons/_fork.html.haml
index a9eaed4c5f63264267862fd130fe2b1b65ce5603..a098a082854cab73a5004e46a9a75fdfae27358a 100644
--- a/app/views/projects/buttons/_fork.html.haml
+++ b/app/views/projects/buttons/_fork.html.haml
@@ -2,7 +2,7 @@
   - if current_user && can?(current_user, :fork_project, @project)
     - if current_user.already_forked?(@project) && current_user.manageable_namespaces.size < 2
       = link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: 'Go to your fork', class: 'btn has-tooltip' do
-        = icon('code-fork fw')
+        = custom_icon('icon_fork')
         Fork
       %div.count-with-arrow
         %span.arrow
@@ -10,7 +10,7 @@
           = @project.forks_count
     - else
       = link_to new_namespace_project_fork_path(@project.namespace, @project), title: "Fork project", class: 'btn has-tooltip' do
-        = icon('code-fork fw')
+        = custom_icon('icon_fork')
         Fork
       %div.count-with-arrow
         %span.arrow
diff --git a/app/views/projects/ci/builds/_build.html.haml b/app/views/projects/ci/builds/_build.html.haml
index e1b42b2cfa5c3ce09063ed137d752e551a0cfa3a..9264289987d039906ae5791a458497b0425a9847 100644
--- a/app/views/projects/ci/builds/_build.html.haml
+++ b/app/views/projects/ci/builds/_build.html.haml
@@ -39,6 +39,8 @@
           %span.label.label-danger allowed to fail
         - if defined?(retried) && retried
           %span.label.label-warning retried
+        - if build.manual?
+          %span.label.label-info manual
 
 
   - if defined?(runner) && runner
@@ -79,6 +81,11 @@
         - if build.active?
           = link_to cancel_namespace_project_build_path(build.project.namespace, build.project, build, return_to: request.original_url), method: :post, title: 'Cancel', class: 'btn btn-build' do
             = icon('remove', class: 'cred')
-        - elsif defined?(allow_retry) && allow_retry && build.retryable?
-          = link_to retry_namespace_project_build_path(build.project.namespace, build.project, build, return_to: request.original_url), method: :post, title: 'Retry', class: 'btn btn-build' do
-            = icon('repeat')
+        - elsif defined?(allow_retry) && allow_retry
+          - if build.retryable?
+            = link_to retry_namespace_project_build_path(build.project.namespace, build.project, build, return_to: request.original_url), method: :post, title: 'Retry', class: 'btn btn-build' do
+              = icon('repeat')
+          - elsif build.playable?
+            = link_to play_namespace_project_build_path(build.project.namespace, build.project, build, return_to: request.original_url), method: :post, title: 'Play', class: 'btn btn-build' do
+              = icon('play')
+
diff --git a/app/views/projects/ci/pipelines/_pipeline.html.haml b/app/views/projects/ci/pipelines/_pipeline.html.haml
index 631873fb0a3adf4b0aed026b6fe2e0c99293cc78..cb0ca7bc8e38e8ab5638cb523e43c2f10ccb5787 100644
--- a/app/views/projects/ci/pipelines/_pipeline.html.haml
+++ b/app/views/projects/ci/pipelines/_pipeline.html.haml
@@ -10,12 +10,13 @@
       = link_to namespace_project_pipeline_path(@project.namespace, @project, pipeline.id) do
         %span ##{pipeline.id}
       - if pipeline.ref
+        .icon-container
+          = pipeline.tag? ? icon('tag') : icon('code-fork')
         = link_to pipeline.ref, namespace_project_commits_path(@project.namespace, @project, pipeline.ref), class: "monospace branch-name"
-        = custom_icon("icon_commit")
+        .icon-container
+          = custom_icon("icon_commit")
       = link_to pipeline.short_sha, namespace_project_commit_path(@project.namespace, @project, pipeline.sha), class: "commit-id monospace"
-      - if pipeline.tag?
-        %span.label.label-primary tag
-      - elsif pipeline.latest?
+      - if pipeline.latest?
         %span.label.label-success.has-tooltip{ title: 'Latest build for this branch' } latest
       - if pipeline.triggered?
         %span.label.label-primary triggered
@@ -32,9 +33,9 @@
           Cant find HEAD commit for this branch
 
 
-    - stages_status = pipeline.statuses.stages_status
+    - stages_status = pipeline.statuses.latest.stages_status
     - stages.each do |stage|
-      %td
+      %td.stage-cell
         - status = stages_status[stage]
         - tooltip = "#{stage.titleize}: #{status || 'not found'}"
         - if status
@@ -57,18 +58,31 @@
   %td.pipeline-actions
     .controls.hidden-xs.pull-right
       - artifacts = pipeline.builds.latest.select { |b| b.artifacts? }
-      - if artifacts.present?
-        .inline
-          .btn-group
-            %a.dropdown-toggle.btn.btn-default.build-artifacts{type: 'button', 'data-toggle' => 'dropdown'}
-              = icon("download")
-              %b.caret
-            %ul.dropdown-menu.dropdown-menu-align-right
-              - artifacts.each do |build|
-                %li
-                  = link_to download_namespace_project_build_artifacts_path(@project.namespace, @project, build), rel: 'nofollow' do
-                    = icon("download")
-                    %span Download '#{build.name}' artifacts
+      - actions = pipeline.manual_actions
+      - if artifacts.present? || actions.any?
+        .btn-group.inline
+          - if actions.any?
+            .btn-group
+              %a.dropdown-toggle.btn.btn-default{type: 'button', 'data-toggle' => 'dropdown'}
+                = icon("play")
+                %b.caret
+              %ul.dropdown-menu.dropdown-menu-align-right
+                - actions.each do |build|
+                  %li
+                    = link_to play_namespace_project_build_path(@project.namespace, @project, build), method: :post, rel: 'nofollow' do
+                      = icon("play")
+                      %span= build.name.humanize
+          - if artifacts.present?
+            .btn-group
+              %a.dropdown-toggle.btn.btn-default.build-artifacts{type: 'button', 'data-toggle' => 'dropdown'}
+                = icon("download")
+                %b.caret
+              %ul.dropdown-menu.dropdown-menu-align-right
+                - artifacts.each do |build|
+                  %li
+                    = link_to download_namespace_project_build_artifacts_path(@project.namespace, @project, build), rel: 'nofollow' do
+                      = icon("download")
+                      %span Download '#{build.name}' artifacts
 
       - if can?(current_user, :update_pipeline, @project)
         .cancel-retry-btns.inline
diff --git a/app/views/projects/deployments/_actions.haml b/app/views/projects/deployments/_actions.haml
new file mode 100644
index 0000000000000000000000000000000000000000..65d68aa298589e1b63b017186d073adb3278259e
--- /dev/null
+++ b/app/views/projects/deployments/_actions.haml
@@ -0,0 +1,22 @@
+- if can?(current_user, :create_deployment, deployment) && deployment.deployable
+  .pull-right
+    - actions = deployment.manual_actions
+    - if actions.present?
+      .btn-group.inline
+        .btn-group
+          %a.dropdown-toggle.btn.btn-default{type: 'button', 'data-toggle' => 'dropdown'}
+            = icon("play")
+            %b.caret
+          %ul.dropdown-menu.dropdown-menu-align-right
+            - actions.each do |action|
+              %li
+                = link_to [:play, @project.namespace.becomes(Namespace), @project, action], method: :post, rel: 'nofollow' do
+                  = icon("play")
+                  %span= action.name.humanize
+
+    - if local_assigns.fetch(:allow_rollback, false)
+      = link_to [:retry, @project.namespace.becomes(Namespace), @project, deployment.deployable], method: :post, class: 'btn btn-build' do
+        - if deployment.last?
+          Retry
+        - else
+          Rollback
diff --git a/app/views/projects/deployments/_deployment.html.haml b/app/views/projects/deployments/_deployment.html.haml
index d08dd92f1f6baad77777ec22eb494b2fdc9d6b3f..baf02f1e6a013ca74f5af737d0f86195b6c80f5b 100644
--- a/app/views/projects/deployments/_deployment.html.haml
+++ b/app/views/projects/deployments/_deployment.html.haml
@@ -7,17 +7,11 @@
 
   %td
     - if deployment.deployable
-      = link_to namespace_project_build_path(@project.namespace, @project, deployment.deployable) do
+      = link_to [@project.namespace.becomes(Namespace), @project, deployment.deployable] do
         = "#{deployment.deployable.name} (##{deployment.deployable.id})"
 
   %td
     #{time_ago_with_tooltip(deployment.created_at)}
 
   %td
-    - if can?(current_user, :create_deployment, deployment) && deployment.deployable
-      .pull-right
-        = link_to retry_namespace_project_build_path(@project.namespace, @project, deployment.deployable), method: :post, class: 'btn btn-build' do
-          - if deployment.last?
-            Retry
-          - else
-            Rollback
+    = render 'projects/deployments/actions', deployment: deployment, allow_rollback: true
diff --git a/app/views/projects/diffs/_content.html.haml b/app/views/projects/diffs/_content.html.haml
index 0c0424edffd70c1cc68913b8ec9459006542df38..a1b071f130c73fb1c0640f59d89a793862c71330 100644
--- a/app/views/projects/diffs/_content.html.haml
+++ b/app/views/projects/diffs/_content.html.haml
@@ -8,12 +8,12 @@
   - elsif blob_text_viewable?(blob)
     - if !project.repository.diffable?(blob)
       .nothing-here-block This diff was suppressed by a .gitattributes entry.
+    - elsif diff_file.collapsed?
+      - url = url_for(params.merge(action: :diff_for_path, old_path: diff_file.old_path, new_path: diff_file.new_path))
+      .nothing-here-block.diff-collapsed{data: { diff_for_path: url } }
+        This diff is collapsed. Click to expand it.
     - elsif diff_file.diff_lines.length > 0
-      - if diff_file.collapsed_by_default? && !expand_all_diffs?
-        - url = url_for(params.merge(action: :diff_for_path, old_path: diff_file.old_path, new_path: diff_file.new_path))
-        .nothing-here-block.diff-collapsed{data: { diff_for_path: url } }
-          This diff is collapsed. Click to expand it.
-      - elsif diff_view == 'parallel'
+      - if diff_view == 'parallel'
         = render "projects/diffs/parallel_view", diff_file: diff_file, project: project, blob: blob
       - else
         = render "projects/diffs/text_file", diff_file: diff_file
diff --git a/app/views/projects/diffs/_diffs.html.haml b/app/views/projects/diffs/_diffs.html.haml
index 20aaab5accf935e00cd6290f32afb6301120ba98..8ae433b48235da9b68dc904a14cd425d454c39de 100644
--- a/app/views/projects/diffs/_diffs.html.haml
+++ b/app/views/projects/diffs/_diffs.html.haml
@@ -6,7 +6,7 @@
 
 .content-block.oneline-block.files-changed
   .inline-parallel-buttons
-    - unless expand_all_diffs?
+    - if !expand_all_diffs? && diff_files.any? { |diff_file| diff_file.collapsed? }
       = link_to 'Expand all', url_for(params.merge(expand_all_diffs: 1, format: 'html')), class: 'btn btn-default'
     - if show_whitespace_toggle
       - if current_controller?(:commit)
diff --git a/app/views/projects/environments/_environment.html.haml b/app/views/projects/environments/_environment.html.haml
index eafa246d05fd7ddf0b95c0f3780426f65f000168..e2453395602c1f6fe82a61a73c2268e491c3942f 100644
--- a/app/views/projects/environments/_environment.html.haml
+++ b/app/views/projects/environments/_environment.html.haml
@@ -15,3 +15,6 @@
   %td
     - if last_deployment
       #{time_ago_with_tooltip(last_deployment.created_at)}
+
+  %td
+    = render 'projects/deployments/actions', deployment: last_deployment
diff --git a/app/views/projects/environments/index.html.haml b/app/views/projects/environments/index.html.haml
index 303d7c23d01b7203af1486e64078880389ba936f..a6dd34653abd84e4b0db61e0ae5aa38388ae7364 100644
--- a/app/views/projects/environments/index.html.haml
+++ b/app/views/projects/environments/index.html.haml
@@ -28,4 +28,5 @@
           %th Environment
           %th Last deployment
           %th Date
+          %th
         = render @environments
diff --git a/app/views/projects/environments/show.html.haml b/app/views/projects/environments/show.html.haml
index b17aba2431fd30db3b4e0f3a2f13aa42844e7ca3..b8b1ce52a91617fde8cfcb74f99c67d897b10230 100644
--- a/app/views/projects/environments/show.html.haml
+++ b/app/views/projects/environments/show.html.haml
@@ -5,7 +5,7 @@
 %div{ class: container_class }
   .top-area
     .col-md-9
-      %h3.page-title= @environment.name.titleize
+      %h3.page-title= @environment.name.capitalize
 
     .col-md-3
       .nav-controls
diff --git a/app/views/projects/forks/index.html.haml b/app/views/projects/forks/index.html.haml
index dbe9ddfde2f0877b097b715e1e43431b1dd9cf37..a1d79bdabda0b2f0fc76e2beb4ba76f6b4b21673 100644
--- a/app/views/projects/forks/index.html.haml
+++ b/app/views/projects/forks/index.html.haml
@@ -31,11 +31,11 @@
     - if current_user && can?(current_user, :fork_project, @project)
       - if current_user.already_forked?(@project) && current_user.manageable_namespaces.size < 2
         = link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: 'Go to your fork', class: 'btn btn-new' do
-          = icon('code-fork fw')
+          = custom_icon('icon_fork')
           Fork
       - else
         = link_to new_namespace_project_fork_path(@project.namespace, @project), title: "Fork project", class: 'btn btn-new' do
-          = icon('code-fork fw')
+          = custom_icon('icon_fork')
           Fork
 
 
diff --git a/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml b/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml
index 542827b2f1542db5f27be251b453bf5580cd84c2..331dc1fcc29f1165b7bfbadaa039d8ff9fbbc415 100644
--- a/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml
+++ b/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml
@@ -51,7 +51,7 @@
   %td.duration
     - if generic_commit_status.duration
       = icon("clock-o")
-      #{duration_in_words(generic_commit_status.finished_at, generic_commit_status.started_at)}
+      = time_interval_in_words(generic_commit_status.duration)
 
   %td.timestamp
     - if generic_commit_status.finished_at
diff --git a/app/views/projects/merge_requests/widget/open/_conflicts.html.haml b/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
index 06ab0a3fa0020f20ab8e7fbd796ae8e12f9d6ffc..f000cc38a653a3b34dfa875f42e0fcc27926eac4 100644
--- a/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
+++ b/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
@@ -4,7 +4,7 @@
 
 %p
   Please resolve these conflicts or
-  - if @merge_request.can_be_merged_by?(current_user)
+  - if @merge_request.can_be_merged_via_command_line_by?(current_user)
     #{link_to "merge this request manually", "#modal_merge_info", class: "how_to_merge_link vlink", "data-toggle" => "modal"}.
   - else
     ask someone with write access to this repository to merge this request manually.
diff --git a/app/views/projects/notes/_notes_with_form.html.haml b/app/views/projects/notes/_notes_with_form.html.haml
index 56d302fab82540fd072f73f3106329d43d13f61c..74538a9723e089cf05ac043ca9dbb5abb11c7d3f 100644
--- a/app/views/projects/notes/_notes_with_form.html.haml
+++ b/app/views/projects/notes/_notes_with_form.html.haml
@@ -14,9 +14,9 @@
       .disabled-comment.text-center
         .disabled-comment-text.inline
           Please
-          = link_to "register",new_user_session_path
+          = link_to "register", new_session_path(:user, redirect_to_referer: 'yes')
           or
-          = link_to "login",new_user_session_path
+          = link_to "login", new_session_path(:user, redirect_to_referer: 'yes')
           to post a comment
 
 :javascript
diff --git a/app/views/projects/protected_branches/_branches_list.html.haml b/app/views/projects/protected_branches/_branches_list.html.haml
index 97cb1a9052b497b1c9ede989fbbb9e54307fee5a..720d67dff7c4ff7faa08a3a0b8bd20a14b90db43 100644
--- a/app/views/projects/protected_branches/_branches_list.html.haml
+++ b/app/views/projects/protected_branches/_branches_list.html.haml
@@ -8,6 +8,7 @@
   .table-responsive
     %table.table.protected-branches-list
       %colgroup
+        %col{ width: "20%" }
         %col{ width: "30%" }
         %col{ width: "25%" }
         %col{ width: "25%" }
@@ -18,6 +19,7 @@
           %th Protected Branch
           %th Commit
           %th Developers Can Push
+          %th Developers Can Merge
           - if can_admin_project
             %th
       %tbody
diff --git a/app/views/projects/protected_branches/_protected_branch.html.haml b/app/views/projects/protected_branches/_protected_branch.html.haml
index 474aec3a97cfa19474fbb242c1fcd588c4680c95..7fda7f96047342065fd51532bb16c33b4e873e01 100644
--- a/app/views/projects/protected_branches/_protected_branch.html.haml
+++ b/app/views/projects/protected_branches/_protected_branch.html.haml
@@ -16,6 +16,8 @@
         (branch was removed from repository)
   %td
     = check_box_tag("developers_can_push", protected_branch.id, protected_branch.developers_can_push, data: { url: url })
+  %td
+    = check_box_tag("developers_can_merge", protected_branch.id, protected_branch.developers_can_merge, data: { url: url })
   - if can_admin_project
     %td
       = link_to 'Unprotect', [@project.namespace.becomes(Namespace), @project, protected_branch], data: { confirm: 'Branch will be writable for developers. Are you sure?' }, method: :delete, class: "btn btn-warning btn-sm pull-right"
diff --git a/app/views/projects/protected_branches/index.html.haml b/app/views/projects/protected_branches/index.html.haml
index 883d3e3af1eabc9e94e82112c4b7a80087bb3d29..151e1d6485177b808d17128f050d34162a0367e3 100644
--- a/app/views/projects/protected_branches/index.html.haml
+++ b/app/views/projects/protected_branches/index.html.haml
@@ -36,6 +36,14 @@
             = f.label :developers_can_push, "Developers can push", class: "label-light append-bottom-0"
             %p.light.append-bottom-0
               Allow developers to push to this branch
+
+        .form-group
+          = f.check_box :developers_can_merge, class: "pull-left"
+          .prepend-left-20
+            = f.label :developers_can_merge, "Developers can merge", class: "label-light append-bottom-0"
+            %p.light.append-bottom-0
+              Allow developers to accept merge requests to this branch
         = f.submit "Protect", class: "btn-create btn protect-branch-btn", disabled: true
+
     %hr
     = render "branches_list"
diff --git a/app/views/projects/services/_form.html.haml b/app/views/projects/services/_form.html.haml
index 1f13ea28b4e14243597fbe9517e3e2ad2c35c9fb..166dc4a01fc3dadb96714fa1723018ecd6f28b4d 100644
--- a/app/views/projects/services/_form.html.haml
+++ b/app/views/projects/services/_form.html.haml
@@ -12,5 +12,5 @@
       &nbsp;
       - if @service.valid? && @service.activated?
         - disabled = @service.can_test? ? '':'disabled'
-        = link_to 'Test settings', test_namespace_project_service_path(@project.namespace, @project, @service.to_param), class: "btn #{disabled}"
+        = link_to 'Test settings', test_namespace_project_service_path(@project.namespace, @project, @service), class: "btn #{disabled}", title: @service.disabled_title
       = link_to "Cancel", namespace_project_services_path(@project.namespace, @project), class: "btn btn-cancel"
diff --git a/app/views/projects/tags/show.html.haml b/app/views/projects/tags/show.html.haml
index b7d7d5c5382da27ecb1d83113ce49797d2c9e0de..395d7af6cbb4d033ea539e5c2fabfc0fe35fce79 100644
--- a/app/views/projects/tags/show.html.haml
+++ b/app/views/projects/tags/show.html.haml
@@ -1,36 +1,39 @@
+- @no_container = true
 - page_title @tag.name, "Tags"
 = render "projects/commits/head"
 
-.row-content-block
-  .pull-right
-    - if can?(current_user, :push_code, @project)
-      = link_to edit_namespace_project_tag_release_path(@project.namespace, @project, @tag.name), class: 'btn-grouped btn has-tooltip', title: 'Edit release notes' do
-        = icon("pencil")
-    = link_to namespace_project_tree_path(@project.namespace, @project, @tag.name), class: 'btn btn-grouped has-tooltip', title: 'Browse files' do
-      = icon('files-o')
-    = link_to namespace_project_commits_path(@project.namespace, @project, @tag.name), class: 'btn btn-grouped has-tooltip', title: 'Browse commits' do
-      = icon('history')
-    - if can? current_user, :download_code, @project
-      = render 'projects/tags/download', ref: @tag.name, project: @project
-    - if can?(current_user, :admin_project, @project)
-      .pull-right
-        = link_to namespace_project_tag_path(@project.namespace, @project, @tag.name), class: 'btn btn-remove remove-row grouped has-tooltip', title: "Delete tag", method: :delete, data: { confirm: "Deleting the '#{@tag.name}' tag cannot be undone. Are you sure?" } do
-          %i.fa.fa-trash-o
-  .title
-    %span.item-title= @tag.name
-  - if @commit
-    = render 'projects/branches/commit', commit: @commit, project: @project
-  - else
-    Cant find HEAD commit for this tag
-  - if @tag.message.present?
-    %pre.body
-      = strip_gpg_signature(@tag.message)
+%div{ class: container_class }
+  .sub-header-block
+    .pull-right.tag-buttons
+      - if can?(current_user, :push_code, @project)
+        = link_to edit_namespace_project_tag_release_path(@project.namespace, @project, @tag.name), class: 'btn has-tooltip', title: 'Edit release notes' do
+          = icon("pencil")
+      = link_to namespace_project_tree_path(@project.namespace, @project, @tag.name), class: 'btn has-tooltip', title: 'Browse files' do
+        = icon('files-o')
+      = link_to namespace_project_commits_path(@project.namespace, @project, @tag.name), class: 'btn has-tooltip', title: 'Browse commits' do
+        = icon('history')
+      - if can? current_user, :download_code, @project
+        = render 'projects/tags/download', ref: @tag.name, project: @project
+      - if can?(current_user, :admin_project, @project)
+        .pull-right
+          = link_to namespace_project_tag_path(@project.namespace, @project, @tag.name), class: 'btn btn-remove remove-row grouped has-tooltip', title: "Delete tag", method: :delete, data: { confirm: "Deleting the '#{@tag.name}' tag cannot be undone. Are you sure?" } do
+            %i.fa.fa-trash-o
+    .tag-info.append-bottom-10
+      .title
+        %span.item-title= @tag.name
+      - if @commit
+        = render 'projects/branches/commit', commit: @commit, project: @project
+      - else
+        Cant find HEAD commit for this tag
+    - if @tag.message.present?
+      %pre.body
+        = strip_gpg_signature(@tag.message)
 
-.append-bottom-default.prepend-top-default
-  - if @release.description.present?
-    .description
-      .wiki
-        = preserve do
-          = markdown @release.description
-  - else
-    This tag has no release notes.
+  .append-bottom-default.prepend-top-default
+    - if @release.description.present?
+      .description
+        .wiki
+          = preserve do
+            = markdown @release.description
+    - else
+      This tag has no release notes.
diff --git a/app/views/shared/icons/_icon_fork.svg b/app/views/shared/icons/_icon_fork.svg
new file mode 100644
index 0000000000000000000000000000000000000000..420ffe3a55bd8ad7c41374b1d866c959c4c76218
--- /dev/null
+++ b/app/views/shared/icons/_icon_fork.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><circle id="a" cx="4" cy="4" r="4"/><mask id="d" width="8" height="8" x="0" y="0" fill="#fff"><use xlink:href="#a"/></mask><circle id="b" cx="20" cy="4" r="4"/><mask id="e" width="8" height="8" x="0" y="0" fill="#fff"><use xlink:href="#b"/></mask><circle id="c" cx="12" cy="30" r="4"/><mask id="f" width="8" height="8" x="0" y="0" fill="#fff"><use xlink:href="#c"/></mask></defs><g fill="none" fill-rule="evenodd" transform="translate(8 3)"><path fill="#7E7E7E" d="M10 19.667c-4.14-1.29-7.389-5.878-7.389-5.878C2.274 13.353 2 12.545 2 12.01V6h4v5.509c0 .276.166.65.367.831 0 0 1.136 1.028 1.746 1.574C9.617 15.261 11.048 16 12.09 16c1.028 0 2.41-.723 3.858-2.048.588-.54 1.84-1.742 1.84-1.742a.784.784 0 0 0 .211-.502V6h4v6.008c0 .548-.259 1.349-.601 1.795 0 0-3.21 4.707-7.399 5.916V27h-4v-7.333z"/><use stroke="#7E7E7E" stroke-width="4" mask="url(#d)" xlink:href="#a"/><use stroke="#7E7E7E" stroke-width="4" mask="url(#e)" xlink:href="#b"/><use stroke="#7E7E7E" stroke-width="4" mask="url(#f)" xlink:href="#c"/></g></svg>
\ No newline at end of file
diff --git a/app/views/shared/icons/_icon_status_cancel.svg b/app/views/shared/icons/_icon_status_cancel.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6a0bc1490c4fd67f6a92609077ee1612fe030642
--- /dev/null
+++ b/app/views/shared/icons/_icon_status_cancel.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <defs>
+    <circle id="a" cx="7" cy="7" r="7"/>
+    <mask id="b" width="14" height="14" x="0" y="0" fill="white">
+      <use xlink:href="#a"/>
+    </mask>
+  </defs>
+  <g fill="none" fill-rule="evenodd">
+    <use stroke="#5C5C5C" stroke-width="2" mask="url(#b)" xlink:href="#a"/>
+    <rect width="10" height="1" x="2" y="6.5" fill="#5C5C5C" transform="rotate(45 7 7)" rx=".3"/>
+  </g>
+</svg>
diff --git a/app/views/shared/icons/_icon_status_failed.svg b/app/views/shared/icons/_icon_status_failed.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c41ca18cae751e4817f57528c30c09512b285c12
--- /dev/null
+++ b/app/views/shared/icons/_icon_status_failed.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <defs>
+    <circle id="a" cx="7" cy="7" r="7"/>
+    <mask id="b" width="14" height="14" x="0" y="0" fill="white">
+      <use xlink:href="#a"/>
+    </mask>
+  </defs>
+  <g fill="none" fill-rule="evenodd">
+    <use stroke="#D22852" stroke-width="2" mask="url(#b)" xlink:href="#a"/>
+    <path fill="#D22852" d="M7.5,6.5 L7.5,4.30578971 C7.5,4.12531853 7.36809219,4 7.20537567,4 L6.79462433,4 C6.63904572,4 6.5,4.13690672 6.5,4.30578971 L6.5,6.5 L4.30578971,6.5 C4.12531853,6.5 4,6.63190781 4,6.79462433 L4,7.20537567 C4,7.36095428 4.13690672,7.5 4.30578971,7.5 L6.5,7.5 L6.5,9.69421029 C6.5,9.87468147 6.63190781,10 6.79462433,10 L7.20537567,10 C7.36095428,10 7.5,9.86309328 7.5,9.69421029 L7.5,7.5 L9.69421029,7.5 C9.87468147,7.5 10,7.36809219 10,7.20537567 L10,6.79462433 C10,6.63904572 9.86309328,6.5 9.69421029,6.5 L7.5,6.5 Z" transform="rotate(45 7 7)"/>
+  </g>
+</svg>
diff --git a/app/views/shared/icons/_icon_status_pending.svg b/app/views/shared/icons/_icon_status_pending.svg
new file mode 100644
index 0000000000000000000000000000000000000000..035cd8b4cccda9483f5c463504c0a8fb6d2b166e
--- /dev/null
+++ b/app/views/shared/icons/_icon_status_pending.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <defs>
+    <circle id="a" cx="7" cy="7" r="7"/>
+    <mask id="b" width="14" height="14" x="0" y="0" fill="white">
+      <use xlink:href="#a"/>
+    </mask>
+  </defs>
+  <g fill="none" fill-rule="evenodd">
+    <use stroke="#E75E40" stroke-width="2" mask="url(#b)" xlink:href="#a"/>
+    <rect width="1" height="4" x="5" y="5" fill="#E75E40" rx=".3"/>
+    <rect width="1" height="4" x="8" y="5" fill="#E75E40" rx=".3"/>
+  </g>
+</svg>
diff --git a/app/views/shared/icons/_icon_status_running.svg b/app/views/shared/icons/_icon_status_running.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a48b3a25099a426f4620c10e09127ad92776b7c6
--- /dev/null
+++ b/app/views/shared/icons/_icon_status_running.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <defs>
+    <circle id="a" cx="7" cy="7" r="7"/>
+    <mask id="b" width="14" height="14" x="0" y="0" fill="white">
+      <use xlink:href="#a"/>
+    </mask>
+  </defs>
+  <g fill="none" fill-rule="evenodd">
+    <use stroke="#2D9FD8" stroke-width="2" mask="url(#b)" xlink:href="#a"/>
+    <path fill="#2D9FD8" d="M7,3.00800862 C9.09023405,3.13960661 10.7448145,4.87657932 10.7448145,7 C10.7448145,9.209139 8.95395346,11 6.74481446,11 C5.4560962,11 4.30972054,10.3905589 3.57817301,9.44416214 L7,7 L7,3.00800862 Z"/>
+  </g>
+</svg>
diff --git a/app/views/shared/icons/_icon_status_success.svg b/app/views/shared/icons/_icon_status_success.svg
new file mode 100644
index 0000000000000000000000000000000000000000..260eab013a3662c757ae9735e86e8f7a702cbc45
--- /dev/null
+++ b/app/views/shared/icons/_icon_status_success.svg
@@ -0,0 +1,15 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <defs>
+    <circle id="a" cx="7" cy="7" r="7"/>
+    <mask id="b" width="14" height="14" x="0" y="0" fill="white">
+      <use xlink:href="#a"/>
+    </mask>
+  </defs>
+  <g fill="none" fill-rule="evenodd">
+    <use stroke="#31AF64" stroke-width="2" mask="url(#b)" xlink:href="#a"/>
+    <g fill="#31AF64" transform="rotate(45 -.13 10.953)">
+      <rect width="1" height="5" x="2" rx=".3"/>
+      <rect width="3" height="1" y="4" rx=".3"/>
+    </g>
+  </g>
+</svg>
diff --git a/app/views/shared/icons/_icon_status_warning.svg b/app/views/shared/icons/_icon_status_warning.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d47e7a1c93f20bfc8193998f265d88000d5cfb80
--- /dev/null
+++ b/app/views/shared/icons/_icon_status_warning.svg
@@ -0,0 +1,15 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <defs>
+    <circle id="a" cx="7" cy="7" r="7"/>
+    <mask id="b" width="14" height="14" x="0" y="0" fill="white">
+      <use xlink:href="#a"/>
+    </mask>
+  </defs>
+  <g fill="none" fill-rule="evenodd">
+    <g fill="#FF8A24" transform="translate(6 3)">
+      <rect width="2" height="5" rx=".5"/>
+      <rect width="2" height="2" y="6" rx=".5"/>
+    </g>
+    <use stroke="#FF8A24" stroke-width="2" mask="url(#b)" xlink:href="#a"/>
+  </g>
+</svg>
diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml
index 094d6636c665e91c4d87b12b5293d89eb0b48090..0b7fa8c7d06d34a5cd7aa36683aedd4aae4d6248 100644
--- a/app/views/shared/issuable/_filter.html.haml
+++ b/app/views/shared/issuable/_filter.html.haml
@@ -44,9 +44,15 @@
               placeholder: "Search authors", data: { first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: @project.id, field_name: "update[assignee_id]" } })
           .filter-item.inline
             = dropdown_tag("Milestone", options: { title: "Assign milestone", toggle_class: 'js-milestone-select js-extra-options js-filter-submit js-filter-bulk-update', filter: true, dropdown_class: "dropdown-menu-selectable dropdown-menu-milestone", placeholder: "Search milestones", data: { show_no: true, field_name: "update[milestone_id]", project_id: @project.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :json), use_id: true } })
-
           .filter-item.inline.labels-filter
             = render "shared/issuable/label_dropdown", classes: ['js-filter-bulk-update', 'js-multiselect'], show_create: false, show_footer: false, extra_options: false, filter_submit: false, show_footer: false, data_options: { persist_when_hide: "true", field_name: "update[label_ids][]", show_no: false, show_any: false, use_id: true }
+          .filter-item.inline
+            = dropdown_tag("Subscription", options: { toggle_class: "js-subscription-event", title: "Change subscription", dropdown_class: "dropdown-menu-selectable", data: { field_name: "update[subscription_event]" } } ) do
+              %ul
+                %li
+                  %a{href: "#", data: {id: "subscribe"}} Subscribe
+                %li
+                  %a{href: "#", data: {id: "unsubscribe"}} Unsubscribe
 
           = hidden_field_tag 'update[issues_ids]', []
           = hidden_field_tag :state_event, params[:state_event]
@@ -63,6 +69,7 @@
   new LabelsSelect();
   new MilestoneSelect();
   new IssueStatusSelect();
+  new SubscriptionSelect();
   $('form.filter-form').on('submit', function (event) {
     event.preventDefault();
     Turbolinks.visit(this.action + '&' + $(this).serialize());
diff --git a/app/workers/project_export_worker.rb b/app/workers/project_export_worker.rb
index 39f6037e0777ea2cd4c6eb49d2c015a53c97c61f..615311e63f50efaef365bbf8e028b49a669b34ab 100644
--- a/app/workers/project_export_worker.rb
+++ b/app/workers/project_export_worker.rb
@@ -1,7 +1,7 @@
 class ProjectExportWorker
   include Sidekiq::Worker
 
-  sidekiq_options queue: :gitlab_shell, retry: true
+  sidekiq_options queue: :gitlab_shell, retry: 3
 
   def perform(current_user_id, project_id)
     current_user = User.find(current_user_id)
diff --git a/config/application.rb b/config/application.rb
index 5f7b6a3c049467e62001965f6639782dcc59daa7..50cc4235eda8ffde01f04d0c772c15d563210b86 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -76,7 +76,7 @@ module Gitlab
 
     # Enable the asset pipeline
     config.assets.enabled = true
-    config.assets.paths << Gemojione.index.images_path
+    config.assets.paths << Gemojione.images_path
     config.assets.precompile << "*.png"
     config.assets.precompile << "print.css"
     config.assets.precompile << "notify.css"
diff --git a/config/initializers/relative_naming_ci_namespace.rb b/config/initializers/relative_naming_ci_namespace.rb
new file mode 100644
index 0000000000000000000000000000000000000000..59abe1b9b91984a2b68058eff8f7da8d34299a93
--- /dev/null
+++ b/config/initializers/relative_naming_ci_namespace.rb
@@ -0,0 +1,16 @@
+# Description: https://coderwall.com/p/heed_q/rails-routing-and-namespaced-models
+#
+# This allows us to use CI ActiveRecord objects in all routes and use it:
+# - [project.namespace, project, build]
+#
+# instead of:
+# - namespace_project_build_path(project.namespace, project, build)
+#
+# Without that, Ci:: namespace is used for resolving routes:
+# - namespace_project_ci_build_path(project.namespace, project, build)
+
+module Ci
+  def self.use_relative_model_naming?
+    true
+  end
+end
diff --git a/config/initializers/secure_headers.rb b/config/initializers/secure_headers.rb
new file mode 100644
index 0000000000000000000000000000000000000000..253e3cf74109b0ad7682ab656c317067768e7c2c
--- /dev/null
+++ b/config/initializers/secure_headers.rb
@@ -0,0 +1,99 @@
+# CSP headers have to have single quotes, so failures relating to quotes
+# inside Ruby string arrays are irrelevant.
+# rubocop:disable Lint/PercentStringArray
+require 'gitlab/current_settings'
+include Gitlab::CurrentSettings
+
+CSP_REPORT_URI = ''
+
+# Content Security Policy Headers
+# For more information on CSP see:
+# - https://gitlab.com/gitlab-org/gitlab-ce/issues/18231
+# - https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives
+SecureHeaders::Configuration.default do |config|
+  # Mark all cookies as "Secure", "HttpOnly", and "SameSite=Strict".
+  config.cookies = {
+    secure: true,
+    httponly: true,
+    samesite: {
+      strict: true 
+    }
+  }
+  config.x_content_type_options = "nosniff"
+  config.x_xss_protection = "1; mode=block"
+  config.x_download_options = "noopen"
+  config.x_permitted_cross_domain_policies = "none"
+  config.referrer_policy = "origin-when-cross-origin"
+  config.csp = {
+    # "Meta" values.
+    report_only: true,
+    preserve_schemes: true,
+
+    # "Directive" values.
+    # Default source allows nothing, more permissive values are set per-policy.
+    default_src: %w('none'),
+    # (Deprecated) Don't allow iframes.
+    frame_src: %w('none'),
+    # Only allow XMLHTTPRequests from the GitLab instance itself.
+    connect_src: %w('self'),
+    # Only load local fonts.
+    font_src: %w('self'),
+    # Load local images, any external image available over HTTPS.
+    img_src: %w(* 'self' data:),
+    # Audio and video can't be played on GitLab currently, so it's disabled.
+    media_src: %w('none'),
+    # Don't allow <object>, <embed>, or <applet> elements.
+    object_src: %w('none'),
+    # Allow local scripts and inline scripts.
+    script_src: %w('unsafe-inline' 'unsafe-eval' 'self'),
+    # Allow local stylesheets and inline styles.
+    style_src: %w('unsafe-inline' 'self'),
+    # The URIs that a user agent may use as the document base URL.
+    base_uri: %w('self'),
+    # Only allow local iframes and service workers
+    child_src: %w('self'),
+    # Only submit form information to the GitLab instance.
+    form_action: %w('self'),
+    # Disallow any parents from embedding a page in an iframe.
+    frame_ancestors: %w('none'),
+    # Don't allow any plugins (Flash, Shockwave, etc.)
+    plugin_types: %w(),
+    # Blocks all mixed (HTTP) content.
+    block_all_mixed_content: true,
+    # Upgrades insecure requests to HTTPS when possible.
+    upgrade_insecure_requests: true
+  }
+
+  config.csp[:report_uri] = %W(#{CSP_REPORT_URI})
+
+  # Allow Bootstrap Linter in development mode.
+  if Rails.env.development?
+    config.csp[:script_src] << "maxcdn.bootstrapcdn.com"
+  end
+
+  # reCAPTCHA
+  if current_application_settings.recaptcha_enabled
+    config.csp[:script_src] << "https://www.google.com/recaptcha/"
+    config.csp[:script_src] << "https://www.gstatic.com/recaptcha/"
+    config.csp[:frame_src] << "https://www.google.com/recaptcha/"
+    config.x_frame_options = "SAMEORIGIN"
+  end
+
+  # Gravatar
+  if current_application_settings.gravatar_enabled?
+    config.csp[:img_src] << "www.gravatar.com"
+    config.csp[:img_src] << "secure.gravatar.com"
+    config.csp[:img_src] << Gitlab.config.gravatar.host
+  end
+
+  # Piwik
+  if Gitlab.config.extra.has_key?('piwik_url') && Gitlab.config.extra.has_key?('piwik_site_id')
+    config.csp[:script_src] << Gitlab.config.extra.piwik_url
+    config.csp[:img_src] << Gitlab.config.extra.piwik_url
+  end
+
+  # Google Analytics
+  if Gitlab.config.extra.has_key?('google_analytics_id')
+    config.csp[:script_src] << "https://www.google-analytics.com"
+  end
+end
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index 593c14a289fa4b831a907522a038d669fa76827b..b40fd81ff96559cd12cd16c9a2ccf5153f357c63 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -13,7 +13,14 @@ Sidekiq.configure_server do |config|
   # UGLY Hack to get nested hash from settingslogic
   cron_jobs = JSON.parse(Gitlab.config.cron_jobs.to_json)
   # UGLY hack: Settingslogic doesn't allow 'class' key
-  cron_jobs.each { |k, v| cron_jobs[k]['class'] = cron_jobs[k].delete('job_class') }
+  cron_jobs_required_keys = %w(job_class cron)
+  cron_jobs.each do |k, v|
+    if cron_jobs[k] && cron_jobs_required_keys.all? { |s| cron_jobs[k].key?(s) }
+      cron_jobs[k]['class'] = cron_jobs[k].delete('job_class')
+    else
+      raise("Invalid cron_jobs config key: '#{k}'. Check your gitlab config file.")
+    end
+  end
   Sidekiq::Cron::Job.load_from_hash! cron_jobs
 
   # Database pool should be at least `sidekiq_concurrency` + 2
diff --git a/config/routes.rb b/config/routes.rb
index 3160fd767b84a43baa42b8b6a8e5c30faff18f50..2a9fe30b0e6a3b72884f0ffb62580a127eb2b0ac 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -89,11 +89,10 @@ Rails.application.routes.draw do
   mount Grack::AuthSpawner, at: '/', constraints: lambda { |request| /[-\/\w\.]+\.git\/(info\/lfs|gitlab-lfs)/.match(request.path_info) }, via: [:get, :post, :put]
 
   # Help
-  
-  get 'help'                  => 'help#index'
-  get 'help/*path'            => 'help#show', as: :help_page
-  get 'help/shortcuts'
-  get 'help/ui' => 'help#ui'
+  get 'help'           => 'help#index'
+  get 'help/shortcuts' => 'help#shortcuts'
+  get 'help/ui'        => 'help#ui'
+  get 'help/*path'     => 'help#show', as: :help_page
 
   #
   # Global snippets
@@ -750,6 +749,7 @@ Rails.application.routes.draw do
             get :status
             post :cancel
             post :retry
+            post :play
             post :erase
             get :trace
             get :raw
diff --git a/db/fixtures/development/14_builds.rb b/db/fixtures/development/14_builds.rb
index 51ff451eb4c0280570dc6657b4a21bffd84bc6fe..124704cb45157574822bef247b469bbbb72c6235 100644
--- a/db/fixtures/development/14_builds.rb
+++ b/db/fixtures/development/14_builds.rb
@@ -1,13 +1,34 @@
 class Gitlab::Seeder::Builds
+  STAGES = %w[build notify_build test notify_test deploy notify_deploy]
+  
   def initialize(project)
     @project = project
   end
 
   def seed!
-    ci_commits.each do |ci_commit|
+    pipelines.each do |pipeline|
       begin
-        build_create!(ci_commit, name: 'test build 1')
-        build_create!(ci_commit, status: 'success', name: 'test build 2')
+        build_create!(pipeline, name: 'build:linux', stage: 'build')
+        build_create!(pipeline, name: 'build:osx', stage: 'build')
+
+        build_create!(pipeline, name: 'slack post build', stage: 'notify_build')
+
+        build_create!(pipeline, name: 'rspec:linux', stage: 'test')
+        build_create!(pipeline, name: 'rspec:windows', stage: 'test')
+        build_create!(pipeline, name: 'rspec:windows', stage: 'test')
+        build_create!(pipeline, name: 'rspec:osx', stage: 'test')
+        build_create!(pipeline, name: 'spinach:linux', stage: 'test')
+        build_create!(pipeline, name: 'spinach:osx', stage: 'test')
+        build_create!(pipeline, name: 'cucumber:linux', stage: 'test')
+        build_create!(pipeline, name: 'cucumber:osx', stage: 'test')
+
+        build_create!(pipeline, name: 'slack post test', stage: 'notify_test')
+
+        build_create!(pipeline, name: 'staging', stage: 'deploy', environment: 'staging')
+        build_create!(pipeline, name: 'production', stage: 'deploy', environment: 'production', when: 'manual')
+
+        commit_status_create!(pipeline, name: 'jenkins')
+
         print '.'
       rescue ActiveRecord::RecordInvalid
         print 'F'
@@ -15,8 +36,8 @@ class Gitlab::Seeder::Builds
     end
   end
 
-  def ci_commits
-    commits = @project.repository.commits('master', nil, 5)
+  def pipelines
+    commits = @project.repository.commits('master', limit: 5)
     commits_sha = commits.map { |commit| commit.raw.id }
     commits_sha.map do |sha|
       @project.ensure_pipeline(sha, 'master')
@@ -25,11 +46,11 @@ class Gitlab::Seeder::Builds
     []
   end
 
-  def build_create!(ci_commit, opts = {})
-    attributes = build_attributes_for(ci_commit).merge(opts)
+  def build_create!(pipeline, opts = {})
+    attributes = build_attributes_for(pipeline, opts)
     build = Ci::Build.new(attributes)
 
-    if %w(success failed).include?(build.status)
+    if opts[:name].start_with?('build')
       artifacts_cache_file(artifacts_archive_path) do |file|
         build.artifacts_file = file
       end
@@ -40,19 +61,28 @@ class Gitlab::Seeder::Builds
     end
 
     build.save!
+    build.update(status: build_status)
 
     if %w(running success failed).include?(build.status)
       # We need to set build trace after saving a build (id required)
       build.trace = FFaker::Lorem.paragraphs(6).join("\n\n")
     end
   end
+  
+  def commit_status_create!(pipeline, opts = {})
+    attributes = commit_status_attributes_for(pipeline, opts)
+    GenericCommitStatus.create(attributes)
+  end
+  
+  def commit_status_attributes_for(pipeline, opts)
+    { name: 'test build', stage: 'test', stage_idx: stage_index(opts[:stage]),
+      ref: 'master', user: build_user, project: @project, pipeline: pipeline,
+      created_at: Time.now, updated_at: Time.now
+    }.merge(opts)
+  end
 
-  def build_attributes_for(ci_commit)
-    { name: 'test build', commands: "$ build command",
-      stage: 'test', stage_idx: 1, ref: 'master',
-      user_id: build_user, gl_project_id: @project.id,
-      status: build_status, commit_id: ci_commit.id,
-      created_at: Time.now, updated_at: Time.now }
+  def build_attributes_for(pipeline, opts)
+    commit_status_attributes_for(pipeline, opts).merge(commands: '$ build command')
   end
 
   def build_user
@@ -63,13 +93,16 @@ class Gitlab::Seeder::Builds
     Ci::Build::AVAILABLE_STATUSES.sample
   end
 
+  def stage_index(stage)
+    STAGES.index(stage) || 0
+  end
+
   def artifacts_archive_path
     Rails.root + 'spec/fixtures/ci_build_artifacts.zip'
   end
 
   def artifacts_metadata_path
     Rails.root + 'spec/fixtures/ci_build_artifacts_metadata.gz'
-
   end
 
   def artifacts_cache_file(file_path)
diff --git a/db/migrate/20160519203051_add_developers_can_merge_to_protected_branches.rb b/db/migrate/20160519203051_add_developers_can_merge_to_protected_branches.rb
new file mode 100644
index 0000000000000000000000000000000000000000..15ad8e8bcbb6b42184b5a807e9915344c960d53f
--- /dev/null
+++ b/db/migrate/20160519203051_add_developers_can_merge_to_protected_branches.rb
@@ -0,0 +1,9 @@
+class AddDevelopersCanMergeToProtectedBranches < ActiveRecord::Migration
+  include Gitlab::Database::MigrationHelpers
+
+  disable_ddl_transaction!
+
+  def change
+    add_column_with_default :protected_branches, :developers_can_merge, :boolean, default: false, allow_null: false
+  end
+end
diff --git a/db/migrate/20160629025435_add_column_in_progress_merge_commit_sha_to_merge_requests.rb b/db/migrate/20160629025435_add_column_in_progress_merge_commit_sha_to_merge_requests.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7c5f76572ef80e92b6b44f360f10430972396b9d
--- /dev/null
+++ b/db/migrate/20160629025435_add_column_in_progress_merge_commit_sha_to_merge_requests.rb
@@ -0,0 +1,8 @@
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddColumnInProgressMergeCommitShaToMergeRequests < ActiveRecord::Migration
+  def change
+    add_column :merge_requests, :in_progress_merge_commit_sha, :string
+  end
+end
diff --git a/db/migrate/20160715132507_add_user_id_to_pipeline.rb b/db/migrate/20160715132507_add_user_id_to_pipeline.rb
new file mode 100644
index 0000000000000000000000000000000000000000..af0461c4daf9e64749a35e92a1d05943c1c6b5ec
--- /dev/null
+++ b/db/migrate/20160715132507_add_user_id_to_pipeline.rb
@@ -0,0 +1,7 @@
+class AddUserIdToPipeline < ActiveRecord::Migration
+  include Gitlab::Database::MigrationHelpers
+
+  def change
+    add_column :ci_commits, :user_id, :integer
+  end
+end
diff --git a/db/migrate/20160715134306_add_index_for_pipeline_user_id.rb b/db/migrate/20160715134306_add_index_for_pipeline_user_id.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7c991c6d998d29f5f4124eeda64ac67fb1da9911
--- /dev/null
+++ b/db/migrate/20160715134306_add_index_for_pipeline_user_id.rb
@@ -0,0 +1,9 @@
+class AddIndexForPipelineUserId < ActiveRecord::Migration
+  include Gitlab::Database::MigrationHelpers
+
+  disable_ddl_transaction!
+
+  def change
+    add_concurrent_index :ci_commits, :user_id
+  end
+end
diff --git a/db/migrate/20160716115710_add_when_and_yaml_variables_to_ci_builds.rb b/db/migrate/20160716115710_add_when_and_yaml_variables_to_ci_builds.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3e084023a650392fd4e0e7ebb23484483d604163
--- /dev/null
+++ b/db/migrate/20160716115710_add_when_and_yaml_variables_to_ci_builds.rb
@@ -0,0 +1,8 @@
+class AddWhenAndYamlVariablesToCiBuilds < ActiveRecord::Migration
+  include Gitlab::Database::MigrationHelpers
+
+  def change
+    add_column :ci_builds, :when, :string
+    add_column :ci_builds, :yaml_variables, :text
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 8c12898eec9212b12195ce9ab6897623834b6baa..8882377f9f4bad57c26aa0cd7fd56c62ed0a6f47 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20160712171823) do
+ActiveRecord::Schema.define(version: 20160716115710) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -168,6 +168,8 @@ ActiveRecord::Schema.define(version: 20160712171823) do
     t.string   "environment"
     t.datetime "artifacts_expire_at"
     t.integer  "artifacts_size"
+    t.string   "when"
+    t.text     "yaml_variables"
   end
 
   add_index "ci_builds", ["commit_id", "stage_idx", "created_at"], name: "index_ci_builds_on_commit_id_and_stage_idx_and_created_at", using: :btree
@@ -199,6 +201,7 @@ ActiveRecord::Schema.define(version: 20160712171823) do
     t.datetime "started_at"
     t.datetime "finished_at"
     t.integer  "duration"
+    t.integer  "user_id"
   end
 
   add_index "ci_commits", ["gl_project_id", "sha"], name: "index_ci_commits_on_gl_project_id_and_sha", using: :btree
@@ -210,6 +213,7 @@ ActiveRecord::Schema.define(version: 20160712171823) do
   add_index "ci_commits", ["project_id"], name: "index_ci_commits_on_project_id", using: :btree
   add_index "ci_commits", ["sha"], name: "index_ci_commits_on_sha", using: :btree
   add_index "ci_commits", ["status"], name: "index_ci_commits_on_status", using: :btree
+  add_index "ci_commits", ["user_id"], name: "index_ci_commits_on_user_id", using: :btree
 
   create_table "ci_events", force: :cascade do |t|
     t.integer  "project_id"
@@ -624,8 +628,8 @@ ActiveRecord::Schema.define(version: 20160712171823) do
     t.integer  "merge_user_id"
     t.string   "merge_commit_sha"
     t.datetime "deleted_at"
+    t.string   "in_progress_merge_commit_sha"
   end
-
   add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree
   add_index "merge_requests", ["author_id"], name: "index_merge_requests_on_author_id", using: :btree
   add_index "merge_requests", ["created_at", "id"], name: "index_merge_requests_on_created_at_and_id", using: :btree
@@ -858,11 +862,12 @@ ActiveRecord::Schema.define(version: 20160712171823) do
   add_index "projects", ["visibility_level"], name: "index_projects_on_visibility_level", using: :btree
 
   create_table "protected_branches", force: :cascade do |t|
-    t.integer  "project_id",                          null: false
-    t.string   "name",                                null: false
+    t.integer  "project_id",                           null: false
+    t.string   "name",                                 null: false
     t.datetime "created_at"
     t.datetime "updated_at"
-    t.boolean  "developers_can_push", default: false, null: false
+    t.boolean  "developers_can_push",  default: false, null: false
+    t.boolean  "developers_can_merge", default: false, null: false
   end
 
   add_index "protected_branches", ["project_id"], name: "index_protected_branches_on_project_id", using: :btree
diff --git a/doc/api/branches.md b/doc/api/branches.md
index abc4732c395584d2ea88ecf3a4a9ef56238bd64c..dbe8306c66f42b392419a0d74451ce4af8558a2b 100644
--- a/doc/api/branches.md
+++ b/doc/api/branches.md
@@ -23,6 +23,8 @@ Example response:
   {
     "name": "master",
     "protected": true,
+    "developers_can_push": false,
+    "developers_can_merge": false,
     "commit": {
       "author_email": "john@example.com",
       "author_name": "John Smith",
@@ -64,6 +66,8 @@ Example response:
 {
   "name": "master",
   "protected": true,
+  "developers_can_push": false,
+  "developers_can_merge": false,
   "commit": {
     "author_email": "john@example.com",
     "author_name": "John Smith",
@@ -91,13 +95,15 @@ PUT /projects/:id/repository/branches/:branch/protect
 ```
 
 ```bash
-curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/5/repository/branches/master/protect
+curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/5/repository/branches/master/protect?developers_can_push=true&developers_can_merge=true
 ```
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
 | `id` | integer | yes | The ID of a project |
 | `branch` | string | yes | The name of the branch |
+| `developers_can_push` | boolean | no | Flag if developers can push to the branch |
+| `developers_can_merge` | boolean | no | Flag if developers can merge to the branch |
 
 Example response:
 
@@ -117,7 +123,9 @@ Example response:
     ]
   },
   "name": "master",
-  "protected": true
+  "protected": true,
+  "developers_can_push": true,
+  "developers_can_merge": true
 }
 ```
 
@@ -158,7 +166,9 @@ Example response:
     ]
   },
   "name": "master",
-  "protected": false
+  "protected": false,
+  "developers_can_push": false,
+  "developers_can_merge": false
 }
 ```
 
@@ -196,7 +206,9 @@ Example response:
     ]
   },
   "name": "newbranch",
-  "protected": false
+  "protected": false,
+  "developers_can_push": false,
+  "developers_can_merge": false
 }
 ```
 
diff --git a/doc/api/issues.md b/doc/api/issues.md
index 3ced787b23e7cadf3b240a69b7787f15a0c45a83..419fb8f85d8ace0393e8f123e7c1ce77735c34d5 100644
--- a/doc/api/issues.md
+++ b/doc/api/issues.md
@@ -78,7 +78,8 @@ Example response:
       "iid" : 6,
       "labels" : [],
       "subscribed" : false,
-      "user_notes_count": 1
+      "user_notes_count": 1,
+      "due_date": "2016-07-22"
    }
 ]
 ```
@@ -154,7 +155,8 @@ Example response:
       "updated_at" : "2016-01-04T15:31:46.176Z",
       "created_at" : "2016-01-04T15:31:46.176Z",
       "subscribed" : false,
-      "user_notes_count": 1
+      "user_notes_count": 1,
+      "due_date": null
    }
 ]
 ```
@@ -232,7 +234,8 @@ Example response:
       "updated_at" : "2016-01-04T15:31:46.176Z",
       "created_at" : "2016-01-04T15:31:46.176Z",
       "subscribed" : false,
-      "user_notes_count": 1
+      "user_notes_count": 1,
+      "due_date": "2016-07-22"
    }
 ]
 ```
@@ -295,7 +298,8 @@ Example response:
    "updated_at" : "2016-01-04T15:31:46.176Z",
    "created_at" : "2016-01-04T15:31:46.176Z",
    "subscribed": false,
-   "user_notes_count": 1
+   "user_notes_count": 1,
+   "due_date": null
 }
 ```
 
@@ -320,6 +324,7 @@ POST /projects/:id/issues
 | `milestone_id`  | integer | no  | The ID of a milestone to assign issue |
 | `labels`        | string  | no  | Comma-separated label names for an issue  |
 | `created_at`    | string  | no  | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` |
+| `due_date`      | string  | no   | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` |
 
 ```bash
 curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/4/issues?title=Issues%20with%20auth&labels=bug
@@ -351,7 +356,8 @@ Example response:
    "updated_at" : "2016-01-07T12:44:33.959Z",
    "milestone" : null,
    "subscribed" : true,
-   "user_notes_count": 0
+   "user_notes_count": 0,
+   "due_date": null
 }
 ```
 
@@ -379,6 +385,7 @@ PUT /projects/:id/issues/:issue_id
 | `labels`        | string  | no  | Comma-separated label names for an issue  |
 | `state_event`   | string  | no  | The state event of an issue. Set `close` to close the issue and `reopen` to reopen it |
 | `updated_at`    | string  | no  | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` |
+| `due_date`      | string  | no   | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` |
 
 ```bash
 curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/4/issues/85?state_event=close
@@ -410,7 +417,8 @@ Example response:
    "assignee" : null,
    "milestone" : null,
    "subscribed" : true,
-   "user_notes_count": 0
+   "user_notes_count": 0,
+   "due_date": "2016-07-22"
 }
 ```
 
@@ -487,7 +495,8 @@ Example response:
     "state": "active",
     "avatar_url": "http://www.gravatar.com/avatar/7a190fecbaa68212a4b68aeb6e3acd10?s=80&d=identicon",
     "web_url": "https://gitlab.example.com/u/solon.cremin"
-  }
+  },
+  "due_date": null
 }
 ```
 
@@ -541,7 +550,8 @@ Example response:
     "state": "active",
     "avatar_url": "http://www.gravatar.com/avatar/7a190fecbaa68212a4b68aeb6e3acd10?s=80&d=identicon",
     "web_url": "https://gitlab.example.com/u/solon.cremin"
-  }
+  },
+  "due_date": null
 }
 ```
 
@@ -596,7 +606,8 @@ Example response:
     "avatar_url": "http://www.gravatar.com/avatar/5224fd70153710e92fb8bcf79ac29d67?s=80&d=identicon",
     "web_url": "https://gitlab.example.com/u/orville"
   },
-  "subscribed": false
+  "subscribed": false,
+  "due_date": null
 }
 ```
 
diff --git a/doc/api/todos.md b/doc/api/todos.md
index 23f6e35f2a4879111ae45a686b2f13446b6006bd..937c71de386db95859085bd95d42fbfdefdf3c3b 100644
--- a/doc/api/todos.md
+++ b/doc/api/todos.md
@@ -277,8 +277,7 @@ Example Response:
 
 ## Mark all todos as done
 
-Marks all pending todos for the current user as done. All todos marked as done
-are returned in the response.
+Marks all pending todos for the current user as done. It returns the number of marked todos.
 
 ```
 DELETE /todos
@@ -291,154 +290,7 @@ curl -X DELETE -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.c
 Example Response:
 
 ```json
-[
-  {
-    "id": 102,
-    "project": {
-      "id": 2,
-      "name": "Gitlab Ce",
-      "name_with_namespace": "Gitlab Org / Gitlab Ce",
-      "path": "gitlab-ce",
-      "path_with_namespace": "gitlab-org/gitlab-ce"
-    },
-    "author": {
-      "name": "Administrator",
-      "username": "root",
-      "id": 1,
-      "state": "active",
-      "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
-      "web_url": "https://gitlab.example.com/u/root"
-    },
-    "action_name": "marked",
-    "target_type": "MergeRequest",
-    "target": {
-      "id": 34,
-      "iid": 7,
-      "project_id": 2,
-      "title": "Dolores in voluptatem tenetur praesentium omnis repellendus voluptatem quaerat.",
-      "description": "Et ea et omnis illum cupiditate. Dolor aspernatur tenetur ducimus facilis est nihil. Quo esse cupiditate molestiae illo corrupti qui quidem dolor.",
-      "state": "opened",
-      "created_at": "2016-06-17T07:49:24.419Z",
-      "updated_at": "2016-06-17T07:52:43.484Z",
-      "target_branch": "tutorials_git_tricks",
-      "source_branch": "DNSBL_docs",
-      "upvotes": 0,
-      "downvotes": 0,
-      "author": {
-        "name": "Maxie Medhurst",
-        "username": "craig_rutherford",
-        "id": 12,
-        "state": "active",
-        "avatar_url": "http://www.gravatar.com/avatar/a0d477b3ea21970ce6ffcbb817b0b435?s=80&d=identicon",
-        "web_url": "https://gitlab.example.com/u/craig_rutherford"
-      },
-      "assignee": {
-        "name": "Administrator",
-        "username": "root",
-        "id": 1,
-        "state": "active",
-        "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
-        "web_url": "https://gitlab.example.com/u/root"
-      },
-      "source_project_id": 2,
-      "target_project_id": 2,
-      "labels": [],
-      "work_in_progress": false,
-      "milestone": {
-        "id": 32,
-        "iid": 2,
-        "project_id": 2,
-        "title": "v1.0",
-        "description": "Assumenda placeat ea voluptatem voluptate qui.",
-        "state": "active",
-        "created_at": "2016-06-17T07:47:34.163Z",
-        "updated_at": "2016-06-17T07:47:34.163Z",
-        "due_date": null
-      },
-      "merge_when_build_succeeds": false,
-      "merge_status": "cannot_be_merged",
-      "subscribed": true,
-      "user_notes_count": 7
-    },
-    "target_url": "https://gitlab.example.com/gitlab-org/gitlab-ce/merge_requests/7",
-    "body": "Dolores in voluptatem tenetur praesentium omnis repellendus voluptatem quaerat.",
-    "state": "done",
-    "created_at": "2016-06-17T07:52:35.225Z"
-  },
-  {
-    "id": 98,
-    "project": {
-      "id": 2,
-      "name": "Gitlab Ce",
-      "name_with_namespace": "Gitlab Org / Gitlab Ce",
-      "path": "gitlab-ce",
-      "path_with_namespace": "gitlab-org/gitlab-ce"
-    },
-    "author": {
-      "name": "Maxie Medhurst",
-      "username": "craig_rutherford",
-      "id": 12,
-      "state": "active",
-      "avatar_url": "http://www.gravatar.com/avatar/a0d477b3ea21970ce6ffcbb817b0b435?s=80&d=identicon",
-      "web_url": "https://gitlab.example.com/u/craig_rutherford"
-    },
-    "action_name": "assigned",
-    "target_type": "MergeRequest",
-    "target": {
-      "id": 34,
-      "iid": 7,
-      "project_id": 2,
-      "title": "Dolores in voluptatem tenetur praesentium omnis repellendus voluptatem quaerat.",
-      "description": "Et ea et omnis illum cupiditate. Dolor aspernatur tenetur ducimus facilis est nihil. Quo esse cupiditate molestiae illo corrupti qui quidem dolor.",
-      "state": "opened",
-      "created_at": "2016-06-17T07:49:24.419Z",
-      "updated_at": "2016-06-17T07:52:43.484Z",
-      "target_branch": "tutorials_git_tricks",
-      "source_branch": "DNSBL_docs",
-      "upvotes": 0,
-      "downvotes": 0,
-      "author": {
-        "name": "Maxie Medhurst",
-        "username": "craig_rutherford",
-        "id": 12,
-        "state": "active",
-        "avatar_url": "http://www.gravatar.com/avatar/a0d477b3ea21970ce6ffcbb817b0b435?s=80&d=identicon",
-        "web_url": "https://gitlab.example.com/u/craig_rutherford"
-      },
-      "assignee": {
-        "name": "Administrator",
-        "username": "root",
-        "id": 1,
-        "state": "active",
-        "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
-        "web_url": "https://gitlab.example.com/u/root"
-      },
-      "source_project_id": 2,
-      "target_project_id": 2,
-      "labels": [],
-      "work_in_progress": false,
-      "milestone": {
-        "id": 32,
-        "iid": 2,
-        "project_id": 2,
-        "title": "v1.0",
-        "description": "Assumenda placeat ea voluptatem voluptate qui.",
-        "state": "active",
-        "created_at": "2016-06-17T07:47:34.163Z",
-        "updated_at": "2016-06-17T07:47:34.163Z",
-        "due_date": null
-      },
-      "merge_when_build_succeeds": false,
-      "merge_status": "cannot_be_merged",
-      "subscribed": true,
-      "user_notes_count": 7
-    },
-    "target_url": "https://gitlab.example.com/gitlab-org/gitlab-ce/merge_requests/7",
-    "body": "Dolores in voluptatem tenetur praesentium omnis repellendus voluptatem quaerat.",
-    "state": "done",
-    "created_at": "2016-06-17T07:49:24.624Z"
-  },
-]
+3
 ```
 
 [ce-3188]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/3188
diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md
index 50fa263f6930da0014f7113b90bfb157f832ff77..31b4fd2669e5de58b1a908aa57650a1c3813760e 100644
--- a/doc/ci/yaml/README.md
+++ b/doc/ci/yaml/README.md
@@ -485,6 +485,7 @@ failure.
 1. `on_failure` - execute build only when at least one build from prior stages
     fails.
 1. `always` - execute build regardless of the status of builds from prior stages.
+1. `manual` - execute build manually.
 
 For example:
 
@@ -516,6 +517,7 @@ deploy_job:
   stage: deploy
   script:
   - make deploy
+  when: manual
 
 cleanup_job:
   stage: cleanup
@@ -527,7 +529,20 @@ cleanup_job:
 The above script will:
 
 1. Execute `cleanup_build_job` only when `build_job` fails
-2. Always execute `cleanup_job` as the last step in pipeline.
+2. Always execute `cleanup_job` as the last step in pipeline
+3. Allow you to manually execute `deploy_job` from GitLab
+
+#### Manual actions
+
+>**Note:**
+Introduced in GitLab 8.10.
+
+Manual actions are special type of jobs that are not executed automatically in pipeline.
+They need to be explicitly started by the user. 
+Manual actions can be started from pipelines, builds, environments and deployments views.
+You can execute the same manual action multiple times.
+
+Example usage of manual actions is deployment, ex. promote a staging environment to production.
 
 ### environment
 
@@ -757,12 +772,13 @@ Introduced in GitLab 8.6 and GitLab Runner v1.1.1.
 This feature should be used in conjunction with [`artifacts`](#artifacts) and
 allows you to define the artifacts to pass between different builds.
 
-Note that `artifacts` from previous [stages](#stages) are passed by default.
+Note that `artifacts` from all previous [stages](#stages) are passed by default.
 
 To use this feature, define `dependencies` in context of the job and pass
 a list of all previous builds from which the artifacts should be downloaded.
 You can only define builds from stages that are executed before the current one.
 An error will be shown if you define builds from the current stage or next ones.
+Defining an empty array will skip downloading any artifacts for that job.
 
 ---
 
diff --git a/doc/development/rake_tasks.md b/doc/development/rake_tasks.md
index 41685c7ee416beb866ae679d1fd2eeebfbe54757..8852dbcb19eab4ca018df70b83a3fe5e207c5acf 100644
--- a/doc/development/rake_tasks.md
+++ b/doc/development/rake_tasks.md
@@ -53,3 +53,8 @@ Generating a sprite file containing all the Emoji can be done by running:
 ```
 bundle exec rake gemojione:sprite
 ```
+
+If new emoji are added, the spritesheet may change size. To compensate for
+such changes, first generate the `emoji.png` spritesheet with the above Rake
+task, then check the dimensions of the new spritesheet and update the
+`SPRITESHEET_WIDTH` and `SPRITESHEET_HEIGHT` constants accordingly.
diff --git a/doc/raketasks/maintenance.md b/doc/raketasks/maintenance.md
index d9dce2af480ca40ab9d3c1f6b5a8e89087e94acf..315cb56a089b6aa0aff79bf3a3c58e7a6e7aff1f 100644
--- a/doc/raketasks/maintenance.md
+++ b/doc/raketasks/maintenance.md
@@ -167,3 +167,22 @@ of those assets. Unless you are modifying the JavaScript / CSS code on your
 production machine after installing the package, there should be no reason to redo
 rake assets:precompile on the production machine. If you suspect that assets
 have been corrupted, you should reinstall the omnibus package.
+
+## Tracking Deployments
+
+GitLab provides a Rake task that lets you track deployments in GitLab
+Performance Monitoring. This Rake task simply stores the current GitLab version
+in the GitLab Performance Monitoring database.
+
+For Omnibus-packages:
+
+```
+sudo gitlab-rake gitlab:track_deployment
+```
+
+For installations from source:
+
+```
+cd /home/git/gitlab
+sudo -u git -H bundle exec rake gitlab:track_deployment RAILS_ENV=production
+```
diff --git a/fixtures/emojis/aliases.json b/fixtures/emojis/aliases.json
index d3831d8045ba50b343901d7452837ef1844ca674..e2f47db0de20bc7bb46faddb2b76a638f0c7c813 100644
--- a/fixtures/emojis/aliases.json
+++ b/fixtures/emojis/aliases.json
@@ -1,16 +1,9 @@
 {
-   "northeast_pointing_airplane":"airplane_northeast",
    "small_airplane":"airplane_small",
-   "up_pointing_small_airplane":"airplane_small_up",
-   "up_pointing_airplane":"airplane_up",
-   "left_anger_bubble":"anger_left",
    "right_anger_bubble":"anger_right",
    "keycap_asterisk":"asterisk",
    "atom_symbol":"atom",
    "ballot_box_with_ballot":"ballot_box",
-   "ballot_box_with_bold_check":"ballot_box_check",
-   "ballot_box_with_script_x":"ballot_box_x",
-   "ballot_script_x":"ballot_x",
    "person_with_ball":"basketball_player",
    "person_with_ball_tone1":"basketball_player_tone1",
    "person_with_ball_tone2":"basketball_player_tone2",
@@ -21,51 +14,65 @@
    "umbrella_on_ground":"beach_umbrella",
    "bellhop_bell":"bellhop",
    "biohazard_sign":"biohazard",
-   "bouquet_of_flowers":"bouquet2",
    "archery":"bow_and_arrow",
-   "bullhorn_with_sound_waves":"bullhorn_waves",
-   "pocket calculator":"calculator",
+   "boxing_gloves":"boxing_glove",
    "spiral_calendar_pad":"calendar_spiral",
+   "call_me_hand":"call_me",
+   "call_me_hand_tone1":"call_me_tone1",
+   "call_me_hand_tone2":"call_me_tone2",
+   "call_me_hand_tone3":"call_me_tone3",
+   "call_me_hand_tone4":"call_me_tone4",
+   "call_me_hand_tone5":"call_me_tone5",
+   "kayak":"canoe",
    "card_file_box":"card_box",
-   "tape_cartridge":"cartridge",
+   "person_doing_cartwheel":"cartwheel",
+   "person_doing_cartwheel_tone1":"cartwheel_tone1",
+   "person_doing_cartwheel_tone2":"cartwheel_tone2",
+   "person_doing_cartwheel_tone3":"cartwheel_tone3",
+   "person_doing_cartwheel_tone4":"cartwheel_tone4",
+   "person_doing_cartwheel_tone5":"cartwheel_tone5",
    "bottle_with_popping_cork":"champagne",
+   "clinking_glass":"champagne_glass",
    "cheese_wedge":"cheese",
    "city_sunrise":"city_sunset",
    "mantlepiece_clock":"clock",
-   "clockwise_right_and_left_semicircle_arrows":"clockwise_arrows",
    "cloud_with_lightning":"cloud_lightning",
    "cloud_with_rain":"cloud_rain",
    "cloud_with_snow":"cloud_snow",
    "cloud_with_tornado":"cloud_tornado",
-   "old_personal_computer":"computer_old",
-   "building_construction":"contruction_site",
+   "clown_face":"clown",
+   "building_construction":"construction_site",
    "couch_and_lamp":"couch",
    "couple_with_heart_mm":"couple_mm",
    "couple_with_heart_ww":"couple_ww",
+   "face_with_cowboy_hat":"cowboy",
    "lower_left_crayon":"crayon",
    "cricket_bat_ball":"cricket",
    "latin_cross":"cross",
-   "heavy_latin_cross":"cross_heavy",
-   "white_latin_cross":"cross_white",
-   "black_skull_and_crossbones":"crossbones",
    "passenger_ship":"cruise_ship",
    "dagger_knife":"dagger",
    "desktop_computer":"desktop",
    "card_index_dividers":"dividers",
-   "document_with_text":"document_text",
    "dove_of_peace":"dove",
+   "drool":"drooling_face",
+   "drum_with_drumsticks":"drum",
    "email":"e-mail",
-   "back_of_envelope":"envelope_back",
-   "flying_envelope":"envelope_flying",
-   "stamped_envelope":"envelope_stamped",
-   "pen_over_stamped_envelope":"envelope_stamped_pen",
-   "white_down_pointing_left_hand_index":"finger_pointing_down",
-   "sideways_white_down_pointing_index":"finger_pointing_down2",
-   "sideways_white_left_pointing_index":"finger_pointing_left",
-   "sideways_white_right_pointing_index":"finger_pointing_right",
-   "sideways_white_up_pointing_index":"finger_pointing_up",
+   "eject_symbol":"eject",
+   "facepalm":"face_palm",
+   "facepalm_tone1":"face_palm_tone1",
+   "facepalm_tone2":"face_palm_tone2",
+   "facepalm_tone3":"face_palm_tone3",
+   "facepalm_tone4":"face_palm_tone4",
+   "facepalm_tone5":"face_palm_tone5",
+   "fencing":"fencer",
+   "hand_with_index_and_middle_finger_crossed":"fingers_crossed",
+   "hand_with_index_and_middle_fingers_crossed_tone1":"fingers_crossed_tone1",
+   "hand_with_index_and_middle_fingers_crossed_tone2":"fingers_crossed_tone2",
+   "hand_with_index_and_middle_fingers_crossed_tone3":"fingers_crossed_tone3",
+   "hand_with_index_and_middle_fingers_crossed_tone4":"fingers_crossed_tone4",
+   "hand_with_index_and_middle_fingers_crossed_tone5":"fingers_crossed_tone5",
    "flame":"fire",
-   "oncoming_fire_engine":"fire_engine_oncoming",
+   "first_place_medal":"first_place",
    "ac":"flag_ac",
    "ad":"flag_ad",
    "ae":"flag_ae",
@@ -326,44 +333,51 @@
    "za":"flag_za",
    "zm":"flag_zm",
    "zw":"flag_zw",
-   "clamshell_mobile_phone":"flip_phone",
-   "black_hard_shell_floppy_disk":"floppy_black",
-   "white_hard_shell_floppy_disk":"floppy_white",
-   "open_folder":"folder_open",
    "fork_and_knife_with_plate":"fork_knife_plate",
+   "fox_face":"fox",
    "frame_with_picture":"frame_photo",
-   "frame_with_tiles":"frame_tiles",
-   "frame_with_an_x":"frame_x",
+   "baguette_bread":"french_bread",
    "anguished":"frowning",
    "white_frowning_face":"frowning2",
+   "goal_net":"goal",
    "hammer_and_pick":"hammer_pick",
    "raised_hand_with_fingers_splayed":"hand_splayed",
-   "reversed_raised_hand_with_fingers_splayed":"hand_splayed_reverse",
    "raised_hand_with_fingers_splayed_tone1":"hand_splayed_tone1",
    "raised_hand_with_fingers_splayed_tone2":"hand_splayed_tone2",
    "raised_hand_with_fingers_splayed_tone3":"hand_splayed_tone3",
    "raised_hand_with_fingers_splayed_tone4":"hand_splayed_tone4",
    "raised_hand_with_fingers_splayed_tone5":"hand_splayed_tone5",
-   "reversed_victory_hand":"hand_victory",
+   "shaking_hands":"handshake",
+   "shaking_hands_tone1":"handshake_tone1",
+   "shaking_hands_tone2":"handshake_tone2",
+   "shaking_hands_tone3":"handshake_tone3",
+   "shaking_hands_tone4":"handshake_tone4",
+   "shaking_hands_tone5":"handshake_tone5",
    "face_with_head_bandage":"head_bandage",
    "heavy_heart_exclamation_mark_ornament":"heart_exclamation",
-   "heart_with_tip_on_the_left":"heart_tip",
    "helmet_with_white_cross":"helmet_with_cross",
    "house_buildings":"homes",
    "hot_dog":"hotdog",
    "derelict_house_building":"house_abandoned",
    "hugging_face":"hugging",
-   "circled_information_source":"info",
    "desert_island":"island",
-   "up_pointing_military_airplane":"jet_up",
+   "juggler":"juggling",
+   "juggler_tone1":"juggling_tone1",
+   "juggler_tone2":"juggling_tone2",
+   "juggler_tone3":"juggling_tone3",
+   "juggler_tone4":"juggling_tone4",
+   "juggler_tone5":"juggling_tone5",
    "old_key":"key2",
-   "wired_keyboard":"keyboard",
-   "keyboard_and_mouse":"keyboard_mouse",
-   "musical_keyboard_with_jacks":"keyboard_with_jacks",
    "couplekiss_mm":"kiss_mm",
    "couplekiss_ww":"kiss_ww",
+   "kiwifruit":"kiwi",
    "satisfied":"laughing",
-   "left_hand_telephone_receiver":"left_receiver",
+   "left_fist":"left_facing_fist",
+   "left_fist_tone1":"left_facing_fist_tone1",
+   "left_fist_tone2":"left_facing_fist_tone2",
+   "left_fist_tone3":"left_facing_fist_tone3",
+   "left_fist_tone4":"left_facing_fist_tone4",
+   "left_fist_tone5":"left_facing_fist_tone5",
    "man_in_business_suit_levitating":"levitate",
    "weight_lifter":"lifter",
    "weight_lifter_tone1":"lifter_tone1",
@@ -371,9 +385,21 @@
    "weight_lifter_tone3":"lifter_tone3",
    "weight_lifter_tone4":"lifter_tone4",
    "weight_lifter_tone5":"lifter_tone5",
-   "light_mark":"light_check_mark",
    "lion":"lion_face",
+   "liar":"lying_face",
+   "male_dancer":"man_dancing",
+   "male_dancer_tone1":"man_dancing_tone1",
+   "male_dancer_tone2":"man_dancing_tone2",
+   "male_dancer_tone3":"man_dancing_tone3",
+   "male_dancer_tone4":"man_dancing_tone4",
+   "male_dancer_tone5":"man_dancing_tone5",
+   "tuxedo_tone1":"man_in_tuxedo_tone1",
+   "tuxedo_tone2":"man_in_tuxedo_tone2",
+   "tuxedo_tone3":"man_in_tuxedo_tone3",
+   "tuxedo_tone4":"man_in_tuxedo_tone4",
+   "tuxedo_tone5":"man_in_tuxedo_tone5",
    "world_map":"map",
+   "karate_uniform":"martial_arts_uniform",
    "sports_medal":"medal",
    "sign_of_the_horns":"metal",
    "sign_of_the_horns_tone1":"metal_tone1",
@@ -388,21 +414,23 @@
    "reversed_hand_with_middle_finger_extended_tone3":"middle_finger_tone3",
    "reversed_hand_with_middle_finger_extended_tone4":"middle_finger_tone4",
    "reversed_hand_with_middle_finger_extended_tone5":"middle_finger_tone5",
+   "glass_of_milk":"milk",
    "money_mouth_face":"money_mouth",
-   "lightning_mood_bubble":"mood_bubble_lightning",
-   "lightning_mood":"mood_lightning",
+   "motorbike":"motor_scooter",
    "racing_motorcycle":"motorcycle",
    "snow_capped_mountain":"mountain_snow",
-   "one_button_mouse":"mouse_one",
    "three_button_mouse":"mouse_three_button",
+   "mother_christmas":"mrs_claus",
+   "mother_christmas_tone1":"mrs_claus_tone1",
+   "mother_christmas_tone2":"mrs_claus_tone2",
+   "mother_christmas_tone3":"mrs_claus_tone3",
+   "mother_christmas_tone4":"mrs_claus_tone4",
+   "mother_christmas_tone5":"mrs_claus_tone5",
+   "sick":"nauseated_face",
    "nerd_face":"nerd",
-   "three_networked_computers":"network",
    "rolled_up_newspaper":"newspaper2",
-   "note_page":"note",
-   "empty_note_page":"note_empty",
-   "note_pad":"notepad",
-   "empty_note_pad":"notepad_empty",
    "spiral_note_pad":"notepad_spiral",
+   "stop_sign":"octagonal_sign",
    "oil_drum":"oil",
    "grandma":"older_woman",
    "grandma_tone1":"older_woman_tone1",
@@ -410,57 +438,66 @@
    "grandma_tone3":"older_woman_tone3",
    "grandma_tone4":"older_woman_tone4",
    "grandma_tone5":"older_woman_tone5",
-   "optical_disc_icon":"optical_disk",
    "lower_left_paintbrush":"paintbrush",
    "linked_paperclips":"paperclips",
    "national_park":"park",
    "double_vertical_bar":"pause_button",
    "peace_symbol":"peace",
+   "shelled_peanut":"peanuts",
    "lower_left_ballpoint_pen":"pen_ballpoint",
    "lower_left_fountain_pen":"pen_fountain",
    "memo":"pencil",
-   "lower_left_pencil":"pencil3",
-   "black_pennant":"pennant_black",
-   "white_pennant":"pennant_white",
    "table_tennis":"ping_pong",
-   "no_piracy":"piracy",
    "worship_symbol":"place_of_worship",
    "shit":"poop",
    "hankey":"poop",
    "poo":"poop",
-   "prohibited_sign":"prohibited",
+   "expecting_woman":"pregnant_woman",
+   "expecting_woman_tone1":"pregnant_woman_tone1",
+   "expecting_woman_tone2":"pregnant_woman_tone2",
+   "expecting_woman_tone3":"pregnant_woman_tone3",
+   "expecting_woman_tone4":"pregnant_woman_tone4",
+   "expecting_woman_tone5":"pregnant_woman_tone5",
    "film_projector":"projector",
    "racing_car":"race_car",
    "radioactive_sign":"radioactive",
    "railroad_track":"railway_track",
-   "right_speaker_with_one_sound_wave":"right_speaker_one",
-   "right_speaker_with_three_sound_waves":"right_speaker_three",
+   "back_of_hand":"raised_back_of_hand",
+   "back_of_hand_tone1":"raised_back_of_hand_tone1",
+   "back_of_hand_tone2":"raised_back_of_hand_tone2",
+   "back_of_hand_tone3":"raised_back_of_hand_tone3",
+   "back_of_hand_tone4":"raised_back_of_hand_tone4",
+   "back_of_hand_tone5":"raised_back_of_hand_tone5",
+   "rhinoceros":"rhino",
+   "right_fist":"right_facing_fist",
+   "right_fist_tone1":"right_facing_fist_tone1",
+   "right_fist_tone2":"right_facing_fist_tone2",
+   "right_fist_tone3":"right_facing_fist_tone3",
+   "right_fist_tone4":"right_facing_fist_tone4",
+   "right_fist_tone5":"right_facing_fist_tone5",
    "robot_face":"robot",
+   "rolling_on_the_floor_laughing":"rofl",
    "face_with_rolling_eyes":"rolling_eyes",
+   "green_salad":"salad",
+   "second_place_medal":"second_place",
+   "paella":"shallow_pan_of_food",
+   "shopping_trolley":"shopping_cart",
    "skeleton":"skull",
    "skull_and_crossbones":"skull_crossbones",
    "slightly_frowning_face":"slight_frown",
    "slightly_smiling_face":"slight_smile",
+   "sneeze":"sneezing_face",
    "speaking_head_in_silhouette":"speaking_head",
-   "left_speech_bubble":"speech_left",
-   "right_speech_bubble":"speech_right",
-   "three_speech_bubbles":"speech_three",
-   "two_speech_bubbles":"speech_two",
    "sleuth_or_spy":"spy",
    "sleuth_or_spy_tone1":"spy_tone1",
    "sleuth_or_spy_tone2":"spy_tone2",
    "sleuth_or_spy_tone3":"spy_tone3",
    "sleuth_or_spy_tone4":"spy_tone4",
    "sleuth_or_spy_tone5":"spy_tone5",
-   "portable_stereo":"stereo",
-   "black_touchtone_telephone":"telephone_black",
-   "white_touchtone_telephone":"telephone_white",
+   "stuffed_pita":"stuffed_flatbread",
    "face_with_thermometer":"thermometer_face",
    "thinking_face":"thinking",
-   "left_thought_bubble":"thought_left",
-   "right_thought_bubble":"thought_right",
-   "reversed_thumbs_down_sign":"thumbs_down_reverse",
-   "reversed_thumbs_up_sign":"thumbs_up_reverse",
+   "third_place_medal":"third_place",
    "-1":"thumbsdown",
    "-1_tone1":"thumbsdown_tone1",
    "-1_tone2":"thumbsdown_tone2",
@@ -479,9 +516,7 @@
    "hammer_and_wrench":"tools",
    "next_track":"track_next",
    "previous_track":"track_previous",
-   "diesel_locomotive":"train_diesel",
-   "triangle_with_rounded_corners":"triangle_round",
-   "turned_ok_hand_sign":"turned_ok_hand",
+   "whisky":"tumbler_glass",
    "unicorn_face":"unicorn",
    "upside_down_face":"upside_down",
    "funeral_urn":"urn",
@@ -494,6 +529,12 @@
    "white_sun_behind_cloud":"white_sun_cloud",
    "white_sun_behind_cloud_with_rain":"white_sun_rain_cloud",
    "white_sun_with_small_cloud":"white_sun_small_cloud",
-   "left_writing_hand":"writing_hand",
+   "wilted_flower":"wilted_rose",
+   "wrestling":"wrestlers",
+   "wrestling_tone1":"wrestlers_tone1",
+   "wrestling_tone2":"wrestlers_tone2",
+   "wrestling_tone3":"wrestlers_tone3",
+   "wrestling_tone4":"wrestlers_tone4",
+   "wrestling_tone5":"wrestlers_tone5",
    "zipper_mouth_face":"zipper_mouth"
 }
diff --git a/fixtures/emojis/digests.json b/fixtures/emojis/digests.json
index 50ee5089d8f9934b2782e0469a19cf1b66f5b021..078d3413f338eaefd3c001e84509ddb8bf3123ff 100644
--- a/fixtures/emojis/digests.json
+++ b/fixtures/emojis/digests.json
@@ -59,16 +59,6 @@
     "unicode": "1F6EB",
     "digest": "5544eace06b8e1b6ea91940e893e013d33d6b166e14e6d128a87f2cd2de88332"
   },
-  {
-    "name": "airplane_northeast",
-    "unicode": "1F6EA",
-    "digest": "fdddc2cd3618ec6661612581b8b93553cb086b0bb197e96aedf1bee8055e7bb4"
-  },
-  {
-    "name": "northeast_pointing_airplane",
-    "unicode": "1F6EA",
-    "digest": "fdddc2cd3618ec6661612581b8b93553cb086b0bb197e96aedf1bee8055e7bb4"
-  },
   {
     "name": "airplane_small",
     "unicode": "1F6E9",
@@ -79,26 +69,6 @@
     "unicode": "1F6E9",
     "digest": "1a2e07abbbe90d05cee7ff8dd52f443d595ccb38959f3089fe016b77e5d6de7d"
   },
-  {
-    "name": "airplane_small_up",
-    "unicode": "1F6E8",
-    "digest": "029752b29a757c087dec60f45ea242e974fc181129e20390d5d4a2f90442091a"
-  },
-  {
-    "name": "up_pointing_small_airplane",
-    "unicode": "1F6E8",
-    "digest": "029752b29a757c087dec60f45ea242e974fc181129e20390d5d4a2f90442091a"
-  },
-  {
-    "name": "airplane_up",
-    "unicode": "1F6E7",
-    "digest": "ec45d4dbfce1f75dc59339417b1dcf5f1e1359cd9d04ff233babf359a3330e77"
-  },
-  {
-    "name": "up_pointing_airplane",
-    "unicode": "1F6E7",
-    "digest": "ec45d4dbfce1f75dc59339417b1dcf5f1e1359cd9d04ff233babf359a3330e77"
-  },
   {
     "name": "alarm_clock",
     "unicode": "23F0",
@@ -164,16 +134,6 @@
     "unicode": "1F4A2",
     "digest": "332493913891aa0eda2743b4bb16c4682400f249998bf34eb292246c9009e17f"
   },
-  {
-    "name": "anger_left",
-    "unicode": "1F5EE",
-    "digest": "f2711991e8b386b2d5b12f296ce20a9b4b00ef91d6d67af2cf4e06abf2faa1dc"
-  },
-  {
-    "name": "left_anger_bubble",
-    "unicode": "1F5EE",
-    "digest": "f2711991e8b386b2d5b12f296ce20a9b4b00ef91d6d67af2cf4e06abf2faa1dc"
-  },
   {
     "name": "anger_right",
     "unicode": "1F5EF",
@@ -324,11 +284,6 @@
     "unicode": "1F69B",
     "digest": "c115e6613ebd718268aa31d265e017138b9fb58bbb8201eb3f40de2380e460aa"
   },
-  {
-    "name": "ascending_notes",
-    "unicode": "1F39C",
-    "digest": "33432042771d456338dda5d98e49322d3600f2cc9049963480c7c38d9de1ef0a"
-  },
   {
     "name": "asterisk",
     "unicode": "002A-20E3",
@@ -364,6 +319,11 @@
     "unicode": "269B",
     "digest": "6b6bb83b00707a314e46ff8eefbda40978a291ec7881caba1b1ee273f49c1368"
   },
+  {
+    "name": "avocado",
+    "unicode": "1F951",
+    "digest": "bc1fb203d63b18985598400925de24050bb192afda1cbf0813f85cb139869eff"
+  },
   {
     "name": "b",
     "unicode": "1F171",
@@ -419,6 +379,11 @@
     "unicode": "1F519",
     "digest": "083e4e48b51092c28efb4532e840e1091b5d4b685c6e0f221aa0228f061cd91e"
   },
+  {
+    "name": "bacon",
+    "unicode": "1F953",
+    "digest": "18ad3817f1f88a69706db5727a58e763dde6c21a2d4f184c3d728c32dc5fa05a"
+  },
   {
     "name": "badminton",
     "unicode": "1F3F8",
@@ -444,41 +409,11 @@
     "unicode": "1F5F3",
     "digest": "4175a56eca5c6458574a681e109b1403fbb143cf27f69ae6c1917650f3e08892"
   },
-  {
-    "name": "ballot_box_check",
-    "unicode": "1F5F9",
-    "digest": "fc3ba16c009d963a4a0ea20a348ac98eee3c4c18c481df19a5ada0d1de7fcc15"
-  },
-  {
-    "name": "ballot_box_with_bold_check",
-    "unicode": "1F5F9",
-    "digest": "fc3ba16c009d963a4a0ea20a348ac98eee3c4c18c481df19a5ada0d1de7fcc15"
-  },
   {
     "name": "ballot_box_with_check",
     "unicode": "2611",
     "digest": "c98d6f3588dd87e2f318bbfe6c646399a905450edfd814edae4e5b1bddef2134"
   },
-  {
-    "name": "ballot_box_x",
-    "unicode": "1F5F5",
-    "digest": "861dcfc2361298262587b5d0e163fed96a55c44636361f5b4a9ab1d6502b8928"
-  },
-  {
-    "name": "ballot_box_with_script_x",
-    "unicode": "1F5F5",
-    "digest": "861dcfc2361298262587b5d0e163fed96a55c44636361f5b4a9ab1d6502b8928"
-  },
-  {
-    "name": "ballot_x",
-    "unicode": "1F5F4",
-    "digest": "0b73b89847eb82bcad5664644c8af237e0aef6c3d8c94b7a5df94e05d0ebf4e1"
-  },
-  {
-    "name": "ballot_script_x",
-    "unicode": "1F5F4",
-    "digest": "0b73b89847eb82bcad5664644c8af237e0aef6c3d8c94b7a5df94e05d0ebf4e1"
-  },
   {
     "name": "bamboo",
     "unicode": "1F38D",
@@ -579,6 +514,11 @@
     "unicode": "26F9-1F3FF",
     "digest": "c631cefc5d2a0a31bdb9f0a0d97ea68b1c6928e565468998403034644572a0b0"
   },
+  {
+    "name": "bat",
+    "unicode": "1F987",
+    "digest": "8fc19e0d7d6f80906bdbc06d616a810de66180d96cf28070a53fa61b88904535"
+  },
   {
     "name": "bath",
     "unicode": "1F6C0",
@@ -759,6 +699,11 @@
     "unicode": "26AB",
     "digest": "c2ba672994ad0f99d7fdc449f3fee45a2dca68a58f9fe95825b38465a30ef44e"
   },
+  {
+    "name": "black_heart",
+    "unicode": "1F5A4",
+    "digest": "f334679168d6dd7328c28e9ae3cb2b1fca0e9c2777938d586bfe623db2a688b9"
+  },
   {
     "name": "black_joker",
     "unicode": "1F0CF",
@@ -839,11 +784,6 @@
     "unicode": "1F4D6",
     "digest": "9d912a9d1bb10dc7f2645b345ed09e90461e83df0de275acb806f1f75cef1fcf"
   },
-  {
-    "name": "book2",
-    "unicode": "1F56E",
-    "digest": "26d6b66a1957e7750b3e22eb2e46d0cc85932977bbb81d3d8482ec1ec58ee12b"
-  },
   {
     "name": "bookmark",
     "unicode": "1F516",
@@ -874,16 +814,6 @@
     "unicode": "1F490",
     "digest": "b93751a27b40f6185a22b3e8b413f0fe09b6010d1057c672e1a23088e0b8286f"
   },
-  {
-    "name": "bouquet2",
-    "unicode": "1F395",
-    "digest": "1643ec51ff26fc1ac0c67859e202386398650bf2a996c82b68e1b73fa52abf7d"
-  },
-  {
-    "name": "bouquet_of_flowers",
-    "unicode": "1F395",
-    "digest": "1643ec51ff26fc1ac0c67859e202386398650bf2a996c82b68e1b73fa52abf7d"
-  },
   {
     "name": "bow",
     "unicode": "1F647",
@@ -929,6 +859,16 @@
     "unicode": "1F3B3",
     "digest": "737f2cdfa4ac964baade585a39771b18080bd5e9b55c8661d3518f468f344662"
   },
+  {
+    "name": "boxing_glove",
+    "unicode": "1F94A",
+    "digest": "c914b2ce45f20afad66ad6f0d1b0750c4469e4f48b686dfc4aad1ec8d289c563"
+  },
+  {
+    "name": "boxing_gloves",
+    "unicode": "1F94A",
+    "digest": "c914b2ce45f20afad66ad6f0d1b0750c4469e4f48b686dfc4aad1ec8d289c563"
+  },
   {
     "name": "boy",
     "unicode": "1F466",
@@ -959,11 +899,6 @@
     "unicode": "1F466-1F3FF",
     "digest": "0f76e97237203950da36c737dcc6f56dcd6c123401a8c817a0636376c7f38ef5"
   },
-  {
-    "name": "boys_symbol",
-    "unicode": "1F6C9",
-    "digest": "47fadbcb876ca436264ce2f3ebd1472bd68f55cc2b4833bf054335be9dc7a0f2"
-  },
   {
     "name": "bread",
     "unicode": "1F35E",
@@ -1034,21 +969,6 @@
     "unicode": "1F684",
     "digest": "96e74842e919716b7bbbab57339bfd70f099a9bcb4710dffd7c80cf38a7bbff7"
   },
-  {
-    "name": "bullhorn",
-    "unicode": "1F56B",
-    "digest": "a4ca5cbfe299e8ccd148d17055d2d395cf8515e416bf771044c9a670509a8254"
-  },
-  {
-    "name": "bullhorn_waves",
-    "unicode": "1F56C",
-    "digest": "92493636cf086205d1e12cc19e613b84152ef10b8cd0215619a0fc813bfc9a7c"
-  },
-  {
-    "name": "bullhorn_with_sound_waves",
-    "unicode": "1F56C",
-    "digest": "92493636cf086205d1e12cc19e613b84152ef10b8cd0215619a0fc813bfc9a7c"
-  },
   {
     "name": "burrito",
     "unicode": "1F32F",
@@ -1074,6 +994,11 @@
     "unicode": "1F465",
     "digest": "7fee96f1b68bb2c6002e47f2ed13c06baa6a3168441b9aca572db7ec45612f7b"
   },
+  {
+    "name": "butterfly",
+    "unicode": "1F98B",
+    "digest": "a91b6598c17b44a8dc8935a1d99e25f4483ea41470cdd2da343039a9eec29ef1"
+  },
   {
     "name": "cactus",
     "unicode": "1F335",
@@ -1084,16 +1009,6 @@
     "unicode": "1F370",
     "digest": "b928902df8084210d51c1da36f9119164a325393c391b28cd8ea914e0b95c17b"
   },
-  {
-    "name": "calculator",
-    "unicode": "1F5A9",
-    "digest": "01b47b5c69c12b65fa4f4c0d580f2a98280d6116f4ad2cf8be378759008bcc3c"
-  },
-  {
-    "name": "pocket calculator",
-    "unicode": "1F5A9",
-    "digest": "01b47b5c69c12b65fa4f4c0d580f2a98280d6116f4ad2cf8be378759008bcc3c"
-  },
   {
     "name": "calendar",
     "unicode": "1F4C6",
@@ -1109,6 +1024,66 @@
     "unicode": "1F5D3",
     "digest": "441a0750eade7ce33e28e58bec76958990c412b68409fcdde59ebad1f25361bb"
   },
+  {
+    "name": "call_me",
+    "unicode": "1F919",
+    "digest": "83d2ed96dcb8b4adf4f4d030ffd07e25ca16351e1a4fbefdf9f46f5ca496a55f"
+  },
+  {
+    "name": "call_me_hand",
+    "unicode": "1F919",
+    "digest": "83d2ed96dcb8b4adf4f4d030ffd07e25ca16351e1a4fbefdf9f46f5ca496a55f"
+  },
+  {
+    "name": "call_me_tone1",
+    "unicode": "1F919-1F3FB",
+    "digest": "4a5748efa83e7294e8338b8795d4d315ff1cd31ead6759004d0eb330e50de8cd"
+  },
+  {
+    "name": "call_me_hand_tone1",
+    "unicode": "1F919-1F3FB",
+    "digest": "4a5748efa83e7294e8338b8795d4d315ff1cd31ead6759004d0eb330e50de8cd"
+  },
+  {
+    "name": "call_me_tone2",
+    "unicode": "1F919-1F3FC",
+    "digest": "54feaa6e3c5789ae6e15622127f0e0213234b4b886e1588ce95814348b1f1519"
+  },
+  {
+    "name": "call_me_hand_tone2",
+    "unicode": "1F919-1F3FC",
+    "digest": "54feaa6e3c5789ae6e15622127f0e0213234b4b886e1588ce95814348b1f1519"
+  },
+  {
+    "name": "call_me_tone3",
+    "unicode": "1F919-1F3FD",
+    "digest": "57e949b951e14843b712dab5a828f915ee255f5bb973db33946aab4057427419"
+  },
+  {
+    "name": "call_me_hand_tone3",
+    "unicode": "1F919-1F3FD",
+    "digest": "57e949b951e14843b712dab5a828f915ee255f5bb973db33946aab4057427419"
+  },
+  {
+    "name": "call_me_tone4",
+    "unicode": "1F919-1F3FE",
+    "digest": "f7787e933978a09c7b8ab8d3b1e1ab395aaae998c455e93bb3db24a4c8a60fe0"
+  },
+  {
+    "name": "call_me_hand_tone4",
+    "unicode": "1F919-1F3FE",
+    "digest": "f7787e933978a09c7b8ab8d3b1e1ab395aaae998c455e93bb3db24a4c8a60fe0"
+  },
+  {
+    "name": "call_me_tone5",
+    "unicode": "1F919-1F3FF",
+    "digest": "1fdb7d833d000b117d20d48142d3026a61cc9c8b712ebb498fa66bf75c74d7a5"
+  },
+  {
+    "name": "call_me_hand_tone5",
+    "unicode": "1F919-1F3FF",
+    "digest": "1fdb7d833d000b117d20d48142d3026a61cc9c8b712ebb498fa66bf75c74d7a5"
+  },
   {
     "name": "calling",
     "unicode": "1F4F2",
@@ -1134,11 +1109,6 @@
     "unicode": "1F3D5",
     "digest": "a42a4ff9521affa72db7b0f01da169b4cb6afb9db1c5dfad47dd4c507bfc30d9"
   },
-  {
-    "name": "cancellation_x",
-    "unicode": "1F5D9",
-    "digest": "cea2f7a48543207615ee06755ded62c2a95a7eaf7d7b68a3fc25e74d94e2c92c"
-  },
   {
     "name": "cancer",
     "unicode": "264B",
@@ -1154,6 +1124,16 @@
     "unicode": "1F36C",
     "digest": "9cff4538918f60f770fceb96e964f5dc3ce31fd08ddd2ab3bfdf2981bfa74100"
   },
+  {
+    "name": "canoe",
+    "unicode": "1F6F6",
+    "digest": "56ca308cc2ad4827468cf58c4ccf6ef6b3382835a91e935540a2b973e01d2572"
+  },
+  {
+    "name": "kayak",
+    "unicode": "1F6F6",
+    "digest": "56ca308cc2ad4827468cf58c4ccf6ef6b3382835a91e935540a2b973e01d2572"
+  },
   {
     "name": "capital_abcd",
     "unicode": "1F520",
@@ -1185,14 +1165,69 @@
     "digest": "c0e7059efc39a64233f774c02ddb1ab51888fff180f906ce13a6e4f9509672fe"
   },
   {
-    "name": "cartridge",
-    "unicode": "1F5AD",
-    "digest": "0b1625eea118060b51a70905c1eb3313ed632e989f70943eca16aa29fe8a34f2"
+    "name": "carrot",
+    "unicode": "1F955",
+    "digest": "3a6fd98b63ee73d982a9cdacb08cf7b4014368cde8ffce6056b7df25a5a472b1"
+  },
+  {
+    "name": "cartwheel",
+    "unicode": "1F938",
+    "digest": "d78de3435e0b04a9b1a1048ae12e63e3248f9ace3a0db4d3bda584f22af18863"
+  },
+  {
+    "name": "person_doing_cartwheel",
+    "unicode": "1F938",
+    "digest": "d78de3435e0b04a9b1a1048ae12e63e3248f9ace3a0db4d3bda584f22af18863"
   },
   {
-    "name": "tape_cartridge",
-    "unicode": "1F5AD",
-    "digest": "0b1625eea118060b51a70905c1eb3313ed632e989f70943eca16aa29fe8a34f2"
+    "name": "cartwheel_tone1",
+    "unicode": "1F938-1F3FB",
+    "digest": "39a49781a269bb40d8efc8fd73c973b00fb2e192850ea6073062b5dea0cd5b74"
+  },
+  {
+    "name": "person_doing_cartwheel_tone1",
+    "unicode": "1F938-1F3FB",
+    "digest": "39a49781a269bb40d8efc8fd73c973b00fb2e192850ea6073062b5dea0cd5b74"
+  },
+  {
+    "name": "cartwheel_tone2",
+    "unicode": "1F938-1F3FC",
+    "digest": "6231eb35be45457fd648f8f4b79983f03705c9d983a18067f7e6d9ae47bc1958"
+  },
+  {
+    "name": "person_doing_cartwheel_tone2",
+    "unicode": "1F938-1F3FC",
+    "digest": "6231eb35be45457fd648f8f4b79983f03705c9d983a18067f7e6d9ae47bc1958"
+  },
+  {
+    "name": "cartwheel_tone3",
+    "unicode": "1F938-1F3FD",
+    "digest": "ca483c78cc823811a8c279c501d9b283e4c990dafc5995ad40e68ecb0af554df"
+  },
+  {
+    "name": "person_doing_cartwheel_tone3",
+    "unicode": "1F938-1F3FD",
+    "digest": "ca483c78cc823811a8c279c501d9b283e4c990dafc5995ad40e68ecb0af554df"
+  },
+  {
+    "name": "cartwheel_tone4",
+    "unicode": "1F938-1F3FE",
+    "digest": "8253afb672431c84e498014c30babb00b9284bec773009e79f7f06aa7108643e"
+  },
+  {
+    "name": "person_doing_cartwheel_tone4",
+    "unicode": "1F938-1F3FE",
+    "digest": "8253afb672431c84e498014c30babb00b9284bec773009e79f7f06aa7108643e"
+  },
+  {
+    "name": "cartwheel_tone5",
+    "unicode": "1F938-1F3FF",
+    "digest": "6fd92baff57c38b3adb6753d9e7e547e762971a8872fd3f1e71c6aaf0b1d3ab9"
+  },
+  {
+    "name": "person_doing_cartwheel_tone5",
+    "unicode": "1F938-1F3FF",
+    "digest": "6fd92baff57c38b3adb6753d9e7e547e762971a8872fd3f1e71c6aaf0b1d3ab9"
   },
   {
     "name": "cat",
@@ -1209,11 +1244,6 @@
     "unicode": "1F4BF",
     "digest": "16363d8a34b873c12df6354b99f575cae3d80e0d27100ed7eea70f0310953c7b"
   },
-  {
-    "name": "celtic_cross",
-    "unicode": "1F548",
-    "digest": "187aac988d7e02085a15f31c4cc0ff25127be5b088e354e65c7b1152bffb40ff"
-  },
   {
     "name": "chains",
     "unicode": "26D3",
@@ -1229,6 +1259,16 @@
     "unicode": "1F37E",
     "digest": "9e6e8987f30a37ae0f3d7dab2f5eeb50aa32b4f31402b29315eb2994afc72457"
   },
+  {
+    "name": "champagne_glass",
+    "unicode": "1F942",
+    "digest": "5a2e4773f7eb126a00122cbfa4dc535da51ce00e0bf0d8d6ff8bab8b3365f8d2"
+  },
+  {
+    "name": "clinking_glass",
+    "unicode": "1F942",
+    "digest": "5a2e4773f7eb126a00122cbfa4dc535da51ce00e0bf0d8d6ff8bab8b3365f8d2"
+  },
   {
     "name": "chart",
     "unicode": "1F4B9",
@@ -1514,16 +1554,6 @@
     "unicode": "1F564",
     "digest": "9fdef6a4939315c017b165e1dbac7710fb335df8c309be3fe2a011ef7fc28d74"
   },
-  {
-    "name": "clockwise_arrows",
-    "unicode": "1F5D8",
-    "digest": "67027b7e1a4d800a3ce7d731c21c098d1109d217159a27665eebb7e080fc2622"
-  },
-  {
-    "name": "clockwise_right_and_left_semicircle_arrows",
-    "unicode": "1F5D8",
-    "digest": "67027b7e1a4d800a3ce7d731c21c098d1109d217159a27665eebb7e080fc2622"
-  },
   {
     "name": "closed_book",
     "unicode": "1F4D5",
@@ -1584,6 +1614,16 @@
     "unicode": "1F32A",
     "digest": "7cbed2343c280ba3996082b3d0fb9d8cd57d6e62fe6c9ecb159f46b4a2e49151"
   },
+  {
+    "name": "clown",
+    "unicode": "1F921",
+    "digest": "eea95687caabc9e808514c2450ba599e5e24ef47923dbec86f5297a64438e2e5"
+  },
+  {
+    "name": "clown_face",
+    "unicode": "1F921",
+    "digest": "eea95687caabc9e808514c2450ba599e5e24ef47923dbec86f5297a64438e2e5"
+  },
   {
     "name": "clubs",
     "unicode": "2663",
@@ -1624,16 +1664,6 @@
     "unicode": "1F4BB",
     "digest": "c970ce76b5607434895b0407bdaa93140f887930781a17dd7dcf16f711451d93"
   },
-  {
-    "name": "computer_old",
-    "unicode": "1F5B3",
-    "digest": "b27c30d74f205a8a3bd00a55ca17da7cf6ae3b65ae33e949755a4c6bd69a9fd3"
-  },
-  {
-    "name": "old_personal_computer",
-    "unicode": "1F5B3",
-    "digest": "b27c30d74f205a8a3bd00a55ca17da7cf6ae3b65ae33e949755a4c6bd69a9fd3"
-  },
   {
     "name": "confetti_ball",
     "unicode": "1F38A",
@@ -1664,6 +1694,11 @@
     "unicode": "1F3D7",
     "digest": "c611f0a5de10f000a0756935f226845c7292f19ff5581d1f7a7554316338bbcb"
   },
+  {
+    "name": "building_construction",
+    "unicode": "1F3D7",
+    "digest": "c611f0a5de10f000a0756935f226845c7292f19ff5581d1f7a7554316338bbcb"
+  },
   {
     "name": "construction_worker",
     "unicode": "1F477",
@@ -1699,16 +1734,6 @@
     "unicode": "1F39B",
     "digest": "0d7f33ff7acc1cc3a81e6a786ff007df20da145e3070f338505dfed5100e9fcb"
   },
-  {
-    "name": "contruction_site",
-    "unicode": "1F3D7",
-    "digest": "c611f0a5de10f000a0756935f226845c7292f19ff5581d1f7a7554316338bbcb"
-  },
-  {
-    "name": "building_construction",
-    "unicode": "1F3D7",
-    "digest": "c611f0a5de10f000a0756935f226845c7292f19ff5581d1f7a7554316338bbcb"
-  },
   {
     "name": "convenience_store",
     "unicode": "1F3EA",
@@ -1719,6 +1744,11 @@
     "unicode": "1F36A",
     "digest": "4bed3522bd50091ac5b68ca760661eb484d7f1b9c9d564d2097bd812b7f28ae4"
   },
+  {
+    "name": "cooking",
+    "unicode": "1F373",
+    "digest": "563ffd6cae381ce1e318cdacc54e70040d6a01a50d0db8aeb50edbbe413eac58"
+  },
   {
     "name": "cool",
     "unicode": "1F192",
@@ -1819,6 +1849,16 @@
     "unicode": "1F404",
     "digest": "e7a5131d7dee0f3356814b0ac1ea8ff280b12a7b580181e20ddb0b7eeb7e7339"
   },
+  {
+    "name": "cowboy",
+    "unicode": "1F920",
+    "digest": "1aabf23f6b95a9b772fdb8eb45b8ec93584a5357f9131c6eabc9d1b83fe67e89"
+  },
+  {
+    "name": "face_with_cowboy_hat",
+    "unicode": "1F920",
+    "digest": "1aabf23f6b95a9b772fdb8eb45b8ec93584a5357f9131c6eabc9d1b83fe67e89"
+  },
   {
     "name": "crab",
     "unicode": "1F980",
@@ -1859,6 +1899,11 @@
     "unicode": "1F40A",
     "digest": "59cb4164c50b6bc9ae311ce6f7610467c1aaafa848b5fff7614f064715f91992"
   },
+  {
+    "name": "croissant",
+    "unicode": "1F950",
+    "digest": "b751e287157a1e276617a841a5b5f7f1208ca226cfd8fa947f144390b65a5e16"
+  },
   {
     "name": "cross",
     "unicode": "271D",
@@ -1869,36 +1914,6 @@
     "unicode": "271D",
     "digest": "a6b07c838fb75ef2ebefa2df6005e8d784753239ec03c37695a13e3b1954d653"
   },
-  {
-    "name": "cross_heavy",
-    "unicode": "1F547",
-    "digest": "2e37c26b9bad0beb019c7f3e7a3892352d0ad9ca1b90c4333d42e8d56680be70"
-  },
-  {
-    "name": "heavy_latin_cross",
-    "unicode": "1F547",
-    "digest": "2e37c26b9bad0beb019c7f3e7a3892352d0ad9ca1b90c4333d42e8d56680be70"
-  },
-  {
-    "name": "cross_white",
-    "unicode": "1F546",
-    "digest": "3452e667010d7e49a51d7e1f4ba8ed4f303e33ed43255a051e9a18832a1efba6"
-  },
-  {
-    "name": "white_latin_cross",
-    "unicode": "1F546",
-    "digest": "3452e667010d7e49a51d7e1f4ba8ed4f303e33ed43255a051e9a18832a1efba6"
-  },
-  {
-    "name": "crossbones",
-    "unicode": "1F571",
-    "digest": "f5e7ce293c1a3282711073e68f033a3876e8428d1218cb2f8294630f9124e584"
-  },
-  {
-    "name": "black_skull_and_crossbones",
-    "unicode": "1F571",
-    "digest": "f5e7ce293c1a3282711073e68f033a3876e8428d1218cb2f8294630f9124e584"
-  },
   {
     "name": "crossed_flags",
     "unicode": "1F38C",
@@ -1939,6 +1954,11 @@
     "unicode": "1F52E",
     "digest": "05f73b30b1e5b0fc66fb5dc6caddd2d547ee7b9d2f97513dc908ba1a2e352e30"
   },
+  {
+    "name": "cucumber",
+    "unicode": "1F952",
+    "digest": "d1196e23f2f155ef5c1330f8497f40957a7357cb177127f457c5c471f0a23727"
+  },
   {
     "name": "cupid",
     "unicode": "1F498",
@@ -2049,16 +2069,16 @@
     "unicode": "1F333",
     "digest": "3c70f1a77f2754f41c830e88d43b7d53c14311d64626ded164aa9ac7d2695790"
   },
+  {
+    "name": "deer",
+    "unicode": "1F98C",
+    "digest": "7f4302ca68fd121ee73be48d0a0a0fb9e7e2741071a491ad2b7b0eab9f11ad25"
+  },
   {
     "name": "department_store",
     "unicode": "1F3EC",
     "digest": "4be910d2efe74d8ce2c1f41d7753c8873579faca83fcf779a4887d8ab9e5923b"
   },
-  {
-    "name": "descending_notes",
-    "unicode": "1F39D",
-    "digest": "f09c6a2e094b13bf91cc07b7b776e43348ccef9f91247ca36cc02e7d91098af0"
-  },
   {
     "name": "desert",
     "unicode": "1F3DC",
@@ -2074,11 +2094,6 @@
     "unicode": "1F5A5",
     "digest": "cde5bfb6c71bb7d663808a3561b24cb5b5560f95f510b40f81250cac1b21933e"
   },
-  {
-    "name": "desktop_window",
-    "unicode": "1F5D4",
-    "digest": "d5b6c4a847e2a96f97f50fd353a22cb121915cb1d7bbc0f02df38769819b6b7e"
-  },
   {
     "name": "diamond_shape_with_a_dot_inside",
     "unicode": "1F4A0",
@@ -2124,21 +2139,6 @@
     "unicode": "1F6AF",
     "digest": "98b07fbbcdb438d1b8a755869fa2de8e180a77fce359ec830eb46d38ec3e67cb"
   },
-  {
-    "name": "document",
-    "unicode": "1F5CE",
-    "digest": "2cbca96cc69306a10f1a9b6505723e027239439d899f6b395dc43f3c37d2d777"
-  },
-  {
-    "name": "document_text",
-    "unicode": "1F5B9",
-    "digest": "29407b12409c9673f3d89ef1f86ee50cbc7ed53b1870e33b4a29bbc609017f72"
-  },
-  {
-    "name": "document_with_text",
-    "unicode": "1F5B9",
-    "digest": "29407b12409c9673f3d89ef1f86ee50cbc7ed53b1870e33b4a29bbc609017f72"
-  },
   {
     "name": "dog",
     "unicode": "1F436",
@@ -2204,11 +2204,36 @@
     "unicode": "1F42A",
     "digest": "e06ef69c29f0fb12481727c0b4124e700572d3d7955e173279320f43f286518d"
   },
+  {
+    "name": "drooling_face",
+    "unicode": "1F924",
+    "digest": "5203cb05cd266d7a7c929ab40364ad68571d380d9c7ff93a8d6d55261abaa1ba"
+  },
+  {
+    "name": "drool",
+    "unicode": "1F924",
+    "digest": "5203cb05cd266d7a7c929ab40364ad68571d380d9c7ff93a8d6d55261abaa1ba"
+  },
   {
     "name": "droplet",
     "unicode": "1F4A7",
     "digest": "6475b4a4460a672c436a68f282ac97fb31e2934db4b80620063ee816159aa7c3"
   },
+  {
+    "name": "drum",
+    "unicode": "1F941",
+    "digest": "0d0639980b1a5dcbf1c3e7ef47263fb6543b871242c58452a8c2f642525d9dd8"
+  },
+  {
+    "name": "drum_with_drumsticks",
+    "unicode": "1F941",
+    "digest": "0d0639980b1a5dcbf1c3e7ef47263fb6543b871242c58452a8c2f642525d9dd8"
+  },
+  {
+    "name": "duck",
+    "unicode": "1F986",
+    "digest": "8f8373798a7727368b32328e7a9a349727a949e7391ddd243b6456141a4f7e94"
+  },
   {
     "name": "dvd",
     "unicode": "1F4C0",
@@ -2224,6 +2249,11 @@
     "unicode": "1F4E7",
     "digest": "39b5a57a2376e4a1137e381be02a1775bd580e0371438f5297a401ea634f1830"
   },
+  {
+    "name": "eagle",
+    "unicode": "1F985",
+    "digest": "b44fd4f61b83c5114358a272343ac9b0eabbc70847f739bbdbf8aae3ade5bc1d"
+  },
   {
     "name": "ear",
     "unicode": "1F442",
@@ -2276,8 +2306,8 @@
   },
   {
     "name": "egg",
-    "unicode": "1F373",
-    "digest": "563ffd6cae381ce1e318cdacc54e70040d6a01a50d0db8aeb50edbbe413eac58"
+    "unicode": "1F95A",
+    "digest": "72b9c841af784e7cbccbbe48ba833df5cecdd284397c199cab079872e879d92f"
   },
   {
     "name": "eggplant",
@@ -2299,6 +2329,16 @@
     "unicode": "2733",
     "digest": "bb0758e7cc0e357285937671a91489bd32ce9d248eecdcc9c275a53a66325b26"
   },
+  {
+    "name": "eject",
+    "unicode": "23CF",
+    "digest": "eeb0cd23ead0c965e307de517a6805265f0c780c3e454e64bc4c1425dfe7548e"
+  },
+  {
+    "name": "eject_symbol",
+    "unicode": "23CF",
+    "digest": "eeb0cd23ead0c965e307de517a6805265f0c780c3e454e64bc4c1425dfe7548e"
+  },
   {
     "name": "electric_plug",
     "unicode": "1F50C",
@@ -2319,46 +2359,6 @@
     "unicode": "2709",
     "digest": "f5a512022a2f5280f372ff39c22cbda815f698710ca66f8f8c4d08418f98ca78"
   },
-  {
-    "name": "envelope_back",
-    "unicode": "1F582",
-    "digest": "bc60b6d375feee00758a94a05b42eeb165f4084b20eb3e6012b72faa221f7e75"
-  },
-  {
-    "name": "back_of_envelope",
-    "unicode": "1F582",
-    "digest": "bc60b6d375feee00758a94a05b42eeb165f4084b20eb3e6012b72faa221f7e75"
-  },
-  {
-    "name": "envelope_flying",
-    "unicode": "1F585",
-    "digest": "9d6b6ca4c08006062a6f11948de3e15b13cf5c458967e39a9358665a8e13e214"
-  },
-  {
-    "name": "flying_envelope",
-    "unicode": "1F585",
-    "digest": "9d6b6ca4c08006062a6f11948de3e15b13cf5c458967e39a9358665a8e13e214"
-  },
-  {
-    "name": "envelope_stamped",
-    "unicode": "1F583",
-    "digest": "f6102aea7283ddc136bfeb09589573420b9279105045fc6b965c1633c1297468"
-  },
-  {
-    "name": "stamped_envelope",
-    "unicode": "1F583",
-    "digest": "f6102aea7283ddc136bfeb09589573420b9279105045fc6b965c1633c1297468"
-  },
-  {
-    "name": "envelope_stamped_pen",
-    "unicode": "1F586",
-    "digest": "80ea471318d1e04f8e525ff236b3cd4a4c864e66c6246b6aad77d92f56895f33"
-  },
-  {
-    "name": "pen_over_stamped_envelope",
-    "unicode": "1F586",
-    "digest": "80ea471318d1e04f8e525ff236b3cd4a4c864e66c6246b6aad77d92f56895f33"
-  },
   {
     "name": "envelope_with_arrow",
     "unicode": "1F4E9",
@@ -2414,6 +2414,36 @@
     "unicode": "1F440",
     "digest": "1d5cae0b9b2e51e1de54295685d7f0c72ee794e2e6335a95b1d056c7e77260e8"
   },
+  {
+    "name": "face_palm",
+    "unicode": "1F926",
+    "digest": "4ec873048b34b1bb34430724cf28e4bee6c0a9eee88ce39b9d1565047dc92420"
+  },
+  {
+    "name": "face_palm_tone1",
+    "unicode": "1F926-1F3FB",
+    "digest": "e93ef92b4c01dbea6c400e708e23dd36da92ccfbf5eb4f177b3b20c3a46bdc19"
+  },
+  {
+    "name": "face_palm_tone2",
+    "unicode": "1F926-1F3FC",
+    "digest": "22c8bf9fd9fa2ed9dca7a6397ed00ba6cfe9aeef2b0fb7b516ee4dda0df050ea"
+  },
+  {
+    "name": "face_palm_tone3",
+    "unicode": "1F926-1F3FD",
+    "digest": "c0b8bb9d2423e6787b6bdf1ca5a13f52853e4f48a9a1af0f2d4af1364fff022e"
+  },
+  {
+    "name": "face_palm_tone4",
+    "unicode": "1F926-1F3FE",
+    "digest": "f522ab186adcbb4549ea2c03500cdd7a86add548e43ebf7a54d58cc24deea072"
+  },
+  {
+    "name": "face_palm_tone5",
+    "unicode": "1F926-1F3FF",
+    "digest": "363507ae7178b5ec583635f47bcab10c897346f48b85d8759b1004c32cd8ad65"
+  },
   {
     "name": "factory",
     "unicode": "1F3ED",
@@ -2519,6 +2549,16 @@
     "unicode": "1F43E",
     "digest": "45aca538d3a9831a0c7de491e5656c17705c07b8f4ac8e85254656b608976016"
   },
+  {
+    "name": "fencer",
+    "unicode": "1F93A",
+    "digest": "5db00fa456af9f6c7cb88d300579dd63e426bcb97ad25486b664aff25c688e21"
+  },
+  {
+    "name": "fencing",
+    "unicode": "1F93A",
+    "digest": "5db00fa456af9f6c7cb88d300579dd63e426bcb97ad25486b664aff25c688e21"
+  },
   {
     "name": "ferris_wheel",
     "unicode": "1F3A1",
@@ -2550,54 +2590,64 @@
     "digest": "4da212148cadb9c4ea91e60d2d8316e38cea99ef4f14afc023711dd7c54ade5a"
   },
   {
-    "name": "finger_pointing_down",
-    "unicode": "1F597",
-    "digest": "0c542ac3141e8f2e74767acd0eb399c2d68c779cb78bf16d437ad3b1f8134ad9"
+    "name": "fingers_crossed",
+    "unicode": "1F91E",
+    "digest": "a5c797ead191b9712e185083266b455cdf09f6a34c10f8c51aa145e6073427e1"
   },
   {
-    "name": "white_down_pointing_left_hand_index",
-    "unicode": "1F597",
-    "digest": "0c542ac3141e8f2e74767acd0eb399c2d68c779cb78bf16d437ad3b1f8134ad9"
+    "name": "hand_with_index_and_middle_finger_crossed",
+    "unicode": "1F91E",
+    "digest": "a5c797ead191b9712e185083266b455cdf09f6a34c10f8c51aa145e6073427e1"
   },
   {
-    "name": "finger_pointing_down2",
-    "unicode": "1F59F",
-    "digest": "c5b128a232cbf518544802a2ae1459368274297163721fa05d0103cf95b2b1ee"
+    "name": "fingers_crossed_tone1",
+    "unicode": "1F91E-1F3FB",
+    "digest": "db56d47bf887f2d8459a3aaba23f15c0087234ae5a54125052e7046e034a4988"
   },
   {
-    "name": "sideways_white_down_pointing_index",
-    "unicode": "1F59F",
-    "digest": "c5b128a232cbf518544802a2ae1459368274297163721fa05d0103cf95b2b1ee"
+    "name": "hand_with_index_and_middle_fingers_crossed_tone1",
+    "unicode": "1F91E-1F3FB",
+    "digest": "db56d47bf887f2d8459a3aaba23f15c0087234ae5a54125052e7046e034a4988"
   },
   {
-    "name": "finger_pointing_left",
-    "unicode": "1F598",
-    "digest": "d178ece691e2091be08db77fda9cf05462934628557358a8cb6222587b291f7e"
+    "name": "fingers_crossed_tone2",
+    "unicode": "1F91E-1F3FC",
+    "digest": "19f1bcca3991db7ed2037278c0baab6cd7f12aeaf2e0074de402c4d9e45c1899"
   },
   {
-    "name": "sideways_white_left_pointing_index",
-    "unicode": "1F598",
-    "digest": "d178ece691e2091be08db77fda9cf05462934628557358a8cb6222587b291f7e"
+    "name": "hand_with_index_and_middle_fingers_crossed_tone2",
+    "unicode": "1F91E-1F3FC",
+    "digest": "19f1bcca3991db7ed2037278c0baab6cd7f12aeaf2e0074de402c4d9e45c1899"
   },
   {
-    "name": "finger_pointing_right",
-    "unicode": "1F599",
-    "digest": "a412a47544d8f401f9181f8826c5fa3d6b42a1d76f6926963c2d9cd2a01be06d"
+    "name": "fingers_crossed_tone3",
+    "unicode": "1F91E-1F3FD",
+    "digest": "895a3314f6a310f31f7e728bcca20ff834fbfac62ce00e27e3ea5ad0dfc1ba35"
   },
   {
-    "name": "sideways_white_right_pointing_index",
-    "unicode": "1F599",
-    "digest": "a412a47544d8f401f9181f8826c5fa3d6b42a1d76f6926963c2d9cd2a01be06d"
+    "name": "hand_with_index_and_middle_fingers_crossed_tone3",
+    "unicode": "1F91E-1F3FD",
+    "digest": "895a3314f6a310f31f7e728bcca20ff834fbfac62ce00e27e3ea5ad0dfc1ba35"
   },
   {
-    "name": "finger_pointing_up",
-    "unicode": "1F59E",
-    "digest": "32c2ccab52aa318a47c816d1bcf9c076e667c9ef3e64ce37d7ba7e827238690d"
+    "name": "fingers_crossed_tone4",
+    "unicode": "1F91E-1F3FE",
+    "digest": "fcb5c4de2001d23a5df1b8702624d134b7f94e93e2dcc8adf6c1033c77722b0e"
   },
   {
-    "name": "sideways_white_up_pointing_index",
-    "unicode": "1F59E",
-    "digest": "32c2ccab52aa318a47c816d1bcf9c076e667c9ef3e64ce37d7ba7e827238690d"
+    "name": "hand_with_index_and_middle_fingers_crossed_tone4",
+    "unicode": "1F91E-1F3FE",
+    "digest": "fcb5c4de2001d23a5df1b8702624d134b7f94e93e2dcc8adf6c1033c77722b0e"
+  },
+  {
+    "name": "fingers_crossed_tone5",
+    "unicode": "1F91E-1F3FF",
+    "digest": "50132c78d530b048c21be4e788b446872a79b3b3a91009db12f4021c44c8469d"
+  },
+  {
+    "name": "hand_with_index_and_middle_fingers_crossed_tone5",
+    "unicode": "1F91E-1F3FF",
+    "digest": "50132c78d530b048c21be4e788b446872a79b3b3a91009db12f4021c44c8469d"
   },
   {
     "name": "fire",
@@ -2615,19 +2665,19 @@
     "digest": "c3a518f27d625e3b62dffa227eb82764bf0a147f10ec0e7f4f43f3f96751af20"
   },
   {
-    "name": "fire_engine_oncoming",
-    "unicode": "1F6F1",
-    "digest": "e2482c450136d373f74dfafddf502e0b675eb5d2e1e1c645f163db0e4d15fbb6"
+    "name": "fireworks",
+    "unicode": "1F386",
+    "digest": "b62ae08a00c0cc6eba8f9666c8fd9946ce57c3cfc01fe99542a8690a4a566a65"
   },
   {
-    "name": "oncoming_fire_engine",
-    "unicode": "1F6F1",
-    "digest": "e2482c450136d373f74dfafddf502e0b675eb5d2e1e1c645f163db0e4d15fbb6"
+    "name": "first_place",
+    "unicode": "1F947",
+    "digest": "e3de5d9f14f05544dbee5965cc2baa20e7b417a488c8a18598979038860fd901"
   },
   {
-    "name": "fireworks",
-    "unicode": "1F386",
-    "digest": "b62ae08a00c0cc6eba8f9666c8fd9946ce57c3cfc01fe99542a8690a4a566a65"
+    "name": "first_place_medal",
+    "unicode": "1F947",
+    "digest": "e3de5d9f14f05544dbee5965cc2baa20e7b417a488c8a18598979038860fd901"
   },
   {
     "name": "first_quarter_moon",
@@ -5299,41 +5349,11 @@
     "unicode": "269C",
     "digest": "ebf49007f367dc05580e9dab942e93e9dda12fa1dc2caa410ac7f8d8cd55d2a3"
   },
-  {
-    "name": "flip_phone",
-    "unicode": "1F581",
-    "digest": "be59efba4bc0759af5a726c06619090ef5071bf2541611d71691dedecee6c697"
-  },
-  {
-    "name": "clamshell_mobile_phone",
-    "unicode": "1F581",
-    "digest": "be59efba4bc0759af5a726c06619090ef5071bf2541611d71691dedecee6c697"
-  },
-  {
-    "name": "floppy_black",
-    "unicode": "1F5AA",
-    "digest": "9022f51bb09c5130c6d46bb2accb159bed6f54d6fbffda6ecad62965ebc958ea"
-  },
-  {
-    "name": "black_hard_shell_floppy_disk",
-    "unicode": "1F5AA",
-    "digest": "9022f51bb09c5130c6d46bb2accb159bed6f54d6fbffda6ecad62965ebc958ea"
-  },
   {
     "name": "floppy_disk",
     "unicode": "1F4BE",
     "digest": "4ee0b5bba41b9e301ed125d3ee1c263bef171ca499e6e1b89276b09af2bc03a0"
   },
-  {
-    "name": "floppy_white",
-    "unicode": "1F5AB",
-    "digest": "ec79c400117c4506ef8cf3eebef6c42dd37e60b3079d3e98b6ccd06e517e2af0"
-  },
-  {
-    "name": "white_hard_shell_floppy_disk",
-    "unicode": "1F5AB",
-    "digest": "ec79c400117c4506ef8cf3eebef6c42dd37e60b3079d3e98b6ccd06e517e2af0"
-  },
   {
     "name": "flower_playing_cards",
     "unicode": "1F3B4",
@@ -5354,21 +5374,6 @@
     "unicode": "1F301",
     "digest": "bc3631a4e9e8473b92e842008937add2cd9ffad5b7d772ce759fb5ff6c0e3dca"
   },
-  {
-    "name": "folder",
-    "unicode": "1F5C0",
-    "digest": "8932141321911032ce8469ba85fe309b78384545c3b9946978b383670b956644"
-  },
-  {
-    "name": "folder_open",
-    "unicode": "1F5C1",
-    "digest": "74f3b484771c3d6ef61cf003de25c1a59b875afa46c057b5b1d92d9f99460685"
-  },
-  {
-    "name": "open_folder",
-    "unicode": "1F5C1",
-    "digest": "74f3b484771c3d6ef61cf003de25c1a59b875afa46c057b5b1d92d9f99460685"
-  },
   {
     "name": "football",
     "unicode": "1F3C8",
@@ -5409,6 +5414,16 @@
     "unicode": "1F340",
     "digest": "ebee16e86bc9be843dfc72ab5372fb462f06be4486b5b25d7d4cac9b2c8b01c8"
   },
+  {
+    "name": "fox",
+    "unicode": "1F98A",
+    "digest": "e9903cb0396f7e49bdd2c384b38e614c13bfa576b3ecc1ec7b9819e4a40d91d1"
+  },
+  {
+    "name": "fox_face",
+    "unicode": "1F98A",
+    "digest": "e9903cb0396f7e49bdd2c384b38e614c13bfa576b3ecc1ec7b9819e4a40d91d1"
+  },
   {
     "name": "frame_photo",
     "unicode": "1F5BC",
@@ -5420,29 +5435,19 @@
     "digest": "d5074f748a15055ec1fb812c1e5e169e6e3cc73c522c54be1359b0e26c0fc75c"
   },
   {
-    "name": "frame_tiles",
-    "unicode": "1F5BD",
-    "digest": "34a5bb044b4b3ad94b116ad106f7b6747fb8612dc0e9f8ccd4313c2920508df0"
-  },
-  {
-    "name": "frame_with_tiles",
-    "unicode": "1F5BD",
-    "digest": "34a5bb044b4b3ad94b116ad106f7b6747fb8612dc0e9f8ccd4313c2920508df0"
-  },
-  {
-    "name": "frame_x",
-    "unicode": "1F5BE",
-    "digest": "2e427688fd70361c8c59787d0722ad68abe1c3f968258ee99c0c77ce4b8a8e15"
+    "name": "free",
+    "unicode": "1F193",
+    "digest": "9973522457158362fc5bdd7da858e6371e28a8403d1ef9e4b6427195c7f72cfa"
   },
   {
-    "name": "frame_with_an_x",
-    "unicode": "1F5BE",
-    "digest": "2e427688fd70361c8c59787d0722ad68abe1c3f968258ee99c0c77ce4b8a8e15"
+    "name": "french_bread",
+    "unicode": "1F956",
+    "digest": "47518a4312f57207b8e8c38188d4a2bd8b16830a885cfcf2d281cfab50c1bc6e"
   },
   {
-    "name": "free",
-    "unicode": "1F193",
-    "digest": "9973522457158362fc5bdd7da858e6371e28a8403d1ef9e4b6427195c7f72cfa"
+    "name": "baguette_bread",
+    "unicode": "1F956",
+    "digest": "47518a4312f57207b8e8c38188d4a2bd8b16830a885cfcf2d281cfab50c1bc6e"
   },
   {
     "name": "fried_shrimp",
@@ -5559,16 +5564,21 @@
     "unicode": "1F467-1F3FF",
     "digest": "f55e4b16a41b6f5e3c817a301420360ba4486e4e82e1092a56a3e3cc4069087d"
   },
-  {
-    "name": "girls_symbol",
-    "unicode": "1F6CA",
-    "digest": "2c55aee81defd7a1620ffeaad8d9bcc1835f19237c72c79633aec45671ddb9ff"
-  },
   {
     "name": "globe_with_meridians",
     "unicode": "1F310",
     "digest": "725bebeb3c09a9e3701ebe49e672dcfbf2b73575e05f0821263511577b013b75"
   },
+  {
+    "name": "goal",
+    "unicode": "1F945",
+    "digest": "7088c432f276ff6f447dc0d431b9062b394fb401de1072fe59ca56267bfd6717"
+  },
+  {
+    "name": "goal_net",
+    "unicode": "1F945",
+    "digest": "7088c432f276ff6f447dc0d431b9062b394fb401de1072fe59ca56267bfd6717"
+  },
   {
     "name": "goat",
     "unicode": "1F410",
@@ -5584,6 +5594,11 @@
     "unicode": "1F3CC",
     "digest": "7d7ecc6e226596f646030a4109c2b0001ef0cc690e4863e450bf5d29e7a90344"
   },
+  {
+    "name": "gorilla",
+    "unicode": "1F98D",
+    "digest": "4a564dc14f8ae5450d094f6410ec7f099a7f07dc5254b6395f44a35527bdb4b7"
+  },
   {
     "name": "grapes",
     "unicode": "1F347",
@@ -5734,16 +5749,6 @@
     "unicode": "1F590",
     "digest": "c51a30cb7e575d29ffed16780a6c95ae3f300b8ac523012f4a6e116d68c1fd15"
   },
-  {
-    "name": "hand_splayed_reverse",
-    "unicode": "1F591",
-    "digest": "ff0af0fe9def7388adca6836e5958492282b1afae99f1b6e1e65d11ba68b96db"
-  },
-  {
-    "name": "reversed_raised_hand_with_fingers_splayed",
-    "unicode": "1F591",
-    "digest": "ff0af0fe9def7388adca6836e5958492282b1afae99f1b6e1e65d11ba68b96db"
-  },
   {
     "name": "hand_splayed_tone1",
     "unicode": "1F590-1F3FB",
@@ -5795,24 +5800,99 @@
     "digest": "4b3a0aba7829772fec09f26d6facc19a2f822d2998015297b18b5cab85190ee2"
   },
   {
-    "name": "hand_victory",
-    "unicode": "1F594",
-    "digest": "2d512ced4e8a438f2a346aed67310d3080f9828c748ade1be95943c32ba1c735"
+    "name": "handbag",
+    "unicode": "1F45C",
+    "digest": "45410a3eed0c2e3f68748d7649fa9e33a90f4e80d5291206bdd0b40380c6da45"
   },
   {
-    "name": "reversed_victory_hand",
-    "unicode": "1F594",
-    "digest": "2d512ced4e8a438f2a346aed67310d3080f9828c748ade1be95943c32ba1c735"
+    "name": "handball",
+    "unicode": "1F93E",
+    "digest": "94ceb28024eb3259d8b137cafd7438773e717fbc04f5da810f85e43ca0fa9e00"
   },
   {
-    "name": "handbag",
-    "unicode": "1F45C",
-    "digest": "45410a3eed0c2e3f68748d7649fa9e33a90f4e80d5291206bdd0b40380c6da45"
+    "name": "handball_tone1",
+    "unicode": "1F93E-1F3FB",
+    "digest": "8bec4de0d05c80e335e44d65598d186ca92696977353c9fd9c2a5efa122cb842"
+  },
+  {
+    "name": "handball_tone2",
+    "unicode": "1F93E-1F3FC",
+    "digest": "2ff4131e1e2f089b315d8e176c9348877c26c2bd03706fb75d41bc61bc99bf93"
+  },
+  {
+    "name": "handball_tone3",
+    "unicode": "1F93E-1F3FD",
+    "digest": "224a71f94dd37d3729325d11412334667a81422e21f6d7c008730ff350f51a80"
   },
   {
-    "name": "hard_disk",
-    "unicode": "1F5B4",
-    "digest": "df8549d4281f5ae70fb6792a02c078e651764b0276aa43b7407236bd38fc21b4"
+    "name": "handball_tone4",
+    "unicode": "1F93E-1F3FE",
+    "digest": "a5f7a9db790565981bad2d0d9e09554c8c509a8179b4705a418300d58a7894b4"
+  },
+  {
+    "name": "handball_tone5",
+    "unicode": "1F93E-1F3FF",
+    "digest": "00404572d4683f2e8e8a494aa733e96fbec1723634d0a8cb8d75f2829a789d27"
+  },
+  {
+    "name": "handshake",
+    "unicode": "1F91D",
+    "digest": "cb4b08b70560908f96bda0aecd2f4c966bea180f9b7200e4c81d342dc8d36087"
+  },
+  {
+    "name": "shaking_hands",
+    "unicode": "1F91D",
+    "digest": "cb4b08b70560908f96bda0aecd2f4c966bea180f9b7200e4c81d342dc8d36087"
+  },
+  {
+    "name": "handshake_tone1",
+    "unicode": "1F91D-1F3FB",
+    "digest": "40470e224683ba375ed8698c0cbd560556be5a8898237ddf504377a3a7e89ff0"
+  },
+  {
+    "name": "shaking_hands_tone1",
+    "unicode": "1F91D-1F3FB",
+    "digest": "40470e224683ba375ed8698c0cbd560556be5a8898237ddf504377a3a7e89ff0"
+  },
+  {
+    "name": "handshake_tone2",
+    "unicode": "1F91D-1F3FC",
+    "digest": "77ed378243bf682f1f4f1a8caeabcbedf772f54631cc40ea46c099e46a499b18"
+  },
+  {
+    "name": "shaking_hands_tone2",
+    "unicode": "1F91D-1F3FC",
+    "digest": "77ed378243bf682f1f4f1a8caeabcbedf772f54631cc40ea46c099e46a499b18"
+  },
+  {
+    "name": "handshake_tone3",
+    "unicode": "1F91D-1F3FD",
+    "digest": "81b95050f0878b617f5d2640e34031c26a0072e46ca5a688eb4356e48bc74c92"
+  },
+  {
+    "name": "shaking_hands_tone3",
+    "unicode": "1F91D-1F3FD",
+    "digest": "81b95050f0878b617f5d2640e34031c26a0072e46ca5a688eb4356e48bc74c92"
+  },
+  {
+    "name": "handshake_tone4",
+    "unicode": "1F91D-1F3FE",
+    "digest": "74919a6f026fbbd0ccdbdbd4288d1b2ef3bda8930e9142c07736db4a7f3ef345"
+  },
+  {
+    "name": "shaking_hands_tone4",
+    "unicode": "1F91D-1F3FE",
+    "digest": "74919a6f026fbbd0ccdbdbd4288d1b2ef3bda8930e9142c07736db4a7f3ef345"
+  },
+  {
+    "name": "handshake_tone5",
+    "unicode": "1F91D-1F3FF",
+    "digest": "a30d662bfad0074ca7e32cf6f7229b643b636c4beaec496777eb7e1d5b6fc470"
+  },
+  {
+    "name": "shaking_hands_tone5",
+    "unicode": "1F91D-1F3FF",
+    "digest": "a30d662bfad0074ca7e32cf6f7229b643b636c4beaec496777eb7e1d5b6fc470"
   },
   {
     "name": "hash",
@@ -5879,16 +5959,6 @@
     "unicode": "1F63B",
     "digest": "8a1f28b97d661ca4cff5ee13889ca61b5fa745ccb590e80832b7d7701df101d6"
   },
-  {
-    "name": "heart_tip",
-    "unicode": "1F394",
-    "digest": "2178829e2c85accda55d2f685544587f6de5c8398a127ae1e08ff1c4ab282204"
-  },
-  {
-    "name": "heart_with_tip_on_the_left",
-    "unicode": "1F394",
-    "digest": "2178829e2c85accda55d2f685544587f6de5c8398a127ae1e08ff1c4ab282204"
-  },
   {
     "name": "heartbeat",
     "unicode": "1F493",
@@ -6144,16 +6214,6 @@
     "unicode": "1F4E8",
     "digest": "310b7bdcca93452fe10c72c03d0aafa12b98e5d3408896d275d06d3693812c7a"
   },
-  {
-    "name": "info",
-    "unicode": "1F6C8",
-    "digest": "59c35e77d5ee663c5d56f7d8af845ce8aeb9935e526ae4a06e02ae70e71212ca"
-  },
-  {
-    "name": "circled_information_source",
-    "unicode": "1F6C8",
-    "digest": "59c35e77d5ee663c5d56f7d8af845ce8aeb9935e526ae4a06e02ae70e71212ca"
-  },
   {
     "name": "information_desk_person",
     "unicode": "1F481",
@@ -6249,16 +6309,6 @@
     "unicode": "1F456",
     "digest": "f986ad32e419cca81c995f8371f0189d1490172a97ebbeac60054a1af08949c5"
   },
-  {
-    "name": "jet_up",
-    "unicode": "1F6E6",
-    "digest": "3708e5e034b1c64d1268d66527e13c369aa0f8903bce9172bef773b2d1940948"
-  },
-  {
-    "name": "up_pointing_military_airplane",
-    "unicode": "1F6E6",
-    "digest": "3708e5e034b1c64d1268d66527e13c369aa0f8903bce9172bef773b2d1940948"
-  },
   {
     "name": "joy",
     "unicode": "1F602",
@@ -6274,6 +6324,66 @@
     "unicode": "1F579",
     "digest": "671ee588f397a96f27056a67e6a06d6e8d22c2109ec57b2859badb5fec9cf8dd"
   },
+  {
+    "name": "juggling",
+    "unicode": "1F939",
+    "digest": "1f5dafa78de8b37f3df88fdf3084d2380666bd74ab2f449754d8724f6f8dbfa5"
+  },
+  {
+    "name": "juggler",
+    "unicode": "1F939",
+    "digest": "1f5dafa78de8b37f3df88fdf3084d2380666bd74ab2f449754d8724f6f8dbfa5"
+  },
+  {
+    "name": "juggling_tone1",
+    "unicode": "1F939-1F3FB",
+    "digest": "b0b4d020148c896be69c28b08e3c486f6db270d138c7ccf4be362b29eb99878d"
+  },
+  {
+    "name": "juggler_tone1",
+    "unicode": "1F939-1F3FB",
+    "digest": "b0b4d020148c896be69c28b08e3c486f6db270d138c7ccf4be362b29eb99878d"
+  },
+  {
+    "name": "juggling_tone2",
+    "unicode": "1F939-1F3FC",
+    "digest": "cfe0c1649b2fdca03673e0e64f3a7d06d4bd49b8954c769aeb7eb88b70ec99f4"
+  },
+  {
+    "name": "juggler_tone2",
+    "unicode": "1F939-1F3FC",
+    "digest": "cfe0c1649b2fdca03673e0e64f3a7d06d4bd49b8954c769aeb7eb88b70ec99f4"
+  },
+  {
+    "name": "juggling_tone3",
+    "unicode": "1F939-1F3FD",
+    "digest": "7f87022722008bb265abe245e8157dc7a61944f5da62b3cf86f26ee1b3bdef63"
+  },
+  {
+    "name": "juggler_tone3",
+    "unicode": "1F939-1F3FD",
+    "digest": "7f87022722008bb265abe245e8157dc7a61944f5da62b3cf86f26ee1b3bdef63"
+  },
+  {
+    "name": "juggling_tone4",
+    "unicode": "1F939-1F3FE",
+    "digest": "1f00da8c05582c95501cc6c3fe5ce0f9bfbc16789dcee59844a8fe7831198583"
+  },
+  {
+    "name": "juggler_tone4",
+    "unicode": "1F939-1F3FE",
+    "digest": "1f00da8c05582c95501cc6c3fe5ce0f9bfbc16789dcee59844a8fe7831198583"
+  },
+  {
+    "name": "juggling_tone5",
+    "unicode": "1F939-1F3FF",
+    "digest": "a195bf734788eb7961c00dbc05255a49da8b9d5042fada29b26cc20393d3ce52"
+  },
+  {
+    "name": "juggler_tone5",
+    "unicode": "1F939-1F3FF",
+    "digest": "a195bf734788eb7961c00dbc05255a49da8b9d5042fada29b26cc20393d3ce52"
+  },
   {
     "name": "kaaba",
     "unicode": "1F54B",
@@ -6296,38 +6406,8 @@
   },
   {
     "name": "keyboard",
-    "unicode": "1F5AE",
-    "digest": "3b254cbf19946df3af05e501d11653d89fcda91684b7248d86186f842b83bf16"
-  },
-  {
-    "name": "wired_keyboard",
-    "unicode": "1F5AE",
-    "digest": "3b254cbf19946df3af05e501d11653d89fcda91684b7248d86186f842b83bf16"
-  },
-  {
-    "name": "keyboard_mouse",
-    "unicode": "1F5A6",
-    "digest": "95b523e55d8afeaeb06442bbe20e47f49643bb0c32d89a8cdbbccdead20532b3"
-  },
-  {
-    "name": "keyboard_and_mouse",
-    "unicode": "1F5A6",
-    "digest": "95b523e55d8afeaeb06442bbe20e47f49643bb0c32d89a8cdbbccdead20532b3"
-  },
-  {
-    "name": "keyboard_with_jacks",
-    "unicode": "1F398",
-    "digest": "e29a0d0b8018d13458469edca13c60a882a2817957c1aa11b050684c995a47ee"
-  },
-  {
-    "name": "musical_keyboard_with_jacks",
-    "unicode": "1F398",
-    "digest": "e29a0d0b8018d13458469edca13c60a882a2817957c1aa11b050684c995a47ee"
-  },
-  {
-    "name": "keycap_ten",
-    "unicode": "1F51F",
-    "digest": "c7c9491021740d2c17edddb856f79579b0b943d8dc85a2f48dbaac84f35b8a40"
+    "unicode": "2328",
+    "digest": "34da8ff62ca964142f9281b80123dbba74deaac8d77fa61758c30cfb36c31386"
   },
   {
     "name": "kimono",
@@ -6384,6 +6464,16 @@
     "unicode": "1F619",
     "digest": "f0f8636cb1a02b93cc72ce1b194b890fca823d91e35926b889be3ecfae79207f"
   },
+  {
+    "name": "kiwi",
+    "unicode": "1F95D",
+    "digest": "70a3a05f333d9455d2da12eed970bc3baae416286848fed8e5dd31b5be0819be"
+  },
+  {
+    "name": "kiwifruit",
+    "unicode": "1F95D",
+    "digest": "70a3a05f333d9455d2da12eed970bc3baae416286848fed8e5dd31b5be0819be"
+  },
   {
     "name": "knife",
     "unicode": "1F52A",
@@ -6450,19 +6540,69 @@
     "digest": "e58cb714353e96a2891a5d97910ff79660e637af909b81c49c919d3735db55b4"
   },
   {
-    "name": "left_luggage",
-    "unicode": "1F6C5",
-    "digest": "6625077767a51163ea20cbc299f3c13fd5ccf1b5ce365ee702ef1fef6be3dadf"
+    "name": "left_facing_fist",
+    "unicode": "1F91B",
+    "digest": "7861be485beefae0de341df2f21576666e22f63511a033e785752f30c07291da"
+  },
+  {
+    "name": "left_fist",
+    "unicode": "1F91B",
+    "digest": "7861be485beefae0de341df2f21576666e22f63511a033e785752f30c07291da"
+  },
+  {
+    "name": "left_facing_fist_tone1",
+    "unicode": "1F91B-1F3FB",
+    "digest": "2e4c4dd96b0e4b46fe0f9ce5666344d266d0f17a8544cbae73d96638d1955296"
+  },
+  {
+    "name": "left_fist_tone1",
+    "unicode": "1F91B-1F3FB",
+    "digest": "2e4c4dd96b0e4b46fe0f9ce5666344d266d0f17a8544cbae73d96638d1955296"
+  },
+  {
+    "name": "left_facing_fist_tone2",
+    "unicode": "1F91B-1F3FC",
+    "digest": "b96a63a801175ce98a75f0edad7b5574251a3fbbd894d8ab3f21aeeda366cc13"
+  },
+  {
+    "name": "left_fist_tone2",
+    "unicode": "1F91B-1F3FC",
+    "digest": "b96a63a801175ce98a75f0edad7b5574251a3fbbd894d8ab3f21aeeda366cc13"
+  },
+  {
+    "name": "left_facing_fist_tone3",
+    "unicode": "1F91B-1F3FD",
+    "digest": "99df84635513c2ebfef24df1bd3705233e02149eef788c7b82ca0548df6f6ea5"
+  },
+  {
+    "name": "left_fist_tone3",
+    "unicode": "1F91B-1F3FD",
+    "digest": "99df84635513c2ebfef24df1bd3705233e02149eef788c7b82ca0548df6f6ea5"
+  },
+  {
+    "name": "left_facing_fist_tone4",
+    "unicode": "1F91B-1F3FE",
+    "digest": "68954842ca725aec0aa39bce4aa81aad17ac30f5f298561dfa411feb07414cd3"
   },
   {
-    "name": "left_receiver",
-    "unicode": "1F57B",
-    "digest": "8052e44951afee04c87296128744b5019ec783c9ed1a231f659af6c8ddaa50f3"
+    "name": "left_fist_tone4",
+    "unicode": "1F91B-1F3FE",
+    "digest": "68954842ca725aec0aa39bce4aa81aad17ac30f5f298561dfa411feb07414cd3"
   },
   {
-    "name": "left_hand_telephone_receiver",
-    "unicode": "1F57B",
-    "digest": "8052e44951afee04c87296128744b5019ec783c9ed1a231f659af6c8ddaa50f3"
+    "name": "left_facing_fist_tone5",
+    "unicode": "1F91B-1F3FF",
+    "digest": "a419b33fae82612dc860ff48950c0547a1642d4f0c94b6547324440837d3bb21"
+  },
+  {
+    "name": "left_fist_tone5",
+    "unicode": "1F91B-1F3FF",
+    "digest": "a419b33fae82612dc860ff48950c0547a1642d4f0c94b6547324440837d3bb21"
+  },
+  {
+    "name": "left_luggage",
+    "unicode": "1F6C5",
+    "digest": "6625077767a51163ea20cbc299f3c13fd5ccf1b5ce365ee702ef1fef6be3dadf"
   },
   {
     "name": "left_right_arrow",
@@ -6569,16 +6709,6 @@
     "unicode": "1F3CB-1F3FF",
     "digest": "79b0edf6ce1fd024dd7f458e322ad8588af0b789a04cc1cf38380dc8b9c76f55"
   },
-  {
-    "name": "light_check_mark",
-    "unicode": "1F5F8",
-    "digest": "7842b0df8c2b6703bed0cce5d2790d394eec7120b2a245a76f375528f2729a7b"
-  },
-  {
-    "name": "light_mark",
-    "unicode": "1F5F8",
-    "digest": "7842b0df8c2b6703bed0cce5d2790d394eec7120b2a245a76f375528f2729a7b"
-  },
   {
     "name": "light_rail",
     "unicode": "1F688",
@@ -6604,16 +6734,16 @@
     "unicode": "1F444",
     "digest": "8740d8086525c7a836d64625a6915cc1c59af69ba143456dbb59e0179276895e"
   },
-  {
-    "name": "lips2",
-    "unicode": "1F5E2",
-    "digest": "c6ba915982ac47d8aaf14ad3605949df95588acfb4e147bf608f8c1714cdf19b"
-  },
   {
     "name": "lipstick",
     "unicode": "1F484",
     "digest": "751dcb22706a796033b13a2ccb94304236ec13207ad4d011e02d230ae33ab5c1"
   },
+  {
+    "name": "lizard",
+    "unicode": "1F98E",
+    "digest": "fb9191f9eab58b8403d4c4626ccbb14ba05c1f6944011751a8edcc4dd03c66e6"
+  },
   {
     "name": "lock",
     "unicode": "1F512",
@@ -6659,6 +6789,16 @@
     "unicode": "1F505",
     "digest": "a065d00a416e297c168b0a675cafcf492fedf94865cb21801a1be5a3914593d4"
   },
+  {
+    "name": "lying_face",
+    "unicode": "1F925",
+    "digest": "ce836170165e1b70938273f289c02c2106873cd9ab5472dbcd487c2f9f53f13d"
+  },
+  {
+    "name": "liar",
+    "unicode": "1F925",
+    "digest": "ce836170165e1b70938273f289c02c2106873cd9ab5472dbcd487c2f9f53f13d"
+  },
   {
     "name": "m",
     "unicode": "24C2",
@@ -6704,6 +6844,121 @@
     "unicode": "1F468",
     "digest": "42b882d2c6aa095f1afcf901203838d95c1908bdc725519779186b9c33c728d7"
   },
+  {
+    "name": "man_dancing",
+    "unicode": "1F57A",
+    "digest": "9f632ee0c886d5f03c61e5f3a27668262c0cc2693b857a91c23c1e5ea3785b9e"
+  },
+  {
+    "name": "male_dancer",
+    "unicode": "1F57A",
+    "digest": "9f632ee0c886d5f03c61e5f3a27668262c0cc2693b857a91c23c1e5ea3785b9e"
+  },
+  {
+    "name": "man_dancing_tone1",
+    "unicode": "1F57A-1F3FB",
+    "digest": "6c56a16cb105bcdd97472645b3a351cebdbb1132cbfd18b0118f289db5fbe741"
+  },
+  {
+    "name": "male_dancer_tone1",
+    "unicode": "1F57A-1F3FB",
+    "digest": "6c56a16cb105bcdd97472645b3a351cebdbb1132cbfd18b0118f289db5fbe741"
+  },
+  {
+    "name": "man_dancing_tone2",
+    "unicode": "1F57A-1F3FC",
+    "digest": "ed7e78c14d205a03fdd5581e5213add69a55e13b4cbaf76a6d5a0d6c80f53327"
+  },
+  {
+    "name": "male_dancer_tone2",
+    "unicode": "1F57A-1F3FC",
+    "digest": "ed7e78c14d205a03fdd5581e5213add69a55e13b4cbaf76a6d5a0d6c80f53327"
+  },
+  {
+    "name": "man_dancing_tone3",
+    "unicode": "1F57A-1F3FD",
+    "digest": "13b45403e11800163406206eedeb8b579cc83eca2f60246be97e099164387bc8"
+  },
+  {
+    "name": "male_dancer_tone3",
+    "unicode": "1F57A-1F3FD",
+    "digest": "13b45403e11800163406206eedeb8b579cc83eca2f60246be97e099164387bc8"
+  },
+  {
+    "name": "man_dancing_tone4",
+    "unicode": "1F57A-1F3FE",
+    "digest": "f6feb1b0b83565fadcdd1a8737d3daa08893e919547d2a06de899160162d9c4a"
+  },
+  {
+    "name": "male_dancer_tone4",
+    "unicode": "1F57A-1F3FE",
+    "digest": "f6feb1b0b83565fadcdd1a8737d3daa08893e919547d2a06de899160162d9c4a"
+  },
+  {
+    "name": "man_dancing_tone5",
+    "unicode": "1F57A-1F3FF",
+    "digest": "fe20a9ed9ba991653b4d0683de347ed7c226a5d75610307584a2ddd6fcd1e3f2"
+  },
+  {
+    "name": "male_dancer_tone5",
+    "unicode": "1F57A-1F3FF",
+    "digest": "fe20a9ed9ba991653b4d0683de347ed7c226a5d75610307584a2ddd6fcd1e3f2"
+  },
+  {
+    "name": "man_in_tuxedo",
+    "unicode": "1F935",
+    "digest": "4d451a971dfefedc4830ba78e19b123f250e09ae65baddccdc56c0f8aa3a9b50"
+  },
+  {
+    "name": "man_in_tuxedo_tone1",
+    "unicode": "1F935-1F3FB",
+    "digest": "2814833334fb211ae2ecb1fb5964e9752282d0fb4d7f3477de5dd2a4f812a793"
+  },
+  {
+    "name": "tuxedo_tone1",
+    "unicode": "1F935-1F3FB",
+    "digest": "2814833334fb211ae2ecb1fb5964e9752282d0fb4d7f3477de5dd2a4f812a793"
+  },
+  {
+    "name": "man_in_tuxedo_tone2",
+    "unicode": "1F935-1F3FC",
+    "digest": "cd1bab9ee0e2335d3cd99d51216cccdc4fc3c2cf20129b8b7e11a51a77258f68"
+  },
+  {
+    "name": "tuxedo_tone2",
+    "unicode": "1F935-1F3FC",
+    "digest": "cd1bab9ee0e2335d3cd99d51216cccdc4fc3c2cf20129b8b7e11a51a77258f68"
+  },
+  {
+    "name": "man_in_tuxedo_tone3",
+    "unicode": "1F935-1F3FD",
+    "digest": "f387775f925fe60b9f3e7cad63a55d4d196ddd41658029a70440d14c17cb99f9"
+  },
+  {
+    "name": "tuxedo_tone3",
+    "unicode": "1F935-1F3FD",
+    "digest": "f387775f925fe60b9f3e7cad63a55d4d196ddd41658029a70440d14c17cb99f9"
+  },
+  {
+    "name": "man_in_tuxedo_tone4",
+    "unicode": "1F935-1F3FE",
+    "digest": "08debd7a573d1201aee8a2f281ef7cb638d4a2a096222150391f36963f07c622"
+  },
+  {
+    "name": "tuxedo_tone4",
+    "unicode": "1F935-1F3FE",
+    "digest": "08debd7a573d1201aee8a2f281ef7cb638d4a2a096222150391f36963f07c622"
+  },
+  {
+    "name": "man_in_tuxedo_tone5",
+    "unicode": "1F935-1F3FF",
+    "digest": "e3b10e0619f0911cf9b665a265f4ef829b8f6ba6e9c3a021d0539a27e315f8fe"
+  },
+  {
+    "name": "tuxedo_tone5",
+    "unicode": "1F935-1F3FF",
+    "digest": "e3b10e0619f0911cf9b665a265f4ef829b8f6ba6e9c3a021d0539a27e315f8fe"
+  },
   {
     "name": "man_tone1",
     "unicode": "1F468-1F3FB",
@@ -6809,6 +7064,16 @@
     "unicode": "1F341",
     "digest": "72629a205e33f89337815ad7e51bb5c73947d1a9f98afe5072bdf4846827ae72"
   },
+  {
+    "name": "martial_arts_uniform",
+    "unicode": "1F94B",
+    "digest": "a1ae797b31081425b388ab31efc635d8eb73a40980fd0fae4708aa5313e2a964"
+  },
+  {
+    "name": "karate_uniform",
+    "unicode": "1F94B",
+    "digest": "a1ae797b31081425b388ab31efc635d8eb73a40980fd0fae4708aa5313e2a964"
+  },
   {
     "name": "mask",
     "unicode": "1F637",
@@ -7029,6 +7294,16 @@
     "unicode": "1F396",
     "digest": "5da18351dc14b66cfc070148c83b7c8e67e6b1e3f515ae501133c38ee5c28d3d"
   },
+  {
+    "name": "milk",
+    "unicode": "1F95B",
+    "digest": "38b28ea40399601fabc95bac5eaaf5a9e4e25548ec80325bd5069395ea884f85"
+  },
+  {
+    "name": "glass_of_milk",
+    "unicode": "1F95B",
+    "digest": "38b28ea40399601fabc95bac5eaaf5a9e4e25548ec80325bd5069395ea884f85"
+  },
   {
     "name": "milky_way",
     "unicode": "1F30C",
@@ -7084,31 +7359,6 @@
     "unicode": "1F69D",
     "digest": "2c9f185babcb4001fcef2b8dfc4a32126729843084d0076c3e3ccdc845ab23ad"
   },
-  {
-    "name": "mood_bubble",
-    "unicode": "1F5F0",
-    "digest": "1df7061217e478d43ab9a87d4f351c4ca56705acd6b4e0b0bedfdece77635f1b"
-  },
-  {
-    "name": "mood_bubble_lightning",
-    "unicode": "1F5F1",
-    "digest": "4af3e4e53eaa328b0d20542ab31705a74bf9fd368cd0673b706838ce1681d3c9"
-  },
-  {
-    "name": "lightning_mood_bubble",
-    "unicode": "1F5F1",
-    "digest": "4af3e4e53eaa328b0d20542ab31705a74bf9fd368cd0673b706838ce1681d3c9"
-  },
-  {
-    "name": "mood_lightning",
-    "unicode": "1F5F2",
-    "digest": "6784635e81ec722fd50a1c2a23b0f9679e4bf1b5ae2b5a01eeb995bc1f7a426f"
-  },
-  {
-    "name": "lightning_mood",
-    "unicode": "1F5F2",
-    "digest": "6784635e81ec722fd50a1c2a23b0f9679e4bf1b5ae2b5a01eeb995bc1f7a426f"
-  },
   {
     "name": "mortar_board",
     "unicode": "1F393",
@@ -7119,6 +7369,16 @@
     "unicode": "1F54C",
     "digest": "5f3d3de7feac953a70a318113531c2857d760a516c3d8d6f42d2a3b3b67ed196"
   },
+  {
+    "name": "motor_scooter",
+    "unicode": "1F6F5",
+    "digest": "e2dc7c981744a71f46858bd0858ff91af704ac06425ed80377bc3b119e57c872"
+  },
+  {
+    "name": "motorbike",
+    "unicode": "1F6F5",
+    "digest": "e2dc7c981744a71f46858bd0858ff91af704ac06425ed80377bc3b119e57c872"
+  },
   {
     "name": "motorboat",
     "unicode": "1F6E5",
@@ -7209,16 +7469,6 @@
     "unicode": "1F401",
     "digest": "f3ed37b639b7c16aae49502bd423f9fdeabaf15bc6f0f74063954b189e176b5d"
   },
-  {
-    "name": "mouse_one",
-    "unicode": "1F5AF",
-    "digest": "e0d2055ccba489d24e0c0b6d2f22793efe48a734b0fd50f5af88f721b40665c0"
-  },
-  {
-    "name": "one_button_mouse",
-    "unicode": "1F5AF",
-    "digest": "e0d2055ccba489d24e0c0b6d2f22793efe48a734b0fd50f5af88f721b40665c0"
-  },
   {
     "name": "mouse_three_button",
     "unicode": "1F5B1",
@@ -7239,6 +7489,66 @@
     "unicode": "1F5FF",
     "digest": "2c1d0662c95928936e6b9ab5a40c6110ff1cea5339f2803c7b63aabc76115afb"
   },
+  {
+    "name": "mrs_claus",
+    "unicode": "1F936",
+    "digest": "1f72f586ca75bd7ebb4150cdcc8199a930c32fa4b81510cb8d200f1b3ddd4076"
+  },
+  {
+    "name": "mother_christmas",
+    "unicode": "1F936",
+    "digest": "1f72f586ca75bd7ebb4150cdcc8199a930c32fa4b81510cb8d200f1b3ddd4076"
+  },
+  {
+    "name": "mrs_claus_tone1",
+    "unicode": "1F936-1F3FB",
+    "digest": "244596919e0fed050203cf9e040899de323d7821235929f175852439927bd129"
+  },
+  {
+    "name": "mother_christmas_tone1",
+    "unicode": "1F936-1F3FB",
+    "digest": "244596919e0fed050203cf9e040899de323d7821235929f175852439927bd129"
+  },
+  {
+    "name": "mrs_claus_tone2",
+    "unicode": "1F936-1F3FC",
+    "digest": "8cde96e8521f3a90262a7f5f8a2989a9590d9a02cda2c37e92335dc05975c18d"
+  },
+  {
+    "name": "mother_christmas_tone2",
+    "unicode": "1F936-1F3FC",
+    "digest": "8cde96e8521f3a90262a7f5f8a2989a9590d9a02cda2c37e92335dc05975c18d"
+  },
+  {
+    "name": "mrs_claus_tone3",
+    "unicode": "1F936-1F3FD",
+    "digest": "c39cd4346d4581799dd0e9a6447c91a954a75747bf2682c8e4d79c3b0fcf7405"
+  },
+  {
+    "name": "mother_christmas_tone3",
+    "unicode": "1F936-1F3FD",
+    "digest": "c39cd4346d4581799dd0e9a6447c91a954a75747bf2682c8e4d79c3b0fcf7405"
+  },
+  {
+    "name": "mrs_claus_tone4",
+    "unicode": "1F936-1F3FE",
+    "digest": "84c85cf54559ea2d78d196fee96149a249af4f959b78e223a0ec4fb72abdbcab"
+  },
+  {
+    "name": "mother_christmas_tone4",
+    "unicode": "1F936-1F3FE",
+    "digest": "84c85cf54559ea2d78d196fee96149a249af4f959b78e223a0ec4fb72abdbcab"
+  },
+  {
+    "name": "mrs_claus_tone5",
+    "unicode": "1F936-1F3FF",
+    "digest": "ce26c0e0645713b17e7497d9f2d0484cc5477564dae99320cabf04d160d3b2ff"
+  },
+  {
+    "name": "mother_christmas_tone5",
+    "unicode": "1F936-1F3FF",
+    "digest": "ce26c0e0645713b17e7497d9f2d0484cc5477564dae99320cabf04d160d3b2ff"
+  },
   {
     "name": "muscle",
     "unicode": "1F4AA",
@@ -7329,6 +7639,16 @@
     "unicode": "1F4DB",
     "digest": "f9f6a4895ff0be8fb2ccc7ad195b94e9650f742f66ead999e90724cfb77af628"
   },
+  {
+    "name": "nauseated_face",
+    "unicode": "1F922",
+    "digest": "f8471cf4720948d8246ec9d30e29783e819f90e3cfe8b1ba628671a1aad1a91c"
+  },
+  {
+    "name": "sick",
+    "unicode": "1F922",
+    "digest": "f8471cf4720948d8246ec9d30e29783e819f90e3cfe8b1ba628671a1aad1a91c"
+  },
   {
     "name": "necktie",
     "unicode": "1F454",
@@ -7349,16 +7669,6 @@
     "unicode": "1F913",
     "digest": "9e5f3c93db25cf1d0f9d6e6bd2993161afec6c30573ba3fe85e13b8c84483d66"
   },
-  {
-    "name": "network",
-    "unicode": "1F5A7",
-    "digest": "1dbaa54deeb2328fd8a3f044e450c97ac3ff39627c598bb2f4312d677482ee06"
-  },
-  {
-    "name": "three_networked_computers",
-    "unicode": "1F5A7",
-    "digest": "1dbaa54deeb2328fd8a3f044e450c97ac3ff39627c598bb2f4312d677482ee06"
-  },
   {
     "name": "neutral_face",
     "unicode": "1F610",
@@ -7514,26 +7824,6 @@
     "unicode": "1F443-1F3FF",
     "digest": "1e0f9842e0f8ad5805eabd3f35a6038b7a2e49d566a1f5c17271f9cdf467ca60"
   },
-  {
-    "name": "note",
-    "unicode": "1F5C9",
-    "digest": "073660fdaa02ecf98d04f61f8d65d6cc447ccae3825fccaff19a2c99ebba52af"
-  },
-  {
-    "name": "note_page",
-    "unicode": "1F5C9",
-    "digest": "073660fdaa02ecf98d04f61f8d65d6cc447ccae3825fccaff19a2c99ebba52af"
-  },
-  {
-    "name": "note_empty",
-    "unicode": "1F5C6",
-    "digest": "06b56eeaca6349bbcf1020bea98f937450a7e086db65cd5d7497748e0fb607be"
-  },
-  {
-    "name": "empty_note_page",
-    "unicode": "1F5C6",
-    "digest": "06b56eeaca6349bbcf1020bea98f937450a7e086db65cd5d7497748e0fb607be"
-  },
   {
     "name": "notebook",
     "unicode": "1F4D3",
@@ -7544,26 +7834,6 @@
     "unicode": "1F4D4",
     "digest": "d822eda4b49cbfa399b36f134c1a0b8dcfdd27ed89f12c50bc18f6f0a9aa56ef"
   },
-  {
-    "name": "notepad",
-    "unicode": "1F5CA",
-    "digest": "85069e2d13540886457368a57295072aec44c7137d9223bfcf908ce1f0e5124e"
-  },
-  {
-    "name": "note_pad",
-    "unicode": "1F5CA",
-    "digest": "85069e2d13540886457368a57295072aec44c7137d9223bfcf908ce1f0e5124e"
-  },
-  {
-    "name": "notepad_empty",
-    "unicode": "1F5C7",
-    "digest": "8be5053e74c13d8220917c5aee1f4afdecb001612886438f283b0c2a0fecf6af"
-  },
-  {
-    "name": "empty_note_pad",
-    "unicode": "1F5C7",
-    "digest": "8be5053e74c13d8220917c5aee1f4afdecb001612886438f283b0c2a0fecf6af"
-  },
   {
     "name": "notepad_spiral",
     "unicode": "1F5D2",
@@ -7599,6 +7869,16 @@
     "unicode": "1F30A",
     "digest": "1a9ca9848d4fb75852addfc10bf84eccf7caa5339714b90e3de4cb6f2518465e"
   },
+  {
+    "name": "octagonal_sign",
+    "unicode": "1F6D1",
+    "digest": "9f6927048e1f9da57f89d1ae1eb86fa4ab7abdbabca756a738a799e948d0b3f9"
+  },
+  {
+    "name": "stop_sign",
+    "unicode": "1F6D1",
+    "digest": "9f6927048e1f9da57f89d1ae1eb86fa4ab7abdbabca756a738a799e948d0b3f9"
+  },
   {
     "name": "octopus",
     "unicode": "1F419",
@@ -7859,16 +8139,6 @@
     "unicode": "26CE",
     "digest": "6112e2a1656b1cb8bd9a8b0dfa6cbf66d30cae671710a9ef75c821de344aab2b"
   },
-  {
-    "name": "optical_disk",
-    "unicode": "1F5B8",
-    "digest": "df8c10028d29d65f144a6b789d1c3294e7b3293554c4c30d28d72dc7ba8d9a5d"
-  },
-  {
-    "name": "optical_disc_icon",
-    "unicode": "1F5B8",
-    "digest": "df8c10028d29d65f144a6b789d1c3294e7b3293554c4c30d28d72dc7ba8d9a5d"
-  },
   {
     "name": "orange_book",
     "unicode": "1F4D9",
@@ -7884,6 +8154,11 @@
     "unicode": "1F4E4",
     "digest": "e47cb481a0ffcb39996f32fd313e19b362a91d8dda15ffca48ac23a3b5bb5baf"
   },
+  {
+    "name": "owl",
+    "unicode": "1F989",
+    "digest": "f62ec1ad23ad9038966eea8d8b79660ac212f291af2e89bcdb0fdc683caf41e5"
+  },
   {
     "name": "ox",
     "unicode": "1F402",
@@ -7894,11 +8169,6 @@
     "unicode": "1F4E6",
     "digest": "e82bf5accebb65136e897c15607eef635fb79fd7b2d8c8e19a9eb00b6786918c"
   },
-  {
-    "name": "page",
-    "unicode": "1F5CF",
-    "digest": "cc745056525f59d9128d1d03b14770376bb09ab64b8ef4ac994ab7f38efd4783"
-  },
   {
     "name": "page_facing_up",
     "unicode": "1F4C4",
@@ -7914,11 +8184,6 @@
     "unicode": "1F4DF",
     "digest": "e21c756cc1c58ebc1b37ebcd38e22a25b31e2e81306c6f18285d6a7671f9eb12"
   },
-  {
-    "name": "pages",
-    "unicode": "1F5D0",
-    "digest": "05bd47b78f089389356d9d839c736843f56b959ab4277056606ffcbb013390bc"
-  },
   {
     "name": "paintbrush",
     "unicode": "1F58C",
@@ -7934,6 +8199,11 @@
     "unicode": "1F334",
     "digest": "90fedafd62fe0abf51325174d0f293ebb9a4794913b9ba93b12f2d0119056df1"
   },
+  {
+    "name": "pancakes",
+    "unicode": "1F95E",
+    "digest": "5256b4832431e8a88555796b1a9726f12d909a26fb2bdc3a0abff76412c45903"
+  },
   {
     "name": "panda_face",
     "unicode": "1F43C",
@@ -8009,6 +8279,16 @@
     "unicode": "1F351",
     "digest": "768d1f4f29e1e06aff5abb29043be83087ded16427ce6a2d0f682814e665e311"
   },
+  {
+    "name": "peanuts",
+    "unicode": "1F95C",
+    "digest": "e2384846b6e4a6c3a56e991ebb749cb68b330ac00a9e9d888b2c39105ff7ff5d"
+  },
+  {
+    "name": "shelled_peanut",
+    "unicode": "1F95C",
+    "digest": "e2384846b6e4a6c3a56e991ebb749cb68b330ac00a9e9d888b2c39105ff7ff5d"
+  },
   {
     "name": "pear",
     "unicode": "1F350",
@@ -8049,41 +8329,11 @@
     "unicode": "270F",
     "digest": "9ca1b56b5726f472b1f1b23050ed163e213916dac379d22e38e4c8358fe871e0"
   },
-  {
-    "name": "pencil3",
-    "unicode": "1F589",
-    "digest": "52c1ba1228917eb491ac1745a495e0fdafba6b985a81caba250f71d1f94c725c"
-  },
-  {
-    "name": "lower_left_pencil",
-    "unicode": "1F589",
-    "digest": "52c1ba1228917eb491ac1745a495e0fdafba6b985a81caba250f71d1f94c725c"
-  },
   {
     "name": "penguin",
     "unicode": "1F427",
     "digest": "a1800ab931d6dc84a9c89bfab2c815198025c276d952509c55b18dd20bd9d316"
   },
-  {
-    "name": "pennant_black",
-    "unicode": "1F3F2",
-    "digest": "cd3c33bfc3c7fbe84b98d2d481d56a7bf5488ff94afadd8b5a0e454768b80269"
-  },
-  {
-    "name": "black_pennant",
-    "unicode": "1F3F2",
-    "digest": "cd3c33bfc3c7fbe84b98d2d481d56a7bf5488ff94afadd8b5a0e454768b80269"
-  },
-  {
-    "name": "pennant_white",
-    "unicode": "1F3F1",
-    "digest": "818b1be73540f2cfeb1c514e1ee75d18715af317f0db817d9ae081b9ea33d4b0"
-  },
-  {
-    "name": "white_pennant",
-    "unicode": "1F3F1",
-    "digest": "818b1be73540f2cfeb1c514e1ee75d18715af317f0db817d9ae081b9ea33d4b0"
-  },
   {
     "name": "pensive",
     "unicode": "1F614",
@@ -8226,18 +8476,8 @@
   },
   {
     "name": "table_tennis",
-    "unicode": "1F3D3",
-    "digest": "943a858bd054c81a08a08951f8351c27c8009b85a9359729c7362868298b58e1"
-  },
-  {
-    "name": "piracy",
-    "unicode": "1F572",
-    "digest": "f42955ba75c598392e5e258be49968d858c876e0d6e7aa9dc795f7e8cff42be9"
-  },
-  {
-    "name": "no_piracy",
-    "unicode": "1F572",
-    "digest": "f42955ba75c598392e5e258be49968d858c876e0d6e7aa9dc795f7e8cff42be9"
+    "unicode": "1F3D3",
+    "digest": "943a858bd054c81a08a08951f8351c27c8009b85a9359729c7362868298b58e1"
   },
   {
     "name": "pisces",
@@ -8469,6 +8709,11 @@
     "unicode": "1F6B0",
     "digest": "dbe80d9637837377cc2a290da2e895f81a3108cc18b049e3d87212402c1c2098"
   },
+  {
+    "name": "potato",
+    "unicode": "1F954",
+    "digest": "a56a69f36f3a0793f278726d92c0cea2960554f3062ef1a0904526a04511d8e1"
+  },
   {
     "name": "pouch",
     "unicode": "1F45D",
@@ -8524,6 +8769,96 @@
     "unicode": "1F4FF",
     "digest": "80177091264430cbcf7c994fbe5ee17319d1a58d933636cc752a54dafcf98a05"
   },
+  {
+    "name": "pregnant_woman",
+    "unicode": "1F930",
+    "digest": "49abb86409103338bdb6ae43c13a78ca2dc9cd158a26df35eadd0da3c84a4352"
+  },
+  {
+    "name": "expecting_woman",
+    "unicode": "1F930",
+    "digest": "49abb86409103338bdb6ae43c13a78ca2dc9cd158a26df35eadd0da3c84a4352"
+  },
+  {
+    "name": "pregnant_woman_tone1",
+    "unicode": "1F930-1F3FB",
+    "digest": "5a9f8ed2b631ecf8af111803a5c11f4c156435a5293cb50329c7b98697c8da25"
+  },
+  {
+    "name": "expecting_woman_tone1",
+    "unicode": "1F930-1F3FB",
+    "digest": "5a9f8ed2b631ecf8af111803a5c11f4c156435a5293cb50329c7b98697c8da25"
+  },
+  {
+    "name": "pregnant_woman_tone2",
+    "unicode": "1F930-1F3FC",
+    "digest": "279a2eafff603b11629c955b05f5bd3d7da9a271d4fb3f02e9ccd457b8d2d815"
+  },
+  {
+    "name": "expecting_woman_tone2",
+    "unicode": "1F930-1F3FC",
+    "digest": "279a2eafff603b11629c955b05f5bd3d7da9a271d4fb3f02e9ccd457b8d2d815"
+  },
+  {
+    "name": "pregnant_woman_tone3",
+    "unicode": "1F930-1F3FD",
+    "digest": "93bb63ec2312db315e3f0065520b715cc413ac0fd65538ec9b5cd97df2a42b20"
+  },
+  {
+    "name": "expecting_woman_tone3",
+    "unicode": "1F930-1F3FD",
+    "digest": "93bb63ec2312db315e3f0065520b715cc413ac0fd65538ec9b5cd97df2a42b20"
+  },
+  {
+    "name": "pregnant_woman_tone4",
+    "unicode": "1F930-1F3FE",
+    "digest": "b8dc3dcec894bfd832a249459b10850f8786b6778d8887a677d1291865623da2"
+  },
+  {
+    "name": "expecting_woman_tone4",
+    "unicode": "1F930-1F3FE",
+    "digest": "b8dc3dcec894bfd832a249459b10850f8786b6778d8887a677d1291865623da2"
+  },
+  {
+    "name": "pregnant_woman_tone5",
+    "unicode": "1F930-1F3FF",
+    "digest": "73ee432752f81980f353a7f9b9f7a5ece62512dca08e15c1876b89227face21c"
+  },
+  {
+    "name": "expecting_woman_tone5",
+    "unicode": "1F930-1F3FF",
+    "digest": "73ee432752f81980f353a7f9b9f7a5ece62512dca08e15c1876b89227face21c"
+  },
+  {
+    "name": "prince",
+    "unicode": "1F934",
+    "digest": "34a0e0625f0a9825d3674192d6233b6cae4d8130451293df09f91a6a4165869c"
+  },
+  {
+    "name": "prince_tone1",
+    "unicode": "1F934-1F3FB",
+    "digest": "ccecdfeccb2ab1fceceae14f3fba875c8c7099785a4c40131c08a697b5b675fc"
+  },
+  {
+    "name": "prince_tone2",
+    "unicode": "1F934-1F3FC",
+    "digest": "c373fd3e0c1798415e3d8d88fab6c98c1bbdedcbe6f52f3a3899f6e2124a768d"
+  },
+  {
+    "name": "prince_tone3",
+    "unicode": "1F934-1F3FD",
+    "digest": "71d15695ca954d55aa69d3c753c7d31a8ba5329713a8ddbc90dafc11e524c4ef"
+  },
+  {
+    "name": "prince_tone4",
+    "unicode": "1F934-1F3FE",
+    "digest": "08f6cb32424f15cc3aaf83c31a5dac7c01a6be2f37ea8f13aed579ce6fb4db19"
+  },
+  {
+    "name": "prince_tone5",
+    "unicode": "1F934-1F3FF",
+    "digest": "77d521148efa33fa4d3409693d050fecfd948411e807327484f174e289834649"
+  },
   {
     "name": "princess",
     "unicode": "1F478",
@@ -8559,16 +8894,6 @@
     "unicode": "1F5A8",
     "digest": "5e5307e3dc7ec4e16c9978fb00934c99c4adefca7d32732a244d1f2de71ce6f8"
   },
-  {
-    "name": "prohibited",
-    "unicode": "1F6C7",
-    "digest": "bc6cdea2269a0ec39576d98dc4cda2bd9efa4dc330dde870148c6a85ad9cc63f"
-  },
-  {
-    "name": "prohibited_sign",
-    "unicode": "1F6C7",
-    "digest": "bc6cdea2269a0ec39576d98dc4cda2bd9efa4dc330dde870148c6a85ad9cc63f"
-  },
   {
     "name": "projector",
     "unicode": "1F4FD",
@@ -8624,11 +8949,6 @@
     "unicode": "1F4CC",
     "digest": "c3f7d7008be6bab8dc02284d4d759abf7aafbb3dbbe3a53f0f5b2ff685af88f8"
   },
-  {
-    "name": "pushpin_black",
-    "unicode": "1F588",
-    "digest": "80ebac74edb9e8e1f8a219b32a676d318ed73b359cd8193b91b493d775307f63"
-  },
   {
     "name": "put_litter_in_its_place",
     "unicode": "1F6AE",
@@ -8709,6 +9029,66 @@
     "unicode": "1F308",
     "digest": "a93aceb54e965f35e397e8c8716b1831614933308d026012d5464ee42783ed4d"
   },
+  {
+    "name": "raised_back_of_hand",
+    "unicode": "1F91A",
+    "digest": "20973a697e826625deba5ee3c4f25eb5e1737f2e860ac6fe4ee4d0e0c84b5e12"
+  },
+  {
+    "name": "back_of_hand",
+    "unicode": "1F91A",
+    "digest": "20973a697e826625deba5ee3c4f25eb5e1737f2e860ac6fe4ee4d0e0c84b5e12"
+  },
+  {
+    "name": "raised_back_of_hand_tone1",
+    "unicode": "1F91A-1F3FB",
+    "digest": "06af5941255ca69d10d99d0a512bbda6141a296453835dbccf259ce0afe1dd3d"
+  },
+  {
+    "name": "back_of_hand_tone1",
+    "unicode": "1F91A-1F3FB",
+    "digest": "06af5941255ca69d10d99d0a512bbda6141a296453835dbccf259ce0afe1dd3d"
+  },
+  {
+    "name": "raised_back_of_hand_tone2",
+    "unicode": "1F91A-1F3FC",
+    "digest": "429ed19555c9e5197b729b3e7bd8013346551051cb0b3fbc8a4372717c9a027d"
+  },
+  {
+    "name": "back_of_hand_tone2",
+    "unicode": "1F91A-1F3FC",
+    "digest": "429ed19555c9e5197b729b3e7bd8013346551051cb0b3fbc8a4372717c9a027d"
+  },
+  {
+    "name": "raised_back_of_hand_tone3",
+    "unicode": "1F91A-1F3FD",
+    "digest": "487a1c3f19e77c99b520ec073de2acc4a9e585b739a84b3989f7de85d2c2045c"
+  },
+  {
+    "name": "back_of_hand_tone3",
+    "unicode": "1F91A-1F3FD",
+    "digest": "487a1c3f19e77c99b520ec073de2acc4a9e585b739a84b3989f7de85d2c2045c"
+  },
+  {
+    "name": "raised_back_of_hand_tone4",
+    "unicode": "1F91A-1F3FE",
+    "digest": "154254d8500c55ec3de698be4a352f9bcf06e2950cabc4eabaccad0f39a1e1e9"
+  },
+  {
+    "name": "back_of_hand_tone4",
+    "unicode": "1F91A-1F3FE",
+    "digest": "154254d8500c55ec3de698be4a352f9bcf06e2950cabc4eabaccad0f39a1e1e9"
+  },
+  {
+    "name": "raised_back_of_hand_tone5",
+    "unicode": "1F91A-1F3FF",
+    "digest": "6e9c0855ecd5f14adca5e5862427c3d39ffcf86f7ddd3aaa1fefc3cefc7483c8"
+  },
+  {
+    "name": "back_of_hand_tone5",
+    "unicode": "1F91A-1F3FF",
+    "digest": "6e9c0855ecd5f14adca5e5862427c3d39ffcf86f7ddd3aaa1fefc3cefc7483c8"
+  },
   {
     "name": "raised_hand",
     "unicode": "270B",
@@ -8879,6 +9259,16 @@
     "unicode": "23EA",
     "digest": "d20c918c1e528ff0947312738501ca9a6fb6ff4016aad07db7a8125d00fd65cd"
   },
+  {
+    "name": "rhino",
+    "unicode": "1F98F",
+    "digest": "163fa3acd78eead72c431a1f48b8465a6d45272a9169560e456d30b4df93dc6b"
+  },
+  {
+    "name": "rhinoceros",
+    "unicode": "1F98F",
+    "digest": "163fa3acd78eead72c431a1f48b8465a6d45272a9169560e456d30b4df93dc6b"
+  },
   {
     "name": "ribbon",
     "unicode": "1F380",
@@ -8905,40 +9295,70 @@
     "digest": "b942a06d3da0570aca59bab0af57cd8c16863934f12a38f70339fd0a36f675f5"
   },
   {
-    "name": "right_speaker",
-    "unicode": "1F568",
-    "digest": "d268bb84be863c0884620dfc6d2a764b0c7466d2f9810549b138e21ac70add4e"
+    "name": "right_facing_fist",
+    "unicode": "1F91C",
+    "digest": "f815d1cc0c0345ddcc8886ae9c133582d7dc779732ac9b93dde1ab4fdd3b251d"
+  },
+  {
+    "name": "right_fist",
+    "unicode": "1F91C",
+    "digest": "f815d1cc0c0345ddcc8886ae9c133582d7dc779732ac9b93dde1ab4fdd3b251d"
+  },
+  {
+    "name": "right_facing_fist_tone1",
+    "unicode": "1F91C-1F3FB",
+    "digest": "0f9269b70cf68071d97389e059a2bdacffd73f2afd2ce6cfd7447bb1a4e9abbb"
+  },
+  {
+    "name": "right_fist_tone1",
+    "unicode": "1F91C-1F3FB",
+    "digest": "0f9269b70cf68071d97389e059a2bdacffd73f2afd2ce6cfd7447bb1a4e9abbb"
   },
   {
-    "name": "right_speaker_one",
-    "unicode": "1F569",
-    "digest": "5b92daa87bdf6ee15e798bec382a2ee885f4e6e77a68a3f626adcfe4c782b375"
+    "name": "right_facing_fist_tone2",
+    "unicode": "1F91C-1F3FC",
+    "digest": "32a9833db853972e49e65aa227fb0512c57362da190aa1cc40e1d64f238e837e"
   },
   {
-    "name": "right_speaker_with_one_sound_wave",
-    "unicode": "1F569",
-    "digest": "5b92daa87bdf6ee15e798bec382a2ee885f4e6e77a68a3f626adcfe4c782b375"
+    "name": "right_fist_tone2",
+    "unicode": "1F91C-1F3FC",
+    "digest": "32a9833db853972e49e65aa227fb0512c57362da190aa1cc40e1d64f238e837e"
   },
   {
-    "name": "right_speaker_three",
-    "unicode": "1F56A",
-    "digest": "4d00b720a65bd0f4c3682b290b1976ec2388d6ae61225398f4e70556ae9e5f80"
+    "name": "right_facing_fist_tone3",
+    "unicode": "1F91C-1F3FD",
+    "digest": "be4706f8bb088411f5cbbf9065a0ae5b773c97456bd975c2b6789765657847b9"
   },
   {
-    "name": "right_speaker_with_three_sound_waves",
-    "unicode": "1F56A",
-    "digest": "4d00b720a65bd0f4c3682b290b1976ec2388d6ae61225398f4e70556ae9e5f80"
+    "name": "right_fist_tone3",
+    "unicode": "1F91C-1F3FD",
+    "digest": "be4706f8bb088411f5cbbf9065a0ae5b773c97456bd975c2b6789765657847b9"
+  },
+  {
+    "name": "right_facing_fist_tone4",
+    "unicode": "1F91C-1F3FE",
+    "digest": "1680862891a9d85c4b6f76232a80e2ef7428bcec93087c86eae2efaba9c6a3f7"
+  },
+  {
+    "name": "right_fist_tone4",
+    "unicode": "1F91C-1F3FE",
+    "digest": "1680862891a9d85c4b6f76232a80e2ef7428bcec93087c86eae2efaba9c6a3f7"
+  },
+  {
+    "name": "right_facing_fist_tone5",
+    "unicode": "1F91C-1F3FF",
+    "digest": "388715a4bc2178c52bbb3bc2729f57be50acab5d751784c9f3220e86c6b1fbcc"
+  },
+  {
+    "name": "right_fist_tone5",
+    "unicode": "1F91C-1F3FF",
+    "digest": "388715a4bc2178c52bbb3bc2729f57be50acab5d751784c9f3220e86c6b1fbcc"
   },
   {
     "name": "ring",
     "unicode": "1F48D",
     "digest": "b5322907222797b5e1786209cda88513e76cd397a40f0a7da24847245c95ef9d"
   },
-  {
-    "name": "ringing_bell",
-    "unicode": "1F56D",
-    "digest": "d71ab7fa937fc4af507b5b07ea58a4f31e875d9e8304ef2b850d7cebe0e9cd66"
-  },
   {
     "name": "robot",
     "unicode": "1F916",
@@ -8954,6 +9374,16 @@
     "unicode": "1F680",
     "digest": "b82e68a95aa89a6de344d6e256fef86a848ebc91de560b043b3e1f7fd072d57d"
   },
+  {
+    "name": "rofl",
+    "unicode": "1F923",
+    "digest": "f4f99ba2ac67b97338f904f9384ff03fb832a2e427bf6e74611bf5fee45f1f48"
+  },
+  {
+    "name": "rolling_on_the_floor_laughing",
+    "unicode": "1F923",
+    "digest": "f4f99ba2ac67b97338f904f9384ff03fb832a2e427bf6e74611bf5fee45f1f48"
+  },
   {
     "name": "roller_coaster",
     "unicode": "1F3A2",
@@ -8984,11 +9414,6 @@
     "unicode": "1F3F5",
     "digest": "2537def4deef422d4e669b28b1a0675259306ab38601019df3ec3482b14e52d5"
   },
-  {
-    "name": "rosette_black",
-    "unicode": "1F3F6",
-    "digest": "ae8675891c88f9d98463d35178445950c39b0deb0f0e8b3f341228a6e0d0e477"
-  },
   {
     "name": "rotating_light",
     "unicode": "1F6A8",
@@ -9089,6 +9514,16 @@
     "unicode": "1F376",
     "digest": "0a786075f3d9da48ae91afccf6ae0d097888da9509d354ee1d3cb99afcc88fe4"
   },
+  {
+    "name": "salad",
+    "unicode": "1F957",
+    "digest": "fe321487ab847abe670e68a83f1d9e096129741c689c769ee7de4a65aeac29f8"
+  },
+  {
+    "name": "green_salad",
+    "unicode": "1F957",
+    "digest": "fe321487ab847abe670e68a83f1d9e096129741c689c769ee7de4a65aeac29f8"
+  },
   {
     "name": "sandal",
     "unicode": "1F461",
@@ -9159,6 +9594,11 @@
     "unicode": "2702",
     "digest": "95225be28f05d8b5a6b6e6bf58d973f61f183ad4fef55a558dc1b810796b85c8"
   },
+  {
+    "name": "scooter",
+    "unicode": "1F6F4",
+    "digest": "4a7db148880398db75e059711cb53edefb6b8fa9d442009f52856b887ab1dde4"
+  },
   {
     "name": "scorpion",
     "unicode": "1F982",
@@ -9189,6 +9629,16 @@
     "unicode": "1F4BA",
     "digest": "ae68d86fc2a07cae332451b23bd1ceba3f6526a6c56d8c1089777fa4632850e1"
   },
+  {
+    "name": "second_place",
+    "unicode": "1F948",
+    "digest": "9e2336fc16e532829b55380252f94655b58817d47c909fc2570002c5b06b9c40"
+  },
+  {
+    "name": "second_place_medal",
+    "unicode": "1F948",
+    "digest": "9e2336fc16e532829b55380252f94655b58817d47c909fc2570002c5b06b9c40"
+  },
   {
     "name": "secret",
     "unicode": "3299",
@@ -9204,16 +9654,61 @@
     "unicode": "1F331",
     "digest": "c0ec5e6d20e1afdc4e78eeddb1301c8b708ad6278e7287a4e4e825417c858e75"
   },
+  {
+    "name": "selfie",
+    "unicode": "1F933",
+    "digest": "2a1bc9f18ad4d6fb893d91c88ef1b2d9bd063dc2bb1a4b08c248c30f52545d4e"
+  },
+  {
+    "name": "selfie_tone1",
+    "unicode": "1F933-1F3FB",
+    "digest": "26dc212ffed30c276bd6a66a72bc4513e68098a2205fb4ca5b51ccfa1de5b544"
+  },
+  {
+    "name": "selfie_tone2",
+    "unicode": "1F933-1F3FC",
+    "digest": "71eceaefda46e3521f374f76693e7fa8f215067498067900080e2925ca94d7de"
+  },
+  {
+    "name": "selfie_tone3",
+    "unicode": "1F933-1F3FD",
+    "digest": "53eabbd4f6b8ebbd2f7af7bf5cd64309c4039ac1c5b2180290a547deaafcebdf"
+  },
+  {
+    "name": "selfie_tone4",
+    "unicode": "1F933-1F3FE",
+    "digest": "0baad378b09652b99c5d458db2e03b4db14a1557db4ea0969806a0ca1d33d40c"
+  },
+  {
+    "name": "selfie_tone5",
+    "unicode": "1F933-1F3FF",
+    "digest": "9a07608f34ec4dad48764a855f83f3965709d7b2fd2342e6dc9ed61f23f4adfd"
+  },
   {
     "name": "seven",
     "unicode": "0037-20E3",
     "digest": "ae85172d2c76c44afb4e3b45d277d400abb2dc895244b9abfbd1dac1cd7c53c2"
   },
+  {
+    "name": "shallow_pan_of_food",
+    "unicode": "1F958",
+    "digest": "7c7ad9d5d3f7226427d310b5853e8257fad899febe58dcbc5adb4677964f5c6d"
+  },
+  {
+    "name": "paella",
+    "unicode": "1F958",
+    "digest": "7c7ad9d5d3f7226427d310b5853e8257fad899febe58dcbc5adb4677964f5c6d"
+  },
   {
     "name": "shamrock",
     "unicode": "2618",
     "digest": "68ed70c26e04a818439a1742d2da6bc169edd02db86b6e6f8014b651f3235488"
   },
+  {
+    "name": "shark",
+    "unicode": "1F988",
+    "digest": "23a2364b6356e7bbb84c138e9cf58e2c68cd8caabb337a0c4d365ce87bf5d2da"
+  },
   {
     "name": "shaved_ice",
     "unicode": "1F367",
@@ -9254,11 +9749,56 @@
     "unicode": "1F6CD",
     "digest": "95a3f03c675207bb1354270d02a630c204455c47b3edca23c48523a40cf3ea3b"
   },
+  {
+    "name": "shopping_cart",
+    "unicode": "1F6D2",
+    "digest": "4599b63f6861cdb4d8272cac84435c24c1d4d6a73c66d51e04a1cd14a1d333e6"
+  },
+  {
+    "name": "shopping_trolley",
+    "unicode": "1F6D2",
+    "digest": "4599b63f6861cdb4d8272cac84435c24c1d4d6a73c66d51e04a1cd14a1d333e6"
+  },
   {
     "name": "shower",
     "unicode": "1F6BF",
     "digest": "6b3c767c0eb472d4861c6c3cc2735a5e2c09681872ef42a11dc89f3c80b9da01"
   },
+  {
+    "name": "shrimp",
+    "unicode": "1F990",
+    "digest": "b3651f3be3767125076a013fe903854f5b456a8afae865cb219cf528e0f44caa"
+  },
+  {
+    "name": "shrug",
+    "unicode": "1F937",
+    "digest": "6e264243cc3b6e396069dea4357a958bdcd4081cb1af0ed6aa47235bef88cf27"
+  },
+  {
+    "name": "shrug_tone1",
+    "unicode": "1F937-1F3FB",
+    "digest": "0567b9fd95c8a857914003a5465a500ca79c8111811d45b865021b1b1d92d0b1"
+  },
+  {
+    "name": "shrug_tone2",
+    "unicode": "1F937-1F3FC",
+    "digest": "1557c2f5e3d4599c806d74c0b78afcca940678787534b6862bb89a20601bac8a"
+  },
+  {
+    "name": "shrug_tone3",
+    "unicode": "1F937-1F3FD",
+    "digest": "f02754541a7bf74ba7eebe6c27daf1e3e1dac25172c35b8ba45641e278dfda3d"
+  },
+  {
+    "name": "shrug_tone4",
+    "unicode": "1F937-1F3FE",
+    "digest": "2b5121164cb5f4e253d8fb31f6445cf8afaf30dba41732edc511440cdb78d15c"
+  },
+  {
+    "name": "shrug_tone5",
+    "unicode": "1F937-1F3FF",
+    "digest": "62d99a26bbad479f574f66208c41b9960cd41fb9d79d3a13fbdaa44682077115"
+  },
   {
     "name": "signal_strength",
     "unicode": "1F4F6",
@@ -9414,6 +9954,16 @@
     "unicode": "1F40D",
     "digest": "18da2d97c771149ef5454dd23470e900903a62ab93f9e2ce301aad5a8181d773"
   },
+  {
+    "name": "sneezing_face",
+    "unicode": "1F927",
+    "digest": "c20ef571dc7e35572fe3c18b7845aefc89af083ea925c48a29de3b7387af6e17"
+  },
+  {
+    "name": "sneeze",
+    "unicode": "1F927",
+    "digest": "c20ef571dc7e35572fe3c18b7845aefc89af083ea925c48a29de3b7387af6e17"
+  },
   {
     "name": "snowboarder",
     "unicode": "1F3C2",
@@ -9519,46 +10069,6 @@
     "unicode": "1F4AC",
     "digest": "817100d9979456e7d2f253ac22e13b7a2302dc1590566214915b003e403c53ca"
   },
-  {
-    "name": "speech_left",
-    "unicode": "1F5E8",
-    "digest": "912797107d574f5665411498b6e349dbdec69846f085b6dc356548c4155e90b0"
-  },
-  {
-    "name": "left_speech_bubble",
-    "unicode": "1F5E8",
-    "digest": "912797107d574f5665411498b6e349dbdec69846f085b6dc356548c4155e90b0"
-  },
-  {
-    "name": "speech_right",
-    "unicode": "1F5E9",
-    "digest": "8439b13779163c15e678a78b08ebeeb7d131632df21d2a7868de7fed38ca9d8a"
-  },
-  {
-    "name": "right_speech_bubble",
-    "unicode": "1F5E9",
-    "digest": "8439b13779163c15e678a78b08ebeeb7d131632df21d2a7868de7fed38ca9d8a"
-  },
-  {
-    "name": "speech_three",
-    "unicode": "1F5EB",
-    "digest": "55a934f3659b6e75fdce0d0c4e2ea56dd34a43892c85a6666bd1882a0bfb92a9"
-  },
-  {
-    "name": "three_speech_bubbles",
-    "unicode": "1F5EB",
-    "digest": "55a934f3659b6e75fdce0d0c4e2ea56dd34a43892c85a6666bd1882a0bfb92a9"
-  },
-  {
-    "name": "speech_two",
-    "unicode": "1F5EA",
-    "digest": "0563ef0591da243673cf877462acc5d8e1d980a56e81668ac627de74d0c33983"
-  },
-  {
-    "name": "two_speech_bubbles",
-    "unicode": "1F5EA",
-    "digest": "0563ef0591da243673cf877462acc5d8e1d980a56e81668ac627de74d0c33983"
-  },
   {
     "name": "speedboat",
     "unicode": "1F6A4",
@@ -9574,6 +10084,11 @@
     "unicode": "1F578",
     "digest": "2434bdfbe56dcc4a43699dd59b638af431486b52fb1d6d685451f3b231b2be23"
   },
+  {
+    "name": "spoon",
+    "unicode": "1F944",
+    "digest": "4fa31d59e5bffd2c45a8e01fcd5652e78a5691cbfa744e69882bc67173ddea05"
+  },
   {
     "name": "spy",
     "unicode": "1F575",
@@ -9634,6 +10149,11 @@
     "unicode": "1F575-1F3FF",
     "digest": "ffc6fefd9a537124ebf0a9ddf387414dce1291335026064644f6cf9315591129"
   },
+  {
+    "name": "squid",
+    "unicode": "1F991",
+    "digest": "65a1b318c2c506b9d26cfd8282a5cf9922109595c8d12e92c3f7481ac7c08c49"
+  },
   {
     "name": "stadium",
     "unicode": "1F3DF",
@@ -9679,26 +10199,11 @@
     "unicode": "1F682",
     "digest": "52ad0073f37b978faf3884fb193046f2b0614e1557bbcc9de1b020e42aff2dba"
   },
-  {
-    "name": "stereo",
-    "unicode": "1F4FE",
-    "digest": "1ce1f9a83867514b8351ad4fd80c46bba04ad67dfb9874e63d7296e1a21161a5"
-  },
-  {
-    "name": "portable_stereo",
-    "unicode": "1F4FE",
-    "digest": "1ce1f9a83867514b8351ad4fd80c46bba04ad67dfb9874e63d7296e1a21161a5"
-  },
   {
     "name": "stew",
     "unicode": "1F372",
     "digest": "c16f61236db314ad8d9f2dd241ec1e15c8d64e5872cce93ec4d0996490dd39df"
   },
-  {
-    "name": "stock_chart",
-    "unicode": "1F5E0",
-    "digest": "4a0fbf54d19b0b5626f91c932a24e6ac12a65b4fc276d852ff4356c8c579d28a"
-  },
   {
     "name": "stop_button",
     "unicode": "23F9",
@@ -9734,6 +10239,16 @@
     "unicode": "1F61C",
     "digest": "dbacd6428a2a2933212e6a4dc0c7f302177fb23b963626ccb26f27f91737f03d"
   },
+  {
+    "name": "stuffed_flatbread",
+    "unicode": "1F959",
+    "digest": "9f841f2520640d69be4f20a3199023d5811842b28556b5e1152e5ec11f0fda07"
+  },
+  {
+    "name": "stuffed_pita",
+    "unicode": "1F959",
+    "digest": "9f841f2520640d69be4f20a3199023d5811842b28556b5e1152e5ec11f0fda07"
+  },
   {
     "name": "sun_with_face",
     "unicode": "1F31E",
@@ -9909,31 +10424,11 @@
     "unicode": "260E",
     "digest": "3a53851e641f8ad938ce3597b1afca2ea63c9314ff81f62563b99937496a13d7"
   },
-  {
-    "name": "telephone_black",
-    "unicode": "1F57F",
-    "digest": "c3a42a653a91d90c6b668f678419d5438f2e546050914b841623e57107e805db"
-  },
-  {
-    "name": "black_touchtone_telephone",
-    "unicode": "1F57F",
-    "digest": "c3a42a653a91d90c6b668f678419d5438f2e546050914b841623e57107e805db"
-  },
   {
     "name": "telephone_receiver",
     "unicode": "1F4DE",
     "digest": "1614d67f3d8814b0d75f39d55f9149e4d28ef57b343498625e62fcfff8365046"
   },
-  {
-    "name": "telephone_white",
-    "unicode": "1F57E",
-    "digest": "62a7e0e50c53e9f85eba51a92882e6064be05997910d3f7700e1e957dbaf0581"
-  },
-  {
-    "name": "white_touchtone_telephone",
-    "unicode": "1F57E",
-    "digest": "62a7e0e50c53e9f85eba51a92882e6064be05997910d3f7700e1e957dbaf0581"
-  },
   {
     "name": "telescope",
     "unicode": "1F52D",
@@ -9980,55 +10475,25 @@
     "digest": "4f0b84e5ab8a650cafb166e93688f0e9b31b9ade22a91035261ac90490edb9d3"
   },
   {
-    "name": "thought_balloon",
-    "unicode": "1F4AD",
-    "digest": "bf59624560c333561d636aedf2c8827089e275895cf434974daaabb3d5cea46e"
-  },
-  {
-    "name": "thought_left",
-    "unicode": "1F5EC",
-    "digest": "4fd591bf4318df73d1b17f434a449d8e95f49cca53a3d8f4d1ca983f3809ef46"
-  },
-  {
-    "name": "left_thought_bubble",
-    "unicode": "1F5EC",
-    "digest": "4fd591bf4318df73d1b17f434a449d8e95f49cca53a3d8f4d1ca983f3809ef46"
+    "name": "third_place",
+    "unicode": "1F949",
+    "digest": "27c9bcba44ad95bee30882cc0722e8b0a798206306655dd648e884447ed26808"
   },
   {
-    "name": "thought_right",
-    "unicode": "1F5ED",
-    "digest": "0e8c0ce26e2d0e30894f5394b0736456e8268f775e0e7eda4c7dc3c2ff9231ae"
+    "name": "third_place_medal",
+    "unicode": "1F949",
+    "digest": "27c9bcba44ad95bee30882cc0722e8b0a798206306655dd648e884447ed26808"
   },
   {
-    "name": "right_thought_bubble",
-    "unicode": "1F5ED",
-    "digest": "0e8c0ce26e2d0e30894f5394b0736456e8268f775e0e7eda4c7dc3c2ff9231ae"
+    "name": "thought_balloon",
+    "unicode": "1F4AD",
+    "digest": "bf59624560c333561d636aedf2c8827089e275895cf434974daaabb3d5cea46e"
   },
   {
     "name": "three",
     "unicode": "0033-20E3",
     "digest": "d3f85828787799c769655c38a519cad0743ab799ab276c7606e6e6894cc442e6"
   },
-  {
-    "name": "thumbs_down_reverse",
-    "unicode": "1F593",
-    "digest": "a8b561e389bc4e4b07fba70994f6445e5ddc6afe68922fcb6e9e7282d19ad958"
-  },
-  {
-    "name": "reversed_thumbs_down_sign",
-    "unicode": "1F593",
-    "digest": "a8b561e389bc4e4b07fba70994f6445e5ddc6afe68922fcb6e9e7282d19ad958"
-  },
-  {
-    "name": "thumbs_up_reverse",
-    "unicode": "1F592",
-    "digest": "b6e52715c5ce590bfd08f6e05058ec3765ea2da341b11f9825d100608b173837"
-  },
-  {
-    "name": "reversed_thumbs_up_sign",
-    "unicode": "1F592",
-    "digest": "b6e52715c5ce590bfd08f6e05058ec3765ea2da341b11f9825d100608b173837"
-  },
   {
     "name": "thumbsdown",
     "unicode": "1F44E",
@@ -10314,31 +10779,11 @@
     "unicode": "1F686",
     "digest": "06e65d549e771632f3c64287a38ba67236f9800ccb6a23c3b592bc010e24e122"
   },
-  {
-    "name": "train_diesel",
-    "unicode": "1F6F2",
-    "digest": "621bb967cd93fa9f8fd4b155965cc7572d3f91f88d94938ba10c8626718b623c"
-  },
-  {
-    "name": "diesel_locomotive",
-    "unicode": "1F6F2",
-    "digest": "621bb967cd93fa9f8fd4b155965cc7572d3f91f88d94938ba10c8626718b623c"
-  },
   {
     "name": "tram",
     "unicode": "1F68A",
     "digest": "21a7699f1a94f06dcb4d1e896448b98a4205f8efe902a8ac169a5005d11ab100"
   },
-  {
-    "name": "triangle_round",
-    "unicode": "1F6C6",
-    "digest": "e24bb39ecfaaa746b03dc8418697d09ef327d5b077db39014f39d5fb87e23bd5"
-  },
-  {
-    "name": "triangle_with_rounded_corners",
-    "unicode": "1F6C6",
-    "digest": "e24bb39ecfaaa746b03dc8418697d09ef327d5b077db39014f39d5fb87e23bd5"
-  },
   {
     "name": "triangular_flag_on_post",
     "unicode": "1F6A9",
@@ -10395,19 +10840,19 @@
     "digest": "e744e8dbbdc6b126bd5b15aad56b524191de5a604189f4ab6d96730dfef4d086"
   },
   {
-    "name": "turkey",
-    "unicode": "1F983",
-    "digest": "bf5daef15716b66636a5fdb6d059420521443c0603e2d56bd7c99c791a7285f4"
+    "name": "tumbler_glass",
+    "unicode": "1F943",
+    "digest": "7a38658274b9ff28836725a1dbfad49b8fa3af5ec8385e629db6bfdc7d93907a"
   },
   {
-    "name": "turned_ok_hand",
-    "unicode": "1F58F",
-    "digest": "8a6c5b7d4c737866e7e32c6d9f7f447a48a0ac57a8909d43f87367d4a9b59246"
+    "name": "whisky",
+    "unicode": "1F943",
+    "digest": "7a38658274b9ff28836725a1dbfad49b8fa3af5ec8385e629db6bfdc7d93907a"
   },
   {
-    "name": "turned_ok_hand_sign",
-    "unicode": "1F58F",
-    "digest": "8a6c5b7d4c737866e7e32c6d9f7f447a48a0ac57a8909d43f87367d4a9b59246"
+    "name": "turkey",
+    "unicode": "1F983",
+    "digest": "bf5daef15716b66636a5fdb6d059420521443c0603e2d56bd7c99c791a7285f4"
   },
   {
     "name": "turtle",
@@ -10759,6 +11204,36 @@
     "unicode": "1F403",
     "digest": "ba6a840d4f57f8f9f3e9f29b8a030faf02a3a3d912e3e31b067616b2ac48a3d1"
   },
+  {
+    "name": "water_polo",
+    "unicode": "1F93D",
+    "digest": "fc77e1d2a84a9f4cf0cf19c1ea10cf137cf0940b9103a523121eda87677ad148"
+  },
+  {
+    "name": "water_polo_tone1",
+    "unicode": "1F93D-1F3FB",
+    "digest": "3be28384edd29ada8109f07720d601a9d5866ed63e6234efe9ee1a194ed5d0c5"
+  },
+  {
+    "name": "water_polo_tone2",
+    "unicode": "1F93D-1F3FC",
+    "digest": "afcd3f28c6719f869ca79a6fd1ccade2ea976ade844fbc1081fc72865bcb652f"
+  },
+  {
+    "name": "water_polo_tone3",
+    "unicode": "1F93D-1F3FD",
+    "digest": "d19481c9b82d9413e99c2652e020fd763f2b54408dedaffec8dfe80973ded407"
+  },
+  {
+    "name": "water_polo_tone4",
+    "unicode": "1F93D-1F3FE",
+    "digest": "375972d882b627e8d525e632e58b30346fc3e01858d7d08d62a9d3bf8132bbc7"
+  },
+  {
+    "name": "water_polo_tone5",
+    "unicode": "1F93D-1F3FF",
+    "digest": "a8e1ced1c5382a8147a1d1801a133cada9a0e52e41de6272e56c3c1f426f6048"
+  },
   {
     "name": "watermelon",
     "unicode": "1F349",
@@ -10914,6 +11389,16 @@
     "unicode": "1F324",
     "digest": "0a6164cdadf2413555b7ef47b95f823f5a010f36d2dacfb1a38335a0f59e9601"
   },
+  {
+    "name": "wilted_rose",
+    "unicode": "1F940",
+    "digest": "2c9e01ab9a61d057c71478b09ba7d82ae08f4a5a1c2212b7ad562b74f616677f"
+  },
+  {
+    "name": "wilted_flower",
+    "unicode": "1F940",
+    "digest": "2c9e01ab9a61d057c71478b09ba7d82ae08f4a5a1c2212b7ad562b74f616677f"
+  },
   {
     "name": "wind_blowing_face",
     "unicode": "1F32C",
@@ -10995,14 +11480,69 @@
     "digest": "81aae53bc892035b905bf3ec5b442a8ecc95027c5fa9eb51b7c3e7d8fad3f3f4"
   },
   {
-    "name": "writing_hand",
-    "unicode": "1F58E",
-    "digest": "c4fc18ece6778339ebe14438aaf570e22385c3010c2d341824fa72ac6068cfeb"
+    "name": "wrestlers",
+    "unicode": "1F93C",
+    "digest": "9be983f3f9438f3ab8f6b643a958371d1e710c6d78e728f3465141811f05c2d5"
+  },
+  {
+    "name": "wrestling",
+    "unicode": "1F93C",
+    "digest": "9be983f3f9438f3ab8f6b643a958371d1e710c6d78e728f3465141811f05c2d5"
+  },
+  {
+    "name": "wrestlers_tone1",
+    "unicode": "1F93C-1F3FB",
+    "digest": "60461f83bfc93ce59dd027eab4782b7f206a7b142719fa72f301e047dc83a5d9"
+  },
+  {
+    "name": "wrestling_tone1",
+    "unicode": "1F93C-1F3FB",
+    "digest": "60461f83bfc93ce59dd027eab4782b7f206a7b142719fa72f301e047dc83a5d9"
+  },
+  {
+    "name": "wrestlers_tone2",
+    "unicode": "1F93C-1F3FC",
+    "digest": "67ad93c86e6c58d552c18e7a0105cc81fd9bb0474da51f788eba2e4c14b4a636"
+  },
+  {
+    "name": "wrestling_tone2",
+    "unicode": "1F93C-1F3FC",
+    "digest": "67ad93c86e6c58d552c18e7a0105cc81fd9bb0474da51f788eba2e4c14b4a636"
+  },
+  {
+    "name": "wrestlers_tone3",
+    "unicode": "1F93C-1F3FD",
+    "digest": "6bfd06c4435cabf2def153912040e05bf8db424fa383148ddda6d0ce8a8a3349"
+  },
+  {
+    "name": "wrestling_tone3",
+    "unicode": "1F93C-1F3FD",
+    "digest": "6bfd06c4435cabf2def153912040e05bf8db424fa383148ddda6d0ce8a8a3349"
+  },
+  {
+    "name": "wrestlers_tone4",
+    "unicode": "1F93C-1F3FE",
+    "digest": "597312678834c4d288c238482879856d5eba4620deb1eaef495f428e2ba5f2a5"
+  },
+  {
+    "name": "wrestling_tone4",
+    "unicode": "1F93C-1F3FE",
+    "digest": "597312678834c4d288c238482879856d5eba4620deb1eaef495f428e2ba5f2a5"
+  },
+  {
+    "name": "wrestlers_tone5",
+    "unicode": "1F93C-1F3FF",
+    "digest": "d6aebdf1e44fd825b9a5b3716aefbc53f4b4dbb73cb2a628c0f2994ebfd34614"
+  },
+  {
+    "name": "wrestling_tone5",
+    "unicode": "1F93C-1F3FF",
+    "digest": "d6aebdf1e44fd825b9a5b3716aefbc53f4b4dbb73cb2a628c0f2994ebfd34614"
   },
   {
-    "name": "left_writing_hand",
-    "unicode": "1F58E",
-    "digest": "c4fc18ece6778339ebe14438aaf570e22385c3010c2d341824fa72ac6068cfeb"
+    "name": "writing_hand",
+    "unicode": "270D",
+    "digest": "110517ae4da5587e8b0662881658e27da4120bfacec54734fd6657831d4d782f"
   },
   {
     "name": "writing_hand_tone1",
diff --git a/fixtures/emojis/index.json b/fixtures/emojis/index.json
index 7f204c1a8e0c3137931e7d3b2b745f642d3bb6c3..2a990913b9cc0d2da7d377dc09a12f66c4d24e36 100644
--- a/fixtures/emojis/index.json
+++ b/fixtures/emojis/index.json
@@ -4,7 +4,7 @@
     "unicode_alternates": [],
     "name": "hundred points symbol",
     "shortname": ":100:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15,12 +15,14 @@
       "percent",
       "a",
       "plus",
-      "perfect",
       "school",
       "quiz",
-      "score",
       "test",
-      "exam"
+      "exam",
+      "symbol",
+      "wow",
+      "win",
+      "parties"
     ],
     "moji": "💯"
   },
@@ -29,12 +31,13 @@
     "unicode_alternates": [],
     "name": "input symbol for numbers",
     "shortname": ":1234:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
-      "numbers"
+      "numbers",
+      "symbol"
     ],
     "moji": "🔢"
   },
@@ -43,16 +46,20 @@
     "unicode_alternates": [],
     "name": "billiards",
     "shortname": ":8ball:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "pool",
       "billiards",
       "eight ball",
-      "pool",
       "pocket ball",
-      "cue"
+      "cue",
+      "game",
+      "ball",
+      "sport",
+      "luck",
+      "boys night"
     ],
     "moji": "🎱"
   },
@@ -61,13 +68,14 @@
     "unicode_alternates": [],
     "name": "negative squared latin capital letter a",
     "shortname": ":a:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
       "letter",
-      "red-square"
+      "red-square",
+      "symbol"
     ],
     "moji": "🅰"
   },
@@ -76,12 +84,13 @@
     "unicode_alternates": [],
     "name": "negative squared ab",
     "shortname": ":ab:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
-      "red-square"
+      "red-square",
+      "symbol"
     ],
     "moji": "🆎"
   },
@@ -90,12 +99,13 @@
     "unicode_alternates": [],
     "name": "input symbol for latin letters",
     "shortname": ":abc:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "🔤"
   },
@@ -104,12 +114,13 @@
     "unicode_alternates": [],
     "name": "input symbol for latin small letters",
     "shortname": ":abcd:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "🔡"
   },
@@ -118,7 +129,7 @@
     "unicode_alternates": [],
     "name": "circled ideograph accept",
     "shortname": ":accept:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -127,7 +138,8 @@
       "good",
       "kanji",
       "ok",
-      "yes"
+      "yes",
+      "symbol"
     ],
     "moji": "🉑"
   },
@@ -136,7 +148,7 @@
     "unicode_alternates": [],
     "name": "aerial tramway",
     "shortname": ":aerial_tramway:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -146,7 +158,9 @@
       "tram",
       "tramway",
       "cable",
-      "transport"
+      "transport",
+      "travel",
+      "train"
     ],
     "moji": "🚡"
   },
@@ -157,7 +171,7 @@
     ],
     "name": "airplane",
     "shortname": ":airplane:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -173,7 +187,8 @@
       "jet",
       "jumbo",
       "boeing",
-      "airbus"
+      "airbus",
+      "vacation"
     ],
     "moji": "✈"
   },
@@ -182,7 +197,7 @@
     "unicode_alternates": [],
     "name": "airplane arriving",
     "shortname": ":airplane_arriving:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -197,15 +212,17 @@
       "jet",
       "jumbo",
       "boeing",
-      "airbus"
-    ]
+      "airbus",
+      "vacation"
+    ],
+    "moji": "🛬"
   },
   "airplane_departure": {
     "unicode": "1F6EB",
     "unicode_alternates": [],
     "name": "airplane departure",
     "shortname": ":airplane_departure:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -221,30 +238,17 @@
       "jumbo",
       "boeing",
       "airbus",
-      "leaving"
-    ]
-  },
-  "airplane_northeast": {
-    "unicode": "1F6EA",
-    "unicode_alternates": [],
-    "name": "northeast-pointing airplane",
-    "shortname": ":airplane_northeast:",
-    "category": "travel_places",
-    "aliases": [
-      ":northeast_pointing_airplane:"
+      "leaving",
+      "vacation"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "plane",
-      "travel"
-    ]
+    "moji": "🛫"
   },
   "airplane_small": {
     "unicode": "1F6E9",
     "unicode_alternates": [],
     "name": "small airplane",
     "shortname": ":airplane_small:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [
       ":small_airplane:"
     ],
@@ -261,38 +265,10 @@
       "jet",
       "jumbo",
       "boeing",
-      "airbus"
-    ]
-  },
-  "airplane_small_up": {
-    "unicode": "1F6E8",
-    "unicode_alternates": [],
-    "name": "up-pointing small airplane",
-    "shortname": ":airplane_small_up:",
-    "category": "travel_places",
-    "aliases": [
-      ":up_pointing_small_airplane:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "plane",
-      "travel"
-    ]
-  },
-  "airplane_up": {
-    "unicode": "1F6E7",
-    "unicode_alternates": [],
-    "name": "up-pointing airplane",
-    "shortname": ":airplane_up:",
-    "category": "travel_places",
-    "aliases": [
-      ":up_pointing_airplane:"
+      "airbus",
+      "vacation"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "plane",
-      "travel"
-    ]
+    "moji": "🛩"
   },
   "alarm_clock": {
     "unicode": "23F0",
@@ -304,13 +280,14 @@
     "aliases_ascii": [],
     "keywords": [
       "time",
-      "wake"
+      "wake",
+      "object"
     ],
     "moji": "⏰"
   },
   "alembic": {
     "unicode": "2697",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "alembic",
     "shortname": ":alembic:",
     "category": "objects",
@@ -319,22 +296,27 @@
     "keywords": [
       "chemistry",
       "object",
-      "tool"
-    ]
+      "tool",
+      "science"
+    ],
+    "moji": "âš—"
   },
   "alien": {
     "unicode": "1F47D",
     "unicode_alternates": [],
     "name": "extraterrestrial alien",
     "shortname": ":alien:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "UFO",
       "paul",
       "alien",
-      "ufo"
+      "ufo",
+      "space",
+      "monster",
+      "scientology"
     ],
     "moji": "👽"
   },
@@ -343,7 +325,7 @@
     "unicode_alternates": [],
     "name": "ambulance",
     "shortname": ":ambulance:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -353,19 +335,23 @@
       "emergency",
       "medical",
       "help",
-      "assistance"
+      "assistance",
+      "transportation"
     ],
     "moji": "🚑"
   },
   "amphora": {
     "unicode": "1F3FA",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "amphora",
     "shortname": ":amphora:",
     "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "object"
+    ],
+    "moji": "🏺"
   },
   "anchor": {
     "unicode": "2693",
@@ -374,21 +360,23 @@
     ],
     "name": "anchor",
     "shortname": ":anchor:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "ferry",
       "ship",
       "anchor",
-      "ship",
       "boat",
       "ocean",
       "harbor",
       "marina",
       "shipyard",
       "sailor",
-      "tattoo"
+      "tattoo",
+      "object",
+      "travel",
+      "vacation"
     ],
     "moji": "âš“"
   },
@@ -397,7 +385,7 @@
     "unicode_alternates": [],
     "name": "baby angel",
     "shortname": ":angel:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -406,16 +394,17 @@
       "halo",
       "cupid",
       "wings",
-      "halo",
       "heaven",
-      "wings",
-      "jesus"
+      "jesus",
+      "people",
+      "diversity",
+      "omg"
     ],
     "moji": "👼"
   },
   "angel_tone1": {
     "unicode": "1F47C-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby angel tone 1",
     "shortname": ":angel_tone1:",
     "category": "people",
@@ -427,11 +416,12 @@
       "heaven",
       "wings",
       "jesus"
-    ]
+    ],
+    "moji": "👼🏻"
   },
   "angel_tone2": {
     "unicode": "1F47C-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby angel tone 2",
     "shortname": ":angel_tone2:",
     "category": "people",
@@ -443,11 +433,12 @@
       "heaven",
       "wings",
       "jesus"
-    ]
+    ],
+    "moji": "👼🏼"
   },
   "angel_tone3": {
     "unicode": "1F47C-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby angel tone 3",
     "shortname": ":angel_tone3:",
     "category": "people",
@@ -459,11 +450,12 @@
       "heaven",
       "wings",
       "jesus"
-    ]
+    ],
+    "moji": "👼🏽"
   },
   "angel_tone4": {
     "unicode": "1F47C-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby angel tone 4",
     "shortname": ":angel_tone4:",
     "category": "people",
@@ -475,11 +467,12 @@
       "heaven",
       "wings",
       "jesus"
-    ]
+    ],
+    "moji": "👼🏾"
   },
   "angel_tone5": {
     "unicode": "1F47C-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby angel tone 5",
     "shortname": ":angel_tone5:",
     "category": "people",
@@ -491,50 +484,31 @@
       "heaven",
       "wings",
       "jesus"
-    ]
+    ],
+    "moji": "👼🏿"
   },
   "anger": {
     "unicode": "1F4A2",
     "unicode_alternates": [],
     "name": "anger symbol",
     "shortname": ":anger:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "anger",
       "angry",
-      "mad"
+      "mad",
+      "symbol"
     ],
     "moji": "💢"
   },
-  "anger_left": {
-    "unicode": "1F5EE",
-    "unicode_alternates": [],
-    "name": "left anger bubble",
-    "shortname": ":anger_left:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":left_anger_bubble:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "speech",
-      "balloon",
-      "talk",
-      "mood",
-      "conversation",
-      "communication",
-      "comic",
-      "angry"
-    ]
-  },
   "anger_right": {
     "unicode": "1F5EF",
     "unicode_alternates": [],
     "name": "right anger bubble",
     "shortname": ":anger_right:",
-    "category": "objects_symbols",
+    "category": "symbols",
     "aliases": [
       ":right_anger_bubble:"
     ],
@@ -547,15 +521,17 @@
       "conversation",
       "communication",
       "comic",
-      "angry"
-    ]
+      "angry",
+      "symbol"
+    ],
+    "moji": "🗯"
   },
   "angry": {
     "unicode": "1F620",
     "unicode_alternates": [],
     "name": "angry face",
     "shortname": ":angry:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ">:(",
@@ -571,7 +547,8 @@
       "annoyed",
       "face",
       "frustrated",
-      "mad"
+      "smiley",
+      "emotion"
     ],
     "moji": "😠"
   },
@@ -580,7 +557,7 @@
     "unicode_alternates": [],
     "name": "anguished face",
     "shortname": ":anguished:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -592,7 +569,11 @@
       "ouch",
       "misery",
       "distress",
-      "grief"
+      "grief",
+      "sad",
+      "smiley",
+      "surprised",
+      "emotion"
     ],
     "moji": "😧"
   },
@@ -609,8 +590,8 @@
       "insect",
       "ant",
       "queen",
-      "insect",
-      "team"
+      "team",
+      "insects"
     ],
     "moji": "🐜"
   },
@@ -619,20 +600,21 @@
     "unicode_alternates": [],
     "name": "red apple",
     "shortname": ":apple:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fruit",
       "mac",
       "apple",
-      "fruit",
       "electronics",
       "red",
       "doctor",
       "teacher",
       "school",
-      "core"
+      "core",
+      "food",
+      "creationism"
     ],
     "moji": "🍎"
   },
@@ -643,7 +625,7 @@
     ],
     "name": "aquarius",
     "shortname": ":aquarius:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -657,9 +639,8 @@
       "zodiac",
       "sign",
       "purple-square",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "â™’"
   },
@@ -670,7 +651,7 @@
     ],
     "name": "aries",
     "shortname": ":aries:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -683,9 +664,8 @@
       "zodiac",
       "sign",
       "purple-square",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♈"
   },
@@ -696,12 +676,14 @@
     ],
     "name": "black left-pointing triangle",
     "shortname": ":arrow_backward:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol",
+      "triangle"
     ],
     "moji": "â—€"
   },
@@ -710,12 +692,13 @@
     "unicode_alternates": [],
     "name": "black down-pointing double triangle",
     "shortname": ":arrow_double_down:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "⏬"
   },
@@ -724,12 +707,13 @@
     "unicode_alternates": [],
     "name": "black up-pointing double triangle",
     "shortname": ":arrow_double_up:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "⏫"
   },
@@ -740,12 +724,13 @@
     ],
     "name": "downwards black arrow",
     "shortname": ":arrow_down:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "⬇"
   },
@@ -754,12 +739,14 @@
     "unicode_alternates": [],
     "name": "down-pointing small red triangle",
     "shortname": ":arrow_down_small:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol",
+      "triangle"
     ],
     "moji": "🔽"
   },
@@ -770,12 +757,14 @@
     ],
     "name": "black right-pointing triangle",
     "shortname": ":arrow_forward:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol",
+      "triangle"
     ],
     "moji": "â–¶"
   },
@@ -786,12 +775,13 @@
     ],
     "name": "arrow pointing rightwards then curving downwards",
     "shortname": ":arrow_heading_down:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "⤵"
   },
@@ -802,12 +792,13 @@
     ],
     "name": "arrow pointing rightwards then curving upwards",
     "shortname": ":arrow_heading_up:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "⤴"
   },
@@ -818,13 +809,14 @@
     ],
     "name": "leftwards black arrow",
     "shortname": ":arrow_left:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
       "blue-square",
-      "previous"
+      "previous",
+      "symbol"
     ],
     "moji": "⬅"
   },
@@ -835,12 +827,13 @@
     ],
     "name": "south west arrow",
     "shortname": ":arrow_lower_left:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "↙"
   },
@@ -851,12 +844,13 @@
     ],
     "name": "south east arrow",
     "shortname": ":arrow_lower_right:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "↘"
   },
@@ -867,12 +861,14 @@
     ],
     "name": "black rightwards arrow",
     "shortname": ":arrow_right:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
-      "next"
+      "next",
+      "arrow",
+      "symbol"
     ],
     "moji": "âž¡"
   },
@@ -883,11 +879,13 @@
     ],
     "name": "rightwards arrow with hook",
     "shortname": ":arrow_right_hook:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "arrow",
+      "symbol"
     ],
     "moji": "↪"
   },
@@ -898,11 +896,13 @@
     ],
     "name": "upwards black arrow",
     "shortname": ":arrow_up:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "arrow",
+      "symbol"
     ],
     "moji": "⬆"
   },
@@ -913,11 +913,13 @@
     ],
     "name": "up down arrow",
     "shortname": ":arrow_up_down:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "arrow",
+      "symbol"
     ],
     "moji": "↕"
   },
@@ -926,11 +928,14 @@
     "unicode_alternates": [],
     "name": "up-pointing small red triangle",
     "shortname": ":arrow_up_small:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "arrow",
+      "symbol",
+      "triangle"
     ],
     "moji": "🔼"
   },
@@ -941,11 +946,13 @@
     ],
     "name": "north west arrow",
     "shortname": ":arrow_upper_left:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "arrow",
+      "symbol"
     ],
     "moji": "↖"
   },
@@ -956,11 +963,13 @@
     ],
     "name": "north east arrow",
     "shortname": ":arrow_upper_right:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "arrow",
+      "symbol"
     ],
     "moji": "↗"
   },
@@ -969,11 +978,13 @@
     "unicode_alternates": [],
     "name": "clockwise downwards and upwards open circle arrows",
     "shortname": ":arrows_clockwise:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "sync"
+      "sync",
+      "arrow",
+      "symbol"
     ],
     "moji": "🔃"
   },
@@ -982,12 +993,14 @@
     "unicode_alternates": [],
     "name": "anticlockwise downwards and upwards open circle ar",
     "shortname": ":arrows_counterclockwise:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
-      "sync"
+      "sync",
+      "arrow",
+      "symbol"
     ],
     "moji": "🔄"
   },
@@ -996,7 +1009,7 @@
     "unicode_alternates": [],
     "name": "artist palette",
     "shortname": ":art:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1007,8 +1020,6 @@
       "palette",
       "art",
       "colors",
-      "paint",
-      "draw",
       "brush",
       "pastels",
       "oils"
@@ -1020,7 +1031,7 @@
     "unicode_alternates": [],
     "name": "articulated lorry",
     "shortname": ":articulated_lorry:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1035,24 +1046,11 @@
     ],
     "moji": "🚛"
   },
-  "ascending_notes": {
-    "unicode": "1F39C",
-    "unicode_alternates": [],
-    "name": "beamed ascending musical notes",
-    "shortname": ":ascending_notes:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "score",
-      "music",
-      "sound",
-      "tone"
-    ]
-  },
   "asterisk": {
     "unicode": "002A-20E3",
-    "unicode_alternates": "002a-fe0f-20e3",
+    "unicode_alternates": [
+      "002A-FE0F-20E3"
+    ],
     "name": "keycap asterisk",
     "shortname": ":asterisk:",
     "category": "symbols",
@@ -1064,14 +1062,15 @@
       "*",
       "star",
       "symbol"
-    ]
+    ],
+    "moji": "*⃣"
   },
   "astonished": {
     "unicode": "1F632",
     "unicode_alternates": [],
     "name": "astonished face",
     "shortname": ":astonished:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1079,7 +1078,12 @@
       "xox",
       "shocked",
       "surprise",
-      "astonished"
+      "astonished",
+      "smiley",
+      "surprised",
+      "wow",
+      "emotion",
+      "omg"
     ],
     "moji": "😲"
   },
@@ -1088,12 +1092,16 @@
     "unicode_alternates": [],
     "name": "athletic shoe",
     "shortname": ":athletic_shoe:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "shoes",
-      "sports"
+      "sports",
+      "fashion",
+      "shoe",
+      "accessories",
+      "boys night"
     ],
     "moji": "👟"
   },
@@ -1102,7 +1110,7 @@
     "unicode_alternates": [],
     "name": "automated teller machine",
     "shortname": ":atm:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1115,17 +1123,16 @@
       "bank",
       "adam",
       "payday",
-      "bank",
       "blue-square",
-      "cash",
-      "money",
-      "payment"
+      "payment",
+      "electronics",
+      "symbol"
     ],
     "moji": "🏧"
   },
   "atom": {
     "unicode": "269B",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "atom symbol",
     "shortname": ":atom:",
     "category": "symbols",
@@ -1134,21 +1141,36 @@
     ],
     "aliases_ascii": [],
     "keywords": [
-      "atheist"
-    ]
+      "atheist",
+      "symbol",
+      "science"
+    ],
+    "moji": "âš›"
+  },
+  "avocado": {
+    "unicode": "1F951",
+    "unicode_alternates": [],
+    "name": "avocado",
+    "shortname": ":avocado:",
+    "category": "food",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥑"
   },
   "b": {
     "unicode": "1F171",
     "unicode_alternates": [],
     "name": "negative squared latin capital letter b",
     "shortname": ":b:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
       "letter",
-      "red-square"
+      "red-square",
+      "symbol"
     ],
     "moji": "🅱"
   },
@@ -1157,13 +1179,16 @@
     "unicode_alternates": [],
     "name": "baby",
     "shortname": ":baby:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "boy",
       "child",
-      "infant"
+      "infant",
+      "people",
+      "baby",
+      "diversity"
     ],
     "moji": "👶"
   },
@@ -1172,7 +1197,7 @@
     "unicode_alternates": [],
     "name": "baby bottle",
     "shortname": ":baby_bottle:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1184,7 +1209,9 @@
       "mother",
       "nipple",
       "newborn",
-      "formula"
+      "formula",
+      "drink",
+      "object"
     ],
     "moji": "🍼"
   },
@@ -1202,7 +1229,6 @@
       "chick",
       "baby",
       "bird",
-      "chicken",
       "young",
       "woman",
       "cute"
@@ -1214,7 +1240,7 @@
     "unicode_alternates": [],
     "name": "baby symbol",
     "shortname": ":baby_symbol:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1226,13 +1252,14 @@
       "human",
       "diaper",
       "small",
-      "babe"
+      "babe",
+      "symbol"
     ],
     "moji": "🚼"
   },
   "baby_tone1": {
     "unicode": "1F476-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby tone 1",
     "shortname": ":baby_tone1:",
     "category": "people",
@@ -1242,11 +1269,12 @@
       "child",
       "infant",
       "toddler"
-    ]
+    ],
+    "moji": "👶🏻"
   },
   "baby_tone2": {
     "unicode": "1F476-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby tone 2",
     "shortname": ":baby_tone2:",
     "category": "people",
@@ -1256,11 +1284,12 @@
       "child",
       "infant",
       "toddler"
-    ]
+    ],
+    "moji": "👶🏼"
   },
   "baby_tone3": {
     "unicode": "1F476-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby tone 3",
     "shortname": ":baby_tone3:",
     "category": "people",
@@ -1270,11 +1299,12 @@
       "child",
       "infant",
       "toddler"
-    ]
+    ],
+    "moji": "👶🏽"
   },
   "baby_tone4": {
     "unicode": "1F476-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby tone 4",
     "shortname": ":baby_tone4:",
     "category": "people",
@@ -1284,11 +1314,12 @@
       "child",
       "infant",
       "toddler"
-    ]
+    ],
+    "moji": "👶🏾"
   },
   "baby_tone5": {
     "unicode": "1F476-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "baby tone 5",
     "shortname": ":baby_tone5:",
     "category": "people",
@@ -1298,37 +1329,57 @@
       "child",
       "infant",
       "toddler"
-    ]
+    ],
+    "moji": "👶🏿"
   },
   "back": {
     "unicode": "1F519",
     "unicode_alternates": [],
     "name": "back with leftwards arrow above",
     "shortname": ":back:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "arrow"
+      "arrow",
+      "symbol"
     ],
     "moji": "🔙"
   },
+  "bacon": {
+    "unicode": "1F953",
+    "unicode_alternates": [],
+    "name": "bacon",
+    "shortname": ":bacon:",
+    "category": "food",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [
+      "pig"
+    ],
+    "moji": "🥓"
+  },
   "badminton": {
     "unicode": "1F3F8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "badminton racquet",
     "shortname": ":badminton:",
     "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "game",
+      "sport",
+      "badminton"
+    ],
+    "moji": "🏸"
   },
   "baggage_claim": {
     "unicode": "1F6C4",
     "unicode_alternates": [],
     "name": "baggage claim",
     "shortname": ":baggage_claim:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1338,7 +1389,8 @@
       "bag",
       "baggage",
       "luggage",
-      "travel"
+      "travel",
+      "symbol"
     ],
     "moji": "🛄"
   },
@@ -1355,11 +1407,13 @@
       "party",
       "balloon",
       "birthday",
-      "celebration",
       "helium",
       "gas",
       "children",
-      "float"
+      "float",
+      "object",
+      "good",
+      "parties"
     ],
     "moji": "🎈"
   },
@@ -1368,29 +1422,17 @@
     "unicode_alternates": [],
     "name": "ballot box with ballot",
     "shortname": ":ballot_box:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":ballot_box_with_ballot:"
     ],
     "aliases_ascii": [],
     "keywords": [
-      "vote"
-    ]
-  },
-  "ballot_box_check": {
-    "unicode": "1F5F9",
-    "unicode_alternates": [],
-    "name": "ballot box with bold check",
-    "shortname": ":ballot_box_check:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":ballot_box_with_bold_check:"
+      "vote",
+      "object",
+      "office"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "mark",
-      "vote"
-    ]
+    "moji": "🗳"
   },
   "ballot_box_with_check": {
     "unicode": "2611",
@@ -1399,51 +1441,22 @@
     ],
     "name": "ballot box with check",
     "shortname": ":ballot_box_with_check:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "agree",
-      "ok"
+      "ok",
+      "symbol"
     ],
     "moji": "☑"
   },
-  "ballot_box_x": {
-    "unicode": "1F5F5",
-    "unicode_alternates": [],
-    "name": "ballot box with script x",
-    "shortname": ":ballot_box_x:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":ballot_box_with_script_x:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "mark",
-      "vote"
-    ]
-  },
-  "ballot_x": {
-    "unicode": "1F5F4",
-    "unicode_alternates": [],
-    "name": "ballot script x",
-    "shortname": ":ballot_x:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":ballot_script_x:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "mark",
-      "vote"
-    ]
-  },
   "bamboo": {
     "unicode": "1F38D",
     "unicode_alternates": [],
     "name": "pine decoration",
     "shortname": ":bamboo:",
-    "category": "objects",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1472,7 +1485,7 @@
     "unicode_alternates": [],
     "name": "banana",
     "shortname": ":banana:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1480,7 +1493,8 @@
       "fruit",
       "banana",
       "peel",
-      "bunch"
+      "bunch",
+      "penis"
     ],
     "moji": "🍌"
   },
@@ -1491,12 +1505,14 @@
     ],
     "name": "double exclamation mark",
     "shortname": ":bangbang:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "exclamation",
-      "surprise"
+      "surprise",
+      "symbol",
+      "punctuation"
     ],
     "moji": "‼"
   },
@@ -1505,11 +1521,12 @@
     "unicode_alternates": [],
     "name": "bank",
     "shortname": ":bank:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "building"
+      "building",
+      "places"
     ],
     "moji": "🏦"
   },
@@ -1524,7 +1541,9 @@
     "keywords": [
       "graph",
       "presentation",
-      "stats"
+      "stats",
+      "work",
+      "office"
     ],
     "moji": "📊"
   },
@@ -1533,13 +1552,14 @@
     "unicode_alternates": [],
     "name": "barber pole",
     "shortname": ":barber:",
-    "category": "places",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "hair",
       "salon",
-      "style"
+      "style",
+      "object"
     ],
     "moji": "💈"
   },
@@ -1550,13 +1570,17 @@
     ],
     "name": "baseball",
     "shortname": ":baseball:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "MLB",
       "balls",
-      "sports"
+      "sports",
+      "game",
+      "ball",
+      "sport",
+      "baseball"
     ],
     "moji": "âš¾"
   },
@@ -1565,7 +1589,7 @@
     "unicode_alternates": [],
     "name": "basketball and hoop",
     "shortname": ":basketball:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1578,13 +1602,16 @@
       "hoop",
       "net",
       "swish",
-      "rip city"
+      "rip city",
+      "game",
+      "ball",
+      "sport"
     ],
     "moji": "🏀"
   },
   "basketball_player": {
     "unicode": "26F9",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with ball",
     "shortname": ":basketball_player:",
     "category": "activity",
@@ -1594,12 +1621,18 @@
     "aliases_ascii": [],
     "keywords": [
       "sport",
-      "travel"
-    ]
+      "travel",
+      "men",
+      "game",
+      "ball",
+      "basketball",
+      "diversity"
+    ],
+    "moji": "⛹"
   },
   "basketball_player_tone1": {
     "unicode": "26F9-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with ball tone 1",
     "shortname": ":basketball_player_tone1:",
     "category": "activity",
@@ -1607,11 +1640,19 @@
       ":person_with_ball_tone1:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "sport",
+      "travel",
+      "men",
+      "game",
+      "ball",
+      "basketball"
+    ],
+    "moji": "⛹🏻"
   },
   "basketball_player_tone2": {
     "unicode": "26F9-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with ball tone 2",
     "shortname": ":basketball_player_tone2:",
     "category": "activity",
@@ -1619,11 +1660,19 @@
       ":person_with_ball_tone2:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "sport",
+      "travel",
+      "men",
+      "game",
+      "ball",
+      "basketball"
+    ],
+    "moji": "⛹🏼"
   },
   "basketball_player_tone3": {
     "unicode": "26F9-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with ball tone 3",
     "shortname": ":basketball_player_tone3:",
     "category": "activity",
@@ -1631,11 +1680,19 @@
       ":person_with_ball_tone3:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "sport",
+      "travel",
+      "men",
+      "game",
+      "ball",
+      "basketball"
+    ],
+    "moji": "⛹🏽"
   },
   "basketball_player_tone4": {
     "unicode": "26F9-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with ball tone 4",
     "shortname": ":basketball_player_tone4:",
     "category": "activity",
@@ -1643,11 +1700,19 @@
       ":person_with_ball_tone4:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "sport",
+      "travel",
+      "men",
+      "game",
+      "ball",
+      "basketball"
+    ],
+    "moji": "⛹🏾"
   },
   "basketball_player_tone5": {
     "unicode": "26F9-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with ball tone 5",
     "shortname": ":basketball_player_tone5:",
     "category": "activity",
@@ -1655,14 +1720,33 @@
       ":person_with_ball_tone5:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "sport",
+      "travel",
+      "men",
+      "game",
+      "ball",
+      "basketball"
+    ],
+    "moji": "⛹🏿"
+  },
+  "bat": {
+    "unicode": "1F987",
+    "unicode_alternates": [],
+    "name": "bat",
+    "shortname": ":bat:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦇"
   },
   "bath": {
     "unicode": "1F6C0",
     "unicode_alternates": [],
     "name": "bath",
     "shortname": ":bath:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1677,16 +1761,17 @@
       "bathroom",
       "soap",
       "water",
-      "clean",
       "shampoo",
       "lather",
-      "water"
+      "tired",
+      "diversity",
+      "steam"
     ],
     "moji": "🛀"
   },
   "bath_tone1": {
     "unicode": "1F6C0-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bath tone 1",
     "shortname": ":bath_tone1:",
     "category": "activity",
@@ -1705,11 +1790,12 @@
       "clean",
       "shampoo",
       "lather"
-    ]
+    ],
+    "moji": "🛀🏻"
   },
   "bath_tone2": {
     "unicode": "1F6C0-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bath tone 2",
     "shortname": ":bath_tone2:",
     "category": "activity",
@@ -1728,11 +1814,12 @@
       "clean",
       "shampoo",
       "lather"
-    ]
+    ],
+    "moji": "🛀🏼"
   },
   "bath_tone3": {
     "unicode": "1F6C0-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bath tone 3",
     "shortname": ":bath_tone3:",
     "category": "activity",
@@ -1751,11 +1838,12 @@
       "clean",
       "shampoo",
       "lather"
-    ]
+    ],
+    "moji": "🛀🏽"
   },
   "bath_tone4": {
     "unicode": "1F6C0-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bath tone 4",
     "shortname": ":bath_tone4:",
     "category": "activity",
@@ -1774,11 +1862,12 @@
       "clean",
       "shampoo",
       "lather"
-    ]
+    ],
+    "moji": "🛀🏾"
   },
   "bath_tone5": {
     "unicode": "1F6C0-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bath tone 5",
     "shortname": ":bath_tone5:",
     "category": "activity",
@@ -1797,7 +1886,8 @@
       "clean",
       "shampoo",
       "lather"
-    ]
+    ],
+    "moji": "🛀🏿"
   },
   "bathtub": {
     "unicode": "1F6C1",
@@ -1819,10 +1909,11 @@
       "bathroom",
       "soap",
       "water",
-      "clean",
       "shampoo",
       "lather",
-      "water"
+      "object",
+      "tired",
+      "steam"
     ],
     "moji": "🛁"
   },
@@ -1837,7 +1928,8 @@
     "keywords": [
       "energy",
       "power",
-      "sustain"
+      "sustain",
+      "object"
     ],
     "moji": "🔋"
   },
@@ -1846,7 +1938,7 @@
     "unicode_alternates": [],
     "name": "beach with umbrella",
     "shortname": ":beach:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [
       ":beach_with_umbrella:"
     ],
@@ -1859,12 +1951,18 @@
       "relaxation",
       "tanning",
       "tan",
-      "swimming"
-    ]
+      "swimming",
+      "places",
+      "travel",
+      "tropical",
+      "beach",
+      "swim"
+    ],
+    "moji": "🏖"
   },
   "beach_umbrella": {
     "unicode": "26F1",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "umbrella on ground",
     "shortname": ":beach_umbrella:",
     "category": "objects",
@@ -1877,8 +1975,11 @@
       "rain",
       "sun",
       "travel",
-      "weather"
-    ]
+      "weather",
+      "vacation",
+      "tropical"
+    ],
+    "moji": "â›±"
   },
   "bear": {
     "unicode": "1F43B",
@@ -1890,7 +1991,9 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "nature"
+      "nature",
+      "wildlife",
+      "roar"
     ],
     "moji": "🐻"
   },
@@ -1899,7 +2002,7 @@
     "unicode_alternates": [],
     "name": "bed",
     "shortname": ":bed:",
-    "category": "travel_places",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1909,8 +2012,11 @@
       "full",
       "twin",
       "king",
-      "mattress"
-    ]
+      "mattress",
+      "object",
+      "tired"
+    ],
+    "moji": "🛏"
   },
   "bee": {
     "unicode": "1F41D",
@@ -1932,7 +2038,8 @@
       "honey",
       "hive",
       "bumble",
-      "pollination"
+      "pollination",
+      "insects"
     ],
     "moji": "🐝"
   },
@@ -1941,7 +2048,7 @@
     "unicode_alternates": [],
     "name": "beer mug",
     "shortname": ":beer:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1962,7 +2069,9 @@
       "brewery",
       "micro",
       "pint",
-      "boot"
+      "boot",
+      "alcohol",
+      "parties"
     ],
     "moji": "🍺"
   },
@@ -1971,7 +2080,7 @@
     "unicode_alternates": [],
     "name": "clinking beer mugs",
     "shortname": ":beers:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -1987,11 +2096,14 @@
       "mug",
       "toast",
       "celebrate",
-      "pub",
       "bar",
       "jolly",
       "hops",
-      "clink"
+      "clink",
+      "alcohol",
+      "thank you",
+      "boys night",
+      "parties"
     ],
     "moji": "🍻"
   },
@@ -2013,8 +2125,9 @@
       "beetle",
       "cow",
       "lady cow",
-      "insect",
-      "endearment"
+      "endearment",
+      "insects",
+      "animal"
     ],
     "moji": "🐞"
   },
@@ -2023,12 +2136,13 @@
     "unicode_alternates": [],
     "name": "japanese symbol for beginner",
     "shortname": ":beginner:",
-    "category": "places",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "badge",
-      "shield"
+      "shield",
+      "symbol"
     ],
     "moji": "🔰"
   },
@@ -2037,7 +2151,7 @@
     "unicode_alternates": [],
     "name": "bell",
     "shortname": ":bell:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2045,7 +2159,10 @@
       "christmas",
       "notification",
       "sound",
-      "xmas"
+      "xmas",
+      "object",
+      "alarm",
+      "symbol"
     ],
     "moji": "🔔"
   },
@@ -2054,7 +2171,7 @@
     "unicode_alternates": [],
     "name": "bellhop bell",
     "shortname": ":bellhop:",
-    "category": "travel_places",
+    "category": "objects",
     "aliases": [
       ":bellhop_bell:"
     ],
@@ -2062,15 +2179,17 @@
     "keywords": [
       "hotel",
       "porter",
-      "ding"
-    ]
+      "ding",
+      "object"
+    ],
+    "moji": "🛎"
   },
   "bento": {
     "unicode": "1F371",
     "unicode_alternates": [],
     "name": "bento box",
     "shortname": ":bento:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2078,13 +2197,14 @@
       "food",
       "japanese",
       "bento",
-      "japanese",
       "rice",
       "meal",
-      "box",
       "obento",
       "convenient",
-      "lunchbox"
+      "lunchbox",
+      "object",
+      "sushi",
+      "japan"
     ],
     "moji": "🍱"
   },
@@ -2093,7 +2213,7 @@
     "unicode_alternates": [],
     "name": "bicyclist",
     "shortname": ":bicyclist:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2103,16 +2223,19 @@
       "sports",
       "bicyclist",
       "road",
-      "bike",
       "pedal",
       "bicycle",
-      "transportation"
+      "transportation",
+      "men",
+      "workout",
+      "sport",
+      "diversity"
     ],
     "moji": "🚴"
   },
   "bicyclist_tone1": {
     "unicode": "1F6B4-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bicyclist tone 1",
     "shortname": ":bicyclist_tone1:",
     "category": "activity",
@@ -2127,11 +2250,12 @@
       "pedal",
       "bicycle",
       "transportation"
-    ]
+    ],
+    "moji": "🚴🏻"
   },
   "bicyclist_tone2": {
     "unicode": "1F6B4-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bicyclist tone 2",
     "shortname": ":bicyclist_tone2:",
     "category": "activity",
@@ -2146,11 +2270,12 @@
       "pedal",
       "bicycle",
       "transportation"
-    ]
+    ],
+    "moji": "🚴🏼"
   },
   "bicyclist_tone3": {
     "unicode": "1F6B4-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bicyclist tone 3",
     "shortname": ":bicyclist_tone3:",
     "category": "activity",
@@ -2165,11 +2290,12 @@
       "pedal",
       "bicycle",
       "transportation"
-    ]
+    ],
+    "moji": "🚴🏽"
   },
   "bicyclist_tone4": {
     "unicode": "1F6B4-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bicyclist tone 4",
     "shortname": ":bicyclist_tone4:",
     "category": "activity",
@@ -2184,11 +2310,12 @@
       "pedal",
       "bicycle",
       "transportation"
-    ]
+    ],
+    "moji": "🚴🏾"
   },
   "bicyclist_tone5": {
     "unicode": "1F6B4-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bicyclist tone 5",
     "shortname": ":bicyclist_tone5:",
     "category": "activity",
@@ -2203,14 +2330,15 @@
       "pedal",
       "bicycle",
       "transportation"
-    ]
+    ],
+    "moji": "🚴🏿"
   },
   "bike": {
     "unicode": "1F6B2",
     "unicode_alternates": [],
     "name": "bicycle",
     "shortname": ":bike:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2220,8 +2348,8 @@
       "sports",
       "bike",
       "pedal",
-      "bicycle",
-      "transportation"
+      "transportation",
+      "travel"
     ],
     "moji": "🚲"
   },
@@ -2230,7 +2358,7 @@
     "unicode_alternates": [],
     "name": "bikini",
     "shortname": ":bikini:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2239,13 +2367,18 @@
       "female",
       "girl",
       "swimming",
-      "woman"
+      "woman",
+      "women",
+      "sexy",
+      "vacation",
+      "tropical",
+      "swim"
     ],
     "moji": "👙"
   },
   "biohazard": {
     "unicode": "2623",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "biohazard sign",
     "shortname": ":biohazard:",
     "category": "symbols",
@@ -2254,8 +2387,10 @@
     ],
     "aliases_ascii": [],
     "keywords": [
-      "symbol"
-    ]
+      "symbol",
+      "science"
+    ],
+    "moji": "☣"
   },
   "bird": {
     "unicode": "1F426",
@@ -2269,7 +2404,8 @@
       "animal",
       "fly",
       "nature",
-      "tweet"
+      "tweet",
+      "wildlife"
     ],
     "moji": "🐦"
   },
@@ -2278,7 +2414,7 @@
     "unicode_alternates": [],
     "name": "birthday cake",
     "shortname": ":birthday:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2286,10 +2422,11 @@
       "party",
       "birthday",
       "birth",
-      "cake",
       "dessert",
       "wish",
-      "celebrate"
+      "celebrate",
+      "food",
+      "parties"
     ],
     "moji": "🎂"
   },
@@ -2300,26 +2437,42 @@
     ],
     "name": "medium black circle",
     "shortname": ":black_circle:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "circle"
     ],
     "moji": "âš«"
   },
+  "black_heart": {
+    "unicode": "1F5A4",
+    "unicode_alternates": [],
+    "name": "black heart",
+    "shortname": ":black_heart:",
+    "category": "symbols",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🖤"
+  },
   "black_joker": {
     "unicode": "1F0CF",
     "unicode_alternates": [],
     "name": "playing card black joker",
     "shortname": ":black_joker:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "cards",
       "game",
-      "poker"
+      "poker",
+      "object",
+      "symbol"
     ],
     "moji": "🃏"
   },
@@ -2330,11 +2483,14 @@
     ],
     "name": "black large square",
     "shortname": ":black_large_square:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "square"
     ],
     "moji": "⬛"
   },
@@ -2345,10 +2501,14 @@
     ],
     "name": "black medium small square",
     "shortname": ":black_medium_small_square:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": [],
+    "keywords": [
+      "shapes",
+      "symbol",
+      "square"
+    ],
     "moji": "â—¾"
   },
   "black_medium_square": {
@@ -2358,11 +2518,14 @@
     ],
     "name": "black medium square",
     "shortname": ":black_medium_square:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "square"
     ],
     "moji": "â—¼"
   },
@@ -2378,7 +2541,10 @@
     "aliases_ascii": [],
     "keywords": [
       "pen",
-      "stationery"
+      "stationery",
+      "object",
+      "office",
+      "write"
     ],
     "moji": "✒"
   },
@@ -2389,10 +2555,14 @@
     ],
     "name": "black small square",
     "shortname": ":black_small_square:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": [],
+    "keywords": [
+      "shapes",
+      "symbol",
+      "square"
+    ],
     "moji": "â–ª"
   },
   "black_square_button": {
@@ -2400,11 +2570,14 @@
     "unicode_alternates": [],
     "name": "black square button",
     "shortname": ":black_square_button:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "frame"
+      "frame",
+      "shapes",
+      "symbol",
+      "square"
     ],
     "moji": "🔲"
   },
@@ -2422,7 +2595,8 @@
       "yellow",
       "blossom",
       "daisy",
-      "flower"
+      "flower",
+      "plant"
     ],
     "moji": "🌼"
   },
@@ -2445,7 +2619,9 @@
       "ballonfish",
       "toadfish",
       "fugu fish",
-      "sushi"
+      "sushi",
+      "wildlife",
+      "animal"
     ],
     "moji": "🐡"
   },
@@ -2460,7 +2636,11 @@
     "keywords": [
       "knowledge",
       "library",
-      "read"
+      "read",
+      "object",
+      "office",
+      "write",
+      "book"
     ],
     "moji": "📘"
   },
@@ -2469,15 +2649,16 @@
     "unicode_alternates": [],
     "name": "recreational vehicle",
     "shortname": ":blue_car:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "car",
       "suv",
-      "car",
       "wagon",
-      "automobile"
+      "automobile",
+      "transportation",
+      "travel"
     ],
     "moji": "🚙"
   },
@@ -2486,7 +2667,7 @@
     "unicode_alternates": [],
     "name": "blue heart",
     "shortname": ":blue_heart:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2496,11 +2677,11 @@
       "valentines",
       "blue",
       "heart",
-      "love",
       "stability",
       "truth",
       "loyalty",
-      "trust"
+      "trust",
+      "symbol"
     ],
     "moji": "💙"
   },
@@ -2509,7 +2690,7 @@
     "unicode_alternates": [],
     "name": "smiling face with smiling eyes",
     "shortname": ":blush:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2521,8 +2702,10 @@
       "shy",
       "smile",
       "smiling",
-      "smile",
-      "smiley"
+      "smiley",
+      "emotion",
+      "good",
+      "beautiful"
     ],
     "moji": "😊"
   },
@@ -2536,7 +2719,8 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "nature"
+      "nature",
+      "wildlife"
     ],
     "moji": "🐗"
   },
@@ -2550,7 +2734,11 @@
     "aliases_ascii": [],
     "keywords": [
       "boom",
-      "explode"
+      "explode",
+      "object",
+      "weapon",
+      "dead",
+      "blast"
     ],
     "moji": "💣"
   },
@@ -2564,26 +2752,14 @@
     "aliases_ascii": [],
     "keywords": [
       "library",
-      "literature"
+      "literature",
+      "object",
+      "office",
+      "write",
+      "book"
     ],
     "moji": "📖"
   },
-  "book2": {
-    "unicode": "1F56E",
-    "unicode_alternates": [],
-    "name": "book",
-    "shortname": ":book2:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "library",
-      "literature",
-      "novel",
-      "reading",
-      "story"
-    ]
-  },
   "bookmark": {
     "unicode": "1F516",
     "unicode_alternates": [],
@@ -2593,7 +2769,9 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "favorite"
+      "favorite",
+      "object",
+      "book"
     ],
     "moji": "🔖"
   },
@@ -2606,7 +2784,9 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "favorite"
+      "favorite",
+      "office",
+      "write"
     ],
     "moji": "📑"
   },
@@ -2620,7 +2800,11 @@
     "aliases_ascii": [],
     "keywords": [
       "library",
-      "literature"
+      "literature",
+      "object",
+      "office",
+      "write",
+      "book"
     ],
     "moji": "📚"
   },
@@ -2629,7 +2813,7 @@
     "unicode_alternates": [],
     "name": "collision symbol",
     "shortname": ":boom:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2642,7 +2826,9 @@
       "fire",
       "emphasis",
       "wow",
-      "bam"
+      "bam",
+      "symbol",
+      "blast"
     ],
     "moji": "💥"
   },
@@ -2651,12 +2837,16 @@
     "unicode_alternates": [],
     "name": "womans boots",
     "shortname": ":boot:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fashion",
-      "shoes"
+      "shoes",
+      "women",
+      "shoe",
+      "sexy",
+      "accessories"
     ],
     "moji": "👢"
   },
@@ -2670,33 +2860,20 @@
     "aliases_ascii": [],
     "keywords": [
       "flowers",
-      "nature"
+      "nature",
+      "flower",
+      "plant",
+      "rip",
+      "condolence"
     ],
     "moji": "💐"
   },
-  "bouquet2": {
-    "unicode": "1F395",
-    "unicode_alternates": [],
-    "name": "bouquet of flowers",
-    "shortname": ":bouquet2:",
-    "category": "celebration",
-    "aliases": [
-      ":bouquet_of_flowers:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "nature",
-      "marriage",
-      "wedding",
-      "bride"
-    ]
-  },
   "bow": {
     "unicode": "1F647",
     "unicode_alternates": [],
     "name": "person bowing deeply",
     "shortname": ":bow:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2707,13 +2884,16 @@
       "bow",
       "respect",
       "curtsy",
-      "bend"
+      "bend",
+      "people",
+      "pray",
+      "diversity"
     ],
     "moji": "🙇"
   },
   "bow_and_arrow": {
     "unicode": "1F3F9",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bow and arrow",
     "shortname": ":bow_and_arrow:",
     "category": "activity",
@@ -2721,11 +2901,15 @@
       ":archery:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "weapon",
+      "sport"
+    ],
+    "moji": "🏹"
   },
   "bow_tone1": {
     "unicode": "1F647-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person bowing deeply tone 1",
     "shortname": ":bow_tone1:",
     "category": "people",
@@ -2739,11 +2923,12 @@
       "bow",
       "respect",
       "bend"
-    ]
+    ],
+    "moji": "🙇🏻"
   },
   "bow_tone2": {
     "unicode": "1F647-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person bowing deeply tone 2",
     "shortname": ":bow_tone2:",
     "category": "people",
@@ -2757,11 +2942,12 @@
       "bow",
       "respect",
       "bend"
-    ]
+    ],
+    "moji": "🙇🏼"
   },
   "bow_tone3": {
     "unicode": "1F647-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person bowing deeply tone 3",
     "shortname": ":bow_tone3:",
     "category": "people",
@@ -2775,11 +2961,12 @@
       "bow",
       "respect",
       "bend"
-    ]
+    ],
+    "moji": "🙇🏽"
   },
   "bow_tone4": {
     "unicode": "1F647-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person bowing deeply tone 4",
     "shortname": ":bow_tone4:",
     "category": "people",
@@ -2793,11 +2980,12 @@
       "bow",
       "respect",
       "bend"
-    ]
+    ],
+    "moji": "🙇🏾"
   },
   "bow_tone5": {
     "unicode": "1F647-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person bowing deeply tone 5",
     "shortname": ":bow_tone5:",
     "category": "people",
@@ -2811,14 +2999,15 @@
       "bow",
       "respect",
       "bend"
-    ]
+    ],
+    "moji": "🙇🏿"
   },
   "bowling": {
     "unicode": "1F3B3",
     "unicode_alternates": [],
     "name": "bowling",
     "shortname": ":bowling:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2831,28 +3020,46 @@
       "pin",
       "strike",
       "spare",
-      "game"
+      "game",
+      "sport",
+      "boys night"
     ],
     "moji": "🎳"
   },
+  "boxing_glove": {
+    "unicode": "1F94A",
+    "unicode_alternates": [],
+    "name": "boxing glove",
+    "shortname": ":boxing_glove:",
+    "category": "activity",
+    "aliases": [
+      ":boxing_gloves:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥊"
+  },
   "boy": {
     "unicode": "1F466",
     "unicode_alternates": [],
     "name": "boy",
     "shortname": ":boy:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "guy",
       "male",
-      "man"
+      "man",
+      "people",
+      "baby",
+      "diversity"
     ],
     "moji": "👦"
   },
   "boy_tone1": {
     "unicode": "1F466-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "boy tone 1",
     "shortname": ":boy_tone1:",
     "category": "people",
@@ -2862,11 +3069,12 @@
       "male",
       "kid",
       "child"
-    ]
+    ],
+    "moji": "👦🏻"
   },
   "boy_tone2": {
     "unicode": "1F466-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "boy tone 2",
     "shortname": ":boy_tone2:",
     "category": "people",
@@ -2876,11 +3084,12 @@
       "male",
       "kid",
       "child"
-    ]
+    ],
+    "moji": "👦🏼"
   },
   "boy_tone3": {
     "unicode": "1F466-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "boy tone 3",
     "shortname": ":boy_tone3:",
     "category": "people",
@@ -2890,11 +3099,12 @@
       "male",
       "kid",
       "child"
-    ]
+    ],
+    "moji": "👦🏽"
   },
   "boy_tone4": {
     "unicode": "1F466-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "boy tone 4",
     "shortname": ":boy_tone4:",
     "category": "people",
@@ -2904,11 +3114,12 @@
       "male",
       "kid",
       "child"
-    ]
+    ],
+    "moji": "👦🏾"
   },
   "boy_tone5": {
     "unicode": "1F466-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "boy tone 5",
     "shortname": ":boy_tone5:",
     "category": "people",
@@ -2918,27 +3129,15 @@
       "male",
       "kid",
       "child"
-    ]
-  },
-  "boys_symbol": {
-    "unicode": "1F6C9",
-    "unicode_alternates": [],
-    "name": "boys symbol",
-    "shortname": ":boys_symbol:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "male",
-      "child"
-    ]
+    ],
+    "moji": "👦🏿"
   },
   "bread": {
     "unicode": "1F35E",
     "unicode_alternates": [],
     "name": "bread",
     "shortname": ":bread:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2957,7 +3156,7 @@
     "unicode_alternates": [],
     "name": "bride with veil",
     "shortname": ":bride_with_veil:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -2965,19 +3164,21 @@
       "marriage",
       "wedding",
       "bride",
-      "wedding",
       "planning",
       "veil",
       "gown",
       "dress",
       "engagement",
-      "white"
+      "white",
+      "people",
+      "women",
+      "diversity"
     ],
     "moji": "👰"
   },
   "bride_with_veil_tone1": {
     "unicode": "1F470-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bride with veil tone 1",
     "shortname": ":bride_with_veil_tone1:",
     "category": "people",
@@ -2987,17 +3188,17 @@
       "couple",
       "marriage",
       "wedding",
-      "wedding",
       "planning",
       "gown",
       "dress",
       "engagement",
       "white"
-    ]
+    ],
+    "moji": "👰🏻"
   },
   "bride_with_veil_tone2": {
     "unicode": "1F470-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bride with veil tone 2",
     "shortname": ":bride_with_veil_tone2:",
     "category": "people",
@@ -3007,17 +3208,17 @@
       "couple",
       "marriage",
       "wedding",
-      "wedding",
       "planning",
       "gown",
       "dress",
       "engagement",
       "white"
-    ]
+    ],
+    "moji": "👰🏼"
   },
   "bride_with_veil_tone3": {
     "unicode": "1F470-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bride with veil tone 3",
     "shortname": ":bride_with_veil_tone3:",
     "category": "people",
@@ -3027,17 +3228,17 @@
       "couple",
       "marriage",
       "wedding",
-      "wedding",
       "planning",
       "gown",
       "dress",
       "engagement",
       "white"
-    ]
+    ],
+    "moji": "👰🏽"
   },
   "bride_with_veil_tone4": {
     "unicode": "1F470-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bride with veil tone 4",
     "shortname": ":bride_with_veil_tone4:",
     "category": "people",
@@ -3047,17 +3248,17 @@
       "couple",
       "marriage",
       "wedding",
-      "wedding",
       "planning",
       "gown",
       "dress",
       "engagement",
       "white"
-    ]
+    ],
+    "moji": "👰🏾"
   },
   "bride_with_veil_tone5": {
     "unicode": "1F470-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bride with veil tone 5",
     "shortname": ":bride_with_veil_tone5:",
     "category": "people",
@@ -3067,20 +3268,20 @@
       "couple",
       "marriage",
       "wedding",
-      "wedding",
       "planning",
       "gown",
       "dress",
       "engagement",
       "white"
-    ]
+    ],
+    "moji": "👰🏿"
   },
   "bridge_at_night": {
     "unicode": "1F309",
     "unicode_alternates": [],
     "name": "bridge at night",
     "shortname": ":bridge_at_night:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3093,7 +3294,11 @@
       "evening",
       "suspension",
       "golden",
-      "gate"
+      "gate",
+      "places",
+      "travel",
+      "vacation",
+      "goodnight"
     ],
     "moji": "🌉"
   },
@@ -3102,13 +3307,17 @@
     "unicode_alternates": [],
     "name": "briefcase",
     "shortname": ":briefcase:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "business",
       "documents",
-      "work"
+      "work",
+      "bag",
+      "accessories",
+      "nutcase",
+      "job"
     ],
     "moji": "💼"
   },
@@ -3117,14 +3326,17 @@
     "unicode_alternates": [],
     "name": "broken heart",
     "shortname": ":broken_heart:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [
       "</3"
     ],
     "keywords": [
       "sad",
-      "sorry"
+      "sorry",
+      "love",
+      "symbol",
+      "heartbreak"
     ],
     "moji": "💔"
   },
@@ -3140,9 +3352,10 @@
       "insect",
       "nature",
       "bug",
-      "insect",
       "virus",
-      "error"
+      "error",
+      "insects",
+      "animal"
     ],
     "moji": "🐛"
   },
@@ -3159,7 +3372,8 @@
       "light",
       "idea",
       "bulb",
-      "light"
+      "object",
+      "science"
     ],
     "moji": "💡"
   },
@@ -3168,14 +3382,15 @@
     "unicode_alternates": [],
     "name": "high-speed train with bullet nose",
     "shortname": ":bullettrain_front:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "transportation",
       "train",
       "bullet",
-      "rail"
+      "rail",
+      "travel"
     ],
     "moji": "🚅"
   },
@@ -3184,7 +3399,7 @@
     "unicode_alternates": [],
     "name": "high-speed train",
     "shortname": ":bullettrain_side:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3192,58 +3407,31 @@
       "vehicle",
       "train",
       "bullet",
-      "rail"
+      "rail",
+      "travel"
     ],
     "moji": "🚄"
   },
-  "bullhorn": {
-    "unicode": "1F56B",
+  "burrito": {
+    "unicode": "1F32F",
     "unicode_alternates": [],
-    "name": "bullhorn",
-    "shortname": ":bullhorn:",
-    "category": "objects_symbols",
+    "name": "burrito",
+    "shortname": ":burrito:",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "sound",
-      "noise",
-      "announcement",
-      "megaphone"
-    ]
+      "food",
+      "mexican"
+    ],
+    "moji": "🌯"
   },
-  "bullhorn_waves": {
-    "unicode": "1F56C",
-    "unicode_alternates": [],
-    "name": "bullhorn with sound waves",
-    "shortname": ":bullhorn_waves:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":bullhorn_with_sound_waves:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "sound",
-      "noise",
-      "announcement",
-      "megaphone"
-    ]
-  },
-  "burrito": {
-    "unicode": "1F32F",
-    "unicode_alternates": "",
-    "name": "burrito",
-    "shortname": ":burrito:",
-    "category": "foods",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": []
-  },
-  "bus": {
-    "unicode": "1F68C",
+  "bus": {
+    "unicode": "1F68C",
     "unicode_alternates": [],
     "name": "bus",
     "shortname": ":bus:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3253,8 +3441,8 @@
       "bus",
       "school",
       "city",
-      "transportation",
-      "public"
+      "public",
+      "office"
     ],
     "moji": "🚌"
   },
@@ -3263,7 +3451,7 @@
     "unicode_alternates": [],
     "name": "bus stop",
     "shortname": ":busstop:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3272,7 +3460,7 @@
       "stop",
       "city",
       "transport",
-      "transportation"
+      "object"
     ],
     "moji": "🚏"
   },
@@ -3281,7 +3469,7 @@
     "unicode_alternates": [],
     "name": "bust in silhouette",
     "shortname": ":bust_in_silhouette:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3290,8 +3478,6 @@
       "person",
       "user",
       "silhouette",
-      "person",
-      "user",
       "member",
       "account",
       "guest",
@@ -3300,7 +3486,8 @@
       "profile",
       "me",
       "myself",
-      "i"
+      "i",
+      "people"
     ],
     "moji": "👤"
   },
@@ -3309,7 +3496,7 @@
     "unicode_alternates": [],
     "name": "busts in silhouette",
     "shortname": ":busts_in_silhouette:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3322,7 +3509,6 @@
       "silhouette",
       "silhouettes",
       "people",
-      "user",
       "members",
       "accounts",
       "relationship",
@@ -3330,6 +3516,17 @@
     ],
     "moji": "👥"
   },
+  "butterfly": {
+    "unicode": "1F98B",
+    "unicode_alternates": [],
+    "name": "butterfly",
+    "shortname": ":butterfly:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦋"
+  },
   "cactus": {
     "unicode": "1F335",
     "unicode_alternates": [],
@@ -3346,7 +3543,8 @@
       "desert",
       "drought",
       "spike",
-      "poke"
+      "poke",
+      "trees"
     ],
     "moji": "🌵"
   },
@@ -3355,7 +3553,7 @@
     "unicode_alternates": [],
     "name": "shortcake",
     "shortname": ":cake:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3368,24 +3566,6 @@
     ],
     "moji": "🍰"
   },
-  "calculator": {
-    "unicode": "1F5A9",
-    "unicode_alternates": [],
-    "name": "pocket calculator",
-    "shortname": ":calculator:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":pocket calculator:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "add",
-      "subtract",
-      "multiple",
-      "divide",
-      "scientific"
-    ]
-  },
   "calendar": {
     "unicode": "1F4C6",
     "unicode_alternates": [],
@@ -3395,7 +3575,9 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "schedule"
+      "schedule",
+      "object",
+      "office"
     ],
     "moji": "📆"
   },
@@ -3404,7 +3586,7 @@
     "unicode_alternates": [],
     "name": "spiral calendar pad",
     "shortname": ":calendar_spiral:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":spiral_calendar_pad:"
     ],
@@ -3412,8 +3594,89 @@
     "keywords": [
       "schedule",
       "date",
-      "day"
-    ]
+      "day",
+      "object",
+      "office"
+    ],
+    "moji": "🗓"
+  },
+  "call_me": {
+    "unicode": "1F919",
+    "unicode_alternates": [],
+    "name": "call me hand",
+    "shortname": ":call_me:",
+    "category": "people",
+    "aliases": [
+      ":call_me_hand:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤙"
+  },
+  "call_me_tone1": {
+    "unicode": "1F919-1F3FB",
+    "unicode_alternates": [],
+    "name": "call me hand tone 1",
+    "shortname": ":call_me_tone1:",
+    "category": "people",
+    "aliases": [
+      ":call_me_hand_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤙🏻"
+  },
+  "call_me_tone2": {
+    "unicode": "1F919-1F3FC",
+    "unicode_alternates": [],
+    "name": "call me hand tone 2",
+    "shortname": ":call_me_tone2:",
+    "category": "people",
+    "aliases": [
+      ":call_me_hand_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤙🏼"
+  },
+  "call_me_tone3": {
+    "unicode": "1F919-1F3FD",
+    "unicode_alternates": [],
+    "name": "call me hand tone 3",
+    "shortname": ":call_me_tone3:",
+    "category": "people",
+    "aliases": [
+      ":call_me_hand_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤙🏽"
+  },
+  "call_me_tone4": {
+    "unicode": "1F919-1F3FE",
+    "unicode_alternates": [],
+    "name": "call me hand tone 4",
+    "shortname": ":call_me_tone4:",
+    "category": "people",
+    "aliases": [
+      ":call_me_hand_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤙🏾"
+  },
+  "call_me_tone5": {
+    "unicode": "1F919-1F3FF",
+    "unicode_alternates": [],
+    "name": "call me hand tone 5",
+    "shortname": ":call_me_tone5:",
+    "category": "people",
+    "aliases": [
+      ":call_me_hand_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤙🏿"
   },
   "calling": {
     "unicode": "1F4F2",
@@ -3425,7 +3688,10 @@
     "aliases_ascii": [],
     "keywords": [
       "incoming",
-      "iphone"
+      "iphone",
+      "electronics",
+      "phone",
+      "selfie"
     ],
     "moji": "📲"
   },
@@ -3447,11 +3713,11 @@
       "desert",
       "central asia",
       "heat",
-      "hot",
       "water",
       "hump day",
       "wednesday",
-      "sex"
+      "sex",
+      "wildlife"
     ],
     "moji": "🐫"
   },
@@ -3465,7 +3731,10 @@
     "aliases_ascii": [],
     "keywords": [
       "gadgets",
-      "photo"
+      "photo",
+      "electronics",
+      "camera",
+      "selfie"
     ],
     "moji": "📷"
   },
@@ -3474,20 +3743,23 @@
     "unicode_alternates": [],
     "name": "camera with flash",
     "shortname": ":camera_with_flash:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "photo",
-      "picture"
-    ]
+      "picture",
+      "electronics",
+      "camera"
+    ],
+    "moji": "📸"
   },
   "camping": {
     "unicode": "1F3D5",
     "unicode_alternates": [],
     "name": "camping",
     "shortname": ":camping:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3495,22 +3767,13 @@
       "nature",
       "wilderness",
       "roughing",
-      "activity"
-    ]
-  },
-  "cancellation_x": {
-    "unicode": "1F5D9",
-    "unicode_alternates": [],
-    "name": "cancellation x",
-    "shortname": ":cancellation_x:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "cancel",
-      "stop",
-      "delete"
-    ]
+      "activity",
+      "places",
+      "travel",
+      "vacation",
+      "camp"
+    ],
+    "moji": "🏕"
   },
   "cancer": {
     "unicode": "264B",
@@ -3519,7 +3782,7 @@
     ],
     "name": "cancer",
     "shortname": ":cancer:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3531,9 +3794,8 @@
       "stars",
       "zodiac",
       "sign",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♋"
   },
@@ -3542,20 +3804,22 @@
     "unicode_alternates": [],
     "name": "candle",
     "shortname": ":candle:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "light",
-      "wax"
-    ]
+      "wax",
+      "object"
+    ],
+    "moji": "🕯"
   },
   "candy": {
     "unicode": "1F36C",
     "unicode_alternates": [],
     "name": "candy",
     "shortname": ":candy:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3564,22 +3828,38 @@
       "candy",
       "sugar",
       "sweet",
-      "hard"
+      "hard",
+      "food",
+      "halloween"
     ],
     "moji": "🍬"
   },
+  "canoe": {
+    "unicode": "1F6F6",
+    "unicode_alternates": [],
+    "name": "canoe",
+    "shortname": ":canoe:",
+    "category": "travel",
+    "aliases": [
+      ":kayak:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🛶"
+  },
   "capital_abcd": {
     "unicode": "1F520",
     "unicode_alternates": [],
     "name": "input symbol for latin capital letters",
     "shortname": ":capital_abcd:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
       "blue-square",
-      "words"
+      "words",
+      "symbol"
     ],
     "moji": "🔠"
   },
@@ -3590,7 +3870,7 @@
     ],
     "name": "capricorn",
     "shortname": ":capricorn:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3603,9 +3883,8 @@
       "stars",
       "zodiac",
       "sign",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♑"
   },
@@ -3614,15 +3893,19 @@
     "unicode_alternates": [],
     "name": "card file box",
     "shortname": ":card_box:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":card_file_box:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "index",
-      "organization"
-    ]
+      "organization",
+      "object",
+      "work",
+      "office"
+    ],
+    "moji": "🗃"
   },
   "card_index": {
     "unicode": "1F4C7",
@@ -3634,7 +3917,10 @@
     "aliases_ascii": [],
     "keywords": [
       "business",
-      "stationery"
+      "stationery",
+      "object",
+      "work",
+      "office"
     ],
     "moji": "📇"
   },
@@ -3643,7 +3929,7 @@
     "unicode_alternates": [],
     "name": "carousel horse",
     "shortname": ":carousel_horse:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3651,37 +3937,106 @@
       "horse",
       "photo",
       "carousel",
-      "horse",
       "amusement",
       "park",
       "ride",
       "entertainment",
-      "park",
-      "fair"
+      "fair",
+      "places",
+      "object",
+      "vacation",
+      "roller coaster"
     ],
     "moji": "🎠"
   },
-  "cartridge": {
-    "unicode": "1F5AD",
+  "carrot": {
+    "unicode": "1F955",
     "unicode_alternates": [],
-    "name": "tape cartridge",
-    "shortname": ":cartridge:",
-    "category": "objects_symbols",
+    "name": "carrot",
+    "shortname": ":carrot:",
+    "category": "food",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥕"
+  },
+  "cartwheel": {
+    "unicode": "1F938",
+    "unicode_alternates": [],
+    "name": "person doing cartwheel",
+    "shortname": ":cartwheel:",
+    "category": "activity",
     "aliases": [
-      ":tape_cartridge:"
+      ":person_doing_cartwheel:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "oldschool",
-      "save",
-      "technology",
-      "disk",
-      "storage",
-      "information",
-      "computer",
-      "drive",
-      "megabyte"
-    ]
+    "keywords": [],
+    "moji": "🤸"
+  },
+  "cartwheel_tone1": {
+    "unicode": "1F938-1F3FB",
+    "unicode_alternates": [],
+    "name": "person doing cartwheel tone 1",
+    "shortname": ":cartwheel_tone1:",
+    "category": "activity",
+    "aliases": [
+      ":person_doing_cartwheel_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤸🏻"
+  },
+  "cartwheel_tone2": {
+    "unicode": "1F938-1F3FC",
+    "unicode_alternates": [],
+    "name": "person doing cartwheel tone 2",
+    "shortname": ":cartwheel_tone2:",
+    "category": "activity",
+    "aliases": [
+      ":person_doing_cartwheel_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤸🏼"
+  },
+  "cartwheel_tone3": {
+    "unicode": "1F938-1F3FD",
+    "unicode_alternates": [],
+    "name": "person doing cartwheel tone 3",
+    "shortname": ":cartwheel_tone3:",
+    "category": "activity",
+    "aliases": [
+      ":person_doing_cartwheel_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤸🏽"
+  },
+  "cartwheel_tone4": {
+    "unicode": "1F938-1F3FE",
+    "unicode_alternates": [],
+    "name": "person doing cartwheel tone 4",
+    "shortname": ":cartwheel_tone4:",
+    "category": "activity",
+    "aliases": [
+      ":person_doing_cartwheel_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤸🏾,"
+  },
+  "cartwheel_tone5": {
+    "unicode": "1F938-1F3FF",
+    "unicode_alternates": [],
+    "name": "person doing cartwheel tone 5",
+    "shortname": ":cartwheel_tone5:",
+    "category": "activity",
+    "aliases": [
+      ":person_doing_cartwheel_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤸🏿"
   },
   "cat": {
     "unicode": "1F431",
@@ -3693,7 +4048,10 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "meow"
+      "meow",
+      "halloween",
+      "vagina",
+      "cat"
     ],
     "moji": "🐱"
   },
@@ -3711,13 +4069,13 @@
       "pet",
       "cat",
       "kitten",
-      "meow"
+      "halloween"
     ],
     "moji": "🐈"
   },
   "cd": {
     "unicode": "1F4BF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "optical disc",
     "shortname": ":cd:",
     "category": "objects",
@@ -3732,25 +4090,14 @@
       "cd",
       "computer",
       "object",
-      "office"
-    ]
-  },
-  "celtic_cross": {
-    "unicode": "1F548",
-    "unicode_alternates": [],
-    "name": "celtic cross",
-    "shortname": ":celtic_cross:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "religion",
-      "symbol"
-    ]
+      "office",
+      "electronics"
+    ],
+    "moji": "💿"
   },
   "chains": {
     "unicode": "26D3",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "chains",
     "shortname": ":chains:",
     "category": "objects",
@@ -3758,32 +4105,55 @@
     "aliases_ascii": [],
     "keywords": [
       "chain",
-      "object"
-    ]
+      "object",
+      "tool"
+    ],
+    "moji": "⛓"
   },
   "champagne": {
     "unicode": "1F37E",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bottle with popping cork",
     "shortname": ":champagne:",
-    "category": "foods",
+    "category": "food",
     "aliases": [
       ":bottle_with_popping_cork:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "drink",
+      "cheers",
+      "alcohol",
+      "parties"
+    ],
+    "moji": "🍾"
+  },
+  "champagne_glass": {
+    "unicode": "1F942",
+    "unicode_alternates": [],
+    "name": "clinking glasses",
+    "shortname": ":champagne_glass:",
+    "category": "food",
+    "aliases": [
+      ":clinking_glass:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥂"
   },
   "chart": {
     "unicode": "1F4B9",
     "unicode_alternates": [],
     "name": "chart with upwards trend and yen sign",
     "shortname": ":chart:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "graph",
-      "green-square"
+      "green-square",
+      "symbol",
+      "money"
     ],
     "moji": "💹"
   },
@@ -3796,7 +4166,9 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "graph"
+      "graph",
+      "work",
+      "office"
     ],
     "moji": "📉"
   },
@@ -3809,7 +4181,9 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "graph"
+      "graph",
+      "work",
+      "office"
     ],
     "moji": "📈"
   },
@@ -3818,7 +4192,7 @@
     "unicode_alternates": [],
     "name": "chequered flag",
     "shortname": ":checkered_flag:",
-    "category": "objects",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3832,28 +4206,32 @@
       "flag",
       "finish",
       "complete",
-      "end"
+      "end",
+      "object"
     ],
     "moji": "🏁"
   },
   "cheese": {
     "unicode": "1F9C0",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "cheese wedge",
     "shortname": ":cheese:",
-    "category": "foods",
+    "category": "food",
     "aliases": [
       ":cheese_wedge:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "food"
+    ],
+    "moji": "🧀"
   },
   "cherries": {
     "unicode": "1F352",
     "unicode_alternates": [],
     "name": "cherries",
     "shortname": ":cherries:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3862,7 +4240,6 @@
       "cherry",
       "cherries",
       "tree",
-      "fruit",
       "pit"
     ],
     "moji": "🍒"
@@ -3882,7 +4259,7 @@
       "cherry",
       "blossom",
       "tree",
-      "flower"
+      "tropical"
     ],
     "moji": "🌸"
   },
@@ -3899,8 +4276,9 @@
       "squirrel",
       "chestnut",
       "roasted",
-      "food",
-      "tree"
+      "tree",
+      "nature",
+      "plant"
     ],
     "moji": "🌰"
   },
@@ -3927,7 +4305,7 @@
     "unicode_alternates": [],
     "name": "children crossing",
     "shortname": ":children_crossing:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3938,7 +4316,8 @@
       "crossing",
       "street",
       "crosswalk",
-      "slow"
+      "slow",
+      "symbol"
     ],
     "moji": "🚸"
   },
@@ -3952,15 +4331,17 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "nature"
-    ]
+      "nature",
+      "wildlife"
+    ],
+    "moji": "🐿"
   },
   "chocolate_bar": {
     "unicode": "1F36B",
     "unicode_alternates": [],
     "name": "chocolate bar",
     "shortname": ":chocolate_bar:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3971,7 +4352,8 @@
       "bar",
       "candy",
       "coca",
-      "hershey&#039;s"
+      "hershey&#039;s",
+      "halloween"
     ],
     "moji": "🍫"
   },
@@ -3980,7 +4362,7 @@
     "unicode_alternates": [],
     "name": "christmas tree",
     "shortname": ":christmas_tree:",
-    "category": "objects",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -3990,17 +4372,17 @@
       "vacation",
       "xmas",
       "christmas",
-      "xmas",
       "santa",
       "holiday",
       "winter",
-      "december",
-      "santa",
       "evergreen",
       "ornaments",
       "jesus",
       "gifts",
-      "presents"
+      "presents",
+      "plant",
+      "holidays",
+      "trees"
     ],
     "moji": "🎄"
   },
@@ -4011,13 +4393,16 @@
     ],
     "name": "church",
     "shortname": ":church:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "building",
       "christ",
-      "religion"
+      "religion",
+      "places",
+      "wedding",
+      "condolence"
     ],
     "moji": "⛪"
   },
@@ -4026,7 +4411,7 @@
     "unicode_alternates": [],
     "name": "cinema",
     "shortname": ":cinema:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4035,10 +4420,11 @@
       "movie",
       "record",
       "cinema",
-      "movie",
       "theater",
       "motion",
-      "picture"
+      "picture",
+      "symbol",
+      "camera"
     ],
     "moji": "🎦"
   },
@@ -4047,7 +4433,7 @@
     "unicode_alternates": [],
     "name": "circus tent",
     "shortname": ":circus_tent:",
-    "category": "places",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4057,10 +4443,10 @@
       "circus",
       "tent",
       "event",
-      "carnival",
       "big",
       "top",
-      "canvas"
+      "canvas",
+      "circus tent"
     ],
     "moji": "🎪"
   },
@@ -4069,7 +4455,7 @@
     "unicode_alternates": [],
     "name": "cityscape at dusk",
     "shortname": ":city_dusk:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4082,7 +4468,9 @@
       "evening",
       "metropolitan",
       "night",
-      "dark"
+      "dark",
+      "places",
+      "building"
     ],
     "moji": "🌆"
   },
@@ -4091,7 +4479,7 @@
     "unicode_alternates": [],
     "name": "sunset over buildings",
     "shortname": ":city_sunset:",
-    "category": "places",
+    "category": "travel",
     "aliases": [
       ":city_sunrise:"
     ],
@@ -4106,7 +4494,11 @@
       "morning",
       "metropolitan",
       "rise",
-      "sun"
+      "sun",
+      "places",
+      "building",
+      "sky",
+      "vacation"
     ],
     "moji": "🌇"
   },
@@ -4115,7 +4507,7 @@
     "unicode_alternates": [],
     "name": "cityscape",
     "shortname": ":cityscape:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4124,12 +4516,16 @@
       "view",
       "lights",
       "buiildings",
-      "metropolis"
-    ]
+      "metropolis",
+      "places",
+      "building",
+      "vacation"
+    ],
+    "moji": "🏙"
   },
   "cl": {
     "unicode": "1F191",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "squared cl",
     "shortname": ":cl:",
     "category": "symbols",
@@ -4143,14 +4539,15 @@
       "clear",
       "symbol",
       "word"
-    ]
+    ],
+    "moji": "🆑"
   },
   "clap": {
     "unicode": "1F44F",
     "unicode_alternates": [],
     "name": "clapping hands sign",
     "shortname": ":clap:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4163,13 +4560,18 @@
       "approval",
       "sound",
       "encouragement",
-      "enthusiasm"
+      "enthusiasm",
+      "body",
+      "win",
+      "diversity",
+      "good",
+      "beautiful"
     ],
     "moji": "👏"
   },
   "clap_tone1": {
     "unicode": "1F44F-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "clapping hands sign tone 1",
     "shortname": ":clap_tone1:",
     "category": "people",
@@ -4185,11 +4587,12 @@
       "sound",
       "encouragement",
       "enthusiasm"
-    ]
+    ],
+    "moji": "👏🏻"
   },
   "clap_tone2": {
     "unicode": "1F44F-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "clapping hands sign tone 2",
     "shortname": ":clap_tone2:",
     "category": "people",
@@ -4205,11 +4608,12 @@
       "sound",
       "encouragement",
       "enthusiasm"
-    ]
+    ],
+    "moji": "👏🏼"
   },
   "clap_tone3": {
     "unicode": "1F44F-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "clapping hands sign tone 3",
     "shortname": ":clap_tone3:",
     "category": "people",
@@ -4225,11 +4629,12 @@
       "sound",
       "encouragement",
       "enthusiasm"
-    ]
+    ],
+    "moji": "👏🏽"
   },
   "clap_tone4": {
     "unicode": "1F44F-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "clapping hands sign tone 4",
     "shortname": ":clap_tone4:",
     "category": "people",
@@ -4245,11 +4650,12 @@
       "sound",
       "encouragement",
       "enthusiasm"
-    ]
+    ],
+    "moji": "👏🏾"
   },
   "clap_tone5": {
     "unicode": "1F44F-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "clapping hands sign tone 5",
     "shortname": ":clap_tone5:",
     "category": "people",
@@ -4265,14 +4671,15 @@
       "sound",
       "encouragement",
       "enthusiasm"
-    ]
+    ],
+    "moji": "👏🏿"
   },
   "clapper": {
     "unicode": "1F3AC",
     "unicode_alternates": [],
     "name": "clapper board",
     "shortname": ":clapper:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4282,8 +4689,6 @@
       "clapper",
       "board",
       "clapboard",
-      "movie",
-      "film",
       "take"
     ],
     "moji": "🎬"
@@ -4293,7 +4698,7 @@
     "unicode_alternates": [],
     "name": "classical building",
     "shortname": ":classical_building:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4301,8 +4706,13 @@
       "architecture",
       "history",
       "iconic",
-      "genre"
-    ]
+      "genre",
+      "places",
+      "building",
+      "travel",
+      "vacation"
+    ],
+    "moji": "🏛"
   },
   "clipboard": {
     "unicode": "1F4CB",
@@ -4314,7 +4724,11 @@
     "aliases_ascii": [],
     "keywords": [
       "documents",
-      "stationery"
+      "stationery",
+      "object",
+      "work",
+      "office",
+      "write"
     ],
     "moji": "📋"
   },
@@ -4323,26 +4737,29 @@
     "unicode_alternates": [],
     "name": "mantlepiece clock",
     "shortname": ":clock:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":mantlepiece_clock:"
     ],
     "aliases_ascii": [],
     "keywords": [
-      "time"
-    ]
+      "time",
+      "object"
+    ],
+    "moji": "🕰"
   },
   "clock1": {
     "unicode": "1F550",
     "unicode_alternates": [],
     "name": "clock face one oclock",
     "shortname": ":clock1:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕐"
   },
@@ -4351,12 +4768,13 @@
     "unicode_alternates": [],
     "name": "clock face ten oclock",
     "shortname": ":clock10:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕙"
   },
@@ -4365,12 +4783,13 @@
     "unicode_alternates": [],
     "name": "clock face ten-thirty",
     "shortname": ":clock1030:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕥"
   },
@@ -4379,12 +4798,13 @@
     "unicode_alternates": [],
     "name": "clock face eleven oclock",
     "shortname": ":clock11:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕚"
   },
@@ -4393,12 +4813,13 @@
     "unicode_alternates": [],
     "name": "clock face eleven-thirty",
     "shortname": ":clock1130:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕦"
   },
@@ -4407,12 +4828,13 @@
     "unicode_alternates": [],
     "name": "clock face twelve oclock",
     "shortname": ":clock12:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕛"
   },
@@ -4421,25 +4843,28 @@
     "unicode_alternates": [],
     "name": "clock face twelve-thirty",
     "shortname": ":clock1230:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
-    ]
+      "time",
+      "symbol"
+    ],
+    "moji": "🕧"
   },
   "clock130": {
     "unicode": "1F55C",
     "unicode_alternates": [],
     "name": "clock face one-thirty",
     "shortname": ":clock130:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕜"
   },
@@ -4448,12 +4873,13 @@
     "unicode_alternates": [],
     "name": "clock face two oclock",
     "shortname": ":clock2:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕑"
   },
@@ -4462,12 +4888,13 @@
     "unicode_alternates": [],
     "name": "clock face two-thirty",
     "shortname": ":clock230:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕝"
   },
@@ -4476,12 +4903,13 @@
     "unicode_alternates": [],
     "name": "clock face three oclock",
     "shortname": ":clock3:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕒"
   },
@@ -4490,12 +4918,13 @@
     "unicode_alternates": [],
     "name": "clock face three-thirty",
     "shortname": ":clock330:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕞"
   },
@@ -4504,12 +4933,13 @@
     "unicode_alternates": [],
     "name": "clock face four oclock",
     "shortname": ":clock4:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕓"
   },
@@ -4518,12 +4948,13 @@
     "unicode_alternates": [],
     "name": "clock face four-thirty",
     "shortname": ":clock430:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕟"
   },
@@ -4532,12 +4963,13 @@
     "unicode_alternates": [],
     "name": "clock face five oclock",
     "shortname": ":clock5:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕔"
   },
@@ -4546,12 +4978,13 @@
     "unicode_alternates": [],
     "name": "clock face five-thirty",
     "shortname": ":clock530:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕠"
   },
@@ -4560,12 +4993,13 @@
     "unicode_alternates": [],
     "name": "clock face six oclock",
     "shortname": ":clock6:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕕"
   },
@@ -4574,12 +5008,13 @@
     "unicode_alternates": [],
     "name": "clock face six-thirty",
     "shortname": ":clock630:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕡"
   },
@@ -4588,12 +5023,13 @@
     "unicode_alternates": [],
     "name": "clock face seven oclock",
     "shortname": ":clock7:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕖"
   },
@@ -4602,12 +5038,13 @@
     "unicode_alternates": [],
     "name": "clock face seven-thirty",
     "shortname": ":clock730:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕢"
   },
@@ -4616,12 +5053,13 @@
     "unicode_alternates": [],
     "name": "clock face eight oclock",
     "shortname": ":clock8:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕗"
   },
@@ -4630,12 +5068,13 @@
     "unicode_alternates": [],
     "name": "clock face eight-thirty",
     "shortname": ":clock830:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕣"
   },
@@ -4644,12 +5083,13 @@
     "unicode_alternates": [],
     "name": "clock face nine oclock",
     "shortname": ":clock9:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕘"
   },
@@ -4658,29 +5098,16 @@
     "unicode_alternates": [],
     "name": "clock face nine-thirty",
     "shortname": ":clock930:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clock",
-      "time"
+      "time",
+      "symbol"
     ],
     "moji": "🕤"
   },
-  "clockwise_arrows": {
-    "unicode": "1F5D8",
-    "unicode_alternates": [],
-    "name": "clockwise right and left semicircle arrows",
-    "shortname": ":clockwise_arrows:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":clockwise_right_and_left_semicircle_arrows:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "sync"
-    ]
-  },
   "closed_book": {
     "unicode": "1F4D5",
     "unicode_alternates": [],
@@ -4692,7 +5119,11 @@
     "keywords": [
       "knowledge",
       "library",
-      "read"
+      "read",
+      "object",
+      "office",
+      "write",
+      "book"
     ],
     "moji": "📕"
   },
@@ -4706,7 +5137,9 @@
     "aliases_ascii": [],
     "keywords": [
       "privacy",
-      "security"
+      "security",
+      "object",
+      "lock"
     ],
     "moji": "🔐"
   },
@@ -4715,7 +5148,7 @@
     "unicode_alternates": [],
     "name": "closed umbrella",
     "shortname": ":closed_umbrella:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4724,12 +5157,14 @@
       "weather",
       "umbrella",
       "closed",
-      "rain",
       "moisture",
       "protection",
       "sun",
       "ultraviolet",
-      "uv"
+      "uv",
+      "object",
+      "sky",
+      "accessories"
     ],
     "moji": "🌂"
   },
@@ -4745,7 +5180,10 @@
     "aliases_ascii": [],
     "keywords": [
       "sky",
-      "weather"
+      "weather",
+      "cloud",
+      "cold",
+      "rain"
     ],
     "moji": "☁"
   },
@@ -4761,8 +5199,13 @@
     "aliases_ascii": [],
     "keywords": [
       "weather",
-      "thunder"
-    ]
+      "thunder",
+      "sky",
+      "cloud",
+      "cold",
+      "rain"
+    ],
+    "moji": "🌩"
   },
   "cloud_rain": {
     "unicode": "1F327",
@@ -4776,8 +5219,14 @@
     "aliases_ascii": [],
     "keywords": [
       "weather",
-      "wet"
-    ]
+      "wet",
+      "winter",
+      "sky",
+      "cloud",
+      "cold",
+      "rain"
+    ],
+    "moji": "🌧"
   },
   "cloud_snow": {
     "unicode": "1F328",
@@ -4791,8 +5240,13 @@
     "aliases_ascii": [],
     "keywords": [
       "weather",
-      "cold"
-    ]
+      "cold",
+      "winter",
+      "sky",
+      "cloud",
+      "snow"
+    ],
+    "moji": "🌨"
   },
   "cloud_tornado": {
     "unicode": "1F32A",
@@ -4807,8 +5261,24 @@
     "keywords": [
       "weather",
       "destruction",
-      "funnel"
-    ]
+      "funnel",
+      "sky",
+      "cold"
+    ],
+    "moji": "🌪"
+  },
+  "clown": {
+    "unicode": "1F921",
+    "unicode_alternates": [],
+    "name": "clown face",
+    "shortname": ":clown:",
+    "category": "people",
+    "aliases": [
+      ":clown_face:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤡"
   },
   "clubs": {
     "unicode": "2663",
@@ -4817,12 +5287,14 @@
     ],
     "name": "black club suit",
     "shortname": ":clubs:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "cards",
-      "poker"
+      "poker",
+      "symbol",
+      "game"
     ],
     "moji": "♣"
   },
@@ -4831,7 +5303,7 @@
     "unicode_alternates": [],
     "name": "cocktail glass",
     "shortname": ":cocktail:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4841,11 +5313,11 @@
       "drunk",
       "cocktail",
       "mixed",
-      "drink",
-      "alcohol",
       "glass",
       "martini",
-      "bar"
+      "bar",
+      "girls night",
+      "parties"
     ],
     "moji": "🍸"
   },
@@ -4856,20 +5328,23 @@
     ],
     "name": "hot beverage",
     "shortname": ":coffee:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "beverage",
       "cafe",
       "drink",
-      "espresso"
+      "espresso",
+      "caffeine",
+      "steam",
+      "morning"
     ],
     "moji": "☕"
   },
   "coffin": {
     "unicode": "26B0",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "coffin",
     "shortname": ":coffin:",
     "category": "objects",
@@ -4877,15 +5352,18 @@
     "aliases_ascii": [],
     "keywords": [
       "death",
-      "object"
-    ]
+      "object",
+      "dead",
+      "rip"
+    ],
+    "moji": "âš°"
   },
   "cold_sweat": {
     "unicode": "1F630",
     "unicode_alternates": [],
     "name": "face with open mouth and cold sweat",
     "shortname": ":cold_sweat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4893,13 +5371,15 @@
       "nervous",
       "sweat",
       "exasperated",
-      "frustrated"
+      "frustrated",
+      "smiley",
+      "emotion"
     ],
     "moji": "😰"
   },
   "comet": {
     "unicode": "2604",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "comet",
     "shortname": ":comet:",
     "category": "nature",
@@ -4907,20 +5387,23 @@
     "aliases_ascii": [],
     "keywords": [
       "object",
-      "space"
-    ]
+      "space",
+      "sky"
+    ],
+    "moji": "☄"
   },
   "compression": {
     "unicode": "1F5DC",
     "unicode_alternates": [],
     "name": "compression",
     "shortname": ":compression:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "reduce"
-    ]
+    ],
+    "moji": "🗜"
   },
   "computer": {
     "unicode": "1F4BB",
@@ -4932,25 +5415,13 @@
     "aliases_ascii": [],
     "keywords": [
       "laptop",
-      "tech"
+      "tech",
+      "electronics",
+      "work",
+      "office"
     ],
     "moji": "💻"
   },
-  "computer_old": {
-    "unicode": "1F5B3",
-    "unicode_alternates": [],
-    "name": "old personal computer",
-    "shortname": ":computer_old:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":old_personal_computer:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "cpu",
-      "terminal"
-    ]
-  },
   "confetti_ball": {
     "unicode": "1F38A",
     "unicode_alternates": [],
@@ -4962,7 +5433,6 @@
     "keywords": [
       "festival",
       "party",
-      "party",
       "congratulations",
       "confetti",
       "ball",
@@ -4970,7 +5440,13 @@
       "win",
       "birthday",
       "new years",
-      "wedding"
+      "wedding",
+      "object",
+      "holidays",
+      "cheers",
+      "girls night",
+      "boys night",
+      "parties"
     ],
     "moji": "🎊"
   },
@@ -4979,7 +5455,7 @@
     "unicode_alternates": [],
     "name": "confounded face",
     "shortname": ":confounded:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -4991,7 +5467,11 @@
       "amaze",
       "perplex",
       "puzzle",
-      "mystify"
+      "mystify",
+      "sad",
+      "smiley",
+      "angry",
+      "emotion"
     ],
     "moji": "😖"
   },
@@ -5000,7 +5480,7 @@
     "unicode_alternates": [],
     "name": "confused face",
     "shortname": ":confused:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ">:\\",
@@ -5024,7 +5504,10 @@
       "skeptical",
       "undecided",
       "uneasy",
-      "hesitant"
+      "hesitant",
+      "smiley",
+      "surprised",
+      "emotion"
     ],
     "moji": "😕"
   },
@@ -5035,13 +5518,15 @@
     ],
     "name": "circled ideograph congratulation",
     "shortname": ":congratulations:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "chinese",
       "japanese",
-      "kanji"
+      "kanji",
+      "japan",
+      "symbol"
     ],
     "moji": "㊗"
   },
@@ -5050,19 +5535,20 @@
     "unicode_alternates": [],
     "name": "construction sign",
     "shortname": ":construction:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "caution",
       "progress",
-      "wip"
+      "wip",
+      "object"
     ],
     "moji": "🚧"
   },
   "construction_site": {
     "unicode": "1F3D7",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "building construction",
     "shortname": ":construction_site:",
     "category": "travel",
@@ -5073,28 +5559,36 @@
     "keywords": [
       "site",
       "work",
-      "place"
-    ]
+      "place",
+      "building",
+      "crane"
+    ],
+    "moji": "🏗"
   },
   "construction_worker": {
     "unicode": "1F477",
     "unicode_alternates": [],
     "name": "construction worker",
     "shortname": ":construction_worker:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "human",
       "male",
       "man",
-      "wip"
+      "wip",
+      "people",
+      "hat",
+      "men",
+      "diversity",
+      "job"
     ],
     "moji": "👷"
   },
   "construction_worker_tone1": {
     "unicode": "1F477-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "construction worker tone 1",
     "shortname": ":construction_worker_tone1:",
     "category": "people",
@@ -5105,11 +5599,12 @@
       "male",
       "man",
       "wip"
-    ]
+    ],
+    "moji": "👷🏻"
   },
   "construction_worker_tone2": {
     "unicode": "1F477-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "construction worker tone 2",
     "shortname": ":construction_worker_tone2:",
     "category": "people",
@@ -5120,11 +5615,12 @@
       "male",
       "man",
       "wip"
-    ]
+    ],
+    "moji": "👷🏼"
   },
   "construction_worker_tone3": {
     "unicode": "1F477-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "construction worker tone 3",
     "shortname": ":construction_worker_tone3:",
     "category": "people",
@@ -5135,11 +5631,12 @@
       "male",
       "man",
       "wip"
-    ]
+    ],
+    "moji": "👷🏽"
   },
   "construction_worker_tone4": {
     "unicode": "1F477-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "construction worker tone 4",
     "shortname": ":construction_worker_tone4:",
     "category": "people",
@@ -5150,11 +5647,12 @@
       "male",
       "man",
       "wip"
-    ]
+    ],
+    "moji": "👷🏾"
   },
   "construction_worker_tone5": {
     "unicode": "1F477-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "construction worker tone 5",
     "shortname": ":construction_worker_tone5:",
     "category": "people",
@@ -5165,45 +5663,34 @@
       "male",
       "man",
       "wip"
-    ]
+    ],
+    "moji": "👷🏿"
   },
   "control_knobs": {
     "unicode": "1F39B",
     "unicode_alternates": [],
     "name": "control knobs",
     "shortname": ":control_knobs:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "dial"
-    ]
-  },
-  "contruction_site": {
-    "unicode": "1F3D7",
-    "unicode_alternates": [],
-    "name": "building construction",
-    "shortname": ":contruction_site:",
-    "category": "travel_places",
-    "aliases": [
-      ":building_construction:"
+      "dial",
+      "time"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "site",
-      "work"
-    ]
+    "moji": "🎛"
   },
   "convenience_store": {
     "unicode": "1F3EA",
     "unicode_alternates": [],
     "name": "convenience store",
     "shortname": ":convenience_store:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "building"
+      "building",
+      "places"
     ],
     "moji": "🏪"
   },
@@ -5212,7 +5699,7 @@
     "unicode_alternates": [],
     "name": "cookie",
     "shortname": ":cookie:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5224,21 +5711,44 @@
       "dessert",
       "biscuit",
       "sweet",
-      "chocolate"
+      "vagina"
     ],
     "moji": "🍪"
   },
+  "cooking": {
+    "unicode": "1F373",
+    "unicode_alternates": [],
+    "name": "cooking",
+    "shortname": ":cooking:",
+    "category": "food",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [
+      "breakfast",
+      "food",
+      "egg",
+      "fry",
+      "pan",
+      "flat",
+      "cook",
+      "frying",
+      "cooking",
+      "utensil"
+    ],
+    "moji": "🍳"
+  },
   "cool": {
     "unicode": "1F192",
     "unicode_alternates": [],
     "name": "squared cool",
     "shortname": ":cool:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
-      "words"
+      "words",
+      "symbol"
     ],
     "moji": "🆒"
   },
@@ -5247,7 +5757,7 @@
     "unicode_alternates": [],
     "name": "police officer",
     "shortname": ":cop:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5255,13 +5765,19 @@
       "enforcement",
       "law",
       "man",
-      "police"
+      "police",
+      "people",
+      "hat",
+      "men",
+      "diversity",
+      "job",
+      "911"
     ],
     "moji": "👮"
   },
   "cop_tone1": {
     "unicode": "1F46E-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "police officer tone 1",
     "shortname": ":cop_tone1:",
     "category": "people",
@@ -5273,11 +5789,12 @@
       "law",
       "man",
       "cop"
-    ]
+    ],
+    "moji": "👮🏻"
   },
   "cop_tone2": {
     "unicode": "1F46E-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "police officer tone 2",
     "shortname": ":cop_tone2:",
     "category": "people",
@@ -5289,11 +5806,12 @@
       "law",
       "man",
       "cop"
-    ]
+    ],
+    "moji": "👮🏼"
   },
   "cop_tone3": {
     "unicode": "1F46E-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "police officer tone 3",
     "shortname": ":cop_tone3:",
     "category": "people",
@@ -5305,11 +5823,12 @@
       "law",
       "man",
       "cop"
-    ]
+    ],
+    "moji": "👮🏽"
   },
   "cop_tone4": {
     "unicode": "1F46E-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "police officer tone 4",
     "shortname": ":cop_tone4:",
     "category": "people",
@@ -5321,11 +5840,12 @@
       "law",
       "man",
       "cop"
-    ]
+    ],
+    "moji": "👮🏾"
   },
   "cop_tone5": {
     "unicode": "1F46E-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "police officer tone 5",
     "shortname": ":cop_tone5:",
     "category": "people",
@@ -5337,7 +5857,8 @@
       "law",
       "man",
       "cop"
-    ]
+    ],
+    "moji": "👮🏿"
   },
   "copyright": {
     "moji": "©",
@@ -5345,12 +5866,13 @@
     "unicode_alternates": [],
     "name": "copyright sign",
     "shortname": ":copyright:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "ip",
-      "license"
+      "license",
+      "symbol"
     ]
   },
   "corn": {
@@ -5358,7 +5880,7 @@
     "unicode_alternates": [],
     "name": "ear of maize",
     "shortname": ":corn:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5367,7 +5889,6 @@
       "vegetable",
       "corn",
       "maize",
-      "food",
       "iowa",
       "kernel",
       "popcorn",
@@ -5375,7 +5896,8 @@
       "yellow",
       "stalk",
       "cob",
-      "ear"
+      "ear",
+      "vegetables"
     ],
     "moji": "🌽"
   },
@@ -5384,7 +5906,7 @@
     "unicode_alternates": [],
     "name": "couch and lamp",
     "shortname": ":couch:",
-    "category": "travel_places",
+    "category": "objects",
     "aliases": [
       ":couch_and_lamp:"
     ],
@@ -5397,15 +5919,17 @@
       "leather",
       "microfiber",
       "sit",
-      "relax"
-    ]
+      "relax",
+      "object"
+    ],
+    "moji": "🛋"
   },
   "couple": {
     "unicode": "1F46B",
     "unicode_alternates": [],
     "name": "man and woman holding hands",
     "shortname": ":couple:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5417,7 +5941,9 @@
       "love",
       "marriage",
       "people",
-      "valentines"
+      "valentines",
+      "sex",
+      "creationism"
     ],
     "moji": "👫"
   },
@@ -5440,15 +5966,21 @@
       "like",
       "love",
       "marriage",
-      "valentines"
-    ]
+      "valentines",
+      "people",
+      "gay",
+      "men",
+      "sex",
+      "lgbt"
+    ],
+    "moji": "👨‍❤️‍👨"
   },
   "couple_with_heart": {
     "unicode": "1F491",
     "unicode_alternates": [],
     "name": "couple with heart",
     "shortname": ":couple_with_heart:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5458,7 +5990,9 @@
       "like",
       "love",
       "marriage",
-      "valentines"
+      "valentines",
+      "people",
+      "sex"
     ],
     "moji": "💑"
   },
@@ -5481,15 +6015,20 @@
       "like",
       "love",
       "marriage",
-      "valentines"
-    ]
+      "valentines",
+      "people",
+      "women",
+      "sex",
+      "lgbt"
+    ],
+    "moji": "👩‍❤️‍👩"
   },
   "couplekiss": {
     "unicode": "1F48F",
     "unicode_alternates": [],
     "name": "kiss",
     "shortname": ":couplekiss:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5497,7 +6036,9 @@
       "like",
       "love",
       "marriage",
-      "valentines"
+      "valentines",
+      "people",
+      "sex"
     ],
     "moji": "💏"
   },
@@ -5532,28 +6073,44 @@
       "cow",
       "milk",
       "dairy",
-      "beef",
       "bessie",
       "moo"
     ],
     "moji": "🐄"
   },
+  "cowboy": {
+    "unicode": "1F920",
+    "unicode_alternates": [],
+    "name": "face with cowboy hat",
+    "shortname": ":cowboy:",
+    "category": "people",
+    "aliases": [
+      ":face_with_cowboy_hat:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤠"
+  },
   "crab": {
     "unicode": "1F980",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "crab",
     "shortname": ":crab:",
     "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "tropical",
+      "animal"
+    ],
+    "moji": "🦀"
   },
   "crayon": {
     "unicode": "1F58D",
     "unicode_alternates": [],
     "name": "lower left crayon",
     "shortname": ":crayon:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":lower_left_crayon:"
     ],
@@ -5562,8 +6119,11 @@
       "write",
       "draw",
       "color",
-      "wax"
-    ]
+      "wax",
+      "object",
+      "office"
+    ],
+    "moji": "🖍"
   },
   "credit_card": {
     "unicode": "1F4B3",
@@ -5588,7 +6148,9 @@
       "visa",
       "american express",
       "wallet",
-      "signature"
+      "signature",
+      "object",
+      "boys night"
     ],
     "moji": "💳"
   },
@@ -5606,15 +6168,16 @@
       "crescent",
       "waxing",
       "sky",
-      "night",
       "cheese",
-      "phase"
+      "phase",
+      "space",
+      "goodnight"
     ],
     "moji": "🌙"
   },
   "cricket": {
     "unicode": "1F3CF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "cricket bat and ball",
     "shortname": ":cricket:",
     "category": "activity",
@@ -5622,7 +6185,12 @@
       ":cricket_bat_ball:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "ball",
+      "sport",
+      "cricket"
+    ],
+    "moji": "🏏"
   },
   "crocodile": {
     "unicode": "1F40A",
@@ -5639,13 +6207,26 @@
       "croc",
       "alligator",
       "gator",
-      "cranky"
+      "cranky",
+      "wildlife",
+      "reptile"
     ],
     "moji": "🐊"
   },
+  "croissant": {
+    "unicode": "1F950",
+    "unicode_alternates": [],
+    "name": "croissant",
+    "shortname": ":croissant:",
+    "category": "food",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥐"
+  },
   "cross": {
     "unicode": "271D",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "latin cross",
     "shortname": ":cross:",
     "category": "symbols",
@@ -5657,53 +6238,8 @@
       "religion",
       "symbol",
       "christian"
-    ]
-  },
-  "cross_heavy": {
-    "unicode": "1F547",
-    "unicode_alternates": [],
-    "name": "heavy latin cross",
-    "shortname": ":cross_heavy:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":heavy_latin_cross:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "religion",
-      "symbol"
-    ]
-  },
-  "cross_white": {
-    "unicode": "1F546",
-    "unicode_alternates": [],
-    "name": "white latin cross",
-    "shortname": ":cross_white:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":white_latin_cross:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "religion",
-      "symbol"
-    ]
-  },
-  "crossbones": {
-    "unicode": "1F571",
-    "unicode_alternates": [],
-    "name": "black skull and crossbones",
-    "shortname": ":crossbones:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":black_skull_and_crossbones:"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "poison",
-      "danger",
-      "death"
-    ]
+    "moji": "✝"
   },
   "crossed_flags": {
     "unicode": "1F38C",
@@ -5714,13 +6250,14 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "japan"
+      "japan",
+      "object"
     ],
     "moji": "🎌"
   },
   "crossed_swords": {
     "unicode": "2694",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "crossed swords",
     "shortname": ":crossed_swords:",
     "category": "objects",
@@ -5729,21 +6266,25 @@
     "keywords": [
       "object",
       "weapon"
-    ]
+    ],
+    "moji": "âš”"
   },
   "crown": {
     "unicode": "1F451",
     "unicode_alternates": [],
     "name": "crown",
     "shortname": ":crown:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "king",
       "kod",
       "leader",
-      "royalty"
+      "royalty",
+      "object",
+      "gem",
+      "accessories"
     ],
     "moji": "👑"
   },
@@ -5752,7 +6293,7 @@
     "unicode_alternates": [],
     "name": "passenger ship",
     "shortname": ":cruise_ship:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [
       ":passenger_ship:"
     ],
@@ -5760,15 +6301,18 @@
     "keywords": [
       "titanic",
       "transportation",
-      "boat"
-    ]
+      "boat",
+      "travel",
+      "vacation"
+    ],
+    "moji": "🛳"
   },
   "cry": {
     "unicode": "1F622",
     "unicode_alternates": [],
     "name": "crying face",
     "shortname": ":cry:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ":'(",
@@ -5779,11 +6323,14 @@
     "keywords": [
       "face",
       "sad",
-      "sad",
       "cry",
       "tear",
       "weep",
-      "tears"
+      "tears",
+      "smiley",
+      "emotion",
+      "rip",
+      "heartbreak"
     ],
     "moji": "😢"
   },
@@ -5792,7 +6339,7 @@
     "unicode_alternates": [],
     "name": "crying cat face",
     "shortname": ":crying_cat_face:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5804,8 +6351,6 @@
       "cry",
       "cat",
       "sob",
-      "tears",
-      "sad",
       "melancholy",
       "morn",
       "somber",
@@ -5823,16 +6368,29 @@
     "aliases_ascii": [],
     "keywords": [
       "disco",
-      "party"
+      "party",
+      "object",
+      "ball"
     ],
     "moji": "🔮"
   },
+  "cucumber": {
+    "unicode": "1F952",
+    "unicode_alternates": [],
+    "name": "cucumber",
+    "shortname": ":cucumber:",
+    "category": "food",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥒"
+  },
   "cupid": {
     "unicode": "1F498",
     "unicode_alternates": [],
     "name": "heart with arrow",
     "shortname": ":cupid:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5840,7 +6398,8 @@
       "heart",
       "like",
       "love",
-      "valentines"
+      "valentines",
+      "symbol"
     ],
     "moji": "💘"
   },
@@ -5849,11 +6408,12 @@
     "unicode_alternates": [],
     "name": "curly loop",
     "shortname": ":curly_loop:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "scribble"
+      "scribble",
+      "symbol"
     ],
     "moji": "âž°"
   },
@@ -5862,13 +6422,14 @@
     "unicode_alternates": [],
     "name": "currency exchange",
     "shortname": ":currency_exchange:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "dollar",
       "money",
-      "travel"
+      "travel",
+      "symbol"
     ],
     "moji": "💱"
   },
@@ -5877,7 +6438,7 @@
     "unicode_alternates": [],
     "name": "curry and rice",
     "shortname": ":curry:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5888,7 +6449,6 @@
       "curry",
       "spice",
       "flavor",
-      "food",
       "meal"
     ],
     "moji": "🍛"
@@ -5898,7 +6458,7 @@
     "unicode_alternates": [],
     "name": "custard",
     "shortname": ":custard:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5920,7 +6480,7 @@
     "unicode_alternates": [],
     "name": "customs",
     "shortname": ":customs:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5932,7 +6492,8 @@
       "goods",
       "check",
       "authority",
-      "government"
+      "government",
+      "symbol"
     ],
     "moji": "🛃"
   },
@@ -5942,7 +6503,7 @@
     "unicode_alternates": [],
     "name": "cyclone",
     "shortname": ":cyclone:",
-    "category": "nature",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5954,7 +6515,9 @@
       "hurricane",
       "typhoon",
       "storm",
-      "ocean"
+      "ocean",
+      "symbol",
+      "drugs"
     ]
   },
   "dagger": {
@@ -5962,22 +6525,25 @@
     "unicode_alternates": [],
     "name": "dagger knife",
     "shortname": ":dagger:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":dagger_knife:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "blade",
-      "knife"
-    ]
+      "knife",
+      "object",
+      "weapon"
+    ],
+    "moji": "🗡"
   },
   "dancer": {
     "unicode": "1F483",
     "unicode_alternates": [],
     "name": "dancer",
     "shortname": ":dancer:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -5995,13 +6561,18 @@
       "ballet",
       "tango",
       "cha cha",
-      "music"
+      "music",
+      "people",
+      "women",
+      "sexy",
+      "diversity",
+      "girls night"
     ],
     "moji": "💃"
   },
   "dancer_tone1": {
     "unicode": "1F483-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "dancer tone 1",
     "shortname": ":dancer_tone1:",
     "category": "people",
@@ -6021,11 +6592,12 @@
       "tango",
       "cha cha",
       "music"
-    ]
+    ],
+    "moji": "💃🏻"
   },
   "dancer_tone2": {
     "unicode": "1F483-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "dancer tone 2",
     "shortname": ":dancer_tone2:",
     "category": "people",
@@ -6045,11 +6617,12 @@
       "tango",
       "cha cha",
       "music"
-    ]
+    ],
+    "moji": "💃🏼"
   },
   "dancer_tone3": {
     "unicode": "1F483-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "dancer tone 3",
     "shortname": ":dancer_tone3:",
     "category": "people",
@@ -6069,11 +6642,12 @@
       "tango",
       "cha cha",
       "music"
-    ]
+    ],
+    "moji": "💃🏽"
   },
   "dancer_tone4": {
     "unicode": "1F483-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "dancer tone 4",
     "shortname": ":dancer_tone4:",
     "category": "people",
@@ -6093,11 +6667,12 @@
       "tango",
       "cha cha",
       "music"
-    ]
+    ],
+    "moji": "💃🏾"
   },
   "dancer_tone5": {
     "unicode": "1F483-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "dancer tone 5",
     "shortname": ":dancer_tone5:",
     "category": "people",
@@ -6117,14 +6692,15 @@
       "tango",
       "cha cha",
       "music"
-    ]
+    ],
+    "moji": "💃🏿"
   },
   "dancers": {
     "unicode": "1F46F",
     "unicode_alternates": [],
     "name": "woman with bunny ears",
     "shortname": ":dancers:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6137,8 +6713,13 @@
       "showgirl",
       "playboy",
       "costume",
-      "bunny",
-      "cancan"
+      "cancan",
+      "people",
+      "sexy",
+      "girls night",
+      "boys night",
+      "parties",
+      "dance"
     ],
     "moji": "👯"
   },
@@ -6147,7 +6728,7 @@
     "unicode_alternates": [],
     "name": "dango",
     "shortname": ":dango:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6166,20 +6747,24 @@
     "unicode_alternates": [],
     "name": "dark sunglasses",
     "shortname": ":dark_sunglasses:",
-    "category": "objects_symbols",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "shades",
-      "eyes"
-    ]
+      "eyes",
+      "fashion",
+      "glasses",
+      "accessories"
+    ],
+    "moji": "🕶"
   },
   "dart": {
     "unicode": "1F3AF",
     "unicode_alternates": [],
     "name": "direct hit",
     "shortname": ":dart:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6190,10 +6775,10 @@
       "bullseye",
       "dart",
       "archery",
-      "game",
       "fletching",
       "arrow",
-      "sport"
+      "sport",
+      "boys night"
     ],
     "moji": "🎯"
   },
@@ -6202,14 +6787,17 @@
     "unicode_alternates": [],
     "name": "dash symbol",
     "shortname": ":dash:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "air",
       "fast",
       "shoo",
-      "wind"
+      "wind",
+      "cloud",
+      "cold",
+      "smoking"
     ],
     "moji": "💨"
   },
@@ -6223,7 +6811,9 @@
     "aliases_ascii": [],
     "keywords": [
       "calendar",
-      "schedule"
+      "schedule",
+      "object",
+      "office"
     ],
     "moji": "📅"
   },
@@ -6242,16 +6832,29 @@
       "tree",
       "leaves",
       "fall",
-      "color"
+      "color",
+      "camp",
+      "trees"
     ],
     "moji": "🌳"
   },
+  "deer": {
+    "unicode": "1F98C",
+    "unicode_alternates": [],
+    "name": "deer",
+    "shortname": ":deer:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦌"
+  },
   "department_store": {
     "unicode": "1F3EC",
     "unicode_alternates": [],
     "name": "department store",
     "shortname": ":department_store:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6262,31 +6865,17 @@
       "store",
       "retail",
       "sale",
-      "merchandise"
+      "merchandise",
+      "places"
     ],
     "moji": "🏬"
   },
-  "descending_notes": {
-    "unicode": "1F39D",
-    "unicode_alternates": [],
-    "name": "beamed descending musical notes",
-    "shortname": ":descending_notes:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "score",
-      "music",
-      "sound",
-      "tone"
-    ]
-  },
   "desert": {
     "unicode": "1F3DC",
     "unicode_alternates": [],
     "name": "desert",
     "shortname": ":desert:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6295,41 +6884,36 @@
       "sandy",
       "cactus",
       "sunny",
-      "barren"
-    ]
+      "barren",
+      "places",
+      "travel",
+      "vacation"
+    ],
+    "moji": "🏜"
   },
   "desktop": {
     "unicode": "1F5A5",
     "unicode_alternates": [],
     "name": "desktop computer",
     "shortname": ":desktop:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":desktop_computer:"
     ],
     "aliases_ascii": [],
     "keywords": [
-      "cpu"
-    ]
-  },
-  "desktop_window": {
-    "unicode": "1F5D4",
-    "unicode_alternates": [],
-    "name": "desktop window",
-    "shortname": ":desktop_window:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "computer"
-    ]
+      "cpu",
+      "electronics",
+      "work"
+    ],
+    "moji": "🖥"
   },
   "diamond_shape_with_a_dot_inside": {
     "unicode": "1F4A0",
     "unicode_alternates": [],
     "name": "diamond shape with a dot inside",
     "shortname": ":diamond_shape_with_a_dot_inside:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6339,7 +6923,8 @@
       "kawaii",
       "japanese",
       "glyph",
-      "adorable"
+      "adorable",
+      "symbol"
     ],
     "moji": "💠"
   },
@@ -6350,12 +6935,15 @@
     ],
     "name": "black diamond suit",
     "shortname": ":diamonds:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "cards",
-      "poker"
+      "poker",
+      "shapes",
+      "symbol",
+      "game"
     ],
     "moji": "♦"
   },
@@ -6364,7 +6952,7 @@
     "unicode_alternates": [],
     "name": "disappointed face",
     "shortname": ":disappointed:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ">:[",
@@ -6382,7 +6970,10 @@
       "discouraged",
       "face",
       "sad",
-      "upset"
+      "upset",
+      "smiley",
+      "tired",
+      "emotion"
     ],
     "moji": "😞"
   },
@@ -6391,7 +6982,7 @@
     "unicode_alternates": [],
     "name": "disappointed but relieved face",
     "shortname": ":disappointed_relieved:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6400,7 +6991,12 @@
       "phew",
       "sweat",
       "disappoint",
-      "relief"
+      "relief",
+      "sad",
+      "smiley",
+      "stressed",
+      "cry",
+      "emotion"
     ],
     "moji": "😥"
   },
@@ -6409,22 +7005,25 @@
     "unicode_alternates": [],
     "name": "card index dividers",
     "shortname": ":dividers:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":card_index_dividers:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "stationery",
-      "rolodex"
-    ]
+      "rolodex",
+      "work",
+      "office"
+    ],
+    "moji": "🗂"
   },
   "dizzy": {
     "unicode": "1F4AB",
     "unicode_alternates": [],
     "name": "dizzy symbol",
     "shortname": ":dizzy:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6437,7 +7036,7 @@
       "intoxicated",
       "squeans",
       "starburst",
-      "star"
+      "symbol"
     ],
     "moji": "💫"
   },
@@ -6446,7 +7045,7 @@
     "unicode_alternates": [],
     "name": "dizzy face",
     "shortname": ":dizzy_face:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       "#-)",
@@ -6463,7 +7062,13 @@
       "face",
       "spent",
       "unconscious",
-      "xox"
+      "xox",
+      "smiley",
+      "surprised",
+      "dead",
+      "wow",
+      "emotion",
+      "omg"
     ],
     "moji": "😵"
   },
@@ -6472,7 +7077,7 @@
     "unicode_alternates": [],
     "name": "do not litter symbol",
     "shortname": ":do_not_litter:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6480,40 +7085,13 @@
       "garbage",
       "trash",
       "litter",
-      "garbage",
       "waste",
       "no",
       "can",
-      "trash"
+      "symbol"
     ],
     "moji": "🚯"
   },
-  "document": {
-    "unicode": "1F5CE",
-    "unicode_alternates": [],
-    "name": "document",
-    "shortname": ":document:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "page"
-    ]
-  },
-  "document_text": {
-    "unicode": "1F5B9",
-    "unicode_alternates": [],
-    "name": "document with text",
-    "shortname": ":document_text:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":document_with_text:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "page"
-    ]
-  },
   "dog": {
     "unicode": "1F436",
     "unicode_alternates": [],
@@ -6526,7 +7104,9 @@
       "animal",
       "friend",
       "nature",
-      "woof"
+      "woof",
+      "dog",
+      "pug"
     ],
     "moji": "🐶"
   },
@@ -6546,11 +7126,10 @@
       "pet",
       "dog",
       "puppy",
-      "pet",
-      "friend",
       "woof",
       "bark",
-      "fido"
+      "fido",
+      "pug"
     ],
     "moji": "🐕"
   },
@@ -6571,8 +7150,6 @@
       "canada",
       "australia",
       "banknote",
-      "money",
-      "currency",
       "paper",
       "cash",
       "bills"
@@ -6593,7 +7170,6 @@
       "toy",
       "dolls",
       "japan",
-      "japanese",
       "day",
       "girls",
       "emperor",
@@ -6602,7 +7178,8 @@
       "blessing",
       "imperial",
       "family",
-      "royal"
+      "royal",
+      "people"
     ],
     "moji": "🎎"
   },
@@ -6621,7 +7198,9 @@
       "flipper",
       "nature",
       "ocean",
-      "sea"
+      "sea",
+      "wildlife",
+      "tropical"
     ],
     "moji": "🐬"
   },
@@ -6641,8 +7220,7 @@
       "doorway",
       "entrance",
       "enter",
-      "exit",
-      "entry"
+      "object"
     ],
     "moji": "🚪"
   },
@@ -6651,7 +7229,7 @@
     "unicode_alternates": [],
     "name": "doughnut",
     "shortname": ":doughnut:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6666,8 +7244,7 @@
       "dessert",
       "breakfast",
       "police",
-      "homer",
-      "sweet"
+      "homer"
     ],
     "moji": "🍩"
   },
@@ -6676,15 +7253,17 @@
     "unicode_alternates": [],
     "name": "dove of peace",
     "shortname": ":dove:",
-    "category": "objects_symbols",
+    "category": "nature",
     "aliases": [
       ":dove_of_peace:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "symbol",
-      "bird"
-    ]
+      "bird",
+      "animal"
+    ],
+    "moji": "🕊"
   },
   "dragon": {
     "unicode": "1F409",
@@ -6703,7 +7282,8 @@
       "dragon",
       "fire",
       "legendary",
-      "myth"
+      "roar",
+      "reptile"
     ],
     "moji": "🐉"
   },
@@ -6725,7 +7305,9 @@
       "head",
       "fire",
       "legendary",
-      "myth"
+      "roar",
+      "monster",
+      "reptile"
     ],
     "moji": "🐲"
   },
@@ -6734,12 +7316,15 @@
     "unicode_alternates": [],
     "name": "dress",
     "shortname": ":dress:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "clothes",
-      "fashion"
+      "fashion",
+      "women",
+      "sexy",
+      "girls night"
     ],
     "moji": "👗"
   },
@@ -6758,23 +7343,35 @@
       "dromedary",
       "camel",
       "hump",
-      "desert",
       "middle east",
       "heat",
-      "hot",
       "water",
       "hump day",
       "wednesday",
-      "sex"
+      "sex",
+      "wildlife"
     ],
     "moji": "🐪"
   },
+  "drooling_face": {
+    "unicode": "1F924",
+    "unicode_alternates": [],
+    "name": "drooling face",
+    "shortname": ":drooling_face:",
+    "category": "people",
+    "aliases": [
+      ":drool:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤤"
+  },
   "droplet": {
     "unicode": "1F4A7",
     "unicode_alternates": [],
     "name": "droplet",
     "shortname": ":droplet:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -6784,7 +7381,6 @@
       "drop",
       "droplet",
       "h20",
-      "water",
       "aqua",
       "tear",
       "sweat",
@@ -6792,10 +7388,36 @@
       "moisture",
       "wet",
       "moist",
-      "spit"
+      "spit",
+      "weather",
+      "sky"
     ],
     "moji": "💧"
   },
+  "drum": {
+    "unicode": "1F941",
+    "unicode_alternates": [],
+    "name": "drum with drumsticks",
+    "shortname": ":drum:",
+    "category": "activity",
+    "aliases": [
+      ":drum_with_drumsticks:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥁"
+  },
+  "duck": {
+    "unicode": "1F986",
+    "unicode_alternates": [],
+    "name": "duck",
+    "shortname": ":duck:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦆"
+  },
   "dvd": {
     "unicode": "1F4C0",
     "unicode_alternates": [],
@@ -6807,7 +7429,8 @@
     "keywords": [
       "cd",
       "disc",
-      "disk"
+      "disk",
+      "electronics"
     ],
     "moji": "📀"
   },
@@ -6823,23 +7446,37 @@
     "aliases_ascii": [],
     "keywords": [
       "communication",
-      "inbox"
+      "inbox",
+      "office"
     ],
     "moji": "📧"
   },
+  "eagle": {
+    "unicode": "1F985",
+    "unicode_alternates": [],
+    "name": "eagle",
+    "shortname": ":eagle:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦅"
+  },
   "ear": {
     "unicode": "1F442",
     "unicode_alternates": [],
     "name": "ear",
     "shortname": ":ear:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "face",
       "hear",
       "listen",
-      "sound"
+      "sound",
+      "body",
+      "diversity"
     ],
     "moji": "👂"
   },
@@ -6857,14 +7494,14 @@
       "ear",
       "rice",
       "food",
-      "plant",
-      "seed"
+      "seed",
+      "leaf"
     ],
     "moji": "🌾"
   },
   "ear_tone1": {
     "unicode": "1F442-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ear tone 1",
     "shortname": ":ear_tone1:",
     "category": "people",
@@ -6874,11 +7511,12 @@
       "hear",
       "listen",
       "sound"
-    ]
+    ],
+    "moji": "👂🏻"
   },
   "ear_tone2": {
     "unicode": "1F442-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ear tone 2",
     "shortname": ":ear_tone2:",
     "category": "people",
@@ -6888,11 +7526,12 @@
       "hear",
       "listen",
       "sound"
-    ]
+    ],
+    "moji": "👂🏼"
   },
   "ear_tone3": {
     "unicode": "1F442-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ear tone 3",
     "shortname": ":ear_tone3:",
     "category": "people",
@@ -6902,11 +7541,12 @@
       "hear",
       "listen",
       "sound"
-    ]
+    ],
+    "moji": "👂🏽"
   },
   "ear_tone4": {
     "unicode": "1F442-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ear tone 4",
     "shortname": ":ear_tone4:",
     "category": "people",
@@ -6916,11 +7556,12 @@
       "hear",
       "listen",
       "sound"
-    ]
+    ],
+    "moji": "👂🏾"
   },
   "ear_tone5": {
     "unicode": "1F442-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ear tone 5",
     "shortname": ":ear_tone5:",
     "category": "people",
@@ -6930,7 +7571,8 @@
       "hear",
       "listen",
       "sound"
-    ]
+    ],
+    "moji": "👂🏿"
   },
   "earth_africa": {
     "unicode": "1F30D",
@@ -6945,12 +7587,13 @@
       "international",
       "world",
       "earth",
-      "globe",
       "space",
       "planet",
       "africa",
       "europe",
-      "home"
+      "home",
+      "map",
+      "vacation"
     ],
     "moji": "🌍"
   },
@@ -6968,14 +7611,15 @@
       "international",
       "world",
       "earth",
-      "globe",
       "space",
       "planet",
       "north",
       "south",
       "america",
       "americas",
-      "home"
+      "home",
+      "map",
+      "vacation"
     ],
     "moji": "🌎"
   },
@@ -6993,43 +7637,33 @@
       "international",
       "world",
       "earth",
-      "globe",
       "space",
       "planet",
       "asia",
       "australia",
-      "home"
+      "home",
+      "map",
+      "vacation"
     ],
     "moji": "🌏"
   },
   "egg": {
-    "unicode": "1F373",
+    "unicode": "1F95A",
     "unicode_alternates": [],
-    "name": "cooking",
+    "name": "egg",
     "shortname": ":egg:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": [
-      "breakfast",
-      "food",
-      "egg",
-      "fry",
-      "pan",
-      "flat",
-      "cook",
-      "frying",
-      "cooking",
-      "utensil"
-    ],
-    "moji": "🍳"
+    "keywords": [],
+    "moji": "🥚"
   },
   "eggplant": {
     "unicode": "1F346",
     "unicode_alternates": [],
     "name": "aubergine",
     "shortname": ":eggplant:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -7038,10 +7672,10 @@
       "nature",
       "vegetable",
       "eggplant",
-      "aubergine",
       "fruit",
       "purple",
-      "penis"
+      "penis",
+      "vegetables"
     ],
     "moji": "🍆"
   },
@@ -7051,15 +7685,18 @@
     "unicode_alternates": [
       "0038-FE0F-20E3"
     ],
-    "name": "digit eight",
+    "name": "keycap digit eight",
     "shortname": ":eight:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "8",
       "blue-square",
-      "numbers"
+      "numbers",
+      "number",
+      "math",
+      "symbol"
     ]
   },
   "eight_pointed_black_star": {
@@ -7069,10 +7706,12 @@
     ],
     "name": "eight pointed black star",
     "shortname": ":eight_pointed_black_star:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": [],
+    "keywords": [
+      "symbol"
+    ],
     "moji": "✴"
   },
   "eight_spoked_asterisk": {
@@ -7082,16 +7721,32 @@
     ],
     "name": "eight spoked asterisk",
     "shortname": ":eight_spoked_asterisk:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "green-square",
       "sparkle",
-      "star"
+      "star",
+      "symbol"
     ],
     "moji": "✳"
   },
+  "eject": {
+    "unicode": "23CF",
+    "unicode_alternates": [
+      "23CF-FE0F"
+    ],
+    "name": "eject symbol",
+    "shortname": ":eject:",
+    "category": "symbols",
+    "aliases": [
+      ":eject_symbol:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "⏏"
+  },
   "electric_plug": {
     "unicode": "1F50C",
     "unicode_alternates": [],
@@ -7102,7 +7757,8 @@
     "aliases_ascii": [],
     "keywords": [
       "charger",
-      "power"
+      "power",
+      "electronics"
     ],
     "moji": "🔌"
   },
@@ -7118,7 +7774,8 @@
       "animal",
       "nature",
       "nose",
-      "thailand"
+      "thailand",
+      "wildlife"
     ],
     "moji": "🐘"
   },
@@ -7127,100 +7784,36 @@
     "unicode_alternates": [],
     "name": "end with leftwards arrow above",
     "shortname": ":end:",
-    "category": "other",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "arrow",
-      "words"
-    ],
-    "moji": "🔚"
-  },
-  "envelope": {
-    "unicode": "2709",
-    "unicode_alternates": [
-      "2709-FE0F"
-    ],
-    "name": "envelope",
-    "shortname": ":envelope:",
-    "category": "objects",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "communication",
-      "letter",
-      "mail",
-      "postal"
-    ],
-    "moji": "✉"
-  },
-  "envelope_back": {
-    "unicode": "1F582",
-    "unicode_alternates": [],
-    "name": "back of envelope",
-    "shortname": ":envelope_back:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":back_of_envelope:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "communication",
-      "letter",
-      "mail",
-      "postal"
-    ]
-  },
-  "envelope_flying": {
-    "unicode": "1F585",
-    "unicode_alternates": [],
-    "name": "flying envelope",
-    "shortname": ":envelope_flying:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":flying_envelope:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "communication",
-      "letter",
-      "mail",
-      "postal"
-    ]
-  },
-  "envelope_stamped": {
-    "unicode": "1F583",
-    "unicode_alternates": [],
-    "name": "stamped envelope",
-    "shortname": ":envelope_stamped:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":stamped_envelope:"
-    ],
+    "category": "symbols",
+    "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "communication",
-      "letter",
-      "mail",
-      "postal"
-    ]
+      "arrow",
+      "words",
+      "symbol"
+    ],
+    "moji": "🔚"
   },
-  "envelope_stamped_pen": {
-    "unicode": "1F586",
-    "unicode_alternates": [],
-    "name": "pen over stamped envelope",
-    "shortname": ":envelope_stamped_pen:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":pen_over_stamped_envelope:"
+  "envelope": {
+    "unicode": "2709",
+    "unicode_alternates": [
+      "2709-FE0F"
     ],
+    "name": "envelope",
+    "shortname": ":envelope:",
+    "category": "objects",
+    "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "communication",
       "letter",
       "mail",
-      "postal"
-    ]
+      "postal",
+      "object",
+      "office",
+      "write"
+    ],
+    "moji": "✉"
   },
   "envelope_with_arrow": {
     "unicode": "1F4E9",
@@ -7231,7 +7824,9 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "email"
+      "email",
+      "object",
+      "office"
     ],
     "moji": "📩"
   },
@@ -7250,8 +7845,6 @@
       "euro",
       "europe",
       "banknote",
-      "money",
-      "currency",
       "paper",
       "cash",
       "bills"
@@ -7263,7 +7856,7 @@
     "unicode_alternates": [],
     "name": "european castle",
     "shortname": ":european_castle:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -7273,7 +7866,6 @@
       "castle",
       "european",
       "residence",
-      "royalty",
       "disneyland",
       "disney",
       "fort",
@@ -7287,7 +7879,10 @@
       "queen",
       "fortress",
       "nobel",
-      "stronghold"
+      "stronghold",
+      "places",
+      "travel",
+      "vacation"
     ],
     "moji": "🏰"
   },
@@ -7296,11 +7891,13 @@
     "unicode_alternates": [],
     "name": "european post office",
     "shortname": ":european_post_office:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "building"
+      "building",
+      "places",
+      "post office"
     ],
     "moji": "🏤"
   },
@@ -7318,7 +7915,10 @@
       "evergreen",
       "tree",
       "needles",
-      "christmas"
+      "christmas",
+      "holidays",
+      "camp",
+      "trees"
     ],
     "moji": "🌲"
   },
@@ -7329,11 +7929,13 @@
     ],
     "name": "heavy exclamation mark symbol",
     "shortname": ":exclamation:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "surprise"
+      "surprise",
+      "symbol",
+      "punctuation"
     ],
     "moji": "❗"
   },
@@ -7342,7 +7944,7 @@
     "unicode_alternates": [],
     "name": "expressionless face",
     "shortname": ":expressionless:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       "-_-",
@@ -7356,7 +7958,11 @@
       "vapid",
       "without expression",
       "face",
-      "indifferent"
+      "indifferent",
+      "mad",
+      "smiley",
+      "neutral",
+      "emotion"
     ],
     "moji": "😑"
   },
@@ -7371,25 +7977,36 @@
     "keywords": [
       "look",
       "peek",
-      "watch"
-    ]
+      "watch",
+      "body",
+      "eyes"
+    ],
+    "moji": "👁"
   },
   "eye_in_speech_bubble": {
     "unicode": "1F441-1F5E8",
-    "unicode_alternates": "1f441-200d-1f5e8",
+    "unicode_alternates": [
+      "1F441-200D-1F5E8"
+    ],
     "name": "eye in speech bubble",
     "shortname": ":eye_in_speech_bubble:",
     "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "object",
+      "symbol",
+      "eyes",
+      "talk"
+    ],
+    "moji": "👁‍🗨"
   },
   "eyeglasses": {
     "unicode": "1F453",
     "unicode_alternates": [],
     "name": "eyeglasses",
     "shortname": ":eyeglasses:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -7408,7 +8025,8 @@
       "vision",
       "see",
       "blurry",
-      "contacts"
+      "contacts",
+      "glasses"
     ],
     "moji": "👓"
   },
@@ -7417,27 +8035,110 @@
     "unicode_alternates": [],
     "name": "eyes",
     "shortname": ":eyes:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "look",
       "peek",
       "stalk",
-      "watch"
+      "watch",
+      "body",
+      "eyes"
     ],
     "moji": "👀"
   },
+  "face_palm": {
+    "unicode": "1F926",
+    "unicode_alternates": [],
+    "name": "face palm",
+    "shortname": ":face_palm:",
+    "category": "people",
+    "aliases": [
+      ":facepalm:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤦"
+  },
+  "face_palm_tone1": {
+    "unicode": "1F926-1F3FB",
+    "unicode_alternates": [],
+    "name": "face palm tone 1",
+    "shortname": ":face_palm_tone1:",
+    "category": "people",
+    "aliases": [
+      ":facepalm_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤦🏻"
+  },
+  "face_palm_tone2": {
+    "unicode": "1F926-1F3FC",
+    "unicode_alternates": [],
+    "name": "face palm tone 2",
+    "shortname": ":face_palm_tone2:",
+    "category": "people",
+    "aliases": [
+      ":facepalm_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤦🏼"
+  },
+  "face_palm_tone3": {
+    "unicode": "1F926-1F3FD",
+    "unicode_alternates": [],
+    "name": "face palm tone 3",
+    "shortname": ":face_palm_tone3:",
+    "category": "people",
+    "aliases": [
+      ":facepalm_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤦🏽"
+  },
+  "face_palm_tone4": {
+    "unicode": "1F926-1F3FE",
+    "unicode_alternates": [],
+    "name": "face palm tone 4",
+    "shortname": ":face_palm_tone4:",
+    "category": "people",
+    "aliases": [
+      ":facepalm_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤦🏾"
+  },
+  "face_palm_tone5": {
+    "unicode": "1F926-1F3FF",
+    "unicode_alternates": [],
+    "name": "face palm tone 5",
+    "shortname": ":face_palm_tone5:",
+    "category": "people",
+    "aliases": [
+      ":facepalm_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤦🏿"
+  },
   "factory": {
     "unicode": "1F3ED",
     "unicode_alternates": [],
     "name": "factory",
     "shortname": ":factory:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "building"
+      "building",
+      "places",
+      "travel",
+      "steam"
     ],
     "moji": "🏭"
   },
@@ -7467,7 +8168,7 @@
     "unicode_alternates": [],
     "name": "family",
     "shortname": ":family:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -7479,13 +8180,12 @@
       "mother",
       "parents",
       "family",
-      "mother",
-      "father",
-      "child",
       "girl",
       "boy",
       "group",
-      "unit"
+      "unit",
+      "people",
+      "baby"
     ],
     "moji": "👪"
   },
@@ -7509,8 +8209,14 @@
       "gay",
       "homosexual",
       "man",
-      "boy"
-    ]
+      "boy",
+      "people",
+      "family",
+      "men",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👨‍👨‍👦"
   },
   "family_mmbb": {
     "unicode": "1F468-1F468-1F466-1F466",
@@ -7532,8 +8238,14 @@
       "gay",
       "homosexual",
       "man",
-      "boy"
-    ]
+      "boy",
+      "people",
+      "family",
+      "men",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👨‍👨‍👦‍👦"
   },
   "family_mmg": {
     "unicode": "1F468-1F468-1F467",
@@ -7555,8 +8267,14 @@
       "gay",
       "homosexual",
       "man",
-      "girl"
-    ]
+      "girl",
+      "people",
+      "family",
+      "men",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👨‍👨‍👧"
   },
   "family_mmgb": {
     "unicode": "1F468-1F468-1F467-1F466",
@@ -7579,8 +8297,14 @@
       "homosexual",
       "man",
       "girl",
-      "boy"
-    ]
+      "boy",
+      "people",
+      "family",
+      "men",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👨‍👨‍👧‍👦"
   },
   "family_mmgg": {
     "unicode": "1F468-1F468-1F467-1F467",
@@ -7602,8 +8326,14 @@
       "gay",
       "homosexual",
       "man",
-      "girl"
-    ]
+      "girl",
+      "people",
+      "family",
+      "men",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👨‍👨‍👧‍👧"
   },
   "family_mwbb": {
     "unicode": "1F468-1F469-1F466-1F466",
@@ -7626,8 +8356,12 @@
       "group",
       "unit",
       "man",
-      "woman"
-    ]
+      "woman",
+      "people",
+      "family",
+      "baby"
+    ],
+    "moji": "👨‍👩‍👦‍👦"
   },
   "family_mwg": {
     "unicode": "1F468-1F469-1F467",
@@ -7651,8 +8385,12 @@
       "group",
       "unit",
       "man",
-      "woman"
-    ]
+      "woman",
+      "people",
+      "family",
+      "baby"
+    ],
+    "moji": "👨‍👩‍👧"
   },
   "family_mwgb": {
     "unicode": "1F468-1F469-1F467-1F466",
@@ -7676,8 +8414,12 @@
       "group",
       "unit",
       "man",
-      "woman"
-    ]
+      "woman",
+      "people",
+      "family",
+      "baby"
+    ],
+    "moji": "👨‍👩‍👧‍👦"
   },
   "family_mwgg": {
     "unicode": "1F468-1F469-1F467-1F467",
@@ -7700,8 +8442,12 @@
       "group",
       "unit",
       "man",
-      "woman"
-    ]
+      "woman",
+      "people",
+      "family",
+      "baby"
+    ],
+    "moji": "👨‍👩‍👧‍👧"
   },
   "family_wwb": {
     "unicode": "1F469-1F469-1F466",
@@ -7724,8 +8470,14 @@
       "gay",
       "lesbian",
       "homosexual",
-      "woman"
-    ]
+      "woman",
+      "people",
+      "family",
+      "women",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👩‍👩‍👦"
   },
   "family_wwbb": {
     "unicode": "1F469-1F469-1F466-1F466",
@@ -7748,8 +8500,14 @@
       "lesbian",
       "homosexual",
       "woman",
-      "boy"
-    ]
+      "boy",
+      "people",
+      "family",
+      "women",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👩‍👩‍👦‍👦"
   },
   "family_wwg": {
     "unicode": "1F469-1F469-1F467",
@@ -7772,8 +8530,14 @@
       "unit",
       "gay",
       "lesbian",
-      "homosexual"
-    ]
+      "homosexual",
+      "people",
+      "family",
+      "women",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👩‍👩‍👧"
   },
   "family_wwgb": {
     "unicode": "1F469-1F469-1F467-1F466",
@@ -7797,8 +8561,14 @@
       "homosexual",
       "woman",
       "girl",
-      "boy"
-    ]
+      "boy",
+      "people",
+      "family",
+      "women",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👩‍👩‍👧‍👦"
   },
   "family_wwgg": {
     "unicode": "1F469-1F469-1F467-1F467",
@@ -7821,19 +8591,27 @@
       "lesbian",
       "homosexual",
       "woman",
-      "girl"
-    ]
+      "girl",
+      "people",
+      "family",
+      "women",
+      "baby",
+      "lgbt"
+    ],
+    "moji": "👩‍👩‍👧‍👧"
   },
   "fast_forward": {
     "unicode": "23E9",
     "unicode_alternates": [],
     "name": "black right-pointing double triangle",
     "shortname": ":fast_forward:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "arrow",
+      "symbol"
     ],
     "moji": "⏩"
   },
@@ -7847,7 +8625,10 @@
     "aliases_ascii": [],
     "keywords": [
       "communication",
-      "technology"
+      "technology",
+      "electronics",
+      "work",
+      "office"
     ],
     "moji": "📠"
   },
@@ -7856,7 +8637,7 @@
     "unicode_alternates": [],
     "name": "fearful face",
     "shortname": ":fearful:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -7867,8 +8648,10 @@
       "terrified",
       "fear",
       "fearful",
-      "scared",
-      "frightened"
+      "frightened",
+      "smiley",
+      "surprised",
+      "emotion"
     ],
     "moji": "😨"
   },
@@ -7888,16 +8671,12 @@
       "paw",
       "pet",
       "tracking",
-      "paw",
       "prints",
       "mark",
       "imprints",
       "footsteps",
-      "animal",
       "lion",
       "bear",
-      "dog",
-      "cat",
       "raccoon",
       "critter",
       "feet",
@@ -7905,12 +8684,25 @@
     ],
     "moji": "🐾"
   },
+  "fencer": {
+    "unicode": "1F93A",
+    "unicode_alternates": [],
+    "name": "fencer",
+    "shortname": ":fencer:",
+    "category": "activity",
+    "aliases": [
+      ":fencing:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤺"
+  },
   "ferris_wheel": {
     "unicode": "1F3A1",
     "unicode_alternates": [],
     "name": "ferris wheel",
     "shortname": ":ferris_wheel:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -7923,13 +8715,16 @@
       "park",
       "fair",
       "ride",
-      "entertainment"
+      "entertainment",
+      "places",
+      "vacation",
+      "ferris wheel"
     ],
     "moji": "🎡"
   },
   "ferry": {
     "unicode": "26F4",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ferry",
     "shortname": ":ferry:",
     "category": "travel",
@@ -7938,33 +8733,44 @@
     "keywords": [
       "boat",
       "place",
-      "travel"
-    ]
+      "travel",
+      "transportation",
+      "vacation"
+    ],
+    "moji": "â›´"
   },
   "field_hockey": {
     "unicode": "1F3D1",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "field hockey stick and ball",
     "shortname": ":field_hockey:",
     "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "ball",
+      "sport",
+      "hockey"
+    ],
+    "moji": "🏑"
   },
   "file_cabinet": {
     "unicode": "1F5C4",
     "unicode_alternates": [],
     "name": "file cabinet",
     "shortname": ":file_cabinet:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "folders",
       "office",
       "documents",
-      "storage"
-    ]
+      "storage",
+      "object",
+      "work"
+    ],
+    "moji": "🗄"
   },
   "file_folder": {
     "unicode": "1F4C1",
@@ -7975,7 +8781,9 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "documents"
+      "documents",
+      "work",
+      "office"
     ],
     "moji": "📁"
   },
@@ -7984,7 +8792,7 @@
     "unicode_alternates": [],
     "name": "film frames",
     "shortname": ":film_frames:",
-    "category": "activity",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -7993,95 +8801,96 @@
       "8mm",
       "16mm",
       "reel",
-      "celluloid"
-    ]
+      "celluloid",
+      "object",
+      "camera"
+    ],
+    "moji": "🎞"
   },
-  "finger_pointing_down": {
-    "unicode": "1F597",
+  "fingers_crossed": {
+    "unicode": "1F91E",
     "unicode_alternates": [],
-    "name": "white down pointing left hand index",
-    "shortname": ":finger_pointing_down:",
+    "name": "hand with first and index finger crossed",
+    "shortname": ":fingers_crossed:",
     "category": "people",
     "aliases": [
-      ":white_down_pointing_left_hand_index:"
+      ":hand_with_index_and_middle_finger_crossed:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "direction",
-      "finger",
-      "hand"
-    ]
+    "keywords": [],
+    "moji": "🤞"
   },
-  "finger_pointing_down2": {
-    "unicode": "1F59F",
+  "fingers_crossed_tone1": {
+    "unicode": "1F91E-1F3FB",
     "unicode_alternates": [],
-    "name": "sideways white down pointing index",
-    "shortname": ":finger_pointing_down2:",
+    "name": "hand with index and middle fingers crossed tone 1",
+    "shortname": ":fingers_crossed_tone1:",
     "category": "people",
     "aliases": [
-      ":sideways_white_down_pointing_index:"
+      ":hand_with_index_and_middle_fingers_crossed_tone1:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "direction",
-      "finger",
-      "hand"
-    ]
+    "keywords": [],
+    "moji": "🤞🏻"
   },
-  "finger_pointing_left": {
-    "unicode": "1F598",
+  "fingers_crossed_tone2": {
+    "unicode": "1F91E-1F3FC",
     "unicode_alternates": [],
-    "name": "sideways white left pointing index",
-    "shortname": ":finger_pointing_left:",
+    "name": "hand with index and middle fingers crossed tone 2",
+    "shortname": ":fingers_crossed_tone2:",
     "category": "people",
     "aliases": [
-      ":sideways_white_left_pointing_index:"
+      ":hand_with_index_and_middle_fingers_crossed_tone2:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "direction",
-      "finger",
-      "hand"
-    ]
+    "keywords": [],
+    "moji": "🤞🏼"
   },
-  "finger_pointing_right": {
-    "unicode": "1F599",
+  "fingers_crossed_tone3": {
+    "unicode": "1F91E-1F3FD",
     "unicode_alternates": [],
-    "name": "sideways white right pointing index",
-    "shortname": ":finger_pointing_right:",
+    "name": "hand with index and middle fingers crossed tone 3",
+    "shortname": ":fingers_crossed_tone3:",
     "category": "people",
     "aliases": [
-      ":sideways_white_right_pointing_index:"
+      ":hand_with_index_and_middle_fingers_crossed_tone3:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "direction",
-      "finger",
-      "hand"
-    ]
+    "keywords": [],
+    "moji": "🤞🏽"
   },
-  "finger_pointing_up": {
-    "unicode": "1F59E",
+  "fingers_crossed_tone4": {
+    "unicode": "1F91E-1F3FE",
     "unicode_alternates": [],
-    "name": "sideways white up pointing index",
-    "shortname": ":finger_pointing_up:",
+    "name": "hand with index and middle fingers crossed tone 4",
+    "shortname": ":fingers_crossed_tone4:",
     "category": "people",
     "aliases": [
-      ":sideways_white_up_pointing_index:"
+      ":hand_with_index_and_middle_fingers_crossed_tone4:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "direction",
-      "finger",
-      "hand"
-    ]
+    "keywords": [],
+    "moji": "🤞🏾"
+  },
+  "fingers_crossed_tone5": {
+    "unicode": "1F91E-1F3FF",
+    "unicode_alternates": [],
+    "name": "hand with index and middle fingers crossed tone 5",
+    "shortname": ":fingers_crossed_tone5:",
+    "category": "people",
+    "aliases": [
+      ":hand_with_index_and_middle_fingers_crossed_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤞🏿"
   },
   "fire": {
     "unicode": "1F525",
     "unicode_alternates": [],
     "name": "fire",
     "shortname": ":fire:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [
       ":flame:"
     ],
@@ -8089,7 +8898,8 @@
     "keywords": [
       "cook",
       "hot",
-      "flame"
+      "flame",
+      "wth"
     ],
     "moji": "🔥"
   },
@@ -8098,7 +8908,7 @@
     "unicode_alternates": [],
     "name": "fire engine",
     "shortname": ":fire_engine:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -8110,34 +8920,17 @@
       "engine",
       "truck",
       "emergency",
-      "medical"
+      "medical",
+      "911"
     ],
     "moji": "🚒"
   },
-  "fire_engine_oncoming": {
-    "unicode": "1F6F1",
-    "unicode_alternates": [],
-    "name": "oncoming fire engine",
-    "shortname": ":fire_engine_oncoming:",
-    "category": "travel_places",
-    "aliases": [
-      ":oncoming_fire_engine:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "transportation",
-      "vehicle",
-      "fighter",
-      "truck",
-      "emergency"
-    ]
-  },
   "fireworks": {
     "unicode": "1F386",
     "unicode_alternates": [],
     "name": "fireworks",
     "shortname": ":fireworks:",
-    "category": "objects",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -8154,10 +8947,24 @@
       "rocket",
       "sky",
       "idea",
-      "excitement"
+      "excitement",
+      "parties"
     ],
     "moji": "🎆"
   },
+  "first_place": {
+    "unicode": "1F947",
+    "unicode_alternates": [],
+    "name": "first place medal",
+    "shortname": ":first_place:",
+    "category": "activity",
+    "aliases": [
+      ":first_place_medal:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥇"
+  },
   "first_quarter_moon": {
     "unicode": "1F313",
     "unicode_alternates": [],
@@ -8174,7 +8981,8 @@
       "sky",
       "night",
       "cheese",
-      "phase"
+      "phase",
+      "space"
     ],
     "moji": "🌓"
   },
@@ -8196,7 +9004,8 @@
       "sky",
       "night",
       "cheese",
-      "phase"
+      "phase",
+      "space"
     ],
     "moji": "🌛"
   },
@@ -8211,7 +9020,8 @@
     "keywords": [
       "animal",
       "food",
-      "nature"
+      "nature",
+      "wildlife"
     ],
     "moji": "🐟"
   },
@@ -8220,7 +9030,7 @@
     "unicode_alternates": [],
     "name": "fish cake with swirl design",
     "shortname": ":fish_cake:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -8231,7 +9041,8 @@
       "swirl",
       "ramen",
       "noodles",
-      "naruto"
+      "naruto",
+      "sushi"
     ],
     "moji": "🍥"
   },
@@ -8240,7 +9051,7 @@
     "unicode_alternates": [],
     "name": "fishing pole and fish",
     "shortname": ":fishing_pole_and_fish:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -8248,7 +9059,9 @@
       "hobby",
       "fish",
       "fishing",
-      "pole"
+      "pole",
+      "vacation",
+      "sport"
     ],
     "moji": "🎣"
   },
@@ -8257,19 +9070,25 @@
     "unicode_alternates": [],
     "name": "raised fist",
     "shortname": ":fist:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fingers",
       "grasp",
-      "hand"
+      "hand",
+      "body",
+      "hands",
+      "hi",
+      "fist bump",
+      "diversity",
+      "condolence"
     ],
     "moji": "✊"
   },
   "fist_tone1": {
     "unicode": "270A-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised fist tone 1",
     "shortname": ":fist_tone1:",
     "category": "people",
@@ -8279,11 +9098,12 @@
       "fingers",
       "grasp",
       "hand"
-    ]
+    ],
+    "moji": "✊🏻"
   },
   "fist_tone2": {
     "unicode": "270A-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised fist tone 2",
     "shortname": ":fist_tone2:",
     "category": "people",
@@ -8293,11 +9113,12 @@
       "fingers",
       "grasp",
       "hand"
-    ]
+    ],
+    "moji": "✊🏼"
   },
   "fist_tone3": {
     "unicode": "270A-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised fist tone 3",
     "shortname": ":fist_tone3:",
     "category": "people",
@@ -8307,11 +9128,12 @@
       "fingers",
       "grasp",
       "hand"
-    ]
+    ],
+    "moji": "✊🏽"
   },
   "fist_tone4": {
     "unicode": "270A-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised fist tone 4",
     "shortname": ":fist_tone4:",
     "category": "people",
@@ -8321,11 +9143,12 @@
       "fingers",
       "grasp",
       "hand"
-    ]
+    ],
+    "moji": "✊🏾"
   },
   "fist_tone5": {
     "unicode": "270A-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised fist tone 5",
     "shortname": ":fist_tone5:",
     "category": "people",
@@ -8335,7 +9158,8 @@
       "fingers",
       "grasp",
       "hand"
-    ]
+    ],
+    "moji": "✊🏿"
   },
   "five": {
     "moji": "5️⃣",
@@ -8343,15 +9167,18 @@
     "unicode_alternates": [
       "0035-FE0F-20E3"
     ],
-    "name": "digit five",
+    "name": "keycap digit five",
     "shortname": ":five:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
       "numbers",
-      "prime"
+      "prime",
+      "number",
+      "math",
+      "symbol"
     ]
   },
   "flag_ac": {
@@ -8367,8 +9194,10 @@
     "keywords": [
       "country",
       "nation",
-      "ac"
-    ]
+      "ac",
+      "flag"
+    ],
+    "moji": "🇦🇨"
   },
   "flag_ad": {
     "unicode": "1F1E6-1F1E9",
@@ -8383,8 +9212,10 @@
     "keywords": [
       "country",
       "nation",
-      "ad"
-    ]
+      "ad",
+      "flag"
+    ],
+    "moji": "🇦🇩"
   },
   "flag_ae": {
     "unicode": "1F1E6-1F1EA",
@@ -8399,8 +9230,10 @@
     "keywords": [
       "country",
       "nation",
-      "ae"
-    ]
+      "ae",
+      "flag"
+    ],
+    "moji": "🇦🇪"
   },
   "flag_af": {
     "unicode": "1F1E6-1F1EB",
@@ -8416,8 +9249,10 @@
       "country",
       "nation",
       "afghanestan",
-      "af"
-    ]
+      "af",
+      "flag"
+    ],
+    "moji": "🇦🇫"
   },
   "flag_ag": {
     "unicode": "1F1E6-1F1EC",
@@ -8432,8 +9267,10 @@
     "keywords": [
       "country",
       "nation",
-      "ag"
-    ]
+      "ag",
+      "flag"
+    ],
+    "moji": "🇦🇬"
   },
   "flag_ai": {
     "unicode": "1F1E6-1F1EE",
@@ -8448,8 +9285,10 @@
     "keywords": [
       "country",
       "nation",
-      "ai"
-    ]
+      "ai",
+      "flag"
+    ],
+    "moji": "🇦🇮"
   },
   "flag_al": {
     "unicode": "1F1E6-1F1F1",
@@ -8465,8 +9304,10 @@
       "country",
       "nation",
       "shqiperia",
-      "al"
-    ]
+      "al",
+      "flag"
+    ],
+    "moji": "🇦🇱"
   },
   "flag_am": {
     "unicode": "1F1E6-1F1F2",
@@ -8482,8 +9323,10 @@
       "country",
       "nation",
       "hayastan",
-      "am"
-    ]
+      "am",
+      "flag"
+    ],
+    "moji": "🇦🇲"
   },
   "flag_ao": {
     "unicode": "1F1E6-1F1F4",
@@ -8498,12 +9341,14 @@
     "keywords": [
       "country",
       "nation",
-      "ao"
-    ]
+      "ao",
+      "flag"
+    ],
+    "moji": "🇦🇴"
   },
   "flag_aq": {
     "unicode": "1F1E6-1F1F6",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "antarctica",
     "shortname": ":flag_aq:",
     "category": "flags",
@@ -8511,7 +9356,11 @@
       ":aq:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇦🇶"
   },
   "flag_ar": {
     "unicode": "1F1E6-1F1F7",
@@ -8526,12 +9375,14 @@
     "keywords": [
       "country",
       "nation",
-      "ar"
-    ]
+      "ar",
+      "flag"
+    ],
+    "moji": "🇦🇷"
   },
   "flag_as": {
     "unicode": "1F1E6-1F1F8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "american samoa",
     "shortname": ":flag_as:",
     "category": "flags",
@@ -8539,7 +9390,11 @@
       ":as:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇦🇸"
   },
   "flag_at": {
     "unicode": "1F1E6-1F1F9",
@@ -8556,8 +9411,10 @@
       "nation",
       "&ouml;sterreich",
       "osterreich",
-      "at"
-    ]
+      "at",
+      "flag"
+    ],
+    "moji": "🇦🇹"
   },
   "flag_au": {
     "unicode": "1F1E6-1F1FA",
@@ -8572,8 +9429,10 @@
     "keywords": [
       "country",
       "nation",
-      "au"
-    ]
+      "au",
+      "flag"
+    ],
+    "moji": "🇦🇺"
   },
   "flag_aw": {
     "unicode": "1F1E6-1F1FC",
@@ -8588,12 +9447,14 @@
     "keywords": [
       "country",
       "nation",
-      "aw"
-    ]
+      "aw",
+      "flag"
+    ],
+    "moji": "🇦🇼"
   },
   "flag_ax": {
     "unicode": "1F1E6-1F1FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "Ã¥land islands",
     "shortname": ":flag_ax:",
     "category": "flags",
@@ -8601,7 +9462,11 @@
       ":ax:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇦🇽"
   },
   "flag_az": {
     "unicode": "1F1E6-1F1FF",
@@ -8617,8 +9482,10 @@
       "country",
       "nation",
       "azarbaycan",
-      "az"
-    ]
+      "az",
+      "flag"
+    ],
+    "moji": "🇦🇿"
   },
   "flag_ba": {
     "unicode": "1F1E7-1F1E6",
@@ -8634,8 +9501,10 @@
       "country",
       "nation",
       "bosna i hercegovina",
-      "ba"
-    ]
+      "ba",
+      "flag"
+    ],
+    "moji": "🇧🇦"
   },
   "flag_bb": {
     "unicode": "1F1E7-1F1E7",
@@ -8650,8 +9519,10 @@
     "keywords": [
       "country",
       "nation",
-      "bb"
-    ]
+      "bb",
+      "flag"
+    ],
+    "moji": "🇧🇧"
   },
   "flag_bd": {
     "unicode": "1F1E7-1F1E9",
@@ -8666,8 +9537,10 @@
     "keywords": [
       "country",
       "nation",
-      "bd"
-    ]
+      "bd",
+      "flag"
+    ],
+    "moji": "🇧🇩"
   },
   "flag_be": {
     "unicode": "1F1E7-1F1EA",
@@ -8684,8 +9557,10 @@
       "nation",
       "belgique",
       "belgie",
-      "be"
-    ]
+      "be",
+      "flag"
+    ],
+    "moji": "🇧🇪"
   },
   "flag_bf": {
     "unicode": "1F1E7-1F1EB",
@@ -8700,8 +9575,10 @@
     "keywords": [
       "country",
       "nation",
-      "bf"
-    ]
+      "bf",
+      "flag"
+    ],
+    "moji": "🇧🇫"
   },
   "flag_bg": {
     "unicode": "1F1E7-1F1EC",
@@ -8716,8 +9593,10 @@
     "keywords": [
       "country",
       "nation",
-      "bg"
-    ]
+      "bg",
+      "flag"
+    ],
+    "moji": "🇧🇬"
   },
   "flag_bh": {
     "unicode": "1F1E7-1F1ED",
@@ -8733,8 +9612,10 @@
       "country",
       "nation",
       "al bahrayn",
-      "bh"
-    ]
+      "bh",
+      "flag"
+    ],
+    "moji": "🇧🇭"
   },
   "flag_bi": {
     "unicode": "1F1E7-1F1EE",
@@ -8749,8 +9630,10 @@
     "keywords": [
       "country",
       "nation",
-      "bi"
-    ]
+      "bi",
+      "flag"
+    ],
+    "moji": "🇧🇮"
   },
   "flag_bj": {
     "unicode": "1F1E7-1F1EF",
@@ -8765,12 +9648,14 @@
     "keywords": [
       "country",
       "nation",
-      "bj"
-    ]
+      "bj",
+      "flag"
+    ],
+    "moji": "🇧🇯"
   },
   "flag_bl": {
     "unicode": "1F1E7-1F1F1",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "saint barthélemy",
     "shortname": ":flag_bl:",
     "category": "flags",
@@ -8778,22 +9663,28 @@
       ":bl:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇧🇱"
   },
   "flag_black": {
     "unicode": "1F3F4",
     "unicode_alternates": [],
     "name": "waving black flag",
     "shortname": ":flag_black:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":waving_black_flag:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "symbol",
-      "signal"
-    ]
+      "signal",
+      "object"
+    ],
+    "moji": "🏴"
   },
   "flag_bm": {
     "unicode": "1F1E7-1F1F2",
@@ -8808,8 +9699,10 @@
     "keywords": [
       "country",
       "nation",
-      "bm"
-    ]
+      "bm",
+      "flag"
+    ],
+    "moji": "🇧🇲"
   },
   "flag_bn": {
     "unicode": "1F1E7-1F1F3",
@@ -8824,8 +9717,10 @@
     "keywords": [
       "country",
       "nation",
-      "bn"
-    ]
+      "bn",
+      "flag"
+    ],
+    "moji": "🇧🇳"
   },
   "flag_bo": {
     "unicode": "1F1E7-1F1F4",
@@ -8840,12 +9735,14 @@
     "keywords": [
       "country",
       "nation",
-      "bo"
-    ]
+      "bo",
+      "flag"
+    ],
+    "moji": "🇧🇴"
   },
   "flag_bq": {
     "unicode": "1F1E7-1F1F6",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "caribbean netherlands",
     "shortname": ":flag_bq:",
     "category": "flags",
@@ -8853,7 +9750,11 @@
       ":bq:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇧🇶"
   },
   "flag_br": {
     "unicode": "1F1E7-1F1F7",
@@ -8869,8 +9770,10 @@
       "country",
       "nation",
       "brasil",
-      "br"
-    ]
+      "br",
+      "flag"
+    ],
+    "moji": "🇧🇷"
   },
   "flag_bs": {
     "unicode": "1F1E7-1F1F8",
@@ -8885,8 +9788,10 @@
     "keywords": [
       "country",
       "nation",
-      "bs"
-    ]
+      "bs",
+      "flag"
+    ],
+    "moji": "🇧🇸"
   },
   "flag_bt": {
     "unicode": "1F1E7-1F1F9",
@@ -8901,12 +9806,14 @@
     "keywords": [
       "country",
       "nation",
-      "bt"
-    ]
+      "bt",
+      "flag"
+    ],
+    "moji": "🇧🇹"
   },
   "flag_bv": {
     "unicode": "1F1E7-1F1FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "bouvet island",
     "shortname": ":flag_bv:",
     "category": "flags",
@@ -8914,7 +9821,11 @@
       ":bv:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇧🇻"
   },
   "flag_bw": {
     "unicode": "1F1E7-1F1FC",
@@ -8929,8 +9840,10 @@
     "keywords": [
       "country",
       "nation",
-      "bw"
-    ]
+      "bw",
+      "flag"
+    ],
+    "moji": "🇧🇼"
   },
   "flag_by": {
     "unicode": "1F1E7-1F1FE",
@@ -8946,8 +9859,10 @@
       "country",
       "nation",
       "byelarus",
-      "by"
-    ]
+      "by",
+      "flag"
+    ],
+    "moji": "🇧🇾"
   },
   "flag_bz": {
     "unicode": "1F1E7-1F1FF",
@@ -8962,8 +9877,10 @@
     "keywords": [
       "country",
       "nation",
-      "bz"
-    ]
+      "bz",
+      "flag"
+    ],
+    "moji": "🇧🇿"
   },
   "flag_ca": {
     "unicode": "1F1E8-1F1E6",
@@ -8978,12 +9895,14 @@
     "keywords": [
       "country",
       "nation",
-      "ca"
-    ]
+      "ca",
+      "flag"
+    ],
+    "moji": "🇨🇦"
   },
   "flag_cc": {
     "unicode": "1F1E8-1F1E8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "cocos (keeling) islands",
     "shortname": ":flag_cc:",
     "category": "flags",
@@ -8991,7 +9910,11 @@
       ":cc:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇨🇨"
   },
   "flag_cd": {
     "unicode": "1F1E8-1F1E9",
@@ -9008,8 +9931,10 @@
       "nation",
       "r&eacute;publique d&eacute;mocratique du congo",
       "republique democratique du congo",
-      "cd"
-    ]
+      "cd",
+      "flag"
+    ],
+    "moji": "🇨🇩"
   },
   "flag_cf": {
     "unicode": "1F1E8-1F1EB",
@@ -9024,8 +9949,10 @@
     "keywords": [
       "country",
       "nation",
-      "cf"
-    ]
+      "cf",
+      "flag"
+    ],
+    "moji": "🇨🇫"
   },
   "flag_cg": {
     "unicode": "1F1E8-1F1EC",
@@ -9040,8 +9967,10 @@
     "keywords": [
       "country",
       "nation",
-      "cg"
-    ]
+      "cg",
+      "flag"
+    ],
+    "moji": "🇨🇬"
   },
   "flag_ch": {
     "unicode": "1F1E8-1F1ED",
@@ -9056,8 +9985,11 @@
     "keywords": [
       "country",
       "nation",
-      "swiss"
-    ]
+      "swiss",
+      "neutral",
+      "flag"
+    ],
+    "moji": "🇨🇭"
   },
   "flag_ci": {
     "unicode": "1F1E8-1F1EE",
@@ -9072,12 +10004,14 @@
     "keywords": [
       "country",
       "nation",
-      "ci"
-    ]
+      "ci",
+      "flag"
+    ],
+    "moji": "🇨🇮"
   },
   "flag_ck": {
     "unicode": "1F1E8-1F1F0",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "cook islands",
     "shortname": ":flag_ck:",
     "category": "flags",
@@ -9085,7 +10019,11 @@
       ":ck:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇨🇰"
   },
   "flag_cl": {
     "unicode": "1F1E8-1F1F1",
@@ -9100,8 +10038,10 @@
     "keywords": [
       "country",
       "nation",
-      "cl"
-    ]
+      "cl",
+      "flag"
+    ],
+    "moji": "🇨🇱"
   },
   "flag_cm": {
     "unicode": "1F1E8-1F1F2",
@@ -9116,8 +10056,10 @@
     "keywords": [
       "country",
       "nation",
-      "cm"
-    ]
+      "cm",
+      "flag"
+    ],
+    "moji": "🇨🇲"
   },
   "flag_cn": {
     "unicode": "1F1E8-1F1F3",
@@ -9135,8 +10077,10 @@
       "zhong guo",
       "country",
       "nation",
-      "cn"
-    ]
+      "cn",
+      "flag"
+    ],
+    "moji": "🇨🇳"
   },
   "flag_co": {
     "unicode": "1F1E8-1F1F4",
@@ -9151,12 +10095,14 @@
     "keywords": [
       "country",
       "nation",
-      "co"
-    ]
+      "co",
+      "flag"
+    ],
+    "moji": "🇨🇴"
   },
   "flag_cp": {
     "unicode": "1F1E8-1F1F5",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "clipperton island",
     "shortname": ":flag_cp:",
     "category": "flags",
@@ -9164,7 +10110,11 @@
       ":cp:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇨🇵"
   },
   "flag_cr": {
     "unicode": "1F1E8-1F1F7",
@@ -9179,8 +10129,10 @@
     "keywords": [
       "country",
       "nation",
-      "cr"
-    ]
+      "cr",
+      "flag"
+    ],
+    "moji": "🇨🇷"
   },
   "flag_cu": {
     "unicode": "1F1E8-1F1FA",
@@ -9195,8 +10147,10 @@
     "keywords": [
       "country",
       "nation",
-      "cu"
-    ]
+      "cu",
+      "flag"
+    ],
+    "moji": "🇨🇺"
   },
   "flag_cv": {
     "unicode": "1F1E8-1F1FB",
@@ -9212,12 +10166,14 @@
       "country",
       "nation",
       "cabo verde",
-      "cv"
-    ]
+      "cv",
+      "flag"
+    ],
+    "moji": "🇨🇻"
   },
   "flag_cw": {
     "unicode": "1F1E8-1F1FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "curaçao",
     "shortname": ":flag_cw:",
     "category": "flags",
@@ -9225,11 +10181,15 @@
       ":cw:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇨🇼"
   },
   "flag_cx": {
     "unicode": "1F1E8-1F1FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "christmas island",
     "shortname": ":flag_cx:",
     "category": "flags",
@@ -9237,7 +10197,11 @@
       ":cx:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇨🇽"
   },
   "flag_cy": {
     "unicode": "1F1E8-1F1FE",
@@ -9254,8 +10218,10 @@
       "nation",
       "kibris",
       "kypros",
-      "cy"
-    ]
+      "cy",
+      "flag"
+    ],
+    "moji": "🇨🇾"
   },
   "flag_cz": {
     "unicode": "1F1E8-1F1FF",
@@ -9271,8 +10237,10 @@
       "country",
       "nation",
       "ceska republika",
-      "cz"
-    ]
+      "cz",
+      "flag"
+    ],
+    "moji": "🇨🇿"
   },
   "flag_de": {
     "unicode": "1F1E9-1F1EA",
@@ -9289,20 +10257,26 @@
       "nation",
       "deutschland",
       "country",
-      "de"
-    ]
+      "de",
+      "flag"
+    ],
+    "moji": "🇩🇪"
   },
   "flag_dg": {
     "unicode": "1F1E9-1F1EC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "diego garcia",
     "shortname": ":flag_dg:",
     "category": "flags",
     "aliases": [
       ":dg:"
     ],
-    "aliases_ascii": [],
-    "keywords": []
+    "aliases_ascii": [],
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇩🇬"
   },
   "flag_dj": {
     "unicode": "1F1E9-1F1EF",
@@ -9317,8 +10291,10 @@
     "keywords": [
       "country",
       "nation",
-      "dj"
-    ]
+      "dj",
+      "flag"
+    ],
+    "moji": "🇩🇯"
   },
   "flag_dk": {
     "unicode": "1F1E9-1F1F0",
@@ -9334,8 +10310,10 @@
       "country",
       "nation",
       "danmark",
-      "dk"
-    ]
+      "dk",
+      "flag"
+    ],
+    "moji": "🇩🇰"
   },
   "flag_dm": {
     "unicode": "1F1E9-1F1F2",
@@ -9350,8 +10328,10 @@
     "keywords": [
       "country",
       "nation",
-      "dm"
-    ]
+      "dm",
+      "flag"
+    ],
+    "moji": "🇩🇲"
   },
   "flag_do": {
     "unicode": "1F1E9-1F1F4",
@@ -9366,8 +10346,10 @@
     "keywords": [
       "country",
       "nation",
-      "do"
-    ]
+      "do",
+      "flag"
+    ],
+    "moji": "🇩🇴"
   },
   "flag_dz": {
     "unicode": "1F1E9-1F1FF",
@@ -9384,12 +10366,14 @@
       "nation",
       "al jaza'ir",
       "al jazair",
-      "dz"
-    ]
+      "dz",
+      "flag"
+    ],
+    "moji": "🇩🇿"
   },
   "flag_ea": {
     "unicode": "1F1EA-1F1E6",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ceuta, melilla",
     "shortname": ":flag_ea:",
     "category": "flags",
@@ -9397,7 +10381,11 @@
       ":ea:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇪🇦"
   },
   "flag_ec": {
     "unicode": "1F1EA-1F1E8",
@@ -9412,8 +10400,10 @@
     "keywords": [
       "country",
       "nation",
-      "ec"
-    ]
+      "ec",
+      "flag"
+    ],
+    "moji": "🇪🇨"
   },
   "flag_ee": {
     "unicode": "1F1EA-1F1EA",
@@ -9429,8 +10419,10 @@
       "country",
       "nation",
       "eesti vabariik",
-      "ee"
-    ]
+      "ee",
+      "flag"
+    ],
+    "moji": "🇪🇪"
   },
   "flag_eg": {
     "unicode": "1F1EA-1F1EC",
@@ -9446,8 +10438,10 @@
       "country",
       "nation",
       "misr",
-      "eg"
-    ]
+      "eg",
+      "flag"
+    ],
+    "moji": "🇪🇬"
   },
   "flag_eh": {
     "unicode": "1F1EA-1F1ED",
@@ -9465,8 +10459,10 @@
       "aṣ-Ṣaḥrā’ al-gharbīyah",
       "sahra",
       "gharbiyah",
-      "eh"
-    ]
+      "eh",
+      "flag"
+    ],
+    "moji": "🇪🇭"
   },
   "flag_er": {
     "unicode": "1F1EA-1F1F7",
@@ -9482,8 +10478,10 @@
       "country",
       "nation",
       "hagere ertra",
-      "er"
-    ]
+      "er",
+      "flag"
+    ],
+    "moji": "🇪🇷"
   },
   "flag_es": {
     "unicode": "1F1EA-1F1F8",
@@ -9500,8 +10498,10 @@
       "espa&ntilde;a",
       "country",
       "espana",
-      "es"
-    ]
+      "es",
+      "flag"
+    ],
+    "moji": "🇪🇸"
   },
   "flag_et": {
     "unicode": "1F1EA-1F1F9",
@@ -9518,12 +10518,14 @@
       "nation",
       "ityop'iya",
       "ityopiya",
-      "et"
-    ]
+      "et",
+      "flag"
+    ],
+    "moji": "🇪🇹"
   },
   "flag_eu": {
     "unicode": "1F1EA-1F1FA",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "european union",
     "shortname": ":flag_eu:",
     "category": "flags",
@@ -9531,7 +10533,11 @@
       ":eu:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇪🇺"
   },
   "flag_fi": {
     "unicode": "1F1EB-1F1EE",
@@ -9547,8 +10553,10 @@
       "country",
       "nation",
       "suomen tasavalta",
-      "fi"
-    ]
+      "fi",
+      "flag"
+    ],
+    "moji": "🇫🇮"
   },
   "flag_fj": {
     "unicode": "1F1EB-1F1EF",
@@ -9563,8 +10571,10 @@
     "keywords": [
       "country",
       "nation",
-      "fj"
-    ]
+      "fj",
+      "flag"
+    ],
+    "moji": "🇫🇯"
   },
   "flag_fk": {
     "unicode": "1F1EB-1F1F0",
@@ -9580,8 +10590,10 @@
       "country",
       "nation",
       "islas malvinas",
-      "fk"
-    ]
+      "fk",
+      "flag"
+    ],
+    "moji": "🇫🇰"
   },
   "flag_fm": {
     "unicode": "1F1EB-1F1F2",
@@ -9596,8 +10608,10 @@
     "keywords": [
       "country",
       "nation",
-      "fm"
-    ]
+      "fm",
+      "flag"
+    ],
+    "moji": "🇫🇲"
   },
   "flag_fo": {
     "unicode": "1F1EB-1F1F4",
@@ -9613,8 +10627,10 @@
       "country",
       "nation",
       "foroyar",
-      "fo"
-    ]
+      "fo",
+      "flag"
+    ],
+    "moji": "🇫🇴"
   },
   "flag_fr": {
     "unicode": "1F1EB-1F1F7",
@@ -9630,8 +10646,10 @@
       "french",
       "nation",
       "country",
-      "fr"
-    ]
+      "fr",
+      "flag"
+    ],
+    "moji": "🇫🇷"
   },
   "flag_ga": {
     "unicode": "1F1EC-1F1E6",
@@ -9646,8 +10664,10 @@
     "keywords": [
       "country",
       "nation",
-      "ga"
-    ]
+      "ga",
+      "flag"
+    ],
+    "moji": "🇬🇦"
   },
   "flag_gb": {
     "unicode": "1F1EC-1F1E7",
@@ -9666,8 +10686,10 @@
       "nation",
       "united kingdom",
       "england",
-      "country"
-    ]
+      "country",
+      "flag"
+    ],
+    "moji": "🇬🇧"
   },
   "flag_gd": {
     "unicode": "1F1EC-1F1E9",
@@ -9682,8 +10704,10 @@
     "keywords": [
       "country",
       "nation",
-      "gd"
-    ]
+      "gd",
+      "flag"
+    ],
+    "moji": "🇬🇩"
   },
   "flag_ge": {
     "unicode": "1F1EC-1F1EA",
@@ -9700,12 +10724,14 @@
       "nation",
       "sak'art'velo",
       "sakartvelo",
-      "ge"
-    ]
+      "ge",
+      "flag"
+    ],
+    "moji": "🇬🇪"
   },
   "flag_gf": {
     "unicode": "1F1EC-1F1EB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "french guiana",
     "shortname": ":flag_gf:",
     "category": "flags",
@@ -9713,11 +10739,15 @@
       ":gf:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇬🇫"
   },
   "flag_gg": {
     "unicode": "1F1EC-1F1EC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "guernsey",
     "shortname": ":flag_gg:",
     "category": "flags",
@@ -9725,7 +10755,11 @@
       ":gg:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇬🇬"
   },
   "flag_gh": {
     "unicode": "1F1EC-1F1ED",
@@ -9740,8 +10774,10 @@
     "keywords": [
       "country",
       "nation",
-      "gh"
-    ]
+      "gh",
+      "flag"
+    ],
+    "moji": "🇬🇭"
   },
   "flag_gi": {
     "unicode": "1F1EC-1F1EE",
@@ -9756,8 +10792,10 @@
     "keywords": [
       "country",
       "nation",
-      "gi"
-    ]
+      "gi",
+      "flag"
+    ],
+    "moji": "🇬🇮"
   },
   "flag_gl": {
     "unicode": "1F1EC-1F1F1",
@@ -9773,8 +10811,10 @@
       "country",
       "nation",
       "kalaallit nunaat",
-      "gl"
-    ]
+      "gl",
+      "flag"
+    ],
+    "moji": "🇬🇱"
   },
   "flag_gm": {
     "unicode": "1F1EC-1F1F2",
@@ -9789,8 +10829,10 @@
     "keywords": [
       "country",
       "nation",
-      "gm"
-    ]
+      "gm",
+      "flag"
+    ],
+    "moji": "🇬🇲"
   },
   "flag_gn": {
     "unicode": "1F1EC-1F1F3",
@@ -9806,12 +10848,14 @@
       "country",
       "nation",
       "guinee",
-      "gn"
-    ]
+      "gn",
+      "flag"
+    ],
+    "moji": "🇬🇳"
   },
   "flag_gp": {
     "unicode": "1F1EC-1F1F5",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "guadeloupe",
     "shortname": ":flag_gp:",
     "category": "flags",
@@ -9819,7 +10863,11 @@
       ":gp:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇬🇵"
   },
   "flag_gq": {
     "unicode": "1F1EC-1F1F6",
@@ -9835,8 +10883,10 @@
       "country",
       "nation",
       "guinea ecuatorial",
-      "gq"
-    ]
+      "gq",
+      "flag"
+    ],
+    "moji": "🇬🇶"
   },
   "flag_gr": {
     "unicode": "1F1EC-1F1F7",
@@ -9853,12 +10903,14 @@
       "nation",
       "ellas",
       "ellada",
-      "gr"
-    ]
+      "gr",
+      "flag"
+    ],
+    "moji": "🇬🇷"
   },
   "flag_gs": {
     "unicode": "1F1EC-1F1F8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "south georgia",
     "shortname": ":flag_gs:",
     "category": "flags",
@@ -9866,7 +10918,11 @@
       ":gs:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇬🇸"
   },
   "flag_gt": {
     "unicode": "1F1EC-1F1F9",
@@ -9881,8 +10937,10 @@
     "keywords": [
       "country",
       "nation",
-      "gt"
-    ]
+      "gt",
+      "flag"
+    ],
+    "moji": "🇬🇹"
   },
   "flag_gu": {
     "unicode": "1F1EC-1F1FA",
@@ -9897,8 +10955,10 @@
     "keywords": [
       "country",
       "nation",
-      "gu"
-    ]
+      "gu",
+      "flag"
+    ],
+    "moji": "🇬🇺"
   },
   "flag_gw": {
     "unicode": "1F1EC-1F1FC",
@@ -9915,8 +10975,10 @@
       "nation",
       "guine-bissau",
       "guine bissau",
-      "gw"
-    ]
+      "gw",
+      "flag"
+    ],
+    "moji": "🇬🇼"
   },
   "flag_gy": {
     "unicode": "1F1EC-1F1FE",
@@ -9931,8 +10993,10 @@
     "keywords": [
       "country",
       "nation",
-      "gy"
-    ]
+      "gy",
+      "flag"
+    ],
+    "moji": "🇬🇾"
   },
   "flag_hk": {
     "unicode": "1F1ED-1F1F0",
@@ -9948,12 +11012,14 @@
       "country",
       "nation",
       "xianggang",
-      "hk"
-    ]
+      "hk",
+      "flag"
+    ],
+    "moji": "🇭🇰"
   },
   "flag_hm": {
     "unicode": "1F1ED-1F1F2",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "heard island and mcdonald islands",
     "shortname": ":flag_hm:",
     "category": "flags",
@@ -9961,7 +11027,11 @@
       ":hm:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇭🇲"
   },
   "flag_hn": {
     "unicode": "1F1ED-1F1F3",
@@ -9976,8 +11046,10 @@
     "keywords": [
       "country",
       "nation",
-      "hn"
-    ]
+      "hn",
+      "flag"
+    ],
+    "moji": "🇭🇳"
   },
   "flag_hr": {
     "unicode": "1F1ED-1F1F7",
@@ -9993,8 +11065,10 @@
       "country",
       "nation",
       "hrvatska",
-      "hr"
-    ]
+      "hr",
+      "flag"
+    ],
+    "moji": "🇭🇷"
   },
   "flag_ht": {
     "unicode": "1F1ED-1F1F9",
@@ -10009,8 +11083,10 @@
     "keywords": [
       "country",
       "nation",
-      "ht"
-    ]
+      "ht",
+      "flag"
+    ],
+    "moji": "🇭🇹"
   },
   "flag_hu": {
     "unicode": "1F1ED-1F1FA",
@@ -10026,12 +11102,14 @@
       "country",
       "nation",
       "magyarorszag",
-      "hu"
-    ]
+      "hu",
+      "flag"
+    ],
+    "moji": "🇭🇺"
   },
   "flag_ic": {
     "unicode": "1F1EE-1F1E8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "canary islands",
     "shortname": ":flag_ic:",
     "category": "flags",
@@ -10039,7 +11117,11 @@
       ":ic:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇮🇨"
   },
   "flag_id": {
     "unicode": "1F1EE-1F1E9",
@@ -10054,8 +11136,10 @@
     "keywords": [
       "country",
       "nation",
-      "id"
-    ]
+      "id",
+      "flag"
+    ],
+    "moji": "🇮🇩"
   },
   "flag_ie": {
     "unicode": "1F1EE-1F1EA",
@@ -10072,8 +11156,10 @@
       "nation",
       "&eacute;ire",
       "eire",
-      "ie"
-    ]
+      "ie",
+      "flag"
+    ],
+    "moji": "🇮🇪"
   },
   "flag_il": {
     "unicode": "1F1EE-1F1F1",
@@ -10090,12 +11176,15 @@
       "nation",
       "yisra'el",
       "yisrael",
-      "il"
-    ]
+      "il",
+      "jew",
+      "flag"
+    ],
+    "moji": "🇮🇱"
   },
   "flag_im": {
     "unicode": "1F1EE-1F1F2",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "isle of man",
     "shortname": ":flag_im:",
     "category": "flags",
@@ -10103,7 +11192,11 @@
       ":im:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇮🇲"
   },
   "flag_in": {
     "unicode": "1F1EE-1F1F3",
@@ -10119,12 +11212,14 @@
       "country",
       "nation",
       "bharat",
-      "in"
-    ]
+      "in",
+      "flag"
+    ],
+    "moji": "🇮🇳"
   },
   "flag_io": {
     "unicode": "1F1EE-1F1F4",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "british indian ocean territory",
     "shortname": ":flag_io:",
     "category": "flags",
@@ -10132,7 +11227,11 @@
       ":io:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇮🇴"
   },
   "flag_iq": {
     "unicode": "1F1EE-1F1F6",
@@ -10147,8 +11246,10 @@
     "keywords": [
       "country",
       "nation",
-      "iq"
-    ]
+      "iq",
+      "flag"
+    ],
+    "moji": "🇮🇶"
   },
   "flag_ir": {
     "unicode": "1F1EE-1F1F7",
@@ -10163,8 +11264,10 @@
     "keywords": [
       "country",
       "nation",
-      "ir"
-    ]
+      "ir",
+      "flag"
+    ],
+    "moji": "🇮🇷"
   },
   "flag_is": {
     "unicode": "1F1EE-1F1F8",
@@ -10180,8 +11283,10 @@
       "country",
       "nation",
       "lyoveldio island",
-      "is"
-    ]
+      "is",
+      "flag"
+    ],
+    "moji": "🇮🇸"
   },
   "flag_it": {
     "unicode": "1F1EE-1F1F9",
@@ -10197,8 +11302,11 @@
       "italia",
       "country",
       "nation",
-      "it"
-    ]
+      "it",
+      "italian",
+      "flag"
+    ],
+    "moji": "🇮🇹"
   },
   "flag_je": {
     "unicode": "1F1EF-1F1EA",
@@ -10213,8 +11321,10 @@
     "keywords": [
       "country",
       "nation",
-      "je"
-    ]
+      "je",
+      "flag"
+    ],
+    "moji": "🇯🇪"
   },
   "flag_jm": {
     "unicode": "1F1EF-1F1F2",
@@ -10229,8 +11339,10 @@
     "keywords": [
       "country",
       "nation",
-      "jm"
-    ]
+      "jm",
+      "flag"
+    ],
+    "moji": "🇯🇲"
   },
   "flag_jo": {
     "unicode": "1F1EF-1F1F4",
@@ -10246,8 +11358,10 @@
       "country",
       "nation",
       "al urdun",
-      "jo"
-    ]
+      "jo",
+      "flag"
+    ],
+    "moji": "🇯🇴"
   },
   "flag_jp": {
     "unicode": "1F1EF-1F1F5",
@@ -10263,8 +11377,11 @@
       "nation",
       "nippon",
       "country",
-      "jp"
-    ]
+      "jp",
+      "japan",
+      "flag"
+    ],
+    "moji": "🇯🇵"
   },
   "flag_ke": {
     "unicode": "1F1F0-1F1EA",
@@ -10279,8 +11396,10 @@
     "keywords": [
       "country",
       "nation",
-      "ke"
-    ]
+      "ke",
+      "flag"
+    ],
+    "moji": "🇰🇪"
   },
   "flag_kg": {
     "unicode": "1F1F0-1F1EC",
@@ -10296,8 +11415,10 @@
       "country",
       "nation",
       "kyrgyz respublikasy",
-      "kg"
-    ]
+      "kg",
+      "flag"
+    ],
+    "moji": "🇰🇬"
   },
   "flag_kh": {
     "unicode": "1F1F0-1F1ED",
@@ -10313,8 +11434,10 @@
       "country",
       "nation",
       "kampuchea",
-      "kh"
-    ]
+      "kh",
+      "flag"
+    ],
+    "moji": "🇰🇭"
   },
   "flag_ki": {
     "unicode": "1F1F0-1F1EE",
@@ -10331,8 +11454,10 @@
       "nation",
       "kiribati",
       "kiribas",
-      "ki"
-    ]
+      "ki",
+      "flag"
+    ],
+    "moji": "🇰🇮"
   },
   "flag_km": {
     "unicode": "1F1F0-1F1F2",
@@ -10347,8 +11472,10 @@
     "keywords": [
       "country",
       "nation",
-      "km"
-    ]
+      "km",
+      "flag"
+    ],
+    "moji": "🇰🇲"
   },
   "flag_kn": {
     "unicode": "1F1F0-1F1F3",
@@ -10363,8 +11490,10 @@
     "keywords": [
       "country",
       "nation",
-      "kn"
-    ]
+      "kn",
+      "flag"
+    ],
+    "moji": "🇰🇳"
   },
   "flag_kp": {
     "unicode": "1F1F0-1F1F5",
@@ -10379,8 +11508,10 @@
     "keywords": [
       "country",
       "nation",
-      "kp"
-    ]
+      "kp",
+      "flag"
+    ],
+    "moji": "🇰🇵"
   },
   "flag_kr": {
     "unicode": "1F1F0-1F1F7",
@@ -10396,8 +11527,10 @@
       "nation",
       "country",
       "south korea",
-      "kr"
-    ]
+      "kr",
+      "flag"
+    ],
+    "moji": "🇰🇷"
   },
   "flag_kw": {
     "unicode": "1F1F0-1F1FC",
@@ -10413,8 +11546,10 @@
       "country",
       "nation",
       "al kuwayt",
-      "kw"
-    ]
+      "kw",
+      "flag"
+    ],
+    "moji": "🇰🇼"
   },
   "flag_ky": {
     "unicode": "1F1F0-1F1FE",
@@ -10429,8 +11564,10 @@
     "keywords": [
       "country",
       "nation",
-      "ky"
-    ]
+      "ky",
+      "flag"
+    ],
+    "moji": "🇰🇾"
   },
   "flag_kz": {
     "unicode": "1F1F0-1F1FF",
@@ -10446,8 +11583,10 @@
       "country",
       "nation",
       "qazaqstan",
-      "kz"
-    ]
+      "kz",
+      "flag"
+    ],
+    "moji": "🇰🇿"
   },
   "flag_la": {
     "unicode": "1F1F1-1F1E6",
@@ -10462,8 +11601,10 @@
     "keywords": [
       "country",
       "nation",
-      "la"
-    ]
+      "la",
+      "flag"
+    ],
+    "moji": "🇱🇦"
   },
   "flag_lb": {
     "unicode": "1F1F1-1F1E7",
@@ -10479,8 +11620,10 @@
       "country",
       "nation",
       "lubnan",
-      "lb"
-    ]
+      "lb",
+      "flag"
+    ],
+    "moji": "🇱🇧"
   },
   "flag_lc": {
     "unicode": "1F1F1-1F1E8",
@@ -10495,8 +11638,10 @@
     "keywords": [
       "country",
       "nation",
-      "lc"
-    ]
+      "lc",
+      "flag"
+    ],
+    "moji": "🇱🇨"
   },
   "flag_li": {
     "unicode": "1F1F1-1F1EE",
@@ -10511,8 +11656,10 @@
     "keywords": [
       "country",
       "nation",
-      "li"
-    ]
+      "li",
+      "flag"
+    ],
+    "moji": "🇱🇮"
   },
   "flag_lk": {
     "unicode": "1F1F1-1F1F0",
@@ -10527,8 +11674,10 @@
     "keywords": [
       "country",
       "nation",
-      "lk"
-    ]
+      "lk",
+      "flag"
+    ],
+    "moji": "🇱🇰"
   },
   "flag_lr": {
     "unicode": "1F1F1-1F1F7",
@@ -10543,8 +11692,10 @@
     "keywords": [
       "country",
       "nation",
-      "lr"
-    ]
+      "lr",
+      "flag"
+    ],
+    "moji": "🇱🇷"
   },
   "flag_ls": {
     "unicode": "1F1F1-1F1F8",
@@ -10559,8 +11710,10 @@
     "keywords": [
       "country",
       "nation",
-      "ls"
-    ]
+      "ls",
+      "flag"
+    ],
+    "moji": "🇱🇸"
   },
   "flag_lt": {
     "unicode": "1F1F1-1F1F9",
@@ -10576,8 +11729,10 @@
       "country",
       "nation",
       "lietuva",
-      "lt"
-    ]
+      "lt",
+      "flag"
+    ],
+    "moji": "🇱🇹"
   },
   "flag_lu": {
     "unicode": "1F1F1-1F1FA",
@@ -10594,8 +11749,10 @@
       "nation",
       "luxembourg",
       "letzebuerg",
-      "lu"
-    ]
+      "lu",
+      "flag"
+    ],
+    "moji": "🇱🇺"
   },
   "flag_lv": {
     "unicode": "1F1F1-1F1FB",
@@ -10611,8 +11768,10 @@
       "country",
       "nation",
       "latvija",
-      "lv"
-    ]
+      "lv",
+      "flag"
+    ],
+    "moji": "🇱🇻"
   },
   "flag_ly": {
     "unicode": "1F1F1-1F1FE",
@@ -10628,8 +11787,10 @@
       "country",
       "nation",
       "libiyah",
-      "ly"
-    ]
+      "ly",
+      "flag"
+    ],
+    "moji": "🇱🇾"
   },
   "flag_ma": {
     "unicode": "1F1F2-1F1E6",
@@ -10645,8 +11806,10 @@
       "country",
       "nation",
       "al maghrib",
-      "ma"
-    ]
+      "ma",
+      "flag"
+    ],
+    "moji": "🇲🇦"
   },
   "flag_mc": {
     "unicode": "1F1F2-1F1E8",
@@ -10661,8 +11824,10 @@
     "keywords": [
       "country",
       "nation",
-      "mc"
-    ]
+      "mc",
+      "flag"
+    ],
+    "moji": "🇲🇨"
   },
   "flag_md": {
     "unicode": "1F1F2-1F1E9",
@@ -10677,8 +11842,10 @@
     "keywords": [
       "country",
       "nation",
-      "md"
-    ]
+      "md",
+      "flag"
+    ],
+    "moji": "🇲🇩"
   },
   "flag_me": {
     "unicode": "1F1F2-1F1EA",
@@ -10694,12 +11861,14 @@
       "country",
       "nation",
       "crna gora",
-      "me"
-    ]
+      "me",
+      "flag"
+    ],
+    "moji": "🇲🇪"
   },
   "flag_mf": {
     "unicode": "1F1F2-1F1EB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "saint martin",
     "shortname": ":flag_mf:",
     "category": "flags",
@@ -10707,7 +11876,11 @@
       ":mf:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇲🇫"
   },
   "flag_mg": {
     "unicode": "1F1F2-1F1EC",
@@ -10722,8 +11895,10 @@
     "keywords": [
       "country",
       "nation",
-      "mg"
-    ]
+      "mg",
+      "flag"
+    ],
+    "moji": "🇲🇬"
   },
   "flag_mh": {
     "unicode": "1F1F2-1F1ED",
@@ -10738,8 +11913,10 @@
     "keywords": [
       "country",
       "nation",
-      "mh"
-    ]
+      "mh",
+      "flag"
+    ],
+    "moji": "🇲🇭"
   },
   "flag_mk": {
     "unicode": "1F1F2-1F1F0",
@@ -10754,8 +11931,10 @@
     "keywords": [
       "country",
       "nation",
-      "mk"
-    ]
+      "mk",
+      "flag"
+    ],
+    "moji": "🇲🇰"
   },
   "flag_ml": {
     "unicode": "1F1F2-1F1F1",
@@ -10770,8 +11949,10 @@
     "keywords": [
       "country",
       "nation",
-      "ml"
-    ]
+      "ml",
+      "flag"
+    ],
+    "moji": "🇲🇱"
   },
   "flag_mm": {
     "unicode": "1F1F2-1F1F2",
@@ -10787,8 +11968,10 @@
       "country",
       "nation",
       "myanma naingngandaw",
-      "mm"
-    ]
+      "mm",
+      "flag"
+    ],
+    "moji": "🇲🇲"
   },
   "flag_mn": {
     "unicode": "1F1F2-1F1F3",
@@ -10804,8 +11987,10 @@
       "country",
       "nation",
       "mongol uls",
-      "mn"
-    ]
+      "mn",
+      "flag"
+    ],
+    "moji": "🇲🇳"
   },
   "flag_mo": {
     "unicode": "1F1F2-1F1F4",
@@ -10821,12 +12006,14 @@
       "country",
       "nation",
       "aomen",
-      "mo"
-    ]
+      "mo",
+      "flag"
+    ],
+    "moji": "🇲🇴"
   },
   "flag_mp": {
     "unicode": "1F1F2-1F1F5",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "northern mariana islands",
     "shortname": ":flag_mp:",
     "category": "flags",
@@ -10834,11 +12021,15 @@
       ":mp:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇲🇵"
   },
   "flag_mq": {
     "unicode": "1F1F2-1F1F6",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "martinique",
     "shortname": ":flag_mq:",
     "category": "flags",
@@ -10846,7 +12037,11 @@
       ":mq:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇲🇶"
   },
   "flag_mr": {
     "unicode": "1F1F2-1F1F7",
@@ -10862,8 +12057,10 @@
       "country",
       "nation",
       "muritaniyah",
-      "mr"
-    ]
+      "mr",
+      "flag"
+    ],
+    "moji": "🇲🇷"
   },
   "flag_ms": {
     "unicode": "1F1F2-1F1F8",
@@ -10878,8 +12075,10 @@
     "keywords": [
       "country",
       "nation",
-      "ms"
-    ]
+      "ms",
+      "flag"
+    ],
+    "moji": "🇲🇸"
   },
   "flag_mt": {
     "unicode": "1F1F2-1F1F9",
@@ -10894,8 +12093,10 @@
     "keywords": [
       "country",
       "nation",
-      "mt"
-    ]
+      "mt",
+      "flag"
+    ],
+    "moji": "🇲🇹"
   },
   "flag_mu": {
     "unicode": "1F1F2-1F1FA",
@@ -10910,8 +12111,10 @@
     "keywords": [
       "country",
       "nation",
-      "mu"
-    ]
+      "mu",
+      "flag"
+    ],
+    "moji": "🇲🇺"
   },
   "flag_mv": {
     "unicode": "1F1F2-1F1FB",
@@ -10927,8 +12130,10 @@
       "country",
       "nation",
       "dhivehi raajje",
-      "mv"
-    ]
+      "mv",
+      "flag"
+    ],
+    "moji": "🇲🇻"
   },
   "flag_mw": {
     "unicode": "1F1F2-1F1FC",
@@ -10943,8 +12148,10 @@
     "keywords": [
       "country",
       "nation",
-      "mw"
-    ]
+      "mw",
+      "flag"
+    ],
+    "moji": "🇲🇼"
   },
   "flag_mx": {
     "unicode": "1F1F2-1F1FD",
@@ -10959,8 +12166,11 @@
     "keywords": [
       "country",
       "nation",
-      "mx"
-    ]
+      "mx",
+      "mexican",
+      "flag"
+    ],
+    "moji": "🇲🇽"
   },
   "flag_my": {
     "unicode": "1F1F2-1F1FE",
@@ -10975,8 +12185,10 @@
     "keywords": [
       "country",
       "nation",
-      "my"
-    ]
+      "my",
+      "flag"
+    ],
+    "moji": "🇲🇾"
   },
   "flag_mz": {
     "unicode": "1F1F2-1F1FF",
@@ -10992,8 +12204,10 @@
       "country",
       "nation",
       "mocambique",
-      "mz"
-    ]
+      "mz",
+      "flag"
+    ],
+    "moji": "🇲🇿"
   },
   "flag_na": {
     "unicode": "1F1F3-1F1E6",
@@ -11008,8 +12222,10 @@
     "keywords": [
       "country",
       "nation",
-      "na"
-    ]
+      "na",
+      "flag"
+    ],
+    "moji": "🇳🇦"
   },
   "flag_nc": {
     "unicode": "1F1F3-1F1E8",
@@ -11027,8 +12243,10 @@
       "nouvelle",
       "cal&eacute;donie",
       "caledonie",
-      "nc"
-    ]
+      "nc",
+      "flag"
+    ],
+    "moji": "🇳🇨"
   },
   "flag_ne": {
     "unicode": "1F1F3-1F1EA",
@@ -11043,12 +12261,14 @@
     "keywords": [
       "country",
       "nation",
-      "ne"
-    ]
+      "ne",
+      "flag"
+    ],
+    "moji": "🇳🇪"
   },
   "flag_nf": {
     "unicode": "1F1F3-1F1EB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "norfolk island",
     "shortname": ":flag_nf:",
     "category": "flags",
@@ -11056,7 +12276,11 @@
       ":nf:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇳🇫"
   },
   "flag_ng": {
     "unicode": "1F1F3-1F1EC",
@@ -11071,8 +12295,10 @@
     "keywords": [
       "country",
       "nation",
-      "ng"
-    ]
+      "ng",
+      "flag"
+    ],
+    "moji": "🇳🇬"
   },
   "flag_ni": {
     "unicode": "1F1F3-1F1EE",
@@ -11087,8 +12313,10 @@
     "keywords": [
       "country",
       "nation",
-      "ni"
-    ]
+      "ni",
+      "flag"
+    ],
+    "moji": "🇳🇮"
   },
   "flag_nl": {
     "unicode": "1F1F3-1F1F1",
@@ -11105,8 +12333,10 @@
       "nation",
       "nederland",
       "holland",
-      "nl"
-    ]
+      "nl",
+      "flag"
+    ],
+    "moji": "🇳🇱"
   },
   "flag_no": {
     "unicode": "1F1F3-1F1F4",
@@ -11122,8 +12352,10 @@
       "country",
       "nation",
       "norge",
-      "no"
-    ]
+      "no",
+      "flag"
+    ],
+    "moji": "🇳🇴"
   },
   "flag_np": {
     "unicode": "1F1F3-1F1F5",
@@ -11138,8 +12370,10 @@
     "keywords": [
       "country",
       "nation",
-      "np"
-    ]
+      "np",
+      "flag"
+    ],
+    "moji": "🇳🇵"
   },
   "flag_nr": {
     "unicode": "1F1F3-1F1F7",
@@ -11154,8 +12388,10 @@
     "keywords": [
       "country",
       "nation",
-      "nr"
-    ]
+      "nr",
+      "flag"
+    ],
+    "moji": "🇳🇷"
   },
   "flag_nu": {
     "unicode": "1F1F3-1F1FA",
@@ -11170,8 +12406,10 @@
     "keywords": [
       "country",
       "nation",
-      "nu"
-    ]
+      "nu",
+      "flag"
+    ],
+    "moji": "🇳🇺"
   },
   "flag_nz": {
     "unicode": "1F1F3-1F1FF",
@@ -11187,8 +12425,10 @@
       "country",
       "nation",
       "aotearoa",
-      "nz"
-    ]
+      "nz",
+      "flag"
+    ],
+    "moji": "🇳🇿"
   },
   "flag_om": {
     "unicode": "1F1F4-1F1F2",
@@ -11204,8 +12444,10 @@
       "country",
       "nation",
       "saltanat uman",
-      "om"
-    ]
+      "om",
+      "flag"
+    ],
+    "moji": "🇴🇲"
   },
   "flag_pa": {
     "unicode": "1F1F5-1F1E6",
@@ -11220,8 +12462,10 @@
     "keywords": [
       "country",
       "nation",
-      "pa"
-    ]
+      "pa",
+      "flag"
+    ],
+    "moji": "🇵🇦"
   },
   "flag_pe": {
     "unicode": "1F1F5-1F1EA",
@@ -11236,8 +12480,10 @@
     "keywords": [
       "country",
       "nation",
-      "pe"
-    ]
+      "pe",
+      "flag"
+    ],
+    "moji": "🇵🇪"
   },
   "flag_pf": {
     "unicode": "1F1F5-1F1EB",
@@ -11254,8 +12500,10 @@
       "nation",
       "polyn&eacute;sie fran&ccedil;aise",
       "polynesie francaise",
-      "pf"
-    ]
+      "pf",
+      "flag"
+    ],
+    "moji": "🇵🇫"
   },
   "flag_pg": {
     "unicode": "1F1F5-1F1EC",
@@ -11271,8 +12519,10 @@
       "country",
       "nation",
       "papua niu gini",
-      "pg"
-    ]
+      "pg",
+      "flag"
+    ],
+    "moji": "🇵🇬"
   },
   "flag_ph": {
     "unicode": "1F1F5-1F1ED",
@@ -11288,8 +12538,10 @@
       "country",
       "nation",
       "pilipinas",
-      "ph"
-    ]
+      "ph",
+      "flag"
+    ],
+    "moji": "🇵🇭"
   },
   "flag_pk": {
     "unicode": "1F1F5-1F1F0",
@@ -11304,8 +12556,10 @@
     "keywords": [
       "country",
       "nation",
-      "pk"
-    ]
+      "pk",
+      "flag"
+    ],
+    "moji": "🇵🇰"
   },
   "flag_pl": {
     "unicode": "1F1F5-1F1F1",
@@ -11321,12 +12575,14 @@
       "country",
       "nation",
       "polska",
-      "pl"
-    ]
+      "pl",
+      "flag"
+    ],
+    "moji": "🇵🇱"
   },
   "flag_pm": {
     "unicode": "1F1F5-1F1F2",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "saint pierre and miquelon",
     "shortname": ":flag_pm:",
     "category": "flags",
@@ -11334,11 +12590,15 @@
       ":pm:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇵🇲"
   },
   "flag_pn": {
     "unicode": "1F1F5-1F1F3",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "pitcairn",
     "shortname": ":flag_pn:",
     "category": "flags",
@@ -11346,7 +12606,11 @@
       ":pn:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇵🇳"
   },
   "flag_pr": {
     "unicode": "1F1F5-1F1F7",
@@ -11361,8 +12625,10 @@
     "keywords": [
       "country",
       "nation",
-      "pr"
-    ]
+      "pr",
+      "flag"
+    ],
+    "moji": "🇵🇷"
   },
   "flag_ps": {
     "unicode": "1F1F5-1F1F8",
@@ -11377,8 +12643,10 @@
     "keywords": [
       "country",
       "nation",
-      "ps"
-    ]
+      "ps",
+      "flag"
+    ],
+    "moji": "🇵🇸"
   },
   "flag_pt": {
     "unicode": "1F1F5-1F1F9",
@@ -11393,8 +12661,10 @@
     "keywords": [
       "country",
       "nation",
-      "pt"
-    ]
+      "pt",
+      "flag"
+    ],
+    "moji": "🇵🇹"
   },
   "flag_pw": {
     "unicode": "1F1F5-1F1FC",
@@ -11410,8 +12680,10 @@
       "country",
       "nation",
       "belau",
-      "pw"
-    ]
+      "pw",
+      "flag"
+    ],
+    "moji": "🇵🇼"
   },
   "flag_py": {
     "unicode": "1F1F5-1F1FE",
@@ -11426,8 +12698,10 @@
     "keywords": [
       "country",
       "nation",
-      "py"
-    ]
+      "py",
+      "flag"
+    ],
+    "moji": "🇵🇾"
   },
   "flag_qa": {
     "unicode": "1F1F6-1F1E6",
@@ -11443,12 +12717,14 @@
       "country",
       "nation",
       "dawlat qatar",
-      "qa"
-    ]
+      "qa",
+      "flag"
+    ],
+    "moji": "🇶🇦"
   },
   "flag_re": {
     "unicode": "1F1F7-1F1EA",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "réunion",
     "shortname": ":flag_re:",
     "category": "flags",
@@ -11456,7 +12732,11 @@
       ":re:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇷🇪"
   },
   "flag_ro": {
     "unicode": "1F1F7-1F1F4",
@@ -11471,8 +12751,10 @@
     "keywords": [
       "country",
       "nation",
-      "ro"
-    ]
+      "ro",
+      "flag"
+    ],
+    "moji": "🇷🇴"
   },
   "flag_rs": {
     "unicode": "1F1F7-1F1F8",
@@ -11488,8 +12770,10 @@
       "country",
       "nation",
       "srbija",
-      "rs"
-    ]
+      "rs",
+      "flag"
+    ],
+    "moji": "🇷🇸"
   },
   "flag_ru": {
     "unicode": "1F1F7-1F1FA",
@@ -11505,8 +12789,10 @@
       "nation",
       "russian",
       "country",
-      "ru"
-    ]
+      "ru",
+      "flag"
+    ],
+    "moji": "🇷🇺"
   },
   "flag_rw": {
     "unicode": "1F1F7-1F1FC",
@@ -11521,8 +12807,10 @@
     "keywords": [
       "country",
       "nation",
-      "rw"
-    ]
+      "rw",
+      "flag"
+    ],
+    "moji": "🇷🇼"
   },
   "flag_sa": {
     "unicode": "1F1F8-1F1E6",
@@ -11539,8 +12827,10 @@
       "country",
       "nation",
       "al arabiyah as suudiyah",
-      "sa"
-    ]
+      "sa",
+      "flag"
+    ],
+    "moji": "🇸🇦"
   },
   "flag_sb": {
     "unicode": "1F1F8-1F1E7",
@@ -11555,8 +12845,10 @@
     "keywords": [
       "country",
       "nation",
-      "sb"
-    ]
+      "sb",
+      "flag"
+    ],
+    "moji": "🇸🇧"
   },
   "flag_sc": {
     "unicode": "1F1F8-1F1E8",
@@ -11572,8 +12864,10 @@
       "country",
       "nation",
       "seychelles",
-      "sc"
-    ]
+      "sc",
+      "flag"
+    ],
+    "moji": "🇸🇨"
   },
   "flag_sd": {
     "unicode": "1F1F8-1F1E9",
@@ -11589,8 +12883,10 @@
       "country",
       "nation",
       "as-sudan",
-      "sd"
-    ]
+      "sd",
+      "flag"
+    ],
+    "moji": "🇸🇩"
   },
   "flag_se": {
     "unicode": "1F1F8-1F1EA",
@@ -11606,8 +12902,10 @@
       "country",
       "nation",
       "sverige",
-      "se"
-    ]
+      "se",
+      "flag"
+    ],
+    "moji": "🇸🇪"
   },
   "flag_sg": {
     "unicode": "1F1F8-1F1EC",
@@ -11622,8 +12920,10 @@
     "keywords": [
       "country",
       "nation",
-      "sg"
-    ]
+      "sg",
+      "flag"
+    ],
+    "moji": "🇸🇬"
   },
   "flag_sh": {
     "unicode": "1F1F8-1F1ED",
@@ -11638,8 +12938,10 @@
     "keywords": [
       "country",
       "nation",
-      "sh"
-    ]
+      "sh",
+      "flag"
+    ],
+    "moji": "🇸🇭"
   },
   "flag_si": {
     "unicode": "1F1F8-1F1EE",
@@ -11655,12 +12957,14 @@
       "country",
       "nation",
       "slovenija",
-      "si"
-    ]
+      "si",
+      "flag"
+    ],
+    "moji": "🇸🇮"
   },
   "flag_sj": {
     "unicode": "1F1F8-1F1EF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "svalbard and jan mayen",
     "shortname": ":flag_sj:",
     "category": "flags",
@@ -11668,7 +12972,11 @@
       ":sj:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇸🇯"
   },
   "flag_sk": {
     "unicode": "1F1F8-1F1F0",
@@ -11683,8 +12991,10 @@
     "keywords": [
       "country",
       "nation",
-      "sk"
-    ]
+      "sk",
+      "flag"
+    ],
+    "moji": "🇸🇰"
   },
   "flag_sl": {
     "unicode": "1F1F8-1F1F1",
@@ -11699,8 +13009,10 @@
     "keywords": [
       "country",
       "nation",
-      "sl"
-    ]
+      "sl",
+      "flag"
+    ],
+    "moji": "🇸🇱"
   },
   "flag_sm": {
     "unicode": "1F1F8-1F1F2",
@@ -11715,8 +13027,10 @@
     "keywords": [
       "country",
       "nation",
-      "sm"
-    ]
+      "sm",
+      "flag"
+    ],
+    "moji": "🇸🇲"
   },
   "flag_sn": {
     "unicode": "1F1F8-1F1F3",
@@ -11731,8 +13045,10 @@
     "keywords": [
       "country",
       "nation",
-      "sn"
-    ]
+      "sn",
+      "flag"
+    ],
+    "moji": "🇸🇳"
   },
   "flag_so": {
     "unicode": "1F1F8-1F1F4",
@@ -11747,8 +13063,10 @@
     "keywords": [
       "country",
       "nation",
-      "so"
-    ]
+      "so",
+      "flag"
+    ],
+    "moji": "🇸🇴"
   },
   "flag_sr": {
     "unicode": "1F1F8-1F1F7",
@@ -11763,12 +13081,14 @@
     "keywords": [
       "country",
       "nation",
-      "sr"
-    ]
+      "sr",
+      "flag"
+    ],
+    "moji": "🇸🇷"
   },
   "flag_ss": {
     "unicode": "1F1F8-1F1F8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "south sudan",
     "shortname": ":flag_ss:",
     "category": "flags",
@@ -11776,7 +13096,11 @@
       ":ss:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇸🇸"
   },
   "flag_st": {
     "unicode": "1F1F8-1F1F9",
@@ -11792,8 +13116,10 @@
       "country",
       "nation",
       "sao tome e principe",
-      "st"
-    ]
+      "st",
+      "flag"
+    ],
+    "moji": "🇸🇹"
   },
   "flag_sv": {
     "unicode": "1F1F8-1F1FB",
@@ -11808,12 +13134,14 @@
     "keywords": [
       "country",
       "nation",
-      "sv"
-    ]
+      "sv",
+      "flag"
+    ],
+    "moji": "🇸🇻"
   },
   "flag_sx": {
     "unicode": "1F1F8-1F1FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sint maarten",
     "shortname": ":flag_sx:",
     "category": "flags",
@@ -11821,7 +13149,11 @@
       ":sx:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇸🇽"
   },
   "flag_sy": {
     "unicode": "1F1F8-1F1FE",
@@ -11836,8 +13168,10 @@
     "keywords": [
       "country",
       "nation",
-      "sy"
-    ]
+      "sy",
+      "flag"
+    ],
+    "moji": "🇸🇾"
   },
   "flag_sz": {
     "unicode": "1F1F8-1F1FF",
@@ -11852,12 +13186,14 @@
     "keywords": [
       "country",
       "nation",
-      "sz"
-    ]
+      "sz",
+      "flag"
+    ],
+    "moji": "🇸🇿"
   },
   "flag_ta": {
     "unicode": "1F1F9-1F1E6",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "tristan da cunha",
     "shortname": ":flag_ta:",
     "category": "flags",
@@ -11865,11 +13201,15 @@
       ":ta:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇹🇦"
   },
   "flag_tc": {
     "unicode": "1F1F9-1F1E8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "turks and caicos islands",
     "shortname": ":flag_tc:",
     "category": "flags",
@@ -11877,7 +13217,11 @@
       ":tc:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇹🇨"
   },
   "flag_td": {
     "unicode": "1F1F9-1F1E9",
@@ -11893,12 +13237,14 @@
       "country",
       "nation",
       "tchad",
-      "td"
-    ]
+      "td",
+      "flag"
+    ],
+    "moji": "🇹🇩"
   },
   "flag_tf": {
     "unicode": "1F1F9-1F1EB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "french southern territories",
     "shortname": ":flag_tf:",
     "category": "flags",
@@ -11906,7 +13252,11 @@
       ":tf:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇹🇫"
   },
   "flag_tg": {
     "unicode": "1F1F9-1F1EC",
@@ -11922,8 +13272,10 @@
       "country",
       "nation",
       "republique togolaise",
-      "tg"
-    ]
+      "tg",
+      "flag"
+    ],
+    "moji": "🇹🇬"
   },
   "flag_th": {
     "unicode": "1F1F9-1F1ED",
@@ -11939,8 +13291,10 @@
       "country",
       "nation",
       "prathet thai",
-      "th"
-    ]
+      "th",
+      "flag"
+    ],
+    "moji": "🇹🇭"
   },
   "flag_tj": {
     "unicode": "1F1F9-1F1EF",
@@ -11956,12 +13310,14 @@
       "country",
       "nation",
       "jumhurii tojikiston",
-      "tj"
-    ]
+      "tj",
+      "flag"
+    ],
+    "moji": "🇹🇯"
   },
   "flag_tk": {
     "unicode": "1F1F9-1F1F0",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "tokelau",
     "shortname": ":flag_tk:",
     "category": "flags",
@@ -11969,7 +13325,11 @@
       ":tk:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇹🇰"
   },
   "flag_tl": {
     "unicode": "1F1F9-1F1F1",
@@ -11984,8 +13344,10 @@
     "keywords": [
       "country",
       "nation",
-      "tl"
-    ]
+      "tl",
+      "flag"
+    ],
+    "moji": "🇹🇱"
   },
   "flag_tm": {
     "unicode": "1F1F9-1F1F2",
@@ -12000,8 +13362,10 @@
     "keywords": [
       "country",
       "nation",
-      "tm"
-    ]
+      "tm",
+      "flag"
+    ],
+    "moji": "🇹🇲"
   },
   "flag_tn": {
     "unicode": "1F1F9-1F1F3",
@@ -12017,8 +13381,10 @@
       "country",
       "nation",
       "tunis",
-      "tn"
-    ]
+      "tn",
+      "flag"
+    ],
+    "moji": "🇹🇳"
   },
   "flag_to": {
     "unicode": "1F1F9-1F1F4",
@@ -12033,8 +13399,10 @@
     "keywords": [
       "country",
       "nation",
-      "to"
-    ]
+      "to",
+      "flag"
+    ],
+    "moji": "🇹🇴"
   },
   "flag_tr": {
     "unicode": "1F1F9-1F1F7",
@@ -12049,8 +13417,10 @@
     "keywords": [
       "country",
       "nation",
-      "turkiye"
-    ]
+      "turkiye",
+      "flag"
+    ],
+    "moji": "🇹🇷"
   },
   "flag_tt": {
     "unicode": "1F1F9-1F1F9",
@@ -12065,8 +13435,10 @@
     "keywords": [
       "country",
       "nation",
-      "tt"
-    ]
+      "tt",
+      "flag"
+    ],
+    "moji": "🇹🇹"
   },
   "flag_tv": {
     "unicode": "1F1F9-1F1FB",
@@ -12081,8 +13453,10 @@
     "keywords": [
       "country",
       "nation",
-      "tv"
-    ]
+      "tv",
+      "flag"
+    ],
+    "moji": "🇹🇻"
   },
   "flag_tw": {
     "unicode": "1F1F9-1F1FC",
@@ -12098,8 +13472,10 @@
       "country",
       "nation",
       "taiwan",
-      "tw"
-    ]
+      "tw",
+      "flag"
+    ],
+    "moji": "🇹🇼"
   },
   "flag_tz": {
     "unicode": "1F1F9-1F1FF",
@@ -12114,8 +13490,10 @@
     "keywords": [
       "country",
       "nation",
-      "tz"
-    ]
+      "tz",
+      "flag"
+    ],
+    "moji": "🇹🇿"
   },
   "flag_ua": {
     "unicode": "1F1FA-1F1E6",
@@ -12131,8 +13509,10 @@
       "country",
       "nation",
       "ukrayina",
-      "ua"
-    ]
+      "ua",
+      "flag"
+    ],
+    "moji": "🇺🇦"
   },
   "flag_ug": {
     "unicode": "1F1FA-1F1EC",
@@ -12147,12 +13527,14 @@
     "keywords": [
       "country",
       "nation",
-      "ug"
-    ]
+      "ug",
+      "flag"
+    ],
+    "moji": "🇺🇬"
   },
   "flag_um": {
     "unicode": "1F1FA-1F1F2",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "united states minor outlying islands",
     "shortname": ":flag_um:",
     "category": "flags",
@@ -12160,7 +13542,11 @@
       ":um:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇺🇲"
   },
   "flag_us": {
     "unicode": "1F1FA-1F1F8",
@@ -12180,8 +13566,10 @@
       "united states of america",
       "america",
       "old glory",
-      "us"
-    ]
+      "us",
+      "flag"
+    ],
+    "moji": "🇺🇸"
   },
   "flag_uy": {
     "unicode": "1F1FA-1F1FE",
@@ -12196,8 +13584,10 @@
     "keywords": [
       "country",
       "nation",
-      "uy"
-    ]
+      "uy",
+      "flag"
+    ],
+    "moji": "🇺🇾"
   },
   "flag_uz": {
     "unicode": "1F1FA-1F1FF",
@@ -12213,8 +13603,10 @@
       "country",
       "nation",
       "uzbekiston respublikasi",
-      "uz"
-    ]
+      "uz",
+      "flag"
+    ],
+    "moji": "🇺🇿"
   },
   "flag_va": {
     "unicode": "1F1FB-1F1E6",
@@ -12229,8 +13621,10 @@
     "keywords": [
       "country",
       "nation",
-      "va"
-    ]
+      "va",
+      "flag"
+    ],
+    "moji": "🇻🇦"
   },
   "flag_vc": {
     "unicode": "1F1FB-1F1E8",
@@ -12245,8 +13639,10 @@
     "keywords": [
       "country",
       "nation",
-      "vc"
-    ]
+      "vc",
+      "flag"
+    ],
+    "moji": "🇻🇨"
   },
   "flag_ve": {
     "unicode": "1F1FB-1F1EA",
@@ -12261,12 +13657,14 @@
     "keywords": [
       "country",
       "nation",
-      "ve"
-    ]
+      "ve",
+      "flag"
+    ],
+    "moji": "🇻🇪"
   },
   "flag_vg": {
     "unicode": "1F1FB-1F1EC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "british virgin islands",
     "shortname": ":flag_vg:",
     "category": "flags",
@@ -12274,7 +13672,11 @@
       ":vg:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇻🇬"
   },
   "flag_vi": {
     "unicode": "1F1FB-1F1EE",
@@ -12289,8 +13691,10 @@
     "keywords": [
       "country",
       "nation",
-      "vi"
-    ]
+      "vi",
+      "flag"
+    ],
+    "moji": "🇻🇮"
   },
   "flag_vn": {
     "unicode": "1F1FB-1F1F3",
@@ -12306,8 +13710,10 @@
       "country",
       "nation",
       "viet nam",
-      "vn"
-    ]
+      "vn",
+      "flag"
+    ],
+    "moji": "🇻🇳"
   },
   "flag_vu": {
     "unicode": "1F1FB-1F1FA",
@@ -12322,8 +13728,10 @@
     "keywords": [
       "country",
       "nation",
-      "vu"
-    ]
+      "vu",
+      "flag"
+    ],
+    "moji": "🇻🇺"
   },
   "flag_wf": {
     "unicode": "1F1FC-1F1EB",
@@ -12338,23 +13746,27 @@
     "keywords": [
       "country",
       "nation",
-      "wf"
-    ]
+      "wf",
+      "flag"
+    ],
+    "moji": "🇼🇫"
   },
   "flag_white": {
     "unicode": "1F3F3",
     "unicode_alternates": [],
     "name": "waving white flag",
     "shortname": ":flag_white:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":waving_white_flag:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "symbol",
-      "signal"
-    ]
+      "signal",
+      "object"
+    ],
+    "moji": "🏳"
   },
   "flag_ws": {
     "unicode": "1F1FC-1F1F8",
@@ -12370,8 +13782,10 @@
       "country",
       "nation",
       "american samoa",
-      "ws"
-    ]
+      "ws",
+      "flag"
+    ],
+    "moji": "🇼🇸"
   },
   "flag_xk": {
     "unicode": "1F1FD-1F1F0",
@@ -12386,8 +13800,10 @@
     "keywords": [
       "country",
       "nation",
-      "xk"
-    ]
+      "xk",
+      "flag"
+    ],
+    "moji": "🇽🇰"
   },
   "flag_ye": {
     "unicode": "1F1FE-1F1EA",
@@ -12403,12 +13819,14 @@
       "country",
       "nation",
       "al yaman",
-      "ye"
-    ]
+      "ye",
+      "flag"
+    ],
+    "moji": "🇾🇪"
   },
   "flag_yt": {
     "unicode": "1F1FE-1F1F9",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "mayotte",
     "shortname": ":flag_yt:",
     "category": "flags",
@@ -12416,7 +13834,11 @@
       ":yt:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "country",
+      "flag"
+    ],
+    "moji": "🇾🇹"
   },
   "flag_za": {
     "unicode": "1F1FF-1F1E6",
@@ -12430,8 +13852,10 @@
     "aliases_ascii": [],
     "keywords": [
       "country",
-      "nation"
-    ]
+      "nation",
+      "flag"
+    ],
+    "moji": "🇿🇦"
   },
   "flag_zm": {
     "unicode": "1F1FF-1F1F2",
@@ -12446,8 +13870,10 @@
     "keywords": [
       "country",
       "nation",
-      "zm"
-    ]
+      "zm",
+      "flag"
+    ],
+    "moji": "🇿🇲"
   },
   "flag_zw": {
     "unicode": "1F1FF-1F1FC",
@@ -12462,8 +13888,10 @@
     "keywords": [
       "country",
       "nation",
-      "zw"
-    ]
+      "zw",
+      "flag"
+    ],
+    "moji": "🇿🇼"
   },
   "flags": {
     "unicode": "1F38F",
@@ -12484,11 +13912,11 @@
       "boys",
       "celebration",
       "happiness",
-      "carp",
       "streamers",
-      "japanese",
       "holiday",
-      "flags"
+      "flags",
+      "object",
+      "japan"
     ],
     "moji": "🎏"
   },
@@ -12501,56 +13929,25 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "dark"
+      "dark",
+      "electronics",
+      "object"
     ],
     "moji": "🔦"
   },
   "fleur-de-lis": {
     "unicode": "269C",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "fleur-de-lis",
     "shortname": ":fleur-de-lis:",
     "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "symbol"
-    ]
-  },
-  "flip_phone": {
-    "unicode": "1F581",
-    "unicode_alternates": [],
-    "name": "clamshell mobile phone",
-    "shortname": ":flip_phone:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":clamshell_mobile_phone:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "cellphone"
-    ]
-  },
-  "floppy_black": {
-    "unicode": "1F5AA",
-    "unicode_alternates": [],
-    "name": "black hard shell floppy disk",
-    "shortname": ":floppy_black:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":black_hard_shell_floppy_disk:"
+      "symbol",
+      "object"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "oldschool",
-      "save",
-      "technology",
-      "storage",
-      "information",
-      "computer",
-      "drive",
-      "megabyte"
-    ]
+    "moji": "⚜"
   },
   "floppy_disk": {
     "unicode": "1F4BE",
@@ -12570,37 +13967,18 @@
       "information",
       "computer",
       "drive",
-      "megabyte"
-    ],
-    "moji": "💾"
-  },
-  "floppy_white": {
-    "unicode": "1F5AB",
-    "unicode_alternates": [],
-    "name": "white hard shell floppy disk",
-    "shortname": ":floppy_white:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":white_hard_shell_floppy_disk:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "oldschool",
-      "save",
-      "technology",
-      "storage",
-      "information",
-      "computer",
-      "drive",
-      "megabyte"
-    ]
+      "megabyte",
+      "electronics",
+      "office"
+    ],
+    "moji": "💾"
   },
   "flower_playing_cards": {
     "unicode": "1F3B4",
     "unicode_alternates": [],
     "name": "flower playing cards",
     "shortname": ":flower_playing_cards:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -12610,7 +13988,9 @@
       "game",
       "august",
       "moon",
-      "special"
+      "special",
+      "object",
+      "symbol"
     ],
     "moji": "🎴"
   },
@@ -12619,7 +13999,7 @@
     "unicode_alternates": [],
     "name": "flushed face",
     "shortname": ":flushed:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ":$",
@@ -12630,11 +14010,13 @@
       "face",
       "flattered",
       "flush",
-      "blush",
       "red",
       "pink",
       "cheeks",
-      "shy"
+      "shy",
+      "smiley",
+      "emotion",
+      "omg"
     ],
     "moji": "😳"
   },
@@ -12650,15 +14032,18 @@
       "weather",
       "damp",
       "cloud",
-      "hazy"
-    ]
+      "hazy",
+      "sky",
+      "cold"
+    ],
+    "moji": "🌫"
   },
   "foggy": {
     "unicode": "1F301",
     "unicode_alternates": [],
     "name": "foggy",
     "shortname": ":foggy:",
-    "category": "nature",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -12667,43 +14052,21 @@
       "bridge",
       "weather",
       "fog",
-      "foggy"
+      "foggy",
+      "places",
+      "building",
+      "sky",
+      "travel",
+      "vacation"
     ],
     "moji": "🌁"
   },
-  "folder": {
-    "unicode": "1F5C0",
-    "unicode_alternates": [],
-    "name": "folder",
-    "shortname": ":folder:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "documents"
-    ]
-  },
-  "folder_open": {
-    "unicode": "1F5C1",
-    "unicode_alternates": [],
-    "name": "open folder",
-    "shortname": ":folder_open:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":open_folder:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "documents",
-      "load"
-    ]
-  },
   "football": {
     "unicode": "1F3C8",
     "unicode_alternates": [],
     "name": "american football",
     "shortname": ":football:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -12714,7 +14077,8 @@
       "ball",
       "sport",
       "america",
-      "american"
+      "american",
+      "game"
     ],
     "moji": "🏈"
   },
@@ -12723,7 +14087,7 @@
     "unicode_alternates": [],
     "name": "footprints",
     "shortname": ":footprints:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -12736,7 +14100,7 @@
     "unicode_alternates": [],
     "name": "fork and knife",
     "shortname": ":fork_and_knife:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -12747,7 +14111,9 @@
       "restaurant",
       "meal",
       "food",
-      "eat"
+      "eat",
+      "object",
+      "weapon"
     ],
     "moji": "🍴"
   },
@@ -12756,7 +14122,7 @@
     "unicode_alternates": [],
     "name": "fork and knife with plate",
     "shortname": ":fork_knife_plate:",
-    "category": "travel_places",
+    "category": "food",
     "aliases": [
       ":fork_and_knife_with_plate:"
     ],
@@ -12768,8 +14134,10 @@
       "lunch",
       "dinner",
       "utensils",
-      "setting"
-    ]
+      "setting",
+      "object"
+    ],
+    "moji": "🍽"
   },
   "fountain": {
     "unicode": "26F2",
@@ -12778,11 +14146,13 @@
     ],
     "name": "fountain",
     "shortname": ":fountain:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "photo"
+      "photo",
+      "travel",
+      "vacation"
     ],
     "moji": "⛲"
   },
@@ -12792,15 +14162,18 @@
     "unicode_alternates": [
       "0034-FE0F-20E3"
     ],
-    "name": "digit four",
+    "name": "keycap digit four",
     "shortname": ":four:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "4",
       "blue-square",
-      "numbers"
+      "numbers",
+      "number",
+      "math",
+      "symbol"
     ]
   },
   "four_leaf_clover": {
@@ -12823,74 +14196,75 @@
       "irish",
       "saint",
       "patrick",
-      "green"
+      "green",
+      "sol"
     ],
     "moji": "🍀"
   },
-  "frame_photo": {
-    "unicode": "1F5BC",
+  "fox": {
+    "unicode": "1F98A",
     "unicode_alternates": [],
-    "name": "frame with picture",
-    "shortname": ":frame_photo:",
-    "category": "objects_symbols",
+    "name": "fox face",
+    "shortname": ":fox:",
+    "category": "nature",
     "aliases": [
-      ":frame_with_picture:"
+      ":fox_face:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "photo"
-    ]
+    "keywords": [],
+    "moji": "🦊"
   },
-  "frame_tiles": {
-    "unicode": "1F5BD",
+  "frame_photo": {
+    "unicode": "1F5BC",
     "unicode_alternates": [],
-    "name": "frame with tiles",
-    "shortname": ":frame_tiles:",
-    "category": "objects_symbols",
+    "name": "frame with picture",
+    "shortname": ":frame_photo:",
+    "category": "objects",
     "aliases": [
-      ":frame_with_tiles:"
+      ":frame_with_picture:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "photo",
-      "painting"
-    ]
-  },
-  "frame_x": {
-    "unicode": "1F5BE",
-    "unicode_alternates": [],
-    "name": "frame with an x",
-    "shortname": ":frame_x:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":frame_with_an_x:"
+      "travel",
+      "vacation"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "photo",
-      "painting"
-    ]
+    "moji": "🖼"
   },
   "free": {
     "unicode": "1F193",
     "unicode_alternates": [],
     "name": "squared free",
     "shortname": ":free:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
-      "words"
+      "words",
+      "symbol"
     ],
     "moji": "🆓"
   },
+  "french_bread": {
+    "unicode": "1F956",
+    "unicode_alternates": [],
+    "name": "baguette bread",
+    "shortname": ":french_bread:",
+    "category": "food",
+    "aliases": [
+      ":baguette_bread:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥖"
+  },
   "fried_shrimp": {
     "unicode": "1F364",
     "unicode_alternates": [],
     "name": "fried shrimp",
     "shortname": ":fried_shrimp:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -12909,7 +14283,7 @@
     "unicode_alternates": [],
     "name": "french fries",
     "shortname": ":fries:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -12920,7 +14294,8 @@
       "potato",
       "fry",
       "russet",
-      "idaho"
+      "idaho",
+      "america"
     ],
     "moji": "🍟"
   },
@@ -12934,7 +14309,8 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "nature"
+      "nature",
+      "wildlife"
     ],
     "moji": "🐸"
   },
@@ -12943,7 +14319,7 @@
     "unicode_alternates": [],
     "name": "frowning face with open mouth",
     "shortname": ":frowning:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [
       ":anguished:"
     ],
@@ -12955,13 +14331,16 @@
       "sad",
       "pout",
       "sulk",
-      "glower"
+      "glower",
+      "smiley",
+      "surprised",
+      "emotion"
     ],
     "moji": "😦"
   },
   "frowning2": {
     "unicode": "2639",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white frowning face",
     "shortname": ":frowning2:",
     "category": "people",
@@ -12971,8 +14350,12 @@
     "aliases_ascii": [],
     "keywords": [
       "frown",
-      "person"
-    ]
+      "person",
+      "sad",
+      "smiley",
+      "emotion"
+    ],
+    "moji": "☹"
   },
   "fuelpump": {
     "unicode": "26FD",
@@ -12981,12 +14364,14 @@
     ],
     "name": "fuel pump",
     "shortname": ":fuelpump:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "gas station",
-      "petroleum"
+      "petroleum",
+      "object",
+      "gas pump"
     ],
     "moji": "⛽"
   },
@@ -13010,7 +14395,8 @@
       "monster",
       "spooky",
       "werewolves",
-      "twilight"
+      "twilight",
+      "space"
     ],
     "moji": "🌕"
   },
@@ -13029,12 +14415,13 @@
       "anthropomorphic",
       "face",
       "sky",
-      "night",
       "cheese",
       "phase",
       "spooky",
       "werewolves",
-      "monsters"
+      "monsters",
+      "space",
+      "goodnight"
     ],
     "moji": "🌝"
   },
@@ -13043,23 +14430,24 @@
     "unicode_alternates": [],
     "name": "game die",
     "shortname": ":game_die:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "dice",
       "game",
       "die",
-      "dice",
       "craps",
       "gamble",
-      "play"
+      "play",
+      "object",
+      "boys night"
     ],
     "moji": "🎲"
   },
   "gear": {
     "unicode": "2699",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "gear",
     "shortname": ":gear:",
     "category": "objects",
@@ -13068,19 +14456,22 @@
     "keywords": [
       "object",
       "tool"
-    ]
+    ],
+    "moji": "âš™"
   },
   "gem": {
     "unicode": "1F48E",
     "unicode_alternates": [],
     "name": "gem stone",
     "shortname": ":gem:",
-    "category": "emoticons",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue",
-      "ruby"
+      "ruby",
+      "object",
+      "gem"
     ],
     "moji": "💎"
   },
@@ -13091,7 +14482,7 @@
     ],
     "name": "gemini",
     "shortname": ":gemini:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -13103,9 +14494,8 @@
       "stars",
       "zodiac",
       "sign",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♊"
   },
@@ -13114,11 +14504,13 @@
     "unicode_alternates": [],
     "name": "ghost",
     "shortname": ":ghost:",
-    "category": "objects",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "halloween"
+      "halloween",
+      "holidays",
+      "monster"
     ],
     "moji": "👻"
   },
@@ -13136,11 +14528,12 @@
       "present",
       "xmas",
       "gift",
-      "present",
       "wrap",
       "package",
-      "birthday",
-      "wedding"
+      "wedding",
+      "object",
+      "holidays",
+      "parties"
     ],
     "moji": "🎁"
   },
@@ -13149,12 +14542,14 @@
     "unicode_alternates": [],
     "name": "heart with ribbon",
     "shortname": ":gift_heart:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "love",
-      "valentines"
+      "valentines",
+      "symbol",
+      "condolence"
     ],
     "moji": "💝"
   },
@@ -13163,18 +14558,22 @@
     "unicode_alternates": [],
     "name": "girl",
     "shortname": ":girl:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "female",
-      "woman"
+      "woman",
+      "people",
+      "women",
+      "baby",
+      "diversity"
     ],
     "moji": "👧"
   },
   "girl_tone1": {
     "unicode": "1F467-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "girl tone 1",
     "shortname": ":girl_tone1:",
     "category": "people",
@@ -13184,11 +14583,12 @@
       "female",
       "kid",
       "child"
-    ]
+    ],
+    "moji": "👧🏻"
   },
   "girl_tone2": {
     "unicode": "1F467-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "girl tone 2",
     "shortname": ":girl_tone2:",
     "category": "people",
@@ -13198,11 +14598,12 @@
       "female",
       "kid",
       "child"
-    ]
+    ],
+    "moji": "👧🏼"
   },
   "girl_tone3": {
     "unicode": "1F467-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "girl tone 3",
     "shortname": ":girl_tone3:",
     "category": "people",
@@ -13212,11 +14613,12 @@
       "female",
       "kid",
       "child"
-    ]
+    ],
+    "moji": "👧🏽"
   },
   "girl_tone4": {
     "unicode": "1F467-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "girl tone 4",
     "shortname": ":girl_tone4:",
     "category": "people",
@@ -13226,11 +14628,12 @@
       "female",
       "kid",
       "child"
-    ]
+    ],
+    "moji": "👧🏾"
   },
   "girl_tone5": {
     "unicode": "1F467-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "girl tone 5",
     "shortname": ":girl_tone5:",
     "category": "people",
@@ -13240,42 +14643,43 @@
       "female",
       "kid",
       "child"
-    ]
-  },
-  "girls_symbol": {
-    "unicode": "1F6CA",
-    "unicode_alternates": [],
-    "name": "girls symbol",
-    "shortname": ":girls_symbol:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "female",
-      "child"
-    ]
+    ],
+    "moji": "👧🏿"
   },
   "globe_with_meridians": {
     "unicode": "1F310",
     "unicode_alternates": [],
     "name": "globe with meridians",
     "shortname": ":globe_with_meridians:",
-    "category": "nature",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "earth",
       "international",
       "world",
-      "earth",
       "meridian",
       "globe",
       "space",
       "planet",
-      "home"
+      "home",
+      "symbol"
     ],
     "moji": "🌐"
   },
+  "goal": {
+    "unicode": "1F945",
+    "unicode_alternates": [],
+    "name": "goal net",
+    "shortname": ":goal:",
+    "category": "activity",
+    "aliases": [
+      ":goal_net:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥅"
+  },
   "goat": {
     "unicode": "1F410",
     "unicode_alternates": [],
@@ -13302,12 +14706,17 @@
     ],
     "name": "flag in hole",
     "shortname": ":golf:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "business",
-      "sports"
+      "sports",
+      "game",
+      "ball",
+      "vacation",
+      "sport",
+      "golf"
     ],
     "moji": "⛳"
   },
@@ -13324,15 +14733,32 @@
       "par",
       "birdie",
       "eagle",
-      "mulligan"
-    ]
+      "mulligan",
+      "men",
+      "game",
+      "ball",
+      "vacation",
+      "golf"
+    ],
+    "moji": "🏌"
+  },
+  "gorilla": {
+    "unicode": "1F98D",
+    "unicode_alternates": [],
+    "name": "gorilla",
+    "shortname": ":gorilla:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦍"
   },
   "grapes": {
     "unicode": "1F347",
     "unicode_alternates": [],
     "name": "grapes",
     "shortname": ":grapes:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -13341,7 +14767,6 @@
       "grapes",
       "wine",
       "vinegar",
-      "fruit",
       "cluster",
       "vine"
     ],
@@ -13352,19 +14777,19 @@
     "unicode_alternates": [],
     "name": "green apple",
     "shortname": ":green_apple:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fruit",
       "nature",
       "apple",
-      "fruit",
       "green",
       "pie",
       "granny",
       "smith",
-      "core"
+      "core",
+      "food"
     ],
     "moji": "🍏"
   },
@@ -13379,7 +14804,10 @@
     "keywords": [
       "knowledge",
       "library",
-      "read"
+      "read",
+      "object",
+      "office",
+      "book"
     ],
     "moji": "📗"
   },
@@ -13388,7 +14816,7 @@
     "unicode_alternates": [],
     "name": "green heart",
     "shortname": ":green_heart:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -13398,14 +14826,14 @@
       "valentines",
       "green",
       "heart",
-      "love",
       "nature",
       "rebirth",
       "reborn",
       "jealous",
       "clingy",
       "envious",
-      "possessive"
+      "possessive",
+      "symbol"
     ],
     "moji": "💚"
   },
@@ -13414,11 +14842,13 @@
     "unicode_alternates": [],
     "name": "white exclamation mark ornament",
     "shortname": ":grey_exclamation:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "surprise"
+      "surprise",
+      "symbol",
+      "punctuation"
     ],
     "moji": "❕"
   },
@@ -13427,11 +14857,13 @@
     "unicode_alternates": [],
     "name": "white question mark ornament",
     "shortname": ":grey_question:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "doubts"
+      "doubts",
+      "symbol",
+      "punctuation"
     ],
     "moji": "❔"
   },
@@ -13440,16 +14872,19 @@
     "unicode_alternates": [],
     "name": "grimacing face",
     "shortname": ":grimacing:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "face",
       "grimace",
       "teeth",
-      "grimace",
       "disapprove",
-      "pain"
+      "pain",
+      "silly",
+      "smiley",
+      "emotion",
+      "selfie"
     ],
     "moji": "😬"
   },
@@ -13458,7 +14893,7 @@
     "unicode_alternates": [],
     "name": "grinning face with smiling eyes",
     "shortname": ":grin:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -13469,8 +14904,11 @@
       "grin",
       "grinning",
       "smiling",
-      "smile",
-      "smiley"
+      "smiley",
+      "silly",
+      "emotion",
+      "good",
+      "selfie"
     ],
     "moji": "😁"
   },
@@ -13479,7 +14917,7 @@
     "unicode_alternates": [],
     "name": "grinning face",
     "shortname": ":grinning:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -13490,17 +14928,17 @@
       "grin",
       "grinning",
       "smiling",
-      "smile",
-      "smiley"
+      "smiley",
+      "emotion"
     ],
-    "moji": "🕧"
+    "moji": "😀"
   },
   "guardsman": {
     "unicode": "1F482",
     "unicode_alternates": [],
     "name": "guardsman",
     "shortname": ":guardsman:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -13513,16 +14951,19 @@
       "guard",
       "bearskin",
       "hat",
-      "british",
       "queen",
       "ceremonial",
-      "military"
+      "military",
+      "people",
+      "men",
+      "diversity",
+      "job"
     ],
     "moji": "💂"
   },
   "guardsman_tone1": {
     "unicode": "1F482-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "guardsman tone 1",
     "shortname": ":guardsman_tone1:",
     "category": "people",
@@ -13537,15 +14978,15 @@
       "guard",
       "bearskin",
       "hat",
-      "british",
       "queen",
       "ceremonial",
       "military"
-    ]
+    ],
+    "moji": "💂🏻"
   },
   "guardsman_tone2": {
     "unicode": "1F482-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "guardsman tone 2",
     "shortname": ":guardsman_tone2:",
     "category": "people",
@@ -13560,15 +15001,15 @@
       "guard",
       "bearskin",
       "hat",
-      "british",
       "queen",
       "ceremonial",
       "military"
-    ]
+    ],
+    "moji": "💂🏼"
   },
   "guardsman_tone3": {
     "unicode": "1F482-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "guardsman tone 3",
     "shortname": ":guardsman_tone3:",
     "category": "people",
@@ -13583,15 +15024,15 @@
       "guard",
       "bearskin",
       "hat",
-      "british",
       "queen",
       "ceremonial",
       "military"
-    ]
+    ],
+    "moji": "💂🏽"
   },
   "guardsman_tone4": {
     "unicode": "1F482-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "guardsman tone 4",
     "shortname": ":guardsman_tone4:",
     "category": "people",
@@ -13606,15 +15047,15 @@
       "guard",
       "bearskin",
       "hat",
-      "british",
       "queen",
       "ceremonial",
       "military"
-    ]
+    ],
+    "moji": "💂🏾"
   },
   "guardsman_tone5": {
     "unicode": "1F482-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "guardsman tone 5",
     "shortname": ":guardsman_tone5:",
     "category": "people",
@@ -13629,18 +15070,18 @@
       "guard",
       "bearskin",
       "hat",
-      "british",
       "queen",
       "ceremonial",
       "military"
-    ]
+    ],
+    "moji": "💂🏿"
   },
   "guitar": {
     "unicode": "1F3B8",
     "unicode_alternates": [],
     "name": "guitar",
     "shortname": ":guitar:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -13648,12 +15089,11 @@
       "music",
       "guitar",
       "string",
-      "music",
-      "instrument",
       "jam",
       "rock",
       "acoustic",
-      "electric"
+      "electric",
+      "instruments"
     ],
     "moji": "🎸"
   },
@@ -13667,7 +15107,11 @@
     "aliases_ascii": [],
     "keywords": [
       "violence",
-      "weapon"
+      "weapon",
+      "object",
+      "dead",
+      "gun",
+      "sarcastic"
     ],
     "moji": "🔫"
   },
@@ -13676,19 +15120,22 @@
     "unicode_alternates": [],
     "name": "haircut",
     "shortname": ":haircut:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "female",
       "girl",
-      "woman"
+      "woman",
+      "people",
+      "women",
+      "diversity"
     ],
     "moji": "💇"
   },
   "haircut_tone1": {
     "unicode": "1F487-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "haircut tone 1",
     "shortname": ":haircut_tone1:",
     "category": "people",
@@ -13698,11 +15145,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💇🏻"
   },
   "haircut_tone2": {
     "unicode": "1F487-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "haircut tone 2",
     "shortname": ":haircut_tone2:",
     "category": "people",
@@ -13712,11 +15160,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💇🏼"
   },
   "haircut_tone3": {
     "unicode": "1F487-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "haircut tone 3",
     "shortname": ":haircut_tone3:",
     "category": "people",
@@ -13726,11 +15175,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💇🏽"
   },
   "haircut_tone4": {
     "unicode": "1F487-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "haircut tone 4",
     "shortname": ":haircut_tone4:",
     "category": "people",
@@ -13740,11 +15190,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💇🏾"
   },
   "haircut_tone5": {
     "unicode": "1F487-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "haircut tone 5",
     "shortname": ":haircut_tone5:",
     "category": "people",
@@ -13754,14 +15205,15 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💇🏿"
   },
   "hamburger": {
     "unicode": "1F354",
     "unicode_alternates": [],
     "name": "hamburger",
     "shortname": ":hamburger:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -13769,9 +15221,9 @@
       "meat",
       "hamburger",
       "burger",
-      "meat",
       "cow",
-      "beef"
+      "beef",
+      "america"
     ],
     "moji": "🍔"
   },
@@ -13789,13 +15241,16 @@
       "law",
       "ruling",
       "tools",
-      "verdict"
+      "verdict",
+      "object",
+      "tool",
+      "weapon"
     ],
     "moji": "🔨"
   },
   "hammer_pick": {
     "unicode": "2692",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "hammer and pick",
     "shortname": ":hammer_pick:",
     "category": "objects",
@@ -13805,8 +15260,10 @@
     "aliases_ascii": [],
     "keywords": [
       "object",
-      "tool"
-    ]
+      "tool",
+      "weapon"
+    ],
+    "moji": "âš’"
   },
   "hamster": {
     "unicode": "1F439",
@@ -13836,29 +15293,16 @@
       "hi",
       "five",
       "stop",
-      "halt"
-    ]
-  },
-  "hand_splayed_reverse": {
-    "unicode": "1F591",
-    "unicode_alternates": [],
-    "name": "reversed raised hand with fingers splayed",
-    "shortname": ":hand_splayed_reverse:",
-    "category": "people",
-    "aliases": [
-      ":reversed_raised_hand_with_fingers_splayed:"
+      "halt",
+      "body",
+      "hands",
+      "diversity"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "hi",
-      "five",
-      "stop",
-      "halt"
-    ]
+    "moji": "🖐"
   },
   "hand_splayed_tone1": {
     "unicode": "1F590-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with fingers splayed tone 1",
     "shortname": ":hand_splayed_tone1:",
     "category": "people",
@@ -13871,11 +15315,12 @@
       "five",
       "stop",
       "halt"
-    ]
+    ],
+    "moji": "🖐🏻"
   },
   "hand_splayed_tone2": {
     "unicode": "1F590-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with fingers splayed tone 2",
     "shortname": ":hand_splayed_tone2:",
     "category": "people",
@@ -13888,11 +15333,12 @@
       "five",
       "stop",
       "halt"
-    ]
+    ],
+    "moji": "🖐🏼"
   },
   "hand_splayed_tone3": {
     "unicode": "1F590-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with fingers splayed tone 3",
     "shortname": ":hand_splayed_tone3:",
     "category": "people",
@@ -13905,11 +15351,12 @@
       "five",
       "stop",
       "halt"
-    ]
+    ],
+    "moji": "🖐🏽"
   },
   "hand_splayed_tone4": {
     "unicode": "1F590-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with fingers splayed tone 4",
     "shortname": ":hand_splayed_tone4:",
     "category": "people",
@@ -13922,11 +15369,12 @@
       "five",
       "stop",
       "halt"
-    ]
+    ],
+    "moji": "🖐🏾"
   },
   "hand_splayed_tone5": {
     "unicode": "1F590-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with fingers splayed tone 5",
     "shortname": ":hand_splayed_tone5:",
     "category": "people",
@@ -13939,57 +15387,170 @@
       "five",
       "stop",
       "halt"
-    ]
-  },
-  "hand_victory": {
-    "unicode": "1F594",
-    "unicode_alternates": [],
-    "name": "reversed victory hand",
-    "shortname": ":hand_victory:",
-    "category": "people",
-    "aliases": [
-      ":reversed_victory_hand:"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "fu"
-    ]
+    "moji": "🖐🏿"
   },
   "handbag": {
     "unicode": "1F45C",
     "unicode_alternates": [],
     "name": "handbag",
     "shortname": ":handbag:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "accessories",
       "accessory",
       "bag",
-      "fashion"
+      "fashion",
+      "women",
+      "vacation"
     ],
     "moji": "👜"
   },
-  "hard_disk": {
-    "unicode": "1F5B4",
+  "handball": {
+    "unicode": "1F93E",
     "unicode_alternates": [],
-    "name": "hard disk",
-    "shortname": ":hard_disk:",
-    "category": "objects_symbols",
+    "name": "handball",
+    "shortname": ":handball:",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": [
-      "save",
-      "technology",
-      "storage",
-      "information",
-      "computer",
-      "drive",
-      "megabyte",
-      "gigabyte",
-      "hd"
-    ]
+    "keywords": [],
+    "moji": "🤾"
+  },
+  "handball_tone1": {
+    "unicode": "1F93E-1F3FB",
+    "unicode_alternates": [],
+    "name": "handball tone 1",
+    "shortname": ":handball_tone1:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤾🏻"
+  },
+  "handball_tone2": {
+    "unicode": "1F93E-1F3FC",
+    "unicode_alternates": [],
+    "name": "handball tone 2",
+    "shortname": ":handball_tone2:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤾🏼"
+  },
+  "handball_tone3": {
+    "unicode": "1F93E-1F3FD",
+    "unicode_alternates": [],
+    "name": "handball tone 3",
+    "shortname": ":handball_tone3:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤾🏽"
+  },
+  "handball_tone4": {
+    "unicode": "1F93E-1F3FE",
+    "unicode_alternates": [],
+    "name": "handball tone 4",
+    "shortname": ":handball_tone4:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤾🏾"
+  },
+  "handball_tone5": {
+    "unicode": "1F93E-1F3FF",
+    "unicode_alternates": [],
+    "name": "handball tone 5",
+    "shortname": ":handball_tone5:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤾🏿"
+  },
+  "handshake": {
+    "unicode": "1F91D",
+    "unicode_alternates": [],
+    "name": "handshake",
+    "shortname": ":handshake:",
+    "category": "people",
+    "aliases": [
+      ":shaking_hands:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤝"
+  },
+  "handshake_tone1": {
+    "unicode": "1F91D-1F3FB",
+    "unicode_alternates": [],
+    "name": "handshake tone 1",
+    "shortname": ":handshake_tone1:",
+    "category": "people",
+    "aliases": [
+      ":shaking_hands_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤝🏻"
+  },
+  "handshake_tone2": {
+    "unicode": "1F91D-1F3FC",
+    "unicode_alternates": [],
+    "name": "handshake tone 2",
+    "shortname": ":handshake_tone2:",
+    "category": "people",
+    "aliases": [
+      ":shaking_hands_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤝🏼"
+  },
+  "handshake_tone3": {
+    "unicode": "1F91D-1F3FD",
+    "unicode_alternates": [],
+    "name": "handshake tone 3",
+    "shortname": ":handshake_tone3:",
+    "category": "people",
+    "aliases": [
+      ":shaking_hands_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤝🏽"
+  },
+  "handshake_tone4": {
+    "unicode": "1F91D-1F3FE",
+    "unicode_alternates": [],
+    "name": "handshake tone 4",
+    "shortname": ":handshake_tone4:",
+    "category": "people",
+    "aliases": [
+      ":shaking_hands_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤝🏾"
+  },
+  "handshake_tone5": {
+    "unicode": "1F91D-1F3FF",
+    "unicode_alternates": [],
+    "name": "handshake tone 5",
+    "shortname": ":handshake_tone5:",
+    "category": "people",
+    "aliases": [
+      ":shaking_hands_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤝🏿"
   },
   "hash": {
     "moji": "#⃣",
@@ -13999,11 +15560,12 @@
     ],
     "name": "number sign",
     "shortname": ":hash:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "symbol"
+      "symbol",
+      "number"
     ]
   },
   "hatched_chick": {
@@ -14018,12 +15580,11 @@
       "baby",
       "chicken",
       "chick",
-      "baby",
       "bird",
-      "chicken",
       "young",
       "woman",
-      "cute"
+      "cute",
+      "animal"
     ],
     "moji": "🐥"
   },
@@ -14040,19 +15601,18 @@
       "chicken",
       "egg",
       "chick",
-      "egg",
       "baby",
       "bird",
-      "chicken",
       "young",
       "woman",
-      "cute"
+      "cute",
+      "animal"
     ],
     "moji": "🐣"
   },
   "head_bandage": {
     "unicode": "1F915",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with head-bandage",
     "shortname": ":head_bandage:",
     "category": "people",
@@ -14060,14 +15620,20 @@
       ":face_with_head_bandage:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "smiley",
+      "health",
+      "sick",
+      "emotion"
+    ],
+    "moji": "🤕"
   },
   "headphones": {
     "unicode": "1F3A7",
     "unicode_alternates": [],
     "name": "headphone",
     "shortname": ":headphones:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14076,12 +15642,12 @@
       "score",
       "headphone",
       "sound",
-      "music",
       "ears",
       "beats",
       "buds",
       "audio",
-      "listen"
+      "listen",
+      "instruments"
     ],
     "moji": "🎧"
   },
@@ -14090,13 +15656,12 @@
     "unicode_alternates": [],
     "name": "hear-no-evil monkey",
     "shortname": ":hear_no_evil:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "animal",
       "monkey",
-      "monkey",
       "ears",
       "hear",
       "sound",
@@ -14112,7 +15677,7 @@
     ],
     "name": "heavy black heart",
     "shortname": ":heart:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [
       "<3"
@@ -14124,7 +15689,6 @@
       "pink",
       "black",
       "heart",
-      "love",
       "passion",
       "romance",
       "intense",
@@ -14132,7 +15696,9 @@
       "death",
       "evil",
       "cold",
-      "valentines"
+      "valentines",
+      "symbol",
+      "parties"
     ]
   },
   "heart_decoration": {
@@ -14140,19 +15706,20 @@
     "unicode_alternates": [],
     "name": "heart decoration",
     "shortname": ":heart_decoration:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "like",
       "love",
-      "purple-square"
+      "purple-square",
+      "symbol"
     ],
     "moji": "💟"
   },
   "heart_exclamation": {
     "unicode": "2763",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "heavy heart exclamation mark ornament",
     "shortname": ":heart_exclamation:",
     "category": "symbols",
@@ -14163,15 +15730,17 @@
     "keywords": [
       "emotion",
       "punctuation",
-      "symbol"
-    ]
+      "symbol",
+      "love"
+    ],
+    "moji": "❣"
   },
   "heart_eyes": {
     "unicode": "1F60D",
     "unicode_alternates": [],
     "name": "smiling face with heart-shaped eyes",
     "shortname": ":heart_eyes:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14185,10 +15754,15 @@
       "smiling",
       "heart",
       "lovestruck",
-      "love",
       "flirt",
       "smile",
-      "heart-shaped"
+      "heart-shaped",
+      "happy",
+      "smiley",
+      "sex",
+      "heart eyes",
+      "emotion",
+      "beautiful"
     ],
     "moji": "😍"
   },
@@ -14197,7 +15771,7 @@
     "unicode_alternates": [],
     "name": "smiling cat face with heart-shaped eyes",
     "shortname": ":heart_eyes_cat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14208,41 +15782,27 @@
       "love",
       "valentines",
       "lovestruck",
-      "love",
-      "heart"
+      "heart",
+      "heart eyes",
+      "cat",
+      "beautiful"
     ],
     "moji": "😻"
   },
-  "heart_tip": {
-    "unicode": "1F394",
-    "unicode_alternates": [],
-    "name": "heart with tip on the left",
-    "shortname": ":heart_tip:",
-    "category": "celebration",
-    "aliases": [
-      ":heart_with_tip_on_the_left:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "affection",
-      "like",
-      "love",
-      "valentines"
-    ]
-  },
   "heartbeat": {
     "unicode": "1F493",
     "unicode_alternates": [],
     "name": "beating heart",
     "shortname": ":heartbeat:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "affection",
       "like",
       "love",
-      "valentines"
+      "valentines",
+      "symbol"
     ],
     "moji": "💓"
   },
@@ -14251,14 +15811,15 @@
     "unicode_alternates": [],
     "name": "growing heart",
     "shortname": ":heartpulse:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "affection",
       "like",
       "love",
-      "valentines"
+      "valentines",
+      "symbol"
     ],
     "moji": "💗"
   },
@@ -14269,12 +15830,15 @@
     ],
     "name": "black heart suit",
     "shortname": ":hearts:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "cards",
-      "poker"
+      "poker",
+      "love",
+      "symbol",
+      "game"
     ],
     "moji": "♥"
   },
@@ -14285,12 +15849,13 @@
     ],
     "name": "heavy check mark",
     "shortname": ":heavy_check_mark:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "nike",
-      "ok"
+      "ok",
+      "symbol"
     ],
     "moji": "✔"
   },
@@ -14299,13 +15864,14 @@
     "unicode_alternates": [],
     "name": "heavy division sign",
     "shortname": ":heavy_division_sign:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "calculation",
       "divide",
-      "math"
+      "math",
+      "symbol"
     ],
     "moji": "âž—"
   },
@@ -14314,7 +15880,7 @@
     "unicode_alternates": [],
     "name": "heavy dollar sign",
     "shortname": ":heavy_dollar_sign:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14322,12 +15888,12 @@
       "money",
       "payment",
       "dollar",
-      "currency",
-      "money",
       "cash",
       "sale",
       "purchase",
-      "value"
+      "value",
+      "math",
+      "symbol"
     ],
     "moji": "💲"
   },
@@ -14336,12 +15902,13 @@
     "unicode_alternates": [],
     "name": "heavy minus sign",
     "shortname": ":heavy_minus_sign:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "calculation",
-      "math"
+      "math",
+      "symbol"
     ],
     "moji": "âž–"
   },
@@ -14352,12 +15919,13 @@
     ],
     "name": "heavy multiplication x",
     "shortname": ":heavy_multiplication_x:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "calculation",
-      "math"
+      "math",
+      "symbol"
     ],
     "moji": "✖"
   },
@@ -14366,12 +15934,13 @@
     "unicode_alternates": [],
     "name": "heavy plus sign",
     "shortname": ":heavy_plus_sign:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "calculation",
-      "math"
+      "math",
+      "symbol"
     ],
     "moji": "âž•"
   },
@@ -14380,7 +15949,7 @@
     "unicode_alternates": [],
     "name": "helicopter",
     "shortname": ":helicopter:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14389,13 +15958,16 @@
       "helicopter",
       "helo",
       "gyro",
-      "gyrocopter"
+      "gyrocopter",
+      "plane",
+      "travel",
+      "fly"
     ],
     "moji": "🚁"
   },
   "helmet_with_cross": {
     "unicode": "26D1",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "helmet with white cross",
     "shortname": ":helmet_with_cross:",
     "category": "people",
@@ -14407,8 +15979,12 @@
       "aid",
       "face",
       "hat",
-      "person"
-    ]
+      "person",
+      "object",
+      "accessories",
+      "job"
+    ],
+    "moji": "⛑"
   },
   "herb": {
     "unicode": "1F33F",
@@ -14427,9 +16003,10 @@
       "weed",
       "herb",
       "spice",
-      "plant",
       "cook",
-      "cooking"
+      "cooking",
+      "nature",
+      "leaf"
     ],
     "moji": "🌿"
   },
@@ -14447,7 +16024,9 @@
       "vegetable",
       "hibiscus",
       "flower",
-      "warm"
+      "warm",
+      "nature",
+      "tropical"
     ],
     "moji": "🌺"
   },
@@ -14456,13 +16035,14 @@
     "unicode_alternates": [],
     "name": "high brightness symbol",
     "shortname": ":high_brightness:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "light",
       "summer",
-      "sun"
+      "sun",
+      "symbol"
     ],
     "moji": "🔆"
   },
@@ -14471,45 +16051,57 @@
     "unicode_alternates": [],
     "name": "high-heeled shoe",
     "shortname": ":high_heel:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fashion",
       "female",
-      "shoes"
+      "shoes",
+      "women",
+      "shoe",
+      "sexy",
+      "accessories",
+      "girls night"
     ],
     "moji": "👠"
   },
   "hockey": {
     "unicode": "1F3D2",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ice hockey stick and puck",
     "shortname": ":hockey:",
     "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "game",
+      "sport",
+      "hockey"
+    ],
+    "moji": "🏒"
   },
   "hole": {
     "unicode": "1F573",
     "unicode_alternates": [],
     "name": "hole",
     "shortname": ":hole:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "pit",
-      "well"
-    ]
+      "well",
+      "object"
+    ],
+    "moji": "🕳"
   },
   "homes": {
     "unicode": "1F3D8",
     "unicode_alternates": [],
     "name": "house buildings",
     "shortname": ":homes:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [
       ":house_buildings:"
     ],
@@ -14521,15 +16113,19 @@
       "mansion",
       "bungalow",
       "ranch",
-      "craftsman"
-    ]
+      "craftsman",
+      "places",
+      "building",
+      "house"
+    ],
+    "moji": "🏘"
   },
   "honey_pot": {
     "unicode": "1F36F",
     "unicode_alternates": [],
     "name": "honey pot",
     "shortname": ":honey_pot:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14537,9 +16133,10 @@
       "sweet",
       "honey",
       "pot",
-      "bees",
       "pooh",
-      "bear"
+      "bear",
+      "food",
+      "vagina"
     ],
     "moji": "🍯"
   },
@@ -14553,7 +16150,8 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "brown"
+      "brown",
+      "wildlife"
     ],
     "moji": "🐴"
   },
@@ -14562,7 +16160,7 @@
     "unicode_alternates": [],
     "name": "horse racing",
     "shortname": ":horse_racing:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14573,13 +16171,16 @@
       "race",
       "racing",
       "jockey",
-      "triple crown"
+      "triple crown",
+      "men",
+      "sport",
+      "horse racing"
     ],
     "moji": "🏇"
   },
   "horse_racing_tone1": {
     "unicode": "1F3C7-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "horse racing tone 1",
     "shortname": ":horse_racing_tone1:",
     "category": "activity",
@@ -14592,11 +16193,12 @@
       "race",
       "jockey",
       "triple crown"
-    ]
+    ],
+    "moji": "🏇🏻"
   },
   "horse_racing_tone2": {
     "unicode": "1F3C7-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "horse racing tone 2",
     "shortname": ":horse_racing_tone2:",
     "category": "activity",
@@ -14609,11 +16211,12 @@
       "race",
       "jockey",
       "triple crown"
-    ]
+    ],
+    "moji": "🏇🏼"
   },
   "horse_racing_tone3": {
     "unicode": "1F3C7-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "horse racing tone 3",
     "shortname": ":horse_racing_tone3:",
     "category": "activity",
@@ -14626,11 +16229,12 @@
       "race",
       "jockey",
       "triple crown"
-    ]
+    ],
+    "moji": "🏇🏽"
   },
   "horse_racing_tone4": {
     "unicode": "1F3C7-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "horse racing tone 4",
     "shortname": ":horse_racing_tone4:",
     "category": "activity",
@@ -14643,11 +16247,12 @@
       "race",
       "jockey",
       "triple crown"
-    ]
+    ],
+    "moji": "🏇🏾"
   },
   "horse_racing_tone5": {
     "unicode": "1F3C7-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "horse racing tone 5",
     "shortname": ":horse_racing_tone5:",
     "category": "activity",
@@ -14660,21 +16265,24 @@
       "race",
       "jockey",
       "triple crown"
-    ]
+    ],
+    "moji": "🏇🏿"
   },
   "hospital": {
     "unicode": "1F3E5",
     "unicode_alternates": [],
     "name": "hospital",
     "shortname": ":hospital:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "building",
       "doctor",
       "health",
-      "surgery"
+      "surgery",
+      "places",
+      "911"
     ],
     "moji": "🏥"
   },
@@ -14683,7 +16291,7 @@
     "unicode_alternates": [],
     "name": "hot pepper",
     "shortname": ":hot_pepper:",
-    "category": "food_drink",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14693,27 +16301,33 @@
       "chili",
       "cayenne",
       "habanero",
-      "jalapeno"
-    ]
+      "jalapeno",
+      "vegetables"
+    ],
+    "moji": "🌶"
   },
   "hotdog": {
     "unicode": "1F32D",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "hot dog",
     "shortname": ":hotdog:",
-    "category": "foods",
+    "category": "food",
     "aliases": [
       ":hot_dog:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "america",
+      "food"
+    ],
+    "moji": "🌭"
   },
   "hotel": {
     "unicode": "1F3E8",
     "unicode_alternates": [],
     "name": "hotel",
     "shortname": ":hotel:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14724,7 +16338,9 @@
       "hotel",
       "motel",
       "holiday inn",
-      "hospital"
+      "hospital",
+      "places",
+      "vacation"
     ],
     "moji": "🏨"
   },
@@ -14735,13 +16351,14 @@
     ],
     "name": "hot springs",
     "shortname": ":hotsprings:",
-    "category": "places",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "bath",
       "relax",
-      "warm"
+      "warm",
+      "symbol"
     ],
     "moji": "♨"
   },
@@ -14758,7 +16375,8 @@
     "keywords": [
       "clock",
       "oldschool",
-      "time"
+      "time",
+      "object"
     ],
     "moji": "⌛"
   },
@@ -14773,7 +16391,8 @@
     "keywords": [
       "countdown",
       "oldschool",
-      "time"
+      "time",
+      "object"
     ],
     "moji": "⏳"
   },
@@ -14782,20 +16401,20 @@
     "unicode_alternates": [],
     "name": "house building",
     "shortname": ":house:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "building",
       "home",
       "house",
-      "home",
       "residence",
       "dwelling",
       "mansion",
       "bungalow",
       "ranch",
-      "craftsman"
+      "craftsman",
+      "places"
     ],
     "moji": "🏠"
   },
@@ -14804,7 +16423,7 @@
     "unicode_alternates": [],
     "name": "derelict house building",
     "shortname": ":house_abandoned:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [
       ":derelict_house_building:"
     ],
@@ -14821,27 +16440,34 @@
       "abandoned",
       "vacant",
       "run down",
-      "shoddy"
-    ]
+      "shoddy",
+      "places",
+      "building",
+      "house"
+    ],
+    "moji": "🏚"
   },
   "house_with_garden": {
     "unicode": "1F3E1",
     "unicode_alternates": [],
     "name": "house with garden",
     "shortname": ":house_with_garden:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "home",
       "nature",
-      "plant"
+      "plant",
+      "places",
+      "building",
+      "house"
     ],
     "moji": "🏡"
   },
   "hugging": {
     "unicode": "1F917",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "hugging face",
     "shortname": ":hugging:",
     "category": "people",
@@ -14849,14 +16475,19 @@
       ":hugging_face:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "smiley",
+      "hug",
+      "thank you"
+    ],
+    "moji": "🤗"
   },
   "hushed": {
     "unicode": "1F62F",
     "unicode_alternates": [],
     "name": "hushed face",
     "shortname": ":hushed:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14865,7 +16496,10 @@
       "quiet",
       "hush",
       "whisper",
-      "silent"
+      "silent",
+      "smiley",
+      "surprised",
+      "wow"
     ],
     "moji": "😯"
   },
@@ -14874,7 +16508,7 @@
     "unicode_alternates": [],
     "name": "ice cream",
     "shortname": ":ice_cream:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14896,7 +16530,7 @@
   },
   "ice_skate": {
     "unicode": "26F8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ice skate",
     "shortname": ":ice_skate:",
     "category": "activity",
@@ -14905,15 +16539,18 @@
     "keywords": [
       "place",
       "sport",
-      "travel"
-    ]
+      "travel",
+      "cold",
+      "ice skating"
+    ],
+    "moji": "⛸"
   },
   "icecream": {
     "unicode": "1F366",
     "unicode_alternates": [],
     "name": "soft ice cream",
     "shortname": ":icecream:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14935,7 +16572,7 @@
   },
   "id": {
     "unicode": "1F194",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "squared id",
     "shortname": ":id:",
     "category": "symbols",
@@ -14947,21 +16584,24 @@
       "identity",
       "symbol",
       "word"
-    ]
+    ],
+    "moji": "🆔"
   },
   "ideograph_advantage": {
     "unicode": "1F250",
     "unicode_alternates": [],
     "name": "circled ideograph advantage",
     "shortname": ":ideograph_advantage:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "chinese",
       "get",
       "kanji",
-      "obtain"
+      "obtain",
+      "japan",
+      "symbol"
     ],
     "moji": "🉐"
   },
@@ -14970,7 +16610,7 @@
     "unicode_alternates": [],
     "name": "imp",
     "shortname": ":imp:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -14979,7 +16619,9 @@
       "evil",
       "horns",
       "cute",
-      "devil"
+      "smiley",
+      "monster",
+      "wth"
     ],
     "moji": "👿"
   },
@@ -14993,7 +16635,9 @@
     "aliases_ascii": [],
     "keywords": [
       "documents",
-      "email"
+      "email",
+      "work",
+      "office"
     ],
     "moji": "📥"
   },
@@ -15007,30 +16651,17 @@
     "aliases_ascii": [],
     "keywords": [
       "email",
-      "inbox"
+      "inbox",
+      "object"
     ],
     "moji": "📨"
   },
-  "info": {
-    "unicode": "1F6C8",
-    "unicode_alternates": [],
-    "name": "circled information source",
-    "shortname": ":info:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":circled_information_source:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "icon"
-    ]
-  },
   "information_desk_person": {
     "unicode": "1F481",
     "unicode_alternates": [],
     "name": "information desk person",
     "shortname": ":information_desk_person:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15045,13 +16676,16 @@
       "sassy",
       "unimpressed",
       "attitude",
-      "snarky"
+      "snarky",
+      "people",
+      "women",
+      "diversity"
     ],
     "moji": "💁"
   },
   "information_desk_person_tone1": {
     "unicode": "1F481-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "information desk person tone 1",
     "shortname": ":information_desk_person_tone1:",
     "category": "people",
@@ -15069,11 +16703,12 @@
       "unimpressed",
       "attitude",
       "snarky"
-    ]
+    ],
+    "moji": "💁🏻"
   },
   "information_desk_person_tone2": {
     "unicode": "1F481-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "information desk person tone 2",
     "shortname": ":information_desk_person_tone2:",
     "category": "people",
@@ -15091,11 +16726,12 @@
       "unimpressed",
       "attitude",
       "snarky"
-    ]
+    ],
+    "moji": "💁🏼"
   },
   "information_desk_person_tone3": {
     "unicode": "1F481-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "information desk person tone 3",
     "shortname": ":information_desk_person_tone3:",
     "category": "people",
@@ -15113,11 +16749,12 @@
       "unimpressed",
       "attitude",
       "snarky"
-    ]
+    ],
+    "moji": "💁🏽"
   },
   "information_desk_person_tone4": {
     "unicode": "1F481-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "information desk person tone 4",
     "shortname": ":information_desk_person_tone4:",
     "category": "people",
@@ -15135,11 +16772,12 @@
       "unimpressed",
       "attitude",
       "snarky"
-    ]
+    ],
+    "moji": "💁🏾"
   },
   "information_desk_person_tone5": {
     "unicode": "1F481-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "information desk person tone 5",
     "shortname": ":information_desk_person_tone5:",
     "category": "people",
@@ -15157,7 +16795,8 @@
       "unimpressed",
       "attitude",
       "snarky"
-    ]
+    ],
+    "moji": "💁🏿"
   },
   "information_source": {
     "unicode": "2139",
@@ -15166,13 +16805,14 @@
     ],
     "name": "information source",
     "shortname": ":information_source:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
       "blue-square",
-      "letter"
+      "letter",
+      "symbol"
     ],
     "moji": "ℹ"
   },
@@ -15181,7 +16821,7 @@
     "unicode_alternates": [],
     "name": "smiling face with halo",
     "shortname": ":innocent:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       "O:-)",
@@ -15202,12 +16842,12 @@
       "angel",
       "face",
       "halo",
-      "halo",
-      "angel",
       "innocent",
       "ring",
       "circle",
-      "heaven"
+      "heaven",
+      "smiley",
+      "emotion"
     ],
     "moji": "😇"
   },
@@ -15218,13 +16858,14 @@
     ],
     "name": "exclamation question mark",
     "shortname": ":interrobang:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "punctuation",
       "surprise",
-      "wat"
+      "wat",
+      "symbol"
     ],
     "moji": "⁉"
   },
@@ -15240,7 +16881,10 @@
       "apple",
       "dial",
       "gadgets",
-      "technology"
+      "technology",
+      "electronics",
+      "phone",
+      "selfie"
     ],
     "moji": "📱"
   },
@@ -15249,7 +16893,7 @@
     "unicode_alternates": [],
     "name": "desert island",
     "shortname": ":island:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [
       ":desert_island:"
     ],
@@ -15257,15 +16901,22 @@
     "keywords": [
       "land",
       "solitude",
-      "alone"
-    ]
+      "alone",
+      "places",
+      "travel",
+      "vacation",
+      "tropical",
+      "beach",
+      "swim"
+    ],
+    "moji": "🏝"
   },
   "izakaya_lantern": {
     "unicode": "1F3EE",
     "unicode_alternates": [],
     "name": "izakaya lantern",
     "shortname": ":izakaya_lantern:",
-    "category": "places",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15277,7 +16928,9 @@
       "alcohol",
       "bar",
       "sake",
-      "restaurant"
+      "restaurant",
+      "object",
+      "japan"
     ],
     "moji": "🏮"
   },
@@ -15286,14 +16939,13 @@
     "unicode_alternates": [],
     "name": "jack-o-lantern",
     "shortname": ":jack_o_lantern:",
-    "category": "objects",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "halloween",
       "jack-o-lantern",
       "pumpkin",
-      "halloween",
       "holiday",
       "carve",
       "autumn",
@@ -15305,7 +16957,8 @@
       "horror",
       "scary",
       "scared",
-      "dead"
+      "dead",
+      "holidays"
     ],
     "moji": "🎃"
   },
@@ -15314,11 +16967,16 @@
     "unicode_alternates": [],
     "name": "silhouette of japan",
     "shortname": ":japan:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "nation"
+      "nation",
+      "places",
+      "travel",
+      "map",
+      "vacation",
+      "tropical"
     ],
     "moji": "🗾"
   },
@@ -15327,7 +16985,7 @@
     "unicode_alternates": [],
     "name": "japanese castle",
     "shortname": ":japanese_castle:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15339,7 +16997,10 @@
       "royalty",
       "fort",
       "fortified",
-      "fortress"
+      "fortress",
+      "places",
+      "travel",
+      "vacation"
     ],
     "moji": "🏯"
   },
@@ -15348,7 +17009,7 @@
     "unicode_alternates": [],
     "name": "japanese goblin",
     "shortname": ":japanese_goblin:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15361,13 +17022,14 @@
       "avian",
       "demon",
       "goblin",
-      "mask",
       "theater",
       "nose",
       "frown",
       "mustache",
       "anger",
-      "frustration"
+      "frustration",
+      "angry",
+      "monster"
     ],
     "moji": "👺"
   },
@@ -15376,7 +17038,7 @@
     "unicode_alternates": [],
     "name": "japanese ogre",
     "shortname": ":japanese_ogre:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15387,7 +17049,6 @@
       "troll",
       "ogre",
       "folklore",
-      "monster",
       "devil",
       "mask",
       "theater",
@@ -15401,7 +17062,7 @@
     "unicode_alternates": [],
     "name": "jeans",
     "shortname": ":jeans:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15419,26 +17080,12 @@
     ],
     "moji": "👖"
   },
-  "jet_up": {
-    "unicode": "1F6E6",
-    "unicode_alternates": [],
-    "name": "up-pointing military airplane",
-    "shortname": ":jet_up:",
-    "category": "travel_places",
-    "aliases": [
-      ":up_pointing_military_airplane:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "jet"
-    ]
-  },
   "joy": {
     "unicode": "1F602",
     "unicode_alternates": [],
     "name": "face with tears of joy",
     "shortname": ":joy:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ":')",
@@ -15450,11 +17097,13 @@
       "haha",
       "happy",
       "tears",
-      "tears",
-      "cry",
       "joy",
-      "happy",
-      "weep"
+      "weep",
+      "silly",
+      "smiley",
+      "laugh",
+      "emotion",
+      "sarcastic"
     ],
     "moji": "😂"
   },
@@ -15463,7 +17112,7 @@
     "unicode_alternates": [],
     "name": "cat face with tears of joy",
     "shortname": ":joy_cat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15472,36 +17121,126 @@
       "haha",
       "happy",
       "tears",
-      "happy",
-      "tears",
       "cry",
-      "joy"
+      "joy",
+      "silly",
+      "laugh",
+      "cat",
+      "sarcastic"
+    ],
+    "moji": "😹"
+  },
+  "joystick": {
+    "unicode": "1F579",
+    "unicode_alternates": [],
+    "name": "joystick",
+    "shortname": ":joystick:",
+    "category": "objects",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [
+      "games",
+      "atari",
+      "controller",
+      "electronics",
+      "game",
+      "boys night"
+    ],
+    "moji": "🕹"
+  },
+  "juggling": {
+    "unicode": "1F939",
+    "unicode_alternates": [],
+    "name": "juggling",
+    "shortname": ":juggling:",
+    "category": "activity",
+    "aliases": [
+      ":juggler:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤹"
+  },
+  "juggling_tone1": {
+    "unicode": "1F939-1F3FB",
+    "unicode_alternates": [],
+    "name": "juggling tone 1",
+    "shortname": ":juggling_tone1:",
+    "category": "activity",
+    "aliases": [
+      ":juggler_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤹🏻"
+  },
+  "juggling_tone2": {
+    "unicode": "1F939-1F3FC",
+    "unicode_alternates": [],
+    "name": "juggling tone 2",
+    "shortname": ":juggling_tone2:",
+    "category": "activity",
+    "aliases": [
+      ":juggler_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤹🏼"
+  },
+  "juggling_tone3": {
+    "unicode": "1F939-1F3FD",
+    "unicode_alternates": [],
+    "name": "juggling tone 3",
+    "shortname": ":juggling_tone3:",
+    "category": "activity",
+    "aliases": [
+      ":juggler_tone3:"
     ],
-    "moji": "😹"
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤹🏽"
   },
-  "joystick": {
-    "unicode": "1F579",
+  "juggling_tone4": {
+    "unicode": "1F939-1F3FE",
     "unicode_alternates": [],
-    "name": "joystick",
-    "shortname": ":joystick:",
-    "category": "objects_symbols",
-    "aliases": [],
+    "name": "juggling tone 4",
+    "shortname": ":juggling_tone4:",
+    "category": "activity",
+    "aliases": [
+      ":juggler_tone4:"
+    ],
     "aliases_ascii": [],
-    "keywords": [
-      "games",
-      "atari",
-      "controller"
-    ]
+    "keywords": [],
+    "moji": "🤹🏾"
+  },
+  "juggling_tone5": {
+    "unicode": "1F939-1F3FF",
+    "unicode_alternates": [],
+    "name": "juggling tone 5",
+    "shortname": ":juggling_tone5:",
+    "category": "activity",
+    "aliases": [
+      ":juggler_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤹🏿"
   },
   "kaaba": {
     "unicode": "1F54B",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "kaaba",
     "shortname": ":kaaba:",
     "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "places",
+      "religion",
+      "building",
+      "condolence"
+    ],
+    "moji": "🕋"
   },
   "key": {
     "unicode": "1F511",
@@ -15514,7 +17253,8 @@
     "keywords": [
       "door",
       "lock",
-      "password"
+      "password",
+      "object"
     ],
     "moji": "🔑"
   },
@@ -15523,7 +17263,7 @@
     "unicode_alternates": [],
     "name": "old key",
     "shortname": ":key2:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":old_key:"
     ],
@@ -15532,79 +17272,34 @@
       "door",
       "lock",
       "password",
-      "skeleton"
-    ]
-  },
-  "keyboard": {
-    "unicode": "1F5AE",
-    "unicode_alternates": [],
-    "name": "wired keyboard",
-    "shortname": ":keyboard:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":wired_keyboard:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "typing",
-      "keys",
-      "input",
-      "device"
-    ]
-  },
-  "keyboard_mouse": {
-    "unicode": "1F5A6",
-    "unicode_alternates": [],
-    "name": "keyboard and mouse",
-    "shortname": ":keyboard_mouse:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":keyboard_and_mouse:"
+      "skeleton",
+      "object"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "computer",
-      "input",
-      "desktop"
-    ]
+    "moji": "🗝"
   },
-  "keyboard_with_jacks": {
-    "unicode": "1F398",
-    "unicode_alternates": [],
-    "name": "musical keyboard with jacks",
-    "shortname": ":keyboard_with_jacks:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":musical_keyboard_with_jacks:"
+  "keyboard": {
+    "unicode": "2328",
+    "unicode_alternates": [
+      "2328-FE0F"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "music",
-      "instrument",
-      "midi"
-    ]
-  },
-  "keycap_ten": {
-    "unicode": "1F51F",
-    "unicode_alternates": [],
-    "name": "keycap ten",
-    "shortname": ":keycap_ten:",
-    "category": "other",
+    "name": "keyboard",
+    "shortname": ":keyboard:",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "10",
-      "blue-square",
-      "numbers"
+      "electronics",
+      "work",
+      "office"
     ],
-    "moji": "🔟"
+    "moji": "⌨"
   },
   "kimono": {
     "unicode": "1F458",
     "unicode_alternates": [],
     "name": "kimono",
     "shortname": ":kimono:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15621,7 +17316,7 @@
     "unicode_alternates": [],
     "name": "kiss mark",
     "shortname": ":kiss:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15630,7 +17325,12 @@
       "like",
       "lips",
       "love",
-      "valentines"
+      "valentines",
+      "women",
+      "sexy",
+      "lip",
+      "beautiful",
+      "girls night"
     ],
     "moji": "💋"
   },
@@ -15652,8 +17352,14 @@
       "love",
       "marriage",
       "valentines",
-      "couple"
-    ]
+      "couple",
+      "people",
+      "gay",
+      "men",
+      "sex",
+      "lgbt"
+    ],
+    "moji": "👨‍❤️‍💋‍👨"
   },
   "kiss_ww": {
     "unicode": "1F469-2764-1F48B-1F469",
@@ -15673,15 +17379,21 @@
       "love",
       "marriage",
       "valentines",
-      "couple"
-    ]
+      "couple",
+      "people",
+      "women",
+      "sex",
+      "lgbt",
+      "lesbian"
+    ],
+    "moji": "👩‍❤️‍💋‍👩"
   },
   "kissing": {
     "unicode": "1F617",
     "unicode_alternates": [],
     "name": "kissing face",
     "shortname": ":kissing:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15695,7 +17407,9 @@
       "kiss",
       "pucker",
       "lips",
-      "smooch"
+      "smooch",
+      "smiley",
+      "sexy"
     ],
     "moji": "😗"
   },
@@ -15704,7 +17418,7 @@
     "unicode_alternates": [],
     "name": "kissing cat face with closed eyes",
     "shortname": ":kissing_cat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15714,7 +17428,8 @@
       "kiss",
       "puckered",
       "heart",
-      "love"
+      "love",
+      "cat"
     ],
     "moji": "😽"
   },
@@ -15723,7 +17438,7 @@
     "unicode_alternates": [],
     "name": "kissing face with closed eyes",
     "shortname": ":kissing_closed_eyes:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15738,8 +17453,9 @@
       "passion",
       "puckered",
       "heart",
-      "love",
-      "smooch"
+      "smooch",
+      "smiley",
+      "sexy"
     ],
     "moji": "😚"
   },
@@ -15748,7 +17464,7 @@
     "unicode_alternates": [],
     "name": "face throwing a kiss",
     "shortname": ":kissing_heart:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ":*",
@@ -15766,8 +17482,9 @@
       "love",
       "lips",
       "like",
-      "love",
-      "valentines"
+      "valentines",
+      "smiley",
+      "sexy"
     ],
     "moji": "😘"
   },
@@ -15776,7 +17493,7 @@
     "unicode_alternates": [],
     "name": "kissing face with smiling eyes",
     "shortname": ":kissing_smiling_eyes:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15789,10 +17506,25 @@
       "smile",
       "pucker",
       "lips",
-      "smooch"
+      "smooch",
+      "smiley",
+      "sexy"
     ],
     "moji": "😙"
   },
+  "kiwi": {
+    "unicode": "1F95D",
+    "unicode_alternates": [],
+    "name": "kiwifruit",
+    "shortname": ":kiwi:",
+    "category": "food",
+    "aliases": [
+      ":kiwifruit:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥝"
+  },
   "knife": {
     "unicode": "1F52A",
     "unicode_alternates": [],
@@ -15801,7 +17533,10 @@
     "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": [],
+    "keywords": [
+      "object",
+      "weapon"
+    ],
     "moji": "🔪"
   },
   "koala": {
@@ -15814,7 +17549,8 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "nature"
+      "nature",
+      "wildlife"
     ],
     "moji": "🐨"
   },
@@ -15823,7 +17559,7 @@
     "unicode_alternates": [],
     "name": "squared katakana koko",
     "shortname": ":koko:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -15831,7 +17567,8 @@
       "destination",
       "here",
       "japanese",
-      "katakana"
+      "katakana",
+      "symbol"
     ],
     "moji": "🈁"
   },
@@ -15840,22 +17577,28 @@
     "unicode_alternates": [],
     "name": "label",
     "shortname": ":label:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "tag"
-    ]
+      "tag",
+      "object"
+    ],
+    "moji": "🏷"
   },
   "large_blue_circle": {
     "unicode": "1F535",
     "unicode_alternates": [],
     "name": "large blue circle",
     "shortname": ":large_blue_circle:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": [],
+    "keywords": [
+      "shapes",
+      "symbol",
+      "circle"
+    ],
     "moji": "🔵"
   },
   "large_blue_diamond": {
@@ -15863,11 +17606,13 @@
     "unicode_alternates": [],
     "name": "large blue diamond",
     "shortname": ":large_blue_diamond:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol"
     ],
     "moji": "🔷"
   },
@@ -15876,11 +17621,13 @@
     "unicode_alternates": [],
     "name": "large orange diamond",
     "shortname": ":large_orange_diamond:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol"
     ],
     "moji": "🔶"
   },
@@ -15900,7 +17647,8 @@
       "sky",
       "night",
       "cheese",
-      "phase"
+      "phase",
+      "space"
     ],
     "moji": "🌗"
   },
@@ -15922,7 +17670,8 @@
       "sky",
       "night",
       "cheese",
-      "phase"
+      "phase",
+      "space"
     ],
     "moji": "🌜"
   },
@@ -15931,7 +17680,7 @@
     "unicode_alternates": [],
     "name": "smiling face with open mouth and tightly-closed ey",
     "shortname": ":laughing:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [
       ":satisfied:"
     ],
@@ -15947,7 +17696,9 @@
       "lol",
       "smiling",
       "laughing",
-      "laugh"
+      "laugh",
+      "smiley",
+      "emotion"
     ],
     "moji": "😆"
   },
@@ -15984,16 +17735,97 @@
     "aliases_ascii": [],
     "keywords": [
       "notes",
-      "paper"
+      "paper",
+      "object",
+      "office",
+      "write"
     ],
     "moji": "📒"
   },
+  "left_facing_fist": {
+    "unicode": "1F91B",
+    "unicode_alternates": [],
+    "name": "left-facing fist",
+    "shortname": ":left_facing_fist:",
+    "category": "people",
+    "aliases": [
+      ":left_fist:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤛"
+  },
+  "left_facing_fist_tone1": {
+    "unicode": "1F91B-1F3FB",
+    "unicode_alternates": [],
+    "name": "left facing fist tone 1",
+    "shortname": ":left_facing_fist_tone1:",
+    "category": "people",
+    "aliases": [
+      ":left_fist_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤛🏻"
+  },
+  "left_facing_fist_tone2": {
+    "unicode": "1F91B-1F3FC",
+    "unicode_alternates": [],
+    "name": "left facing fist tone 2",
+    "shortname": ":left_facing_fist_tone2:",
+    "category": "people",
+    "aliases": [
+      ":left_fist_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤛🏼"
+  },
+  "left_facing_fist_tone3": {
+    "unicode": "1F91B-1F3FD",
+    "unicode_alternates": [],
+    "name": "left facing fist tone 3",
+    "shortname": ":left_facing_fist_tone3:",
+    "category": "people",
+    "aliases": [
+      ":left_fist_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤛🏽"
+  },
+  "left_facing_fist_tone4": {
+    "unicode": "1F91B-1F3FE",
+    "unicode_alternates": [],
+    "name": "left facing fist tone 4",
+    "shortname": ":left_facing_fist_tone4:",
+    "category": "people",
+    "aliases": [
+      ":left_fist_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤛🏾"
+  },
+  "left_facing_fist_tone5": {
+    "unicode": "1F91B-1F3FF",
+    "unicode_alternates": [],
+    "name": "left facing fist tone 5",
+    "shortname": ":left_facing_fist_tone5:",
+    "category": "people",
+    "aliases": [
+      ":left_fist_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤛🏿"
+  },
   "left_luggage": {
     "unicode": "1F6C5",
     "unicode_alternates": [],
     "name": "left luggage",
     "shortname": ":left_luggage:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16002,26 +17834,10 @@
       "bag",
       "baggage",
       "luggage",
-      "travel"
+      "symbol"
     ],
     "moji": "🛅"
   },
-  "left_receiver": {
-    "unicode": "1F57B",
-    "unicode_alternates": [],
-    "name": "left hand telephone receiver",
-    "shortname": ":left_receiver:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":left_hand_telephone_receiver:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "communication",
-      "dial",
-      "technology"
-    ]
-  },
   "left_right_arrow": {
     "unicode": "2194",
     "unicode_alternates": [
@@ -16029,11 +17845,13 @@
     ],
     "name": "left right arrow",
     "shortname": ":left_right_arrow:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "arrow",
+      "symbol"
     ],
     "moji": "↔"
   },
@@ -16044,10 +17862,13 @@
     ],
     "name": "leftwards arrow with hook",
     "shortname": ":leftwards_arrow_with_hook:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": [],
+    "keywords": [
+      "arrow",
+      "symbol"
+    ],
     "moji": "↩"
   },
   "lemon": {
@@ -16055,7 +17876,7 @@
     "unicode_alternates": [],
     "name": "lemon",
     "shortname": ":lemon:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16063,7 +17884,8 @@
       "nature",
       "lemon",
       "yellow",
-      "citrus"
+      "citrus",
+      "food"
     ],
     "moji": "🍋"
   },
@@ -16074,7 +17896,7 @@
     ],
     "name": "leo",
     "shortname": ":leo:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16087,9 +17909,8 @@
       "zodiac",
       "sign",
       "purple-square",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♌"
   },
@@ -16108,7 +17929,9 @@
       "cat",
       "spot",
       "spotted",
-      "sexy"
+      "sexy",
+      "wildlife",
+      "roar"
     ],
     "moji": "🐆"
   },
@@ -16117,27 +17940,31 @@
     "unicode_alternates": [],
     "name": "level slider",
     "shortname": ":level_slider:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "controls"
-    ]
+    ],
+    "moji": "🎚"
   },
   "levitate": {
     "unicode": "1F574",
     "unicode_alternates": [],
     "name": "man in business suit levitating",
     "shortname": ":levitate:",
-    "category": "people",
+    "category": "activity",
     "aliases": [
       ":man_in_business_suit_levitating:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "hover",
-      "exclamation"
-    ]
+      "exclamation",
+      "men",
+      "job"
+    ],
+    "moji": "🕴"
   },
   "libra": {
     "unicode": "264E",
@@ -16146,7 +17973,7 @@
     ],
     "name": "libra",
     "shortname": ":libra:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16159,9 +17986,8 @@
       "zodiac",
       "sign",
       "purple-square",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♎"
   },
@@ -16179,12 +18005,20 @@
       "bench",
       "press",
       "squats",
-      "deadlift"
-    ]
+      "deadlift",
+      "men",
+      "workout",
+      "flex",
+      "sport",
+      "weight lifting",
+      "win",
+      "diversity"
+    ],
+    "moji": "🏋"
   },
   "lifter_tone1": {
     "unicode": "1F3CB-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "weight lifter tone 1",
     "shortname": ":lifter_tone1:",
     "category": "activity",
@@ -16197,11 +18031,12 @@
       "press",
       "squats",
       "deadlift"
-    ]
+    ],
+    "moji": "🏋🏻"
   },
   "lifter_tone2": {
     "unicode": "1F3CB-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "weight lifter tone 2",
     "shortname": ":lifter_tone2:",
     "category": "activity",
@@ -16214,11 +18049,12 @@
       "press",
       "squats",
       "deadlift"
-    ]
+    ],
+    "moji": "🏋🏼"
   },
   "lifter_tone3": {
     "unicode": "1F3CB-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "weight lifter tone 3",
     "shortname": ":lifter_tone3:",
     "category": "activity",
@@ -16231,11 +18067,12 @@
       "press",
       "squats",
       "deadlift"
-    ]
+    ],
+    "moji": "🏋🏽"
   },
   "lifter_tone4": {
     "unicode": "1F3CB-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "weight lifter tone 4",
     "shortname": ":lifter_tone4:",
     "category": "activity",
@@ -16248,11 +18085,12 @@
       "press",
       "squats",
       "deadlift"
-    ]
+    ],
+    "moji": "🏋🏾"
   },
   "lifter_tone5": {
     "unicode": "1F3CB-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "weight lifter tone 5",
     "shortname": ":lifter_tone5:",
     "category": "activity",
@@ -16265,28 +18103,15 @@
       "press",
       "squats",
       "deadlift"
-    ]
-  },
-  "light_check_mark": {
-    "unicode": "1F5F8",
-    "unicode_alternates": [],
-    "name": "light check mark",
-    "shortname": ":light_check_mark:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":light_mark:"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "vote"
-    ]
+    "moji": "🏋🏿"
   },
   "light_rail": {
     "unicode": "1F688",
     "unicode_alternates": [],
     "name": "light rail",
     "shortname": ":light_rail:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16294,7 +18119,8 @@
       "vehicle",
       "train",
       "rail",
-      "light"
+      "light",
+      "travel"
     ],
     "moji": "🚈"
   },
@@ -16303,18 +18129,20 @@
     "unicode_alternates": [],
     "name": "link symbol",
     "shortname": ":link:",
-    "category": "other",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "rings",
-      "url"
+      "url",
+      "symbol",
+      "office"
     ],
     "moji": "🔗"
   },
   "lion_face": {
     "unicode": "1F981",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "lion face",
     "shortname": ":lion_face:",
     "category": "nature",
@@ -16322,50 +18150,62 @@
       ":lion:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "wildlife",
+      "roar",
+      "cat",
+      "animal"
+    ],
+    "moji": "🦁"
   },
   "lips": {
     "unicode": "1F444",
     "unicode_alternates": [],
     "name": "mouth",
     "shortname": ":lips:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "kiss",
-      "mouth"
+      "mouth",
+      "women",
+      "body",
+      "sexy",
+      "lip"
     ],
     "moji": "👄"
   },
-  "lips2": {
-    "unicode": "1F5E2",
-    "unicode_alternates": [],
-    "name": "lips",
-    "shortname": ":lips2:",
-    "category": "people",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "kiss",
-      "mouth"
-    ]
-  },
   "lipstick": {
     "unicode": "1F484",
     "unicode_alternates": [],
     "name": "lipstick",
     "shortname": ":lipstick:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fashion",
       "female",
-      "girl"
+      "girl",
+      "object",
+      "women",
+      "sexy",
+      "lip"
     ],
     "moji": "💄"
   },
+  "lizard": {
+    "unicode": "1F98E",
+    "unicode_alternates": [],
+    "name": "lizard",
+    "shortname": ":lizard:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦎"
+  },
   "lock": {
     "unicode": "1F512",
     "unicode_alternates": [],
@@ -16376,7 +18216,9 @@
     "aliases_ascii": [],
     "keywords": [
       "password",
-      "security"
+      "security",
+      "object",
+      "lock"
     ],
     "moji": "🔒"
   },
@@ -16390,7 +18232,9 @@
     "aliases_ascii": [],
     "keywords": [
       "secret",
-      "security"
+      "security",
+      "object",
+      "lock"
     ],
     "moji": "🔏"
   },
@@ -16399,7 +18243,7 @@
     "unicode_alternates": [],
     "name": "lollipop",
     "shortname": ":lollipop:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16410,9 +18254,8 @@
       "lollipop",
       "stick",
       "lick",
-      "sweet",
       "sugar",
-      "candy"
+      "halloween"
     ],
     "moji": "🍭"
   },
@@ -16421,11 +18264,12 @@
     "unicode_alternates": [],
     "name": "double curly loop",
     "shortname": ":loop:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "curly"
+      "curly",
+      "symbol"
     ],
     "moji": "âž¿"
   },
@@ -16434,10 +18278,13 @@
     "unicode_alternates": [],
     "name": "speaker with three sound waves",
     "shortname": ":loud_sound:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": [],
+    "keywords": [
+      "alarm",
+      "symbol"
+    ],
     "moji": "🔊"
   },
   "loudspeaker": {
@@ -16445,12 +18292,15 @@
     "unicode_alternates": [],
     "name": "public address loudspeaker",
     "shortname": ":loudspeaker:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "sound",
-      "volume"
+      "volume",
+      "object",
+      "alarm",
+      "symbol"
     ],
     "moji": "📢"
   },
@@ -16459,7 +18309,7 @@
     "unicode_alternates": [],
     "name": "love hotel",
     "shortname": ":love_hotel:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16468,7 +18318,6 @@
       "like",
       "love",
       "hotel",
-      "love",
       "sex",
       "romance",
       "leisure",
@@ -16476,7 +18325,9 @@
       "prostitution",
       "hospital",
       "birth",
-      "happy"
+      "happy",
+      "places",
+      "building"
     ],
     "moji": "🏩"
   },
@@ -16485,7 +18336,7 @@
     "unicode_alternates": [],
     "name": "love letter",
     "shortname": ":love_letter:",
-    "category": "emoticons",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16497,7 +18348,8 @@
       "love",
       "letter",
       "kiss",
-      "heart"
+      "heart",
+      "object"
     ],
     "moji": "💌"
   },
@@ -16506,15 +18358,29 @@
     "unicode_alternates": [],
     "name": "low brightness symbol",
     "shortname": ":low_brightness:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "summer",
-      "sun"
+      "sun",
+      "symbol"
     ],
     "moji": "🔅"
   },
+  "lying_face": {
+    "unicode": "1F925",
+    "unicode_alternates": [],
+    "name": "lying face",
+    "shortname": ":lying_face:",
+    "category": "people",
+    "aliases": [
+      ":liar:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤥"
+  },
   "m": {
     "unicode": "24C2",
     "unicode_alternates": [
@@ -16522,13 +18388,14 @@
     ],
     "name": "circled latin capital letter m",
     "shortname": ":m:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
       "blue-circle",
-      "letter"
+      "letter",
+      "symbol"
     ],
     "moji": "â“‚"
   },
@@ -16546,7 +18413,8 @@
       "detective",
       "investigator",
       "detail",
-      "details"
+      "details",
+      "object"
     ],
     "moji": "🔍"
   },
@@ -16564,7 +18432,8 @@
       "detective",
       "investigator",
       "detail",
-      "details"
+      "details",
+      "object"
     ],
     "moji": "🔎"
   },
@@ -16575,13 +18444,15 @@
     ],
     "name": "mahjong tile red dragon",
     "shortname": ":mahjong:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "chinese",
       "game",
-      "kanji"
+      "kanji",
+      "object",
+      "symbol"
     ],
     "moji": "🀄"
   },
@@ -16596,7 +18467,8 @@
     "keywords": [
       "communication",
       "email",
-      "inbox"
+      "inbox",
+      "object"
     ],
     "moji": "📫"
   },
@@ -16611,7 +18483,9 @@
     "keywords": [
       "communication",
       "email",
-      "inbox"
+      "inbox",
+      "object",
+      "office"
     ],
     "moji": "📪"
   },
@@ -16626,7 +18500,8 @@
     "keywords": [
       "communication",
       "email",
-      "inbox"
+      "inbox",
+      "object"
     ],
     "moji": "📬"
   },
@@ -16640,7 +18515,8 @@
     "aliases_ascii": [],
     "keywords": [
       "email",
-      "inbox"
+      "inbox",
+      "object"
     ],
     "moji": "📭"
   },
@@ -16649,7 +18525,7 @@
     "unicode_alternates": [],
     "name": "man",
     "shortname": ":man:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16657,13 +18533,173 @@
       "dad",
       "father",
       "guy",
-      "mustashe"
+      "mustashe",
+      "people",
+      "men",
+      "sex",
+      "diversity",
+      "selfie",
+      "boys night"
     ],
     "moji": "👨"
   },
+  "man_dancing": {
+    "unicode": "1F57A",
+    "unicode_alternates": [],
+    "name": "man dancing",
+    "shortname": ":man_dancing:",
+    "category": "people",
+    "aliases": [
+      ":male_dancer:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🕺"
+  },
+  "man_dancing_tone1": {
+    "unicode": "1F57A-1F3FB",
+    "unicode_alternates": [],
+    "name": "man dancing tone 1",
+    "shortname": ":man_dancing_tone1:",
+    "category": "activity",
+    "aliases": [
+      ":male_dancer_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🕺🏻"
+  },
+  "man_dancing_tone2": {
+    "unicode": "1F57A-1F3FC",
+    "unicode_alternates": [],
+    "name": "man dancing tone 2",
+    "shortname": ":man_dancing_tone2:",
+    "category": "activity",
+    "aliases": [
+      ":male_dancer_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🕺🏼"
+  },
+  "man_dancing_tone3": {
+    "unicode": "1F57A-1F3FD",
+    "unicode_alternates": [],
+    "name": "man dancing tone 3",
+    "shortname": ":man_dancing_tone3:",
+    "category": "activity",
+    "aliases": [
+      ":male_dancer_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🕺🏽"
+  },
+  "man_dancing_tone4": {
+    "unicode": "1F57A-1F3FE",
+    "unicode_alternates": [],
+    "name": "man dancing tone 4",
+    "shortname": ":man_dancing_tone4:",
+    "category": "activity",
+    "aliases": [
+      ":male_dancer_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🕺🏾"
+  },
+  "man_dancing_tone5": {
+    "unicode": "1F57A-1F3FF",
+    "unicode_alternates": [],
+    "name": "man dancing tone 5",
+    "shortname": ":man_dancing_tone5:",
+    "category": "activity",
+    "aliases": [
+      ":male_dancer_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🕺🏿"
+  },
+  "man_in_tuxedo": {
+    "unicode": "1F935",
+    "unicode_alternates": [],
+    "name": "man in tuxedo",
+    "shortname": ":man_in_tuxedo:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤵"
+  },
+  "man_in_tuxedo_tone1": {
+    "unicode": "1F935-1F3FB",
+    "unicode_alternates": [],
+    "name": "man in tuxedo tone 1",
+    "shortname": ":man_in_tuxedo_tone1:",
+    "category": "people",
+    "aliases": [
+      ":tuxedo_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤵🏻"
+  },
+  "man_in_tuxedo_tone2": {
+    "unicode": "1F935-1F3FC",
+    "unicode_alternates": [],
+    "name": "man in tuxedo tone 2",
+    "shortname": ":man_in_tuxedo_tone2:",
+    "category": "people",
+    "aliases": [
+      ":tuxedo_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤵🏼"
+  },
+  "man_in_tuxedo_tone3": {
+    "unicode": "1F935-1F3FD",
+    "unicode_alternates": [],
+    "name": "man in tuxedo tone 3",
+    "shortname": ":man_in_tuxedo_tone3:",
+    "category": "people",
+    "aliases": [
+      ":tuxedo_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤵🏽"
+  },
+  "man_in_tuxedo_tone4": {
+    "unicode": "1F935-1F3FE",
+    "unicode_alternates": [],
+    "name": "man in tuxedo tone 4",
+    "shortname": ":man_in_tuxedo_tone4:",
+    "category": "people",
+    "aliases": [
+      ":tuxedo_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤵🏾"
+  },
+  "man_in_tuxedo_tone5": {
+    "unicode": "1F935-1F3FF",
+    "unicode_alternates": [],
+    "name": "man in tuxedo tone 5",
+    "shortname": ":man_in_tuxedo_tone5:",
+    "category": "people",
+    "aliases": [
+      ":tuxedo_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤵🏿"
+  },
   "man_tone1": {
     "unicode": "1F468-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man tone 1",
     "shortname": ":man_tone1:",
     "category": "people",
@@ -16675,11 +18711,12 @@
       "father",
       "guy",
       "mustache"
-    ]
+    ],
+    "moji": "👨🏻"
   },
   "man_tone2": {
     "unicode": "1F468-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man tone 2",
     "shortname": ":man_tone2:",
     "category": "people",
@@ -16691,11 +18728,12 @@
       "father",
       "guy",
       "mustache"
-    ]
+    ],
+    "moji": "👨🏼"
   },
   "man_tone3": {
     "unicode": "1F468-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man tone 3",
     "shortname": ":man_tone3:",
     "category": "people",
@@ -16707,11 +18745,12 @@
       "father",
       "guy",
       "mustache"
-    ]
+    ],
+    "moji": "👨🏽"
   },
   "man_tone4": {
     "unicode": "1F468-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man tone 4",
     "shortname": ":man_tone4:",
     "category": "people",
@@ -16723,11 +18762,12 @@
       "father",
       "guy",
       "mustache"
-    ]
+    ],
+    "moji": "👨🏾"
   },
   "man_tone5": {
     "unicode": "1F468-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man tone 5",
     "shortname": ":man_tone5:",
     "category": "people",
@@ -16739,14 +18779,15 @@
       "father",
       "guy",
       "mustache"
-    ]
+    ],
+    "moji": "👨🏿"
   },
   "man_with_gua_pi_mao": {
     "unicode": "1F472",
     "unicode_alternates": [],
     "name": "man with gua pi mao",
     "shortname": ":man_with_gua_pi_mao:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16755,13 +18796,17 @@
       "skullcap",
       "chinese",
       "asian",
-      "qing"
+      "qing",
+      "people",
+      "hat",
+      "men",
+      "diversity"
     ],
     "moji": "👲"
   },
   "man_with_gua_pi_mao_tone1": {
     "unicode": "1F472-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with gua pi mao tone 1",
     "shortname": ":man_with_gua_pi_mao_tone1:",
     "category": "people",
@@ -16774,11 +18819,12 @@
       "chinese",
       "asian",
       "qing"
-    ]
+    ],
+    "moji": "👲🏻"
   },
   "man_with_gua_pi_mao_tone2": {
     "unicode": "1F472-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with gua pi mao tone 2",
     "shortname": ":man_with_gua_pi_mao_tone2:",
     "category": "people",
@@ -16791,11 +18837,12 @@
       "chinese",
       "asian",
       "qing"
-    ]
+    ],
+    "moji": "👲🏼"
   },
   "man_with_gua_pi_mao_tone3": {
     "unicode": "1F472-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with gua pi mao tone 3",
     "shortname": ":man_with_gua_pi_mao_tone3:",
     "category": "people",
@@ -16808,11 +18855,12 @@
       "chinese",
       "asian",
       "qing"
-    ]
+    ],
+    "moji": "👲🏽"
   },
   "man_with_gua_pi_mao_tone4": {
     "unicode": "1F472-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with gua pi mao tone 4",
     "shortname": ":man_with_gua_pi_mao_tone4:",
     "category": "people",
@@ -16825,11 +18873,12 @@
       "chinese",
       "asian",
       "qing"
-    ]
+    ],
+    "moji": "👲🏾"
   },
   "man_with_gua_pi_mao_tone5": {
     "unicode": "1F472-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with gua pi mao tone 5",
     "shortname": ":man_with_gua_pi_mao_tone5:",
     "category": "people",
@@ -16842,14 +18891,15 @@
       "chinese",
       "asian",
       "qing"
-    ]
+    ],
+    "moji": "👲🏿"
   },
   "man_with_turban": {
     "unicode": "1F473",
     "unicode_alternates": [],
     "name": "man with turban",
     "shortname": ":man_with_turban:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -16862,13 +18912,16 @@
       "indian",
       "mummy",
       "wisdom",
-      "peace"
+      "peace",
+      "people",
+      "hat",
+      "diversity"
     ],
     "moji": "👳"
   },
   "man_with_turban_tone1": {
     "unicode": "1F473-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with turban tone 1",
     "shortname": ":man_with_turban_tone1:",
     "category": "people",
@@ -16884,11 +18937,12 @@
       "mummy",
       "wisdom",
       "peace"
-    ]
+    ],
+    "moji": "👳🏻"
   },
   "man_with_turban_tone2": {
     "unicode": "1F473-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with turban tone 2",
     "shortname": ":man_with_turban_tone2:",
     "category": "people",
@@ -16904,11 +18958,12 @@
       "mummy",
       "wisdom",
       "peace"
-    ]
+    ],
+    "moji": "👳🏼"
   },
   "man_with_turban_tone3": {
     "unicode": "1F473-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with turban tone 3",
     "shortname": ":man_with_turban_tone3:",
     "category": "people",
@@ -16924,11 +18979,12 @@
       "mummy",
       "wisdom",
       "peace"
-    ]
+    ],
+    "moji": "👳🏽"
   },
   "man_with_turban_tone4": {
     "unicode": "1F473-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with turban tone 4",
     "shortname": ":man_with_turban_tone4:",
     "category": "people",
@@ -16944,11 +19000,12 @@
       "mummy",
       "wisdom",
       "peace"
-    ]
+    ],
+    "moji": "👳🏾"
   },
   "man_with_turban_tone5": {
     "unicode": "1F473-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "man with turban tone 5",
     "shortname": ":man_with_turban_tone5:",
     "category": "people",
@@ -16964,19 +19021,22 @@
       "mummy",
       "wisdom",
       "peace"
-    ]
+    ],
+    "moji": "👳🏿"
   },
   "mans_shoe": {
     "unicode": "1F45E",
     "unicode_alternates": [],
     "name": "mans shoe",
     "shortname": ":mans_shoe:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fashion",
-      "male"
+      "male",
+      "shoe",
+      "accessories"
     ],
     "moji": "👞"
   },
@@ -16985,7 +19045,7 @@
     "unicode_alternates": [],
     "name": "world map",
     "shortname": ":map:",
-    "category": "travel_places",
+    "category": "objects",
     "aliases": [
       ":world_map:"
     ],
@@ -16993,8 +19053,12 @@
     "keywords": [
       "atlas",
       "earth",
-      "cartography"
-    ]
+      "cartography",
+      "travel",
+      "map",
+      "vacation"
+    ],
+    "moji": "🗺"
   },
   "maple_leaf": {
     "unicode": "1F341",
@@ -17012,28 +19076,42 @@
       "maple",
       "leaf",
       "syrup",
-      "canada",
       "tree"
     ],
     "moji": "🍁"
   },
+  "martial_arts_uniform": {
+    "unicode": "1F94B",
+    "unicode_alternates": [],
+    "name": "martial arts uniform",
+    "shortname": ":martial_arts_uniform:",
+    "category": "activity",
+    "aliases": [
+      ":karate_uniform:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥋"
+  },
   "mask": {
     "unicode": "1F637",
     "unicode_alternates": [],
     "name": "face with medical mask",
     "shortname": ":mask:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "face",
       "ill",
       "sick",
-      "sick",
       "virus",
       "flu",
       "medical",
-      "mask"
+      "mask",
+      "smiley",
+      "dead",
+      "health"
     ],
     "moji": "😷"
   },
@@ -17042,19 +19120,22 @@
     "unicode_alternates": [],
     "name": "face massage",
     "shortname": ":massage:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "female",
       "girl",
-      "woman"
+      "woman",
+      "people",
+      "women",
+      "diversity"
     ],
     "moji": "💆"
   },
   "massage_tone1": {
     "unicode": "1F486-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face massage tone 1",
     "shortname": ":massage_tone1:",
     "category": "people",
@@ -17064,11 +19145,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💆🏻"
   },
   "massage_tone2": {
     "unicode": "1F486-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face massage tone 2",
     "shortname": ":massage_tone2:",
     "category": "people",
@@ -17078,11 +19160,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💆🏼"
   },
   "massage_tone3": {
     "unicode": "1F486-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face massage tone 3",
     "shortname": ":massage_tone3:",
     "category": "people",
@@ -17092,11 +19175,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💆🏽"
   },
   "massage_tone4": {
     "unicode": "1F486-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face massage tone 4",
     "shortname": ":massage_tone4:",
     "category": "people",
@@ -17106,11 +19190,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💆🏾"
   },
   "massage_tone5": {
     "unicode": "1F486-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face massage tone 5",
     "shortname": ":massage_tone5:",
     "category": "people",
@@ -17120,14 +19205,15 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "💆🏿"
   },
   "meat_on_bone": {
     "unicode": "1F356",
     "unicode_alternates": [],
     "name": "meat on bone",
     "shortname": ":meat_on_bone:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17160,21 +19246,27 @@
       "first",
       "show",
       "reward",
-      "achievement"
-    ]
+      "achievement",
+      "object",
+      "sport",
+      "perfect"
+    ],
+    "moji": "🏅"
   },
   "mega": {
     "unicode": "1F4E3",
     "unicode_alternates": [],
     "name": "cheering megaphone",
     "shortname": ":mega:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "sound",
       "speaker",
-      "volume"
+      "volume",
+      "object",
+      "sport"
     ],
     "moji": "📣"
   },
@@ -17183,7 +19275,7 @@
     "unicode_alternates": [],
     "name": "melon",
     "shortname": ":melon:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17192,26 +19284,34 @@
       "nature",
       "melon",
       "cantaloupe",
-      "honeydew"
+      "honeydew",
+      "boobs"
     ],
     "moji": "🍈"
   },
   "menorah": {
     "unicode": "1F54E",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "menorah with nine branches",
     "shortname": ":menorah:",
     "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "religion",
+      "object",
+      "jew",
+      "symbol",
+      "holidays"
+    ],
+    "moji": "🕎"
   },
   "mens": {
     "unicode": "1F6B9",
     "unicode_alternates": [],
     "name": "mens symbol",
     "shortname": ":mens:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17220,17 +19320,17 @@
       "wc",
       "men",
       "bathroom",
-      "restroom",
       "sign",
       "boy",
       "male",
-      "avatar"
+      "avatar",
+      "symbol"
     ],
     "moji": "🚹"
   },
   "metal": {
     "unicode": "1F918",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sign of the horns",
     "shortname": ":metal:",
     "category": "people",
@@ -17242,12 +19342,19 @@
       "band",
       "concert",
       "fingers",
-      "rocknroll"
-    ]
+      "rocknroll",
+      "body",
+      "hands",
+      "hi",
+      "diversity",
+      "boys night",
+      "parties"
+    ],
+    "moji": "🤘"
   },
   "metal_tone1": {
     "unicode": "1F918-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sign of the horns tone 1",
     "shortname": ":metal_tone1:",
     "category": "people",
@@ -17260,11 +19367,12 @@
       "concert",
       "fingers",
       "rocknroll"
-    ]
+    ],
+    "moji": "🤘🏻"
   },
   "metal_tone2": {
     "unicode": "1F918-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sign of the horns tone 2",
     "shortname": ":metal_tone2:",
     "category": "people",
@@ -17277,11 +19385,12 @@
       "concert",
       "fingers",
       "rocknroll"
-    ]
+    ],
+    "moji": "🤘🏼"
   },
   "metal_tone3": {
     "unicode": "1F918-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sign of the horns tone 3",
     "shortname": ":metal_tone3:",
     "category": "people",
@@ -17294,11 +19403,12 @@
       "concert",
       "fingers",
       "rocknroll"
-    ]
+    ],
+    "moji": "🤘🏽"
   },
   "metal_tone4": {
     "unicode": "1F918-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sign of the horns tone 4",
     "shortname": ":metal_tone4:",
     "category": "people",
@@ -17311,11 +19421,12 @@
       "concert",
       "fingers",
       "rocknroll"
-    ]
+    ],
+    "moji": "🤘🏾"
   },
   "metal_tone5": {
     "unicode": "1F918-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sign of the horns tone 5",
     "shortname": ":metal_tone5:",
     "category": "people",
@@ -17328,14 +19439,15 @@
       "concert",
       "fingers",
       "rocknroll"
-    ]
+    ],
+    "moji": "🤘🏿"
   },
   "metro": {
     "unicode": "1F687",
     "unicode_alternates": [],
     "name": "metro",
     "shortname": ":metro:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17346,8 +19458,8 @@
       "underground",
       "metro",
       "subway",
-      "underground",
-      "train"
+      "train",
+      "travel"
     ],
     "moji": "🚇"
   },
@@ -17356,7 +19468,7 @@
     "unicode_alternates": [],
     "name": "microphone",
     "shortname": ":microphone:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17366,9 +19478,9 @@
       "microphone",
       "mic",
       "audio",
-      "sound",
       "voice",
-      "karaoke"
+      "karaoke",
+      "instruments"
     ],
     "moji": "🎤"
   },
@@ -17377,7 +19489,7 @@
     "unicode_alternates": [],
     "name": "studio microphone",
     "shortname": ":microphone2:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":studio_microphone:"
     ],
@@ -17385,8 +19497,11 @@
     "keywords": [
       "mic",
       "audio",
-      "recording"
-    ]
+      "recording",
+      "electronics",
+      "object"
+    ],
+    "moji": "🎙"
   },
   "microscope": {
     "unicode": "1F52C",
@@ -17399,7 +19514,9 @@
     "keywords": [
       "experiment",
       "laboratory",
-      "zoomin"
+      "zoomin",
+      "object",
+      "science"
     ],
     "moji": "🔬"
   },
@@ -17414,12 +19531,17 @@
     ],
     "aliases_ascii": [],
     "keywords": [
-      "fu"
-    ]
+      "fu",
+      "body",
+      "hands",
+      "middle finger",
+      "diversity"
+    ],
+    "moji": "🖕"
   },
   "middle_finger_tone1": {
     "unicode": "1F595-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "reversed hand with middle finger extended tone 1",
     "shortname": ":middle_finger_tone1:",
     "category": "people",
@@ -17429,11 +19551,12 @@
     "aliases_ascii": [],
     "keywords": [
       "fu"
-    ]
+    ],
+    "moji": "🖕🏻"
   },
   "middle_finger_tone2": {
     "unicode": "1F595-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "reversed hand with middle finger extended tone 2",
     "shortname": ":middle_finger_tone2:",
     "category": "people",
@@ -17443,11 +19566,12 @@
     "aliases_ascii": [],
     "keywords": [
       "fu"
-    ]
+    ],
+    "moji": "🖕🏼"
   },
   "middle_finger_tone3": {
     "unicode": "1F595-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "reversed hand with middle finger extended tone 3",
     "shortname": ":middle_finger_tone3:",
     "category": "people",
@@ -17457,11 +19581,12 @@
     "aliases_ascii": [],
     "keywords": [
       "fu"
-    ]
+    ],
+    "moji": "🖕🏽"
   },
   "middle_finger_tone4": {
     "unicode": "1F595-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "reversed hand with middle finger extended tone 4",
     "shortname": ":middle_finger_tone4:",
     "category": "people",
@@ -17471,11 +19596,12 @@
     "aliases_ascii": [],
     "keywords": [
       "fu"
-    ]
+    ],
+    "moji": "🖕🏾"
   },
   "middle_finger_tone5": {
     "unicode": "1F595-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "reversed hand with middle finger extended tone 5",
     "shortname": ":middle_finger_tone5:",
     "category": "people",
@@ -17485,14 +19611,15 @@
     "aliases_ascii": [],
     "keywords": [
       "fu"
-    ]
+    ],
+    "moji": "🖕🏿"
   },
   "military_medal": {
     "unicode": "1F396",
     "unicode_alternates": [],
     "name": "military medal",
     "shortname": ":military_medal:",
-    "category": "celebration",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17500,15 +19627,32 @@
       "acknowledgment",
       "purple heart",
       "heroism",
-      "veteran"
-    ]
+      "veteran",
+      "object",
+      "award",
+      "win"
+    ],
+    "moji": "🎖"
+  },
+  "milk": {
+    "unicode": "1F95B",
+    "unicode_alternates": [],
+    "name": "glass of milk",
+    "shortname": ":milk:",
+    "category": "food",
+    "aliases": [
+      ":glass_of_milk:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥛"
   },
   "milky_way": {
     "unicode": "1F30C",
     "unicode_alternates": [],
     "name": "milky way",
     "shortname": ":milky_way:",
-    "category": "nature",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17519,8 +19663,10 @@
       "star",
       "stars",
       "planets",
-      "space",
-      "sky"
+      "sky",
+      "places",
+      "travel",
+      "vacation"
     ],
     "moji": "🌌"
   },
@@ -17529,7 +19675,7 @@
     "unicode_alternates": [],
     "name": "minibus",
     "shortname": ":minibus:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17538,8 +19684,7 @@
       "vehicle",
       "bus",
       "city",
-      "transport",
-      "transportation"
+      "transport"
     ],
     "moji": "🚐"
   },
@@ -17556,7 +19701,8 @@
       "disc",
       "disk",
       "record",
-      "technology"
+      "technology",
+      "electronics"
     ],
     "moji": "💽"
   },
@@ -17565,17 +19711,18 @@
     "unicode_alternates": [],
     "name": "mobile phone off",
     "shortname": ":mobile_phone_off:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "mute"
+      "mute",
+      "symbol"
     ],
     "moji": "📴"
   },
   "money_mouth": {
     "unicode": "1F911",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "money-mouth face",
     "shortname": ":money_mouth:",
     "category": "people",
@@ -17583,7 +19730,14 @@
       ":money_mouth_face:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "smiley",
+      "win",
+      "money",
+      "emotion",
+      "boys night"
+    ],
+    "moji": "🤑"
   },
   "money_with_wings": {
     "unicode": "1F4B8",
@@ -17607,7 +19761,7 @@
       "burned",
       "gift",
       "cash",
-      "dollar"
+      "boys night"
     ],
     "moji": "💸"
   },
@@ -17622,7 +19776,10 @@
     "keywords": [
       "coins",
       "dollar",
-      "payment"
+      "payment",
+      "bag",
+      "award",
+      "money"
     ],
     "moji": "💰"
   },
@@ -17640,7 +19797,8 @@
       "monkey",
       "primate",
       "banana",
-      "silly"
+      "silly",
+      "wildlife"
     ],
     "moji": "🐒"
   },
@@ -17663,7 +19821,7 @@
     "unicode_alternates": [],
     "name": "monorail",
     "shortname": ":monorail:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17672,66 +19830,18 @@
       "train",
       "mono",
       "rail",
-      "transport"
+      "transport",
+      "travel",
+      "vacation"
     ],
     "moji": "🚝"
   },
-  "mood_bubble": {
-    "unicode": "1F5F0",
-    "unicode_alternates": [],
-    "name": "mood bubble",
-    "shortname": ":mood_bubble:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "balloon",
-      "conversation",
-      "communication",
-      "comic",
-      "feeling"
-    ]
-  },
-  "mood_bubble_lightning": {
-    "unicode": "1F5F1",
-    "unicode_alternates": [],
-    "name": "lightning mood bubble",
-    "shortname": ":mood_bubble_lightning:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":lightning_mood_bubble:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "balloon",
-      "conversation",
-      "communication",
-      "comic",
-      "feeling"
-    ]
-  },
-  "mood_lightning": {
-    "unicode": "1F5F2",
-    "unicode_alternates": [],
-    "name": "lightning mood",
-    "shortname": ":mood_lightning:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":lightning_mood:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "zap",
-      "electric",
-      "current"
-    ]
-  },
   "mortar_board": {
     "unicode": "1F393",
     "unicode_alternates": [],
     "name": "graduation cap",
     "shortname": ":mortar_board:",
-    "category": "objects",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17742,33 +19852,55 @@
       "hat",
       "school",
       "university",
-      "graduation",
-      "cap",
       "mortarboard",
       "academic",
       "education",
       "ceremony",
       "square",
-      "tassel"
+      "tassel",
+      "office",
+      "accessories"
     ],
     "moji": "🎓"
   },
   "mosque": {
     "unicode": "1F54C",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "mosque",
     "shortname": ":mosque:",
     "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "places",
+      "religion",
+      "building",
+      "vacation",
+      "condolence"
+    ],
+    "moji": "🕌"
+  },
+  "motor_scooter": {
+    "unicode": "1F6F5",
+    "unicode_alternates": [],
+    "name": "motor scooter",
+    "shortname": ":motor_scooter:",
+    "category": "travel",
+    "aliases": [
+      ":motorbike:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [
+      "moped"
+    ],
+    "moji": "🛵"
   },
   "motorboat": {
     "unicode": "1F6E5",
     "unicode_alternates": [],
     "name": "motorboat",
     "shortname": ":motorboat:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17776,30 +19908,35 @@
       "vehicle",
       "boat",
       "speedboat",
-      "powerboat"
-    ]
+      "powerboat",
+      "travel"
+    ],
+    "moji": "🛥"
   },
   "motorcycle": {
     "unicode": "1F3CD",
     "unicode_alternates": [],
     "name": "racing motorcycle",
     "shortname": ":motorcycle:",
-    "category": "activity",
+    "category": "travel",
     "aliases": [
       ":racing_motorcycle:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "bike",
-      "speed"
-    ]
+      "speed",
+      "transportation",
+      "travel"
+    ],
+    "moji": "🏍"
   },
   "motorway": {
     "unicode": "1F6E3",
     "unicode_alternates": [],
     "name": "motorway",
     "shortname": ":motorway:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17807,43 +19944,56 @@
       "highway",
       "freeway",
       "traffic",
-      "travel"
-    ]
+      "travel",
+      "vacation",
+      "camp"
+    ],
+    "moji": "🛣"
   },
   "mount_fuji": {
     "unicode": "1F5FB",
     "unicode_alternates": [],
     "name": "mount fuji",
     "shortname": ":mount_fuji:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "japan",
       "mountain",
       "nature",
-      "photo"
+      "photo",
+      "places",
+      "travel",
+      "vacation",
+      "cold",
+      "camp"
     ],
     "moji": "🗻"
   },
   "mountain": {
     "unicode": "26F0",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "mountain",
     "shortname": ":mountain:",
     "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "place"
-    ]
+      "place",
+      "places",
+      "travel",
+      "vacation",
+      "camp"
+    ],
+    "moji": "â›°"
   },
   "mountain_bicyclist": {
     "unicode": "1F6B5",
     "unicode_alternates": [],
     "name": "mountain bicyclist",
     "shortname": ":mountain_bicyclist:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17855,13 +20005,15 @@
       "bike",
       "pedal",
       "bicycle",
-      "transportation"
+      "men",
+      "sport",
+      "diversity"
     ],
     "moji": "🚵"
   },
   "mountain_bicyclist_tone1": {
     "unicode": "1F6B5-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "mountain bicyclist tone 1",
     "shortname": ":mountain_bicyclist_tone1:",
     "category": "activity",
@@ -17872,13 +20024,13 @@
       "transportation",
       "bike",
       "pedal",
-      "bicycle",
-      "transportation"
-    ]
+      "bicycle"
+    ],
+    "moji": "🚵🏻"
   },
   "mountain_bicyclist_tone2": {
     "unicode": "1F6B5-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "mountain bicyclist tone 2",
     "shortname": ":mountain_bicyclist_tone2:",
     "category": "activity",
@@ -17889,13 +20041,13 @@
       "transportation",
       "bike",
       "pedal",
-      "bicycle",
-      "transportation"
-    ]
+      "bicycle"
+    ],
+    "moji": "🚵🏼"
   },
   "mountain_bicyclist_tone3": {
     "unicode": "1F6B5-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "mountain bicyclist tone 3",
     "shortname": ":mountain_bicyclist_tone3:",
     "category": "activity",
@@ -17906,13 +20058,13 @@
       "transportation",
       "bike",
       "pedal",
-      "bicycle",
-      "transportation"
-    ]
+      "bicycle"
+    ],
+    "moji": "🚵🏽"
   },
   "mountain_bicyclist_tone4": {
     "unicode": "1F6B5-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "mountain bicyclist tone 4",
     "shortname": ":mountain_bicyclist_tone4:",
     "category": "activity",
@@ -17923,13 +20075,13 @@
       "transportation",
       "bike",
       "pedal",
-      "bicycle",
-      "transportation"
-    ]
+      "bicycle"
+    ],
+    "moji": "🚵🏾"
   },
   "mountain_bicyclist_tone5": {
     "unicode": "1F6B5-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "mountain bicyclist tone 5",
     "shortname": ":mountain_bicyclist_tone5:",
     "category": "activity",
@@ -17940,16 +20092,16 @@
       "transportation",
       "bike",
       "pedal",
-      "bicycle",
-      "transportation"
-    ]
+      "bicycle"
+    ],
+    "moji": "🚵🏿"
   },
   "mountain_cableway": {
     "unicode": "1F6A0",
     "unicode_alternates": [],
     "name": "mountain cableway",
     "shortname": ":mountain_cableway:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17959,7 +20111,8 @@
       "cable",
       "rail",
       "train",
-      "railway"
+      "railway",
+      "travel"
     ],
     "moji": "🚠"
   },
@@ -17968,7 +20121,7 @@
     "unicode_alternates": [],
     "name": "mountain railway",
     "shortname": ":mountain_railway:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -17977,7 +20130,8 @@
       "railway",
       "rail",
       "train",
-      "transport"
+      "transport",
+      "travel"
     ],
     "moji": "🚞"
   },
@@ -17986,7 +20140,7 @@
     "unicode_alternates": [],
     "name": "snow capped mountain",
     "shortname": ":mountain_snow:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [
       ":snow_capped_mountain:"
     ],
@@ -17995,8 +20149,13 @@
       "cold",
       "elevation",
       "hiking",
-      "peak"
-    ]
+      "peak",
+      "places",
+      "travel",
+      "vacation",
+      "camp"
+    ],
+    "moji": "🏔"
   },
   "mouse": {
     "unicode": "1F42D",
@@ -18029,25 +20188,9 @@
     ],
     "moji": "🐁"
   },
-  "mouse_one": {
-    "unicode": "1F5AF",
-    "unicode_alternates": [],
-    "name": "one button mouse",
-    "shortname": ":mouse_one:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":one_button_mouse:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "computer",
-      "input",
-      "device"
-    ]
-  },
   "mouse_three_button": {
     "unicode": "1F5B1",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "three button mouse",
     "shortname": ":mouse_three_button:",
     "category": "objects",
@@ -18059,8 +20202,12 @@
       "3",
       "computer",
       "object",
-      "office"
-    ]
+      "office",
+      "electronics",
+      "work",
+      "game"
+    ],
+    "moji": "🖱"
   },
   "movie_camera": {
     "unicode": "1F3A5",
@@ -18078,7 +20225,8 @@
       "camcorder",
       "video",
       "motion",
-      "picture"
+      "picture",
+      "object"
     ],
     "moji": "🎥"
   },
@@ -18087,21 +20235,101 @@
     "unicode_alternates": [],
     "name": "moyai",
     "shortname": ":moyai:",
-    "category": "places",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "island",
-      "stone"
+      "stone",
+      "travel",
+      "vacation"
     ],
     "moji": "🗿"
   },
+  "mrs_claus": {
+    "unicode": "1F936",
+    "unicode_alternates": [],
+    "name": "mother christmas",
+    "shortname": ":mrs_claus:",
+    "category": "people",
+    "aliases": [
+      ":mother_christmas:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤶"
+  },
+  "mrs_claus_tone1": {
+    "unicode": "1F936-1F3FB",
+    "unicode_alternates": [],
+    "name": "mother christmas tone 1",
+    "shortname": ":mrs_claus_tone1:",
+    "category": "people",
+    "aliases": [
+      ":mother_christmas_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤶🏻"
+  },
+  "mrs_claus_tone2": {
+    "unicode": "1F936-1F3FC",
+    "unicode_alternates": [],
+    "name": "mother christmas tone 2",
+    "shortname": ":mrs_claus_tone2:",
+    "category": "people",
+    "aliases": [
+      ":mother_christmas_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤶🏼"
+  },
+  "mrs_claus_tone3": {
+    "unicode": "1F936-1F3FD",
+    "unicode_alternates": [],
+    "name": "mother christmas tone 3",
+    "shortname": ":mrs_claus_tone3:",
+    "category": "people",
+    "aliases": [
+      ":mother_christmas_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤶🏽"
+  },
+  "mrs_claus_tone4": {
+    "unicode": "1F936-1F3FE",
+    "unicode_alternates": [],
+    "name": "mother christmas tone 4",
+    "shortname": ":mrs_claus_tone4:",
+    "category": "people",
+    "aliases": [
+      ":mother_christmas_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤶🏾"
+  },
+  "mrs_claus_tone5": {
+    "unicode": "1F936-1F3FF",
+    "unicode_alternates": [],
+    "name": "mother christmas tone 5",
+    "shortname": ":mrs_claus_tone5:",
+    "category": "people",
+    "aliases": [
+      ":mother_christmas_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤶🏿"
+  },
   "muscle": {
     "unicode": "1F4AA",
     "unicode_alternates": [],
     "name": "flexed biceps",
     "shortname": ":muscle:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18110,13 +20338,20 @@
       "hand",
       "strong",
       "muscle",
-      "bicep"
+      "bicep",
+      "body",
+      "hands",
+      "workout",
+      "win",
+      "diversity",
+      "feminist",
+      "boys night"
     ],
     "moji": "💪"
   },
   "muscle_tone1": {
     "unicode": "1F4AA-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "flexed biceps tone 1",
     "shortname": ":muscle_tone1:",
     "category": "people",
@@ -18129,11 +20364,12 @@
       "strong",
       "muscle",
       "bicep"
-    ]
+    ],
+    "moji": "💪🏻"
   },
   "muscle_tone2": {
     "unicode": "1F4AA-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "flexed biceps tone 2",
     "shortname": ":muscle_tone2:",
     "category": "people",
@@ -18146,11 +20382,12 @@
       "strong",
       "muscle",
       "bicep"
-    ]
+    ],
+    "moji": "💪🏼"
   },
   "muscle_tone3": {
     "unicode": "1F4AA-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "flexed biceps tone 3",
     "shortname": ":muscle_tone3:",
     "category": "people",
@@ -18163,11 +20400,12 @@
       "strong",
       "muscle",
       "bicep"
-    ]
+    ],
+    "moji": "💪🏽"
   },
   "muscle_tone4": {
     "unicode": "1F4AA-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "flexed biceps tone 4",
     "shortname": ":muscle_tone4:",
     "category": "people",
@@ -18180,11 +20418,12 @@
       "strong",
       "muscle",
       "bicep"
-    ]
+    ],
+    "moji": "💪🏾"
   },
   "muscle_tone5": {
     "unicode": "1F4AA-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "flexed biceps tone 5",
     "shortname": ":muscle_tone5:",
     "category": "people",
@@ -18197,7 +20436,8 @@
       "strong",
       "muscle",
       "bicep"
-    ]
+    ],
+    "moji": "💪🏿"
   },
   "mushroom": {
     "unicode": "1F344",
@@ -18213,7 +20453,9 @@
       "mushroom",
       "fungi",
       "food",
-      "fungus"
+      "fungus",
+      "nature",
+      "drugs"
     ],
     "moji": "🍄"
   },
@@ -18222,7 +20464,7 @@
     "unicode_alternates": [],
     "name": "musical keyboard",
     "shortname": ":musical_keyboard:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18230,10 +20472,9 @@
       "piano",
       "music",
       "keyboard",
-      "piano",
       "organ",
-      "instrument",
-      "electric"
+      "electric",
+      "instruments"
     ],
     "moji": "🎹"
   },
@@ -18242,7 +20483,7 @@
     "unicode_alternates": [],
     "name": "musical note",
     "shortname": ":musical_note:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18250,8 +20491,9 @@
       "musical",
       "music",
       "note",
-      "music",
-      "sound"
+      "sound",
+      "instruments",
+      "symbol"
     ],
     "moji": "🎵"
   },
@@ -18260,7 +20502,7 @@
     "unicode_alternates": [],
     "name": "musical score",
     "shortname": ":musical_score:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18269,10 +20511,10 @@
       "music",
       "musical",
       "score",
-      "clef",
       "g-clef",
       "stave",
-      "staff"
+      "staff",
+      "instruments"
     ],
     "moji": "🎼"
   },
@@ -18281,12 +20523,14 @@
     "unicode_alternates": [],
     "name": "speaker with cancellation stroke",
     "shortname": ":mute:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "sound",
-      "volume"
+      "volume",
+      "alarm",
+      "symbol"
     ],
     "moji": "🔇"
   },
@@ -18295,18 +20539,24 @@
     "unicode_alternates": [],
     "name": "nail polish",
     "shortname": ":nail_care:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "beauty",
-      "manicure"
+      "manicure",
+      "women",
+      "body",
+      "hands",
+      "nailpolish",
+      "diversity",
+      "girls night"
     ],
     "moji": "💅"
   },
   "nail_care_tone1": {
     "unicode": "1F485-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nail polish tone 1",
     "shortname": ":nail_care_tone1:",
     "category": "people",
@@ -18315,11 +20565,12 @@
     "keywords": [
       "beauty",
       "manicure"
-    ]
+    ],
+    "moji": "💅🏻"
   },
   "nail_care_tone2": {
     "unicode": "1F485-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nail polish tone 2",
     "shortname": ":nail_care_tone2:",
     "category": "people",
@@ -18328,11 +20579,12 @@
     "keywords": [
       "beauty",
       "manicure"
-    ]
+    ],
+    "moji": "💅🏼"
   },
   "nail_care_tone3": {
     "unicode": "1F485-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nail polish tone 3",
     "shortname": ":nail_care_tone3:",
     "category": "people",
@@ -18341,11 +20593,12 @@
     "keywords": [
       "beauty",
       "manicure"
-    ]
+    ],
+    "moji": "💅🏽"
   },
   "nail_care_tone4": {
     "unicode": "1F485-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nail polish tone 4",
     "shortname": ":nail_care_tone4:",
     "category": "people",
@@ -18354,11 +20607,12 @@
     "keywords": [
       "beauty",
       "manicure"
-    ]
+    ],
+    "moji": "💅🏾"
   },
   "nail_care_tone5": {
     "unicode": "1F485-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nail polish tone 5",
     "shortname": ":nail_care_tone5:",
     "category": "people",
@@ -18367,28 +20621,43 @@
     "keywords": [
       "beauty",
       "manicure"
-    ]
+    ],
+    "moji": "💅🏿"
   },
   "name_badge": {
     "unicode": "1F4DB",
     "unicode_alternates": [],
     "name": "name badge",
     "shortname": ":name_badge:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fire",
-      "forbid"
+      "forbid",
+      "work"
     ],
     "moji": "📛"
   },
+  "nauseated_face": {
+    "unicode": "1F922",
+    "unicode_alternates": [],
+    "name": "nauseated face",
+    "shortname": ":nauseated_face:",
+    "category": "people",
+    "aliases": [
+      ":sick:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤢"
+  },
   "necktie": {
     "unicode": "1F454",
     "unicode_alternates": [],
     "name": "necktie",
     "shortname": ":necktie:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18405,20 +20674,21 @@
     "unicode_alternates": [],
     "name": "negative squared cross mark",
     "shortname": ":negative_squared_cross_mark:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "deny",
       "green-square",
       "no",
-      "x"
+      "x",
+      "symbol"
     ],
     "moji": "❎"
   },
   "nerd": {
     "unicode": "1F913",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nerd face",
     "shortname": ":nerd:",
     "category": "people",
@@ -18426,31 +20696,18 @@
       ":nerd_face:"
     ],
     "aliases_ascii": [],
-    "keywords": []
-  },
-  "network": {
-    "unicode": "1F5A7",
-    "unicode_alternates": [],
-    "name": "three networked computers",
-    "shortname": ":network:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":three_networked_computers:"
-    ],
-    "aliases_ascii": [],
     "keywords": [
-      "lan",
-      "wan",
-      "network",
-      "technology"
-    ]
+      "smiley",
+      "glasses"
+    ],
+    "moji": "🤓"
   },
   "neutral_face": {
     "unicode": "1F610",
     "unicode_alternates": [],
     "name": "neutral face",
     "shortname": ":neutral_face:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18459,7 +20716,11 @@
       "neutral",
       "objective",
       "impartial",
-      "blank"
+      "blank",
+      "mad",
+      "smiley",
+      "shrug",
+      "emotion"
     ],
     "moji": "😐"
   },
@@ -18468,11 +20729,12 @@
     "unicode_alternates": [],
     "name": "squared new",
     "shortname": ":new:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "🆕"
   },
@@ -18491,7 +20753,8 @@
       "sky",
       "night",
       "cheese",
-      "phase"
+      "phase",
+      "space"
     ],
     "moji": "🌑"
   },
@@ -18512,7 +20775,9 @@
       "sky",
       "night",
       "cheese",
-      "phase"
+      "phase",
+      "space",
+      "goodnight"
     ],
     "moji": "🌚"
   },
@@ -18526,7 +20791,9 @@
     "aliases_ascii": [],
     "keywords": [
       "headline",
-      "press"
+      "press",
+      "office",
+      "write"
     ],
     "moji": "📰"
   },
@@ -18535,19 +20802,22 @@
     "unicode_alternates": [],
     "name": "rolled-up newspaper",
     "shortname": ":newspaper2:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":rolled_up_newspaper:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "headline",
-      "press"
-    ]
+      "press",
+      "office",
+      "write"
+    ],
+    "moji": "🗞"
   },
   "ng": {
     "unicode": "1F196",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "squared ng",
     "shortname": ":ng:",
     "category": "symbols",
@@ -18558,14 +20828,15 @@
       "no good",
       "symbol",
       "word"
-    ]
+    ],
+    "moji": "🆖"
   },
   "night_with_stars": {
     "unicode": "1F303",
     "unicode_alternates": [],
     "name": "night with stars",
     "shortname": ":night_with_stars:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18575,7 +20846,11 @@
       "evening",
       "planets",
       "space",
-      "sky"
+      "sky",
+      "places",
+      "building",
+      "vacation",
+      "goodnight"
     ],
     "moji": "🌃"
   },
@@ -18585,15 +20860,18 @@
     "unicode_alternates": [
       "0039-FE0F-20E3"
     ],
-    "name": "digit nine",
+    "name": "keycap digit nine",
     "shortname": ":nine:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "9",
       "blue-square",
-      "numbers"
+      "numbers",
+      "number",
+      "math",
+      "symbol"
     ]
   },
   "no_bell": {
@@ -18601,13 +20879,15 @@
     "unicode_alternates": [],
     "name": "bell with cancellation stroke",
     "shortname": ":no_bell:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "mute",
       "sound",
-      "volume"
+      "volume",
+      "alarm",
+      "symbol"
     ],
     "moji": "🔕"
   },
@@ -18616,7 +20896,7 @@
     "unicode_alternates": [],
     "name": "no bicycles",
     "shortname": ":no_bicycles:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18624,7 +20904,8 @@
       "prohibited",
       "bicycle",
       "bike pedal",
-      "no"
+      "no",
+      "symbol"
     ],
     "moji": "🚳"
   },
@@ -18635,7 +20916,7 @@
     ],
     "name": "no entry",
     "shortname": ":no_entry:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18644,7 +20925,9 @@
       "limit",
       "privacy",
       "security",
-      "stop"
+      "stop",
+      "symbol",
+      "circle"
     ],
     "moji": "â›”"
   },
@@ -18653,7 +20936,7 @@
     "unicode_alternates": [],
     "name": "no entry sign",
     "shortname": ":no_entry_sign:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18663,8 +20946,9 @@
       "limit",
       "stop",
       "no",
-      "stop",
-      "entry"
+      "entry",
+      "symbol",
+      "circle"
     ],
     "moji": "🚫"
   },
@@ -18673,7 +20957,7 @@
     "unicode_alternates": [],
     "name": "face with no good gesture",
     "shortname": ":no_good:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18684,13 +20968,17 @@
       "stop",
       "nope",
       "don&#039;t",
-      "not"
+      "not",
+      "people",
+      "women",
+      "diversity",
+      "girls night"
     ],
     "moji": "🙅"
   },
   "no_good_tone1": {
     "unicode": "1F645-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with no good gesture tone 1",
     "shortname": ":no_good_tone1:",
     "category": "people",
@@ -18708,11 +20996,12 @@
       "hand",
       "person",
       "prohibited"
-    ]
+    ],
+    "moji": "🙅🏻"
   },
   "no_good_tone2": {
     "unicode": "1F645-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with no good gesture tone 2",
     "shortname": ":no_good_tone2:",
     "category": "people",
@@ -18730,11 +21019,12 @@
       "hand",
       "person",
       "prohibited"
-    ]
+    ],
+    "moji": "🙅🏼"
   },
   "no_good_tone3": {
     "unicode": "1F645-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with no good gesture tone 3",
     "shortname": ":no_good_tone3:",
     "category": "people",
@@ -18752,11 +21042,12 @@
       "hand",
       "person",
       "prohibited"
-    ]
+    ],
+    "moji": "🙅🏽"
   },
   "no_good_tone4": {
     "unicode": "1F645-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with no good gesture tone 4",
     "shortname": ":no_good_tone4:",
     "category": "people",
@@ -18774,11 +21065,12 @@
       "hand",
       "person",
       "prohibited"
-    ]
+    ],
+    "moji": "🙅🏾"
   },
   "no_good_tone5": {
     "unicode": "1F645-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with no good gesture tone 5",
     "shortname": ":no_good_tone5:",
     "category": "people",
@@ -18796,19 +21088,22 @@
       "hand",
       "person",
       "prohibited"
-    ]
+    ],
+    "moji": "🙅🏿"
   },
   "no_mobile_phones": {
     "unicode": "1F4F5",
     "unicode_alternates": [],
     "name": "no mobile phones",
     "shortname": ":no_mobile_phones:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "iphone",
-      "mute"
+      "mute",
+      "symbol",
+      "phone"
     ],
     "moji": "📵"
   },
@@ -18817,7 +21112,7 @@
     "unicode_alternates": [],
     "name": "face without mouth",
     "shortname": ":no_mouth:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ":-X",
@@ -18835,7 +21130,11 @@
       "hellokitty",
       "mouth",
       "silent",
-      "vapid"
+      "vapid",
+      "mad",
+      "smiley",
+      "neutral",
+      "emotion"
     ],
     "moji": "😶"
   },
@@ -18844,7 +21143,7 @@
     "unicode_alternates": [],
     "name": "no pedestrians",
     "shortname": ":no_pedestrians:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18857,7 +21156,8 @@
       "stroll",
       "stride",
       "foot",
-      "feet"
+      "feet",
+      "symbol"
     ],
     "moji": "🚷"
   },
@@ -18866,20 +21166,20 @@
     "unicode_alternates": [],
     "name": "no smoking symbol",
     "shortname": ":no_smoking:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "cigarette",
       "no",
       "smoking",
-      "cigarette",
       "smoke",
       "cancer",
       "lungs",
       "inhale",
       "tar",
-      "nicotine"
+      "nicotine",
+      "symbol"
     ],
     "moji": "🚭"
   },
@@ -18888,7 +21188,7 @@
     "unicode_alternates": [],
     "name": "non-potable water symbol",
     "shortname": ":non-potable_water:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -18901,7 +21201,8 @@
       "dirty",
       "gross",
       "aqua",
-      "h20"
+      "h20",
+      "symbol"
     ],
     "moji": "🚱"
   },
@@ -18910,18 +21211,20 @@
     "unicode_alternates": [],
     "name": "nose",
     "shortname": ":nose:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "smell",
-      "sniff"
+      "sniff",
+      "body",
+      "diversity"
     ],
     "moji": "👃"
   },
   "nose_tone1": {
     "unicode": "1F443-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nose tone 1",
     "shortname": ":nose_tone1:",
     "category": "people",
@@ -18930,11 +21233,12 @@
     "keywords": [
       "smell",
       "sniff"
-    ]
+    ],
+    "moji": "👃🏻"
   },
   "nose_tone2": {
     "unicode": "1F443-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nose tone 2",
     "shortname": ":nose_tone2:",
     "category": "people",
@@ -18943,11 +21247,12 @@
     "keywords": [
       "smell",
       "sniff"
-    ]
+    ],
+    "moji": "👃🏼"
   },
   "nose_tone3": {
     "unicode": "1F443-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nose tone 3",
     "shortname": ":nose_tone3:",
     "category": "people",
@@ -18956,11 +21261,12 @@
     "keywords": [
       "smell",
       "sniff"
-    ]
+    ],
+    "moji": "👃🏽"
   },
   "nose_tone4": {
     "unicode": "1F443-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nose tone 4",
     "shortname": ":nose_tone4:",
     "category": "people",
@@ -18969,11 +21275,12 @@
     "keywords": [
       "smell",
       "sniff"
-    ]
+    ],
+    "moji": "👃🏾"
   },
   "nose_tone5": {
     "unicode": "1F443-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "nose tone 5",
     "shortname": ":nose_tone5:",
     "category": "people",
@@ -18982,37 +21289,8 @@
     "keywords": [
       "smell",
       "sniff"
-    ]
-  },
-  "note": {
-    "unicode": "1F5C9",
-    "unicode_alternates": [],
-    "name": "note page",
-    "shortname": ":note:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":note_page:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "stationery",
-      "post-it"
-    ]
-  },
-  "note_empty": {
-    "unicode": "1F5C6",
-    "unicode_alternates": [],
-    "name": "empty note page",
-    "shortname": ":note_empty:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":empty_note_page:"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "stationery",
-      "post-it"
-    ]
+    "moji": "👃🏿"
   },
   "notebook": {
     "unicode": "1F4D3",
@@ -19026,7 +21304,10 @@
       "notes",
       "paper",
       "record",
-      "stationery"
+      "stationery",
+      "object",
+      "office",
+      "write"
     ],
     "moji": "📓"
   },
@@ -19042,71 +21323,48 @@
       "classroom",
       "notes",
       "paper",
-      "record"
+      "record",
+      "object",
+      "office",
+      "write"
     ],
     "moji": "📔"
   },
-  "notepad": {
-    "unicode": "1F5CA",
-    "unicode_alternates": [],
-    "name": "note pad",
-    "shortname": ":notepad:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":note_pad:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "stationery",
-      "post-it"
-    ]
-  },
-  "notepad_empty": {
-    "unicode": "1F5C7",
-    "unicode_alternates": [],
-    "name": "empty note pad",
-    "shortname": ":notepad_empty:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":empty_note_pad:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "stationery",
-      "post-it"
-    ]
-  },
   "notepad_spiral": {
     "unicode": "1F5D2",
     "unicode_alternates": [],
     "name": "spiral note pad",
     "shortname": ":notepad_spiral:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":spiral_note_pad:"
     ],
     "aliases_ascii": [],
     "keywords": [
-      "stationery"
-    ]
+      "stationery",
+      "work",
+      "office",
+      "write"
+    ],
+    "moji": "🗒"
   },
   "notes": {
     "unicode": "1F3B6",
     "unicode_alternates": [],
     "name": "multiple musical notes",
     "shortname": ":notes:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "music",
       "score",
       "musical",
-      "music",
       "notes",
-      "music",
       "sound",
-      "melody"
+      "melody",
+      "instruments",
+      "symbol"
     ],
     "moji": "🎶"
   },
@@ -19120,7 +21378,10 @@
     "aliases_ascii": [],
     "keywords": [
       "handy",
-      "tools"
+      "tools",
+      "object",
+      "tool",
+      "nutcase"
     ],
     "moji": "🔩"
   },
@@ -19131,12 +21392,13 @@
     ],
     "name": "heavy large circle",
     "shortname": ":o:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "circle",
-      "round"
+      "round",
+      "symbol"
     ],
     "moji": "â­•"
   },
@@ -19145,13 +21407,14 @@
     "unicode_alternates": [],
     "name": "negative squared latin capital letter o",
     "shortname": ":o2:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
       "letter",
-      "red-square"
+      "red-square",
+      "symbol"
     ],
     "moji": "🅾"
   },
@@ -19168,13 +21431,29 @@
       "water",
       "wave",
       "ocean",
-      "wave",
       "surf",
       "beach",
-      "tide"
+      "tide",
+      "weather",
+      "boat",
+      "tropical",
+      "swim"
     ],
     "moji": "🌊"
   },
+  "octagonal_sign": {
+    "unicode": "1F6D1",
+    "unicode_alternates": [],
+    "name": "octagonal sign",
+    "shortname": ":octagonal_sign:",
+    "category": "symbols",
+    "aliases": [
+      ":stop_sign:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🛑"
+  },
   "octopus": {
     "unicode": "1F419",
     "unicode_alternates": [],
@@ -19187,7 +21466,8 @@
       "animal",
       "creature",
       "ocean",
-      "sea"
+      "sea",
+      "wildlife"
     ],
     "moji": "🐙"
   },
@@ -19196,7 +21476,7 @@
     "unicode_alternates": [],
     "name": "oden",
     "shortname": ":oden:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -19214,13 +21494,14 @@
     "unicode_alternates": [],
     "name": "office building",
     "shortname": ":office:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "building",
       "bureau",
-      "work"
+      "work",
+      "places"
     ],
     "moji": "🏢"
   },
@@ -19229,28 +21510,31 @@
     "unicode_alternates": [],
     "name": "oil drum",
     "shortname": ":oil:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":oil_drum:"
     ],
     "aliases_ascii": [],
     "keywords": [
-      "petroleum"
-    ]
+      "petroleum",
+      "object"
+    ],
+    "moji": "🛢"
   },
   "ok": {
     "unicode": "1F197",
     "unicode_alternates": [],
     "name": "squared ok",
     "shortname": ":ok:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "agree",
       "blue-square",
       "good",
-      "yes"
+      "yes",
+      "symbol"
     ],
     "moji": "🆗"
   },
@@ -19259,7 +21543,7 @@
     "unicode_alternates": [],
     "name": "ok hand sign",
     "shortname": ":ok_hand:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -19273,13 +21557,19 @@
       "marijuana",
       "joint",
       "pot",
-      "420"
+      "420",
+      "body",
+      "hands",
+      "hi",
+      "diversity",
+      "good",
+      "beautiful"
     ],
     "moji": "👌"
   },
   "ok_hand_tone1": {
     "unicode": "1F44C-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ok hand sign tone 1",
     "shortname": ":ok_hand_tone1:",
     "category": "people",
@@ -19296,11 +21586,12 @@
       "joint",
       "pot",
       "420"
-    ]
+    ],
+    "moji": "👌🏻"
   },
   "ok_hand_tone2": {
     "unicode": "1F44C-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ok hand sign tone 2",
     "shortname": ":ok_hand_tone2:",
     "category": "people",
@@ -19317,11 +21608,12 @@
       "joint",
       "pot",
       "420"
-    ]
+    ],
+    "moji": "👌🏼"
   },
   "ok_hand_tone3": {
     "unicode": "1F44C-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ok hand sign tone 3",
     "shortname": ":ok_hand_tone3:",
     "category": "people",
@@ -19338,11 +21630,12 @@
       "joint",
       "pot",
       "420"
-    ]
+    ],
+    "moji": "👌🏽"
   },
   "ok_hand_tone4": {
     "unicode": "1F44C-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ok hand sign tone 4",
     "shortname": ":ok_hand_tone4:",
     "category": "people",
@@ -19359,11 +21652,12 @@
       "joint",
       "pot",
       "420"
-    ]
+    ],
+    "moji": "👌🏾"
   },
   "ok_hand_tone5": {
     "unicode": "1F44C-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "ok hand sign tone 5",
     "shortname": ":ok_hand_tone5:",
     "category": "people",
@@ -19380,14 +21674,15 @@
       "joint",
       "pot",
       "420"
-    ]
+    ],
+    "moji": "👌🏿"
   },
   "ok_woman": {
     "unicode": "1F646",
     "unicode_alternates": [],
     "name": "face with ok gesture",
     "shortname": ":ok_woman:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       "*\\0/*",
@@ -19404,13 +21699,15 @@
       "yes",
       "ok",
       "okay",
-      "accept"
+      "accept",
+      "people",
+      "diversity"
     ],
     "moji": "🙆"
   },
   "ok_woman_tone1": {
     "unicode": "1F646-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with ok gesture tone1",
     "shortname": ":ok_woman_tone1:",
     "category": "people",
@@ -19425,11 +21722,12 @@
       "yes",
       "okay",
       "accept"
-    ]
+    ],
+    "moji": "🙆🏻"
   },
   "ok_woman_tone2": {
     "unicode": "1F646-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with ok gesture tone2",
     "shortname": ":ok_woman_tone2:",
     "category": "people",
@@ -19444,11 +21742,12 @@
       "yes",
       "okay",
       "accept"
-    ]
+    ],
+    "moji": "🙆🏼"
   },
   "ok_woman_tone3": {
     "unicode": "1F646-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with ok gesture tone3",
     "shortname": ":ok_woman_tone3:",
     "category": "people",
@@ -19463,11 +21762,12 @@
       "yes",
       "okay",
       "accept"
-    ]
+    ],
+    "moji": "🙆🏽"
   },
   "ok_woman_tone4": {
     "unicode": "1F646-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with ok gesture tone4",
     "shortname": ":ok_woman_tone4:",
     "category": "people",
@@ -19482,11 +21782,12 @@
       "yes",
       "okay",
       "accept"
-    ]
+    ],
+    "moji": "🙆🏾"
   },
   "ok_woman_tone5": {
     "unicode": "1F646-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with ok gesture tone5",
     "shortname": ":ok_woman_tone5:",
     "category": "people",
@@ -19501,26 +21802,30 @@
       "yes",
       "okay",
       "accept"
-    ]
+    ],
+    "moji": "🙆🏿"
   },
   "older_man": {
     "unicode": "1F474",
     "unicode_alternates": [],
     "name": "older man",
     "shortname": ":older_man:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "human",
       "male",
-      "men"
+      "men",
+      "people",
+      "old people",
+      "diversity"
     ],
     "moji": "👴"
   },
   "older_man_tone1": {
     "unicode": "1F474-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older man tone 1",
     "shortname": ":older_man_tone1:",
     "category": "people",
@@ -19531,11 +21836,12 @@
       "men",
       "grandpa",
       "grandfather"
-    ]
+    ],
+    "moji": "👴🏻"
   },
   "older_man_tone2": {
     "unicode": "1F474-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older man tone 2",
     "shortname": ":older_man_tone2:",
     "category": "people",
@@ -19546,11 +21852,12 @@
       "men",
       "grandpa",
       "grandfather"
-    ]
+    ],
+    "moji": "👴🏼"
   },
   "older_man_tone3": {
     "unicode": "1F474-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older man tone 3",
     "shortname": ":older_man_tone3:",
     "category": "people",
@@ -19561,11 +21868,12 @@
       "men",
       "grandpa",
       "grandfather"
-    ]
+    ],
+    "moji": "👴🏽"
   },
   "older_man_tone4": {
     "unicode": "1F474-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older man tone 4",
     "shortname": ":older_man_tone4:",
     "category": "people",
@@ -19576,11 +21884,12 @@
       "men",
       "grandpa",
       "grandfather"
-    ]
+    ],
+    "moji": "👴🏾"
   },
   "older_man_tone5": {
     "unicode": "1F474-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older man tone 5",
     "shortname": ":older_man_tone5:",
     "category": "people",
@@ -19591,14 +21900,15 @@
       "men",
       "grandpa",
       "grandfather"
-    ]
+    ],
+    "moji": "👴🏿"
   },
   "older_woman": {
     "unicode": "1F475",
     "unicode_alternates": [],
     "name": "older woman",
     "shortname": ":older_woman:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [
       ":grandma:"
     ],
@@ -19608,13 +21918,16 @@
       "girl",
       "women",
       "grandma",
-      "grandmother"
+      "grandmother",
+      "people",
+      "old people",
+      "diversity"
     ],
     "moji": "👵"
   },
   "older_woman_tone1": {
     "unicode": "1F475-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older woman tone 1",
     "shortname": ":older_woman_tone1:",
     "category": "people",
@@ -19628,11 +21941,12 @@
       "lady",
       "grandma",
       "grandmother"
-    ]
+    ],
+    "moji": "👵🏻"
   },
   "older_woman_tone2": {
     "unicode": "1F475-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older woman tone 2",
     "shortname": ":older_woman_tone2:",
     "category": "people",
@@ -19646,11 +21960,12 @@
       "lady",
       "grandma",
       "grandmother"
-    ]
+    ],
+    "moji": "👵🏼"
   },
   "older_woman_tone3": {
     "unicode": "1F475-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older woman tone 3",
     "shortname": ":older_woman_tone3:",
     "category": "people",
@@ -19664,11 +21979,12 @@
       "lady",
       "grandma",
       "grandmother"
-    ]
+    ],
+    "moji": "👵🏽"
   },
   "older_woman_tone4": {
     "unicode": "1F475-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older woman tone 4",
     "shortname": ":older_woman_tone4:",
     "category": "people",
@@ -19682,11 +21998,12 @@
       "lady",
       "grandma",
       "grandmother"
-    ]
+    ],
+    "moji": "👵🏾"
   },
   "older_woman_tone5": {
     "unicode": "1F475-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "older woman tone 5",
     "shortname": ":older_woman_tone5:",
     "category": "people",
@@ -19700,14 +22017,15 @@
       "lady",
       "grandma",
       "grandmother"
-    ]
+    ],
+    "moji": "👵🏿"
   },
   "om_symbol": {
     "unicode": "1F549",
     "unicode_alternates": [],
     "name": "om symbol",
     "shortname": ":om_symbol:",
-    "category": "objects_symbols",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -19718,20 +22036,24 @@
       "dharmic",
       "buddhism",
       "jainism",
-      "meditate"
-    ]
+      "meditate",
+      "religion",
+      "symbol"
+    ],
+    "moji": "🕉"
   },
   "on": {
     "unicode": "1F51B",
     "unicode_alternates": [],
     "name": "on with exclamation mark with left right arrow abo",
     "shortname": ":on:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "words"
+      "words",
+      "symbol"
     ],
     "moji": "🔛"
   },
@@ -19740,7 +22062,7 @@
     "unicode_alternates": [],
     "name": "oncoming automobile",
     "shortname": ":oncoming_automobile:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -19748,8 +22070,8 @@
       "transportation",
       "vehicle",
       "sedan",
-      "car",
-      "automobile"
+      "automobile",
+      "travel"
     ],
     "moji": "🚘"
   },
@@ -19758,7 +22080,7 @@
     "unicode_alternates": [],
     "name": "oncoming bus",
     "shortname": ":oncoming_bus:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -19767,8 +22089,8 @@
       "bus",
       "school",
       "city",
-      "transportation",
-      "public"
+      "public",
+      "travel"
     ],
     "moji": "🚍"
   },
@@ -19777,7 +22099,7 @@
     "unicode_alternates": [],
     "name": "oncoming police car",
     "shortname": ":oncoming_police_car:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -19791,7 +22113,9 @@
       "citation",
       "crime",
       "help",
-      "officer"
+      "officer",
+      "transportation",
+      "911"
     ],
     "moji": "🚔"
   },
@@ -19800,7 +22124,7 @@
     "unicode_alternates": [],
     "name": "oncoming taxi",
     "shortname": ":oncoming_taxi:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -19812,7 +22136,9 @@
       "automobile",
       "city",
       "transport",
-      "service"
+      "service",
+      "transportation",
+      "travel"
     ],
     "moji": "🚖"
   },
@@ -19822,15 +22148,18 @@
     "unicode_alternates": [
       "0031-FE0F-20E3"
     ],
-    "name": "digit one",
+    "name": "keycap digit one",
     "shortname": ":one:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "1",
       "blue-square",
-      "numbers"
+      "numbers",
+      "number",
+      "math",
+      "symbol"
     ]
   },
   "open_file_folder": {
@@ -19843,7 +22172,9 @@
     "aliases_ascii": [],
     "keywords": [
       "documents",
-      "load"
+      "load",
+      "work",
+      "office"
     ],
     "moji": "📂"
   },
@@ -19852,18 +22183,22 @@
     "unicode_alternates": [],
     "name": "open hands sign",
     "shortname": ":open_hands:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "butterfly",
-      "fingers"
+      "fingers",
+      "body",
+      "hands",
+      "diversity",
+      "condolence"
     ],
     "moji": "👐"
   },
   "open_hands_tone1": {
     "unicode": "1F450-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "open hands sign tone 1",
     "shortname": ":open_hands_tone1:",
     "category": "people",
@@ -19872,11 +22207,12 @@
     "keywords": [
       "butterfly",
       "fingers"
-    ]
+    ],
+    "moji": "👐🏻"
   },
   "open_hands_tone2": {
     "unicode": "1F450-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "open hands sign tone 2",
     "shortname": ":open_hands_tone2:",
     "category": "people",
@@ -19885,11 +22221,12 @@
     "keywords": [
       "butterfly",
       "fingers"
-    ]
+    ],
+    "moji": "👐🏼"
   },
   "open_hands_tone3": {
     "unicode": "1F450-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "open hands sign tone 3",
     "shortname": ":open_hands_tone3:",
     "category": "people",
@@ -19898,11 +22235,12 @@
     "keywords": [
       "butterfly",
       "fingers"
-    ]
+    ],
+    "moji": "👐🏽"
   },
   "open_hands_tone4": {
     "unicode": "1F450-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "open hands sign tone 4",
     "shortname": ":open_hands_tone4:",
     "category": "people",
@@ -19911,11 +22249,12 @@
     "keywords": [
       "butterfly",
       "fingers"
-    ]
+    ],
+    "moji": "👐🏾"
   },
   "open_hands_tone5": {
     "unicode": "1F450-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "open hands sign tone 5",
     "shortname": ":open_hands_tone5:",
     "category": "people",
@@ -19924,14 +22263,15 @@
     "keywords": [
       "butterfly",
       "fingers"
-    ]
+    ],
+    "moji": "👐🏿"
   },
   "open_mouth": {
     "unicode": "1F62E",
     "unicode_alternates": [],
     "name": "face with open mouth",
     "shortname": ":open_mouth:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ":-O",
@@ -19949,7 +22289,10 @@
       "jaw",
       "gapping",
       "surprise",
-      "wow"
+      "wow",
+      "smiley",
+      "surprised",
+      "emotion"
     ],
     "moji": "😮"
   },
@@ -19958,7 +22301,7 @@
     "unicode_alternates": [],
     "name": "ophiuchus",
     "shortname": ":ophiuchus:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -19972,28 +22315,11 @@
       "zodiac",
       "purple-square",
       "sign",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "⛎"
   },
-  "optical_disk": {
-    "unicode": "1F5B8",
-    "unicode_alternates": [],
-    "name": "optical disc icon",
-    "shortname": ":optical_disk:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":optical_disc_icon:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "cd",
-      "dvd",
-      "disc",
-      "disk",
-      "technology"
-    ]
-  },
   "orange_book": {
     "unicode": "1F4D9",
     "unicode_alternates": [],
@@ -20005,13 +22331,17 @@
     "keywords": [
       "knowledge",
       "library",
-      "read"
+      "read",
+      "object",
+      "office",
+      "write",
+      "book"
     ],
     "moji": "📙"
   },
   "orthodox_cross": {
     "unicode": "2626",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "orthodox cross",
     "shortname": ":orthodox_cross:",
     "category": "symbols",
@@ -20021,7 +22351,8 @@
       "christian",
       "religion",
       "symbol"
-    ]
+    ],
+    "moji": "☦"
   },
   "outbox_tray": {
     "unicode": "1F4E4",
@@ -20033,10 +22364,23 @@
     "aliases_ascii": [],
     "keywords": [
       "email",
-      "inbox"
+      "inbox",
+      "work",
+      "office"
     ],
     "moji": "📤"
   },
+  "owl": {
+    "unicode": "1F989",
+    "unicode_alternates": [],
+    "name": "owl",
+    "shortname": ":owl:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦉"
+  },
   "ox": {
     "unicode": "1F402",
     "unicode_alternates": [],
@@ -20062,22 +22406,12 @@
     "aliases_ascii": [],
     "keywords": [
       "gift",
-      "mail"
+      "mail",
+      "object",
+      "office"
     ],
     "moji": "📦"
   },
-  "page": {
-    "unicode": "1F5CF",
-    "unicode_alternates": [],
-    "name": "page",
-    "shortname": ":page:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "document"
-    ]
-  },
   "page_facing_up": {
     "unicode": "1F4C4",
     "unicode_alternates": [],
@@ -20087,7 +22421,10 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "documents"
+      "documents",
+      "work",
+      "office",
+      "write"
     ],
     "moji": "📄"
   },
@@ -20100,7 +22437,9 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "documents"
+      "documents",
+      "office",
+      "write"
     ],
     "moji": "📃"
   },
@@ -20114,28 +22453,18 @@
     "aliases_ascii": [],
     "keywords": [
       "bbcall",
-      "oldschool"
+      "oldschool",
+      "electronics",
+      "work"
     ],
     "moji": "📟"
   },
-  "pages": {
-    "unicode": "1F5D0",
-    "unicode_alternates": [],
-    "name": "pages",
-    "shortname": ":pages:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "documents"
-    ]
-  },
   "paintbrush": {
     "unicode": "1F58C",
     "unicode_alternates": [],
     "name": "lower left paintbrush",
     "shortname": ":paintbrush:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":lower_left_paintbrush:"
     ],
@@ -20143,8 +22472,12 @@
     "keywords": [
       "brush",
       "art",
-      "painting"
-    ]
+      "painting",
+      "object",
+      "office",
+      "write"
+    ],
+    "moji": "🖌"
   },
   "palm_tree": {
     "unicode": "1F334",
@@ -20163,10 +22496,22 @@
       "coconuts",
       "fronds",
       "warm",
-      "tropical"
+      "tropical",
+      "trees"
     ],
     "moji": "🌴"
   },
+  "pancakes": {
+    "unicode": "1F95E",
+    "unicode_alternates": [],
+    "name": "pancakes",
+    "shortname": ":pancakes:",
+    "category": "food",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥞"
+  },
   "panda_face": {
     "unicode": "1F43C",
     "unicode_alternates": [],
@@ -20189,7 +22534,9 @@
       "bamboo",
       "china",
       "black",
-      "white"
+      "white",
+      "wildlife",
+      "roar"
     ],
     "moji": "🐼"
   },
@@ -20203,7 +22550,10 @@
     "aliases_ascii": [],
     "keywords": [
       "documents",
-      "stationery"
+      "stationery",
+      "object",
+      "work",
+      "office"
     ],
     "moji": "📎"
   },
@@ -20212,22 +22562,26 @@
     "unicode_alternates": [],
     "name": "linked paperclips",
     "shortname": ":paperclips:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":linked_paperclips:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "documents",
-      "stationery"
-    ]
+      "stationery",
+      "object",
+      "work",
+      "office"
+    ],
+    "moji": "🖇"
   },
   "park": {
     "unicode": "1F3DE",
     "unicode_alternates": [],
     "name": "national park",
     "shortname": ":park:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [
       ":national_park:"
     ],
@@ -20238,8 +22592,13 @@
       "wildlife",
       "forest",
       "wilderness",
-      "national"
-    ]
+      "national",
+      "travel",
+      "vacation",
+      "park",
+      "camp"
+    ],
+    "moji": "🏞"
   },
   "parking": {
     "unicode": "1F17F",
@@ -20248,14 +22607,15 @@
     ],
     "name": "negative squared latin capital letter p",
     "shortname": ":parking:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
       "blue-square",
       "cars",
-      "letter"
+      "letter",
+      "symbol"
     ],
     "moji": "🅿"
   },
@@ -20266,7 +22626,7 @@
     ],
     "name": "part alternation mark",
     "shortname": ":part_alternation_mark:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -20279,7 +22639,8 @@
       "cue",
       "letter",
       "m",
-      "japanese"
+      "japanese",
+      "symbol"
     ],
     "moji": "〽"
   },
@@ -20297,7 +22658,9 @@
       "cloud",
       "morning",
       "nature",
-      "weather"
+      "weather",
+      "sky",
+      "sun"
     ],
     "moji": "â›…"
   },
@@ -20306,7 +22669,7 @@
     "unicode_alternates": [],
     "name": "passport control",
     "shortname": ":passport_control:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -20317,13 +22680,14 @@
       "travel",
       "control",
       "foreign",
-      "identification"
+      "identification",
+      "symbol"
     ],
     "moji": "🛂"
   },
   "pause_button": {
     "unicode": "23F8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "double vertical bar",
     "shortname": ":pause_button:",
     "category": "symbols",
@@ -20335,11 +22699,12 @@
       "pause",
       "sound",
       "symbol"
-    ]
+    ],
+    "moji": "⏸"
   },
   "peace": {
     "unicode": "262E",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "peace symbol",
     "shortname": ":peace:",
     "category": "symbols",
@@ -20348,15 +22713,19 @@
     ],
     "aliases_ascii": [],
     "keywords": [
-      "sign"
-    ]
+      "sign",
+      "symbol",
+      "peace",
+      "drugs"
+    ],
+    "moji": "☮"
   },
   "peach": {
     "unicode": "1F351",
     "unicode_alternates": [],
     "name": "peach",
     "shortname": ":peach:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -20364,26 +22733,39 @@
       "fruit",
       "nature",
       "peach",
-      "fruit",
       "juicy",
-      "pit"
+      "pit",
+      "butt"
     ],
     "moji": "🍑"
   },
+  "peanuts": {
+    "unicode": "1F95C",
+    "unicode_alternates": [],
+    "name": "peanuts",
+    "shortname": ":peanuts:",
+    "category": "food",
+    "aliases": [
+      ":shelled_peanut:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥜"
+  },
   "pear": {
     "unicode": "1F350",
     "unicode_alternates": [],
     "name": "pear",
     "shortname": ":pear:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fruit",
       "nature",
       "pear",
-      "fruit",
-      "shape"
+      "shape",
+      "food"
     ],
     "moji": "🍐"
   },
@@ -20392,7 +22774,7 @@
     "unicode_alternates": [],
     "name": "lower left ballpoint pen",
     "shortname": ":pen_ballpoint:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":lower_left_ballpoint_pen:"
     ],
@@ -20400,15 +22782,18 @@
     "keywords": [
       "write",
       "bic",
-      "ink"
-    ]
+      "ink",
+      "object",
+      "office"
+    ],
+    "moji": "🖊"
   },
   "pen_fountain": {
     "unicode": "1F58B",
     "unicode_alternates": [],
     "name": "lower left fountain pen",
     "shortname": ":pen_fountain:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":lower_left_fountain_pen:"
     ],
@@ -20416,8 +22801,11 @@
     "keywords": [
       "write",
       "calligraphy",
-      "ink"
-    ]
+      "ink",
+      "object",
+      "office"
+    ],
+    "moji": "🖋"
   },
   "pencil": {
     "unicode": "1F4DD",
@@ -20433,7 +22821,9 @@
       "documents",
       "paper",
       "station",
-      "write"
+      "write",
+      "work",
+      "office"
     ],
     "moji": "📝"
   },
@@ -20450,26 +22840,12 @@
     "keywords": [
       "paper",
       "stationery",
-      "write"
+      "write",
+      "object",
+      "office"
     ],
     "moji": "✏"
   },
-  "pencil3": {
-    "unicode": "1F589",
-    "unicode_alternates": [],
-    "name": "lower left pencil",
-    "shortname": ":pencil3:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":lower_left_pencil:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "paper",
-      "stationery",
-      "write"
-    ]
-  },
   "penguin": {
     "unicode": "1F427",
     "unicode_alternates": [],
@@ -20480,46 +22856,17 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "nature"
+      "nature",
+      "wildlife"
     ],
     "moji": "🐧"
   },
-  "pennant_black": {
-    "unicode": "1F3F2",
-    "unicode_alternates": [],
-    "name": "black pennant",
-    "shortname": ":pennant_black:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":black_pennant:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "flag",
-      "athletics"
-    ]
-  },
-  "pennant_white": {
-    "unicode": "1F3F1",
-    "unicode_alternates": [],
-    "name": "white pennant",
-    "shortname": ":pennant_white:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":white_pennant:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "flag",
-      "athletics"
-    ]
-  },
   "pensive": {
     "unicode": "1F614",
     "unicode_alternates": [],
     "name": "pensive face",
     "shortname": ":pensive:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -20532,7 +22879,10 @@
       "reflective",
       "wistful",
       "meditate",
-      "serious"
+      "serious",
+      "smiley",
+      "emotion",
+      "rip"
     ],
     "moji": "😔"
   },
@@ -20541,7 +22891,7 @@
     "unicode_alternates": [],
     "name": "performing arts",
     "shortname": ":performing_arts:",
-    "category": "places",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -20552,10 +22902,11 @@
       "arts",
       "performance",
       "entertainment",
-      "acting",
       "story",
       "mask",
-      "masks"
+      "masks",
+      "theatre",
+      "movie"
     ],
     "moji": "🎭"
   },
@@ -20564,7 +22915,7 @@
     "unicode_alternates": [],
     "name": "persevering face",
     "shortname": ":persevere:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ">.<"
@@ -20575,7 +22926,11 @@
       "face",
       "no",
       "sick",
-      "upset"
+      "upset",
+      "sad",
+      "smiley",
+      "angry",
+      "emotion"
     ],
     "moji": "😣"
   },
@@ -20584,7 +22939,7 @@
     "unicode_alternates": [],
     "name": "person frowning",
     "shortname": ":person_frowning:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -20594,13 +22949,16 @@
       "dejected",
       "rejected",
       "sad",
-      "frown"
+      "frown",
+      "people",
+      "women",
+      "diversity"
     ],
     "moji": "🙍"
   },
   "person_frowning_tone1": {
     "unicode": "1F64D-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person frowning tone 1",
     "shortname": ":person_frowning_tone1:",
     "category": "people",
@@ -20614,11 +22972,12 @@
       "rejected",
       "sad",
       "frown"
-    ]
+    ],
+    "moji": "🙍🏻"
   },
   "person_frowning_tone2": {
     "unicode": "1F64D-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person frowning tone 2",
     "shortname": ":person_frowning_tone2:",
     "category": "people",
@@ -20632,11 +22991,12 @@
       "rejected",
       "sad",
       "frown"
-    ]
+    ],
+    "moji": "🙍🏼"
   },
   "person_frowning_tone3": {
     "unicode": "1F64D-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person frowning tone 3",
     "shortname": ":person_frowning_tone3:",
     "category": "people",
@@ -20650,11 +23010,12 @@
       "rejected",
       "sad",
       "frown"
-    ]
+    ],
+    "moji": "🙍🏽"
   },
   "person_frowning_tone4": {
     "unicode": "1F64D-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person frowning tone 4",
     "shortname": ":person_frowning_tone4:",
     "category": "people",
@@ -20668,11 +23029,12 @@
       "rejected",
       "sad",
       "frown"
-    ]
+    ],
+    "moji": "🙍🏾"
   },
   "person_frowning_tone5": {
     "unicode": "1F64D-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person frowning tone 5",
     "shortname": ":person_frowning_tone5:",
     "category": "people",
@@ -20686,14 +23048,15 @@
       "rejected",
       "sad",
       "frown"
-    ]
+    ],
+    "moji": "🙍🏿"
   },
   "person_with_blond_hair": {
     "unicode": "1F471",
     "unicode_alternates": [],
     "name": "person with blond hair",
     "shortname": ":person_with_blond_hair:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -20703,13 +23066,16 @@
       "young",
       "western",
       "westerner",
-      "occidental"
+      "occidental",
+      "people",
+      "men",
+      "diversity"
     ],
     "moji": "👱"
   },
   "person_with_blond_hair_tone1": {
     "unicode": "1F471-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with blond hair tone 1",
     "shortname": ":person_with_blond_hair_tone1:",
     "category": "people",
@@ -20723,11 +23089,12 @@
       "western",
       "westerner",
       "occidental"
-    ]
+    ],
+    "moji": "👱🏻"
   },
   "person_with_blond_hair_tone2": {
     "unicode": "1F471-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with blond hair tone 2",
     "shortname": ":person_with_blond_hair_tone2:",
     "category": "people",
@@ -20741,11 +23108,12 @@
       "western",
       "westerner",
       "occidental"
-    ]
+    ],
+    "moji": "👱🏼"
   },
   "person_with_blond_hair_tone3": {
     "unicode": "1F471-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with blond hair tone 3",
     "shortname": ":person_with_blond_hair_tone3:",
     "category": "people",
@@ -20759,11 +23127,12 @@
       "western",
       "westerner",
       "occidental"
-    ]
+    ],
+    "moji": "👱🏽"
   },
   "person_with_blond_hair_tone4": {
     "unicode": "1F471-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with blond hair tone 4",
     "shortname": ":person_with_blond_hair_tone4:",
     "category": "people",
@@ -20777,11 +23146,12 @@
       "western",
       "westerner",
       "occidental"
-    ]
+    ],
+    "moji": "👱🏾"
   },
   "person_with_blond_hair_tone5": {
     "unicode": "1F471-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with blond hair tone 5",
     "shortname": ":person_with_blond_hair_tone5:",
     "category": "people",
@@ -20795,14 +23165,15 @@
       "western",
       "westerner",
       "occidental"
-    ]
+    ],
+    "moji": "👱🏿"
   },
   "person_with_pouting_face": {
     "unicode": "1F64E",
     "unicode_alternates": [],
     "name": "person with pouting face",
     "shortname": ":person_with_pouting_face:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -20812,13 +23183,16 @@
       "pout",
       "sexy",
       "cute",
-      "annoyed"
+      "annoyed",
+      "people",
+      "women",
+      "diversity"
     ],
     "moji": "🙎"
   },
   "person_with_pouting_face_tone1": {
     "unicode": "1F64E-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with pouting face tone1",
     "shortname": ":person_with_pouting_face_tone1:",
     "category": "people",
@@ -20832,11 +23206,12 @@
       "sexy",
       "cute",
       "annoyed"
-    ]
+    ],
+    "moji": "🙎🏻"
   },
   "person_with_pouting_face_tone2": {
     "unicode": "1F64E-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with pouting face tone2",
     "shortname": ":person_with_pouting_face_tone2:",
     "category": "people",
@@ -20850,11 +23225,12 @@
       "sexy",
       "cute",
       "annoyed"
-    ]
+    ],
+    "moji": "🙎🏼"
   },
   "person_with_pouting_face_tone3": {
     "unicode": "1F64E-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with pouting face tone3",
     "shortname": ":person_with_pouting_face_tone3:",
     "category": "people",
@@ -20868,11 +23244,12 @@
       "sexy",
       "cute",
       "annoyed"
-    ]
+    ],
+    "moji": "🙎🏽"
   },
   "person_with_pouting_face_tone4": {
     "unicode": "1F64E-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with pouting face tone4",
     "shortname": ":person_with_pouting_face_tone4:",
     "category": "people",
@@ -20886,11 +23263,12 @@
       "sexy",
       "cute",
       "annoyed"
-    ]
+    ],
+    "moji": "🙎🏾"
   },
   "person_with_pouting_face_tone5": {
     "unicode": "1F64E-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with pouting face tone5",
     "shortname": ":person_with_pouting_face_tone5:",
     "category": "people",
@@ -20904,11 +23282,12 @@
       "sexy",
       "cute",
       "annoyed"
-    ]
+    ],
+    "moji": "🙎🏿"
   },
   "pick": {
     "unicode": "26CF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "pick",
     "shortname": ":pick:",
     "category": "objects",
@@ -20917,8 +23296,10 @@
     "keywords": [
       "mining",
       "object",
-      "tool"
-    ]
+      "tool",
+      "weapon"
+    ],
+    "moji": "⛏"
   },
   "pig": {
     "unicode": "1F437",
@@ -20976,7 +23357,6 @@
       "food",
       "eat",
       "cute",
-      "oink",
       "pink",
       "smell",
       "truffle"
@@ -20993,7 +23373,9 @@
     "aliases_ascii": [],
     "keywords": [
       "health",
-      "medicine"
+      "medicine",
+      "object",
+      "drugs"
     ],
     "moji": "💊"
   },
@@ -21002,7 +23384,7 @@
     "unicode_alternates": [],
     "name": "pineapple",
     "shortname": ":pineapple:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -21018,7 +23400,7 @@
   },
   "ping_pong": {
     "unicode": "1F3D3",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "table tennis paddle and ball",
     "shortname": ":ping_pong:",
     "category": "activity",
@@ -21026,22 +23408,13 @@
       ":table_tennis:"
     ],
     "aliases_ascii": [],
-    "keywords": []
-  },
-  "piracy": {
-    "unicode": "1F572",
-    "unicode_alternates": [],
-    "name": "no piracy",
-    "shortname": ":piracy:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":no_piracy:"
-    ],
-    "aliases_ascii": [],
     "keywords": [
-      "theft",
-      "rule"
-    ]
+      "game",
+      "ball",
+      "sport",
+      "ping pong"
+    ],
+    "moji": "🏓"
   },
   "pisces": {
     "unicode": "2653",
@@ -21050,7 +23423,7 @@
     ],
     "name": "pisces",
     "shortname": ":pisces:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -21063,9 +23436,8 @@
       "zodiac",
       "sign",
       "purple-square",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♓"
   },
@@ -21074,7 +23446,7 @@
     "unicode_alternates": [],
     "name": "slice of pizza",
     "shortname": ":pizza:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -21086,13 +23458,14 @@
       "italian",
       "italy",
       "slice",
-      "peperoni"
+      "peperoni",
+      "boys night"
     ],
     "moji": "🍕"
   },
   "place_of_worship": {
     "unicode": "1F6D0",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "place of worship",
     "shortname": ":place_of_worship:",
     "category": "symbols",
@@ -21100,11 +23473,16 @@
       ":worship_symbol:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "religion",
+      "symbol",
+      "pray"
+    ],
+    "moji": "🛐"
   },
   "play_pause": {
     "unicode": "23EF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "black right-pointing double triangle with double vertical bar",
     "shortname": ":play_pause:",
     "category": "symbols",
@@ -21117,26 +23495,30 @@
       "right",
       "sound",
       "symbol"
-    ]
+    ],
+    "moji": "⏯"
   },
   "point_down": {
     "unicode": "1F447",
     "unicode_alternates": [],
     "name": "white down pointing backhand index",
     "shortname": ":point_down:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "direction",
       "fingers",
-      "hand"
+      "hand",
+      "body",
+      "hands",
+      "diversity"
     ],
     "moji": "👇"
   },
   "point_down_tone1": {
     "unicode": "1F447-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white down pointing backhand index tone 1",
     "shortname": ":point_down_tone1:",
     "category": "people",
@@ -21146,11 +23528,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👇🏻"
   },
   "point_down_tone2": {
     "unicode": "1F447-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white down pointing backhand index tone 2",
     "shortname": ":point_down_tone2:",
     "category": "people",
@@ -21160,11 +23543,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👇🏼"
   },
   "point_down_tone3": {
     "unicode": "1F447-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white down pointing backhand index tone 3",
     "shortname": ":point_down_tone3:",
     "category": "people",
@@ -21174,11 +23558,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👇🏽"
   },
   "point_down_tone4": {
     "unicode": "1F447-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white down pointing backhand index tone 4",
     "shortname": ":point_down_tone4:",
     "category": "people",
@@ -21188,11 +23573,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👇🏾"
   },
   "point_down_tone5": {
     "unicode": "1F447-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white down pointing backhand index tone 5",
     "shortname": ":point_down_tone5:",
     "category": "people",
@@ -21202,26 +23588,31 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👇🏿"
   },
   "point_left": {
     "unicode": "1F448",
     "unicode_alternates": [],
     "name": "white left pointing backhand index",
     "shortname": ":point_left:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "direction",
       "fingers",
-      "hand"
+      "hand",
+      "body",
+      "hands",
+      "hi",
+      "diversity"
     ],
     "moji": "👈"
   },
   "point_left_tone1": {
     "unicode": "1F448-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white left pointing backhand index tone 1",
     "shortname": ":point_left_tone1:",
     "category": "people",
@@ -21231,11 +23622,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👈🏻"
   },
   "point_left_tone2": {
     "unicode": "1F448-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white left pointing backhand index tone 2",
     "shortname": ":point_left_tone2:",
     "category": "people",
@@ -21245,11 +23637,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👈🏼"
   },
   "point_left_tone3": {
     "unicode": "1F448-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white left pointing backhand index tone 3",
     "shortname": ":point_left_tone3:",
     "category": "people",
@@ -21259,11 +23652,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👈🏽"
   },
   "point_left_tone4": {
     "unicode": "1F448-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white left pointing backhand index tone 4",
     "shortname": ":point_left_tone4:",
     "category": "people",
@@ -21273,11 +23667,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👈🏾"
   },
   "point_left_tone5": {
     "unicode": "1F448-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white left pointing backhand index tone 5",
     "shortname": ":point_left_tone5:",
     "category": "people",
@@ -21287,26 +23682,31 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👈🏿"
   },
   "point_right": {
     "unicode": "1F449",
     "unicode_alternates": [],
     "name": "white right pointing backhand index",
     "shortname": ":point_right:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "direction",
       "fingers",
-      "hand"
+      "hand",
+      "body",
+      "hands",
+      "hi",
+      "diversity"
     ],
     "moji": "👉"
   },
   "point_right_tone1": {
     "unicode": "1F449-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white right pointing backhand index tone 1",
     "shortname": ":point_right_tone1:",
     "category": "people",
@@ -21316,11 +23716,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👉🏻"
   },
   "point_right_tone2": {
     "unicode": "1F449-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white right pointing backhand index tone 2",
     "shortname": ":point_right_tone2:",
     "category": "people",
@@ -21330,11 +23731,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👉🏼"
   },
   "point_right_tone3": {
     "unicode": "1F449-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white right pointing backhand index tone 3",
     "shortname": ":point_right_tone3:",
     "category": "people",
@@ -21344,11 +23746,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👉🏽"
   },
   "point_right_tone4": {
     "unicode": "1F449-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white right pointing backhand index tone 4",
     "shortname": ":point_right_tone4:",
     "category": "people",
@@ -21358,11 +23761,12 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👉🏾"
   },
   "point_right_tone5": {
     "unicode": "1F449-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white right pointing backhand index tone 5",
     "shortname": ":point_right_tone5:",
     "category": "people",
@@ -21372,7 +23776,8 @@
       "direction",
       "finger",
       "hand"
-    ]
+    ],
+    "moji": "👉🏿"
   },
   "point_up": {
     "unicode": "261D",
@@ -21381,13 +23786,17 @@
     ],
     "name": "white up pointing index",
     "shortname": ":point_up:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "direction",
       "fingers",
-      "hand"
+      "hand",
+      "body",
+      "hands",
+      "emojione",
+      "diversity"
     ],
     "moji": "☝"
   },
@@ -21396,19 +23805,22 @@
     "unicode_alternates": [],
     "name": "white up pointing backhand index",
     "shortname": ":point_up_2:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "direction",
       "fingers",
-      "hand"
+      "hand",
+      "body",
+      "hands",
+      "diversity"
     ],
     "moji": "👆"
   },
   "point_up_2_tone1": {
     "unicode": "1F446-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing backhand index tone 1",
     "shortname": ":point_up_2_tone1:",
     "category": "people",
@@ -21419,11 +23831,12 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "👆🏻"
   },
   "point_up_2_tone2": {
     "unicode": "1F446-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing backhand index tone 2",
     "shortname": ":point_up_2_tone2:",
     "category": "people",
@@ -21434,11 +23847,12 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "👆🏼"
   },
   "point_up_2_tone3": {
     "unicode": "1F446-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing backhand index tone 3",
     "shortname": ":point_up_2_tone3:",
     "category": "people",
@@ -21449,11 +23863,12 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "👆🏽"
   },
   "point_up_2_tone4": {
     "unicode": "1F446-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing backhand index tone 4",
     "shortname": ":point_up_2_tone4:",
     "category": "people",
@@ -21464,11 +23879,12 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "👆🏾"
   },
   "point_up_2_tone5": {
     "unicode": "1F446-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing backhand index tone 5",
     "shortname": ":point_up_2_tone5:",
     "category": "people",
@@ -21479,11 +23895,12 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "👆🏿"
   },
   "point_up_tone1": {
     "unicode": "261D-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing index tone 1",
     "shortname": ":point_up_tone1:",
     "category": "people",
@@ -21494,11 +23911,12 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "☝🏻"
   },
   "point_up_tone2": {
     "unicode": "261D-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing index tone 2",
     "shortname": ":point_up_tone2:",
     "category": "people",
@@ -21509,11 +23927,12 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "☝🏼"
   },
   "point_up_tone3": {
     "unicode": "261D-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing index tone 3",
     "shortname": ":point_up_tone3:",
     "category": "people",
@@ -21524,11 +23943,12 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "☝🏽"
   },
   "point_up_tone4": {
     "unicode": "261D-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing index tone 4",
     "shortname": ":point_up_tone4:",
     "category": "people",
@@ -21539,11 +23959,12 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "☝🏾"
   },
   "point_up_tone5": {
     "unicode": "261D-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white up pointing index tone 5",
     "shortname": ":point_up_tone5:",
     "category": "people",
@@ -21554,14 +23975,15 @@
       "finger",
       "hand",
       "one"
-    ]
+    ],
+    "moji": "☝🏿"
   },
   "police_car": {
     "unicode": "1F693",
     "unicode_alternates": [],
     "name": "police car",
     "shortname": ":police_car:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -21577,7 +23999,8 @@
       "citation",
       "crime",
       "help",
-      "officer"
+      "officer",
+      "911"
     ],
     "moji": "🚓"
   },
@@ -21595,7 +24018,6 @@
       "dog",
       "nature",
       "poodle",
-      "dog",
       "clip",
       "showy",
       "sophisticated",
@@ -21608,7 +24030,7 @@
     "unicode_alternates": [],
     "name": "pile of poo",
     "shortname": ":poop:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [
       ":shit:",
       ":hankey:",
@@ -21620,32 +24042,41 @@
       "shit",
       "shitface",
       "turd",
-      "poo"
+      "poo",
+      "bathroom",
+      "sol",
+      "diarrhea"
     ],
     "moji": "💩"
   },
   "popcorn": {
     "unicode": "1F37F",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "popcorn",
     "shortname": ":popcorn:",
-    "category": "foods",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "food",
+      "parties"
+    ],
+    "moji": "🍿"
   },
   "post_office": {
     "unicode": "1F3E3",
     "unicode_alternates": [],
     "name": "japanese post office",
     "shortname": ":post_office:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "building",
       "communication",
-      "email"
+      "email",
+      "places",
+      "post office"
     ],
     "moji": "🏣"
   },
@@ -21659,7 +24090,8 @@
     "aliases_ascii": [],
     "keywords": [
       "instrument",
-      "music"
+      "music",
+      "object"
     ],
     "moji": "📯"
   },
@@ -21674,7 +24106,8 @@
     "keywords": [
       "email",
       "envelope",
-      "letter"
+      "letter",
+      "object"
     ],
     "moji": "📮"
   },
@@ -21683,7 +24116,7 @@
     "unicode_alternates": [],
     "name": "potable water symbol",
     "shortname": ":potable_water:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -21699,27 +24132,40 @@
       "clear",
       "clean",
       "aqua",
-      "h20"
+      "h20",
+      "symbol"
     ],
     "moji": "🚰"
   },
+  "potato": {
+    "unicode": "1F954",
+    "unicode_alternates": [],
+    "name": "potato",
+    "shortname": ":potato:",
+    "category": "food",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥔"
+  },
   "pouch": {
     "unicode": "1F45D",
     "unicode_alternates": [],
     "name": "pouch",
     "shortname": ":pouch:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "accessories",
       "bag",
       "pouch",
-      "bag",
       "cosmetic",
       "packing",
       "grandma",
-      "makeup"
+      "makeup",
+      "women",
+      "fashion"
     ],
     "moji": "👝"
   },
@@ -21728,7 +24174,7 @@
     "unicode_alternates": [],
     "name": "poultry leg",
     "shortname": ":poultry_leg:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -21737,7 +24183,8 @@
       "poultry",
       "leg",
       "chicken",
-      "fried"
+      "fried",
+      "holidays"
     ],
     "moji": "🍗"
   },
@@ -21759,13 +24206,9 @@
       "uk",
       "pound",
       "britain",
-      "british",
       "banknote",
-      "money",
-      "currency",
       "paper",
-      "cash",
-      "bills"
+      "cash"
     ],
     "moji": "💷"
   },
@@ -21774,7 +24217,7 @@
     "unicode_alternates": [],
     "name": "pouting cat face",
     "shortname": ":pouting_cat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -21784,7 +24227,8 @@
       "annoyed",
       "miffed",
       "glower",
-      "frown"
+      "frown",
+      "cat"
     ],
     "moji": "😾"
   },
@@ -21793,7 +24237,7 @@
     "unicode_alternates": [],
     "name": "person with folded hands",
     "shortname": ":pray:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -21807,13 +24251,19 @@
       "hands",
       "sorrow",
       "regret",
-      "sorry"
+      "sorry",
+      "body",
+      "hi",
+      "luck",
+      "thank you",
+      "diversity",
+      "scientology"
     ],
     "moji": "🙏"
   },
   "pray_tone1": {
     "unicode": "1F64F-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with folded hands tone 1",
     "shortname": ":pray_tone1:",
     "category": "people",
@@ -21830,11 +24280,12 @@
       "sorrow",
       "regret",
       "sorry"
-    ]
+    ],
+    "moji": "🙏🏻"
   },
   "pray_tone2": {
     "unicode": "1F64F-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with folded hands tone 2",
     "shortname": ":pray_tone2:",
     "category": "people",
@@ -21851,11 +24302,12 @@
       "sorrow",
       "regret",
       "sorry"
-    ]
+    ],
+    "moji": "🙏🏼"
   },
   "pray_tone3": {
     "unicode": "1F64F-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with folded hands tone 3",
     "shortname": ":pray_tone3:",
     "category": "people",
@@ -21872,11 +24324,12 @@
       "sorrow",
       "regret",
       "sorry"
-    ]
+    ],
+    "moji": "🙏🏽"
   },
   "pray_tone4": {
     "unicode": "1F64F-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with folded hands tone 4",
     "shortname": ":pray_tone4:",
     "category": "people",
@@ -21893,11 +24346,12 @@
       "sorrow",
       "regret",
       "sorry"
-    ]
+    ],
+    "moji": "🙏🏾"
   },
   "pray_tone5": {
     "unicode": "1F64F-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person with folded hands tone 5",
     "shortname": ":pray_tone5:",
     "category": "people",
@@ -21914,24 +24368,173 @@
       "sorrow",
       "regret",
       "sorry"
-    ]
+    ],
+    "moji": "🙏🏿"
   },
   "prayer_beads": {
     "unicode": "1F4FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "prayer beads",
     "shortname": ":prayer_beads:",
     "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "object",
+      "rosary"
+    ],
+    "moji": "📿"
+  },
+  "pregnant_woman": {
+    "unicode": "1F930",
+    "unicode_alternates": [],
+    "name": "pregnant woman",
+    "shortname": ":pregnant_woman:",
+    "category": "people",
+    "aliases": [
+      ":expecting_woman:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤰"
+  },
+  "pregnant_woman_tone1": {
+    "unicode": "1F930-1F3FB",
+    "unicode_alternates": [],
+    "name": "pregnant woman tone 1",
+    "shortname": ":pregnant_woman_tone1:",
+    "category": "people",
+    "aliases": [
+      ":expecting_woman_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤰🏻"
+  },
+  "pregnant_woman_tone2": {
+    "unicode": "1F930-1F3FC",
+    "unicode_alternates": [],
+    "name": "pregnant woman tone 2",
+    "shortname": ":pregnant_woman_tone2:",
+    "category": "people",
+    "aliases": [
+      ":expecting_woman_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤰🏼"
+  },
+  "pregnant_woman_tone3": {
+    "unicode": "1F930-1F3FD",
+    "unicode_alternates": [],
+    "name": "pregnant woman tone 3",
+    "shortname": ":pregnant_woman_tone3:",
+    "category": "people",
+    "aliases": [
+      ":expecting_woman_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤰🏽"
+  },
+  "pregnant_woman_tone4": {
+    "unicode": "1F930-1F3FE",
+    "unicode_alternates": [],
+    "name": "pregnant woman tone 4",
+    "shortname": ":pregnant_woman_tone4:",
+    "category": "people",
+    "aliases": [
+      ":expecting_woman_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤰🏾"
+  },
+  "pregnant_woman_tone5": {
+    "unicode": "1F930-1F3FF",
+    "unicode_alternates": [],
+    "name": "pregnant woman tone 5",
+    "shortname": ":pregnant_woman_tone5:",
+    "category": "people",
+    "aliases": [
+      ":expecting_woman_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤰🏿"
+  },
+  "prince": {
+    "unicode": "1F934",
+    "unicode_alternates": [],
+    "name": "prince",
+    "shortname": ":prince:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤴"
+  },
+  "prince_tone1": {
+    "unicode": "1F934-1F3FB",
+    "unicode_alternates": [],
+    "name": "prince tone 1",
+    "shortname": ":prince_tone1:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤴🏻"
+  },
+  "prince_tone2": {
+    "unicode": "1F934-1F3FC",
+    "unicode_alternates": [],
+    "name": "prince tone 2",
+    "shortname": ":prince_tone2:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤴🏼"
+  },
+  "prince_tone3": {
+    "unicode": "1F934-1F3FD",
+    "unicode_alternates": [],
+    "name": "prince tone 3",
+    "shortname": ":prince_tone3:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤴🏽"
+  },
+  "prince_tone4": {
+    "unicode": "1F934-1F3FE",
+    "unicode_alternates": [],
+    "name": "prince tone 4",
+    "shortname": ":prince_tone4:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤴🏾"
+  },
+  "prince_tone5": {
+    "unicode": "1F934-1F3FF",
+    "unicode_alternates": [],
+    "name": "prince tone 5",
+    "shortname": ":prince_tone5:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤴🏿"
   },
   "princess": {
     "unicode": "1F478",
     "unicode_alternates": [],
     "name": "princess",
     "shortname": ":princess:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -21947,13 +24550,18 @@
       "queen",
       "daughter",
       "disney",
-      "high-maintenance"
+      "high-maintenance",
+      "people",
+      "women",
+      "diversity",
+      "beautiful",
+      "girls night"
     ],
     "moji": "👸"
   },
   "princess_tone1": {
     "unicode": "1F478-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "princess tone 1",
     "shortname": ":princess_tone1:",
     "category": "people",
@@ -21972,11 +24580,12 @@
       "daughter",
       "disney",
       "high-maintenance"
-    ]
+    ],
+    "moji": "👸🏻"
   },
   "princess_tone2": {
     "unicode": "1F478-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "princess tone 2",
     "shortname": ":princess_tone2:",
     "category": "people",
@@ -21995,11 +24604,12 @@
       "daughter",
       "disney",
       "high-maintenance"
-    ]
+    ],
+    "moji": "👸🏼"
   },
   "princess_tone3": {
     "unicode": "1F478-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "princess tone 3",
     "shortname": ":princess_tone3:",
     "category": "people",
@@ -22018,11 +24628,12 @@
       "daughter",
       "disney",
       "high-maintenance"
-    ]
+    ],
+    "moji": "👸🏽"
   },
   "princess_tone4": {
     "unicode": "1F478-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "princess tone 4",
     "shortname": ":princess_tone4:",
     "category": "people",
@@ -22041,11 +24652,12 @@
       "daughter",
       "disney",
       "high-maintenance"
-    ]
+    ],
+    "moji": "👸🏾"
   },
   "princess_tone5": {
     "unicode": "1F478-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "princess tone 5",
     "shortname": ":princess_tone5:",
     "category": "people",
@@ -22064,49 +24676,34 @@
       "daughter",
       "disney",
       "high-maintenance"
-    ]
+    ],
+    "moji": "👸🏿"
   },
   "printer": {
     "unicode": "1F5A8",
     "unicode_alternates": [],
     "name": "printer",
     "shortname": ":printer:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "hardcopy",
       "paper",
       "inkjet",
-      "laser"
-    ]
-  },
-  "prohibited": {
-    "unicode": "1F6C7",
-    "unicode_alternates": [],
-    "name": "prohibited sign",
-    "shortname": ":prohibited:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":prohibited_sign:"
+      "laser",
+      "electronics",
+      "work",
+      "office"
     ],
-    "aliases_ascii": [],
-    "keywords": [
-      "no",
-      "not",
-      "denied",
-      "disallow",
-      "forbid",
-      "limit",
-      "stop"
-    ]
+    "moji": "🖨"
   },
   "projector": {
     "unicode": "1F4FD",
     "unicode_alternates": [],
     "name": "film projector",
     "shortname": ":projector:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":film_projector:"
     ],
@@ -22117,26 +24714,35 @@
       "motion",
       "picture",
       "8mm",
-      "16mm"
-    ]
+      "16mm",
+      "object",
+      "camera"
+    ],
+    "moji": "📽"
   },
   "punch": {
     "unicode": "1F44A",
     "unicode_alternates": [],
     "name": "fisted hand sign",
     "shortname": ":punch:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fist",
-      "hand"
+      "hand",
+      "body",
+      "hands",
+      "hi",
+      "fist bump",
+      "diversity",
+      "boys night"
     ],
     "moji": "👊"
   },
   "punch_tone1": {
     "unicode": "1F44A-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "fisted hand sign tone 1",
     "shortname": ":punch_tone1:",
     "category": "people",
@@ -22145,11 +24751,12 @@
     "keywords": [
       "fist",
       "punch"
-    ]
+    ],
+    "moji": "👊🏻"
   },
   "punch_tone2": {
     "unicode": "1F44A-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "fisted hand sign tone 2",
     "shortname": ":punch_tone2:",
     "category": "people",
@@ -22158,11 +24765,12 @@
     "keywords": [
       "fist",
       "punch"
-    ]
+    ],
+    "moji": "👊🏼"
   },
   "punch_tone3": {
     "unicode": "1F44A-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "fisted hand sign tone 3",
     "shortname": ":punch_tone3:",
     "category": "people",
@@ -22171,11 +24779,12 @@
     "keywords": [
       "fist",
       "punch"
-    ]
+    ],
+    "moji": "👊🏽"
   },
   "punch_tone4": {
     "unicode": "1F44A-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "fisted hand sign tone 4",
     "shortname": ":punch_tone4:",
     "category": "people",
@@ -22184,11 +24793,12 @@
     "keywords": [
       "fist",
       "punch"
-    ]
+    ],
+    "moji": "👊🏾"
   },
   "punch_tone5": {
     "unicode": "1F44A-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "fisted hand sign tone 5",
     "shortname": ":punch_tone5:",
     "category": "people",
@@ -22197,14 +24807,15 @@
     "keywords": [
       "fist",
       "punch"
-    ]
+    ],
+    "moji": "👊🏿"
   },
   "purple_heart": {
     "unicode": "1F49C",
     "unicode_alternates": [],
     "name": "purple heart",
     "shortname": ":purple_heart:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22215,7 +24826,6 @@
       "purple",
       "violet",
       "heart",
-      "love",
       "sensitive",
       "understanding",
       "compassionate",
@@ -22224,7 +24834,8 @@
       "honor",
       "royalty",
       "veteran",
-      "sacrifice"
+      "sacrifice",
+      "symbol"
     ],
     "moji": "💜"
   },
@@ -22233,7 +24844,7 @@
     "unicode_alternates": [],
     "name": "purse",
     "shortname": ":purse:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22246,9 +24857,9 @@
       "handbag",
       "coin bag",
       "accessory",
-      "money",
       "ladies",
-      "shopping"
+      "shopping",
+      "women"
     ],
     "moji": "👛"
   },
@@ -22261,28 +24872,18 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "stationery"
+      "stationery",
+      "object",
+      "office"
     ],
     "moji": "📌"
   },
-  "pushpin_black": {
-    "unicode": "1F588",
-    "unicode_alternates": [],
-    "name": "black pushpin",
-    "shortname": ":pushpin_black:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "stationery"
-    ]
-  },
   "put_litter_in_its_place": {
     "unicode": "1F6AE",
     "unicode_alternates": [],
     "name": "put litter in its place symbol",
     "shortname": ":put_litter_in_its_place:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22292,7 +24893,8 @@
       "trash",
       "garbage",
       "receptacle",
-      "can"
+      "can",
+      "symbol"
     ],
     "moji": "🚮"
   },
@@ -22301,12 +24903,15 @@
     "unicode_alternates": [],
     "name": "black question mark ornament",
     "shortname": ":question:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "confused",
-      "doubt"
+      "doubt",
+      "symbol",
+      "punctuation",
+      "wth"
     ],
     "moji": "❓"
   },
@@ -22320,7 +24925,8 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "nature"
+      "nature",
+      "wildlife"
     ],
     "moji": "🐰"
   },
@@ -22339,7 +24945,8 @@
       "bunny",
       "easter",
       "reproduction",
-      "prolific"
+      "prolific",
+      "wildlife"
     ],
     "moji": "🐇"
   },
@@ -22348,7 +24955,7 @@
     "unicode_alternates": [],
     "name": "racing car",
     "shortname": ":race_car:",
-    "category": "activity",
+    "category": "travel",
     "aliases": [
       ":racing_car:"
     ],
@@ -22359,8 +24966,11 @@
       "stock",
       "nascar",
       "speed",
-      "drive"
-    ]
+      "drive",
+      "transportation",
+      "car"
+    ],
+    "moji": "🏎"
   },
   "racehorse": {
     "unicode": "1F40E",
@@ -22391,7 +25001,8 @@
       "gelding",
       "yearling",
       "thoroughbred",
-      "pony"
+      "pony",
+      "wildlife"
     ],
     "moji": "🐎"
   },
@@ -22407,7 +25018,8 @@
       "communication",
       "music",
       "podcast",
-      "program"
+      "program",
+      "electronics"
     ],
     "moji": "📻"
   },
@@ -22416,17 +25028,19 @@
     "unicode_alternates": [],
     "name": "radio button",
     "shortname": ":radio_button:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "input"
+      "input",
+      "symbol",
+      "circle"
     ],
     "moji": "🔘"
   },
   "radioactive": {
     "unicode": "2622",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "radioactive sign",
     "shortname": ":radioactive:",
     "category": "symbols",
@@ -22435,15 +25049,17 @@
     ],
     "aliases_ascii": [],
     "keywords": [
-      "symbol"
-    ]
+      "symbol",
+      "science"
+    ],
+    "moji": "☢"
   },
   "rage": {
     "unicode": "1F621",
     "unicode_alternates": [],
     "name": "pouting face",
     "shortname": ":rage:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22454,7 +25070,9 @@
       "pout",
       "anger",
       "rage",
-      "irate"
+      "irate",
+      "smiley",
+      "emotion"
     ],
     "moji": "😡"
   },
@@ -22463,7 +25081,7 @@
     "unicode_alternates": [],
     "name": "railway car",
     "shortname": ":railway_car:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22473,7 +25091,8 @@
       "rail",
       "car",
       "coach",
-      "train"
+      "train",
+      "travel"
     ],
     "moji": "🚃"
   },
@@ -22482,7 +25101,7 @@
     "unicode_alternates": [],
     "name": "railway track",
     "shortname": ":railway_track:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [
       ":railroad_track:"
     ],
@@ -22492,15 +25111,18 @@
       "trolley",
       "subway",
       "locomotive",
-      "transit"
-    ]
+      "transit",
+      "travel",
+      "vacation"
+    ],
+    "moji": "🛤"
   },
   "rainbow": {
     "unicode": "1F308",
     "unicode_alternates": [],
     "name": "rainbow",
     "shortname": ":rainbow:",
-    "category": "nature",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22516,28 +25138,114 @@
       "spectrum",
       "refract",
       "leprechaun",
-      "gold"
+      "gold",
+      "weather",
+      "gay",
+      "rain"
     ],
     "moji": "🌈"
   },
+  "raised_back_of_hand": {
+    "unicode": "1F91A",
+    "unicode_alternates": [],
+    "name": "raised back of hand",
+    "shortname": ":raised_back_of_hand:",
+    "category": "people",
+    "aliases": [
+      ":back_of_hand:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤚"
+  },
+  "raised_back_of_hand_tone1": {
+    "unicode": "1F91A-1F3FB",
+    "unicode_alternates": [],
+    "name": "raised back of hand tone 1",
+    "shortname": ":raised_back_of_hand_tone1:",
+    "category": "people",
+    "aliases": [
+      ":back_of_hand_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤚🏻"
+  },
+  "raised_back_of_hand_tone2": {
+    "unicode": "1F91A-1F3FC",
+    "unicode_alternates": [],
+    "name": "raised back of hand tone 2",
+    "shortname": ":raised_back_of_hand_tone2:",
+    "category": "people",
+    "aliases": [
+      ":back_of_hand_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤚🏼"
+  },
+  "raised_back_of_hand_tone3": {
+    "unicode": "1F91A-1F3FD",
+    "unicode_alternates": [],
+    "name": "raised back of hand tone 3",
+    "shortname": ":raised_back_of_hand_tone3:",
+    "category": "people",
+    "aliases": [
+      ":back_of_hand_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤚🏽"
+  },
+  "raised_back_of_hand_tone4": {
+    "unicode": "1F91A-1F3FE",
+    "unicode_alternates": [],
+    "name": "raised back of hand tone 4",
+    "shortname": ":raised_back_of_hand_tone4:",
+    "category": "people",
+    "aliases": [
+      ":back_of_hand_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤚🏾"
+  },
+  "raised_back_of_hand_tone5": {
+    "unicode": "1F91A-1F3FF",
+    "unicode_alternates": [],
+    "name": "raised back of hand tone 5",
+    "shortname": ":raised_back_of_hand_tone5:",
+    "category": "people",
+    "aliases": [
+      ":back_of_hand_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤚🏿"
+  },
   "raised_hand": {
     "unicode": "270B",
     "unicode_alternates": [],
     "name": "raised hand",
     "shortname": ":raised_hand:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "female",
       "girl",
-      "woman"
+      "woman",
+      "body",
+      "hands",
+      "hi",
+      "diversity",
+      "girls night"
     ],
     "moji": "✋"
   },
   "raised_hand_tone1": {
     "unicode": "270B-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand tone 1",
     "shortname": ":raised_hand_tone1:",
     "category": "people",
@@ -22547,11 +25255,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "✋🏻"
   },
   "raised_hand_tone2": {
     "unicode": "270B-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand tone 2",
     "shortname": ":raised_hand_tone2:",
     "category": "people",
@@ -22561,11 +25270,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "✋🏼"
   },
   "raised_hand_tone3": {
     "unicode": "270B-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand tone 3",
     "shortname": ":raised_hand_tone3:",
     "category": "people",
@@ -22575,11 +25285,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "✋🏽"
   },
   "raised_hand_tone4": {
     "unicode": "270B-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand tone 4",
     "shortname": ":raised_hand_tone4:",
     "category": "people",
@@ -22589,11 +25300,12 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "✋🏾"
   },
   "raised_hand_tone5": {
     "unicode": "270B-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand tone 5",
     "shortname": ":raised_hand_tone5:",
     "category": "people",
@@ -22603,14 +25315,15 @@
       "female",
       "girl",
       "woman"
-    ]
+    ],
+    "moji": "✋🏿"
   },
   "raised_hands": {
     "unicode": "1F64C",
     "unicode_alternates": [],
     "name": "person raising both hands in celebration",
     "shortname": ":raised_hands:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22619,13 +25332,19 @@
       "winning",
       "woot",
       "yay",
-      "banzai"
+      "banzai",
+      "body",
+      "hands",
+      "diversity",
+      "perfect",
+      "good",
+      "parties"
     ],
     "moji": "🙌"
   },
   "raised_hands_tone1": {
     "unicode": "1F64C-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person raising both hands in celebration tone 1",
     "shortname": ":raised_hands_tone1:",
     "category": "people",
@@ -22639,11 +25358,12 @@
       "yay",
       "banzai",
       "raised"
-    ]
+    ],
+    "moji": "🙌🏻"
   },
   "raised_hands_tone2": {
     "unicode": "1F64C-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person raising both hands in celebration tone 2",
     "shortname": ":raised_hands_tone2:",
     "category": "people",
@@ -22657,11 +25377,12 @@
       "yay",
       "banzai",
       "raised"
-    ]
+    ],
+    "moji": "🙌🏼"
   },
   "raised_hands_tone3": {
     "unicode": "1F64C-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person raising both hands in celebration tone 3",
     "shortname": ":raised_hands_tone3:",
     "category": "people",
@@ -22675,11 +25396,12 @@
       "yay",
       "banzai",
       "raised"
-    ]
+    ],
+    "moji": "🙌🏽"
   },
   "raised_hands_tone4": {
     "unicode": "1F64C-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person raising both hands in celebration tone 4",
     "shortname": ":raised_hands_tone4:",
     "category": "people",
@@ -22693,11 +25415,12 @@
       "yay",
       "banzai",
       "raised"
-    ]
+    ],
+    "moji": "🙌🏾"
   },
   "raised_hands_tone5": {
     "unicode": "1F64C-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "person raising both hands in celebration tone 5",
     "shortname": ":raised_hands_tone5:",
     "category": "people",
@@ -22711,14 +25434,15 @@
       "yay",
       "banzai",
       "raised"
-    ]
+    ],
+    "moji": "🙌🏿"
   },
   "raising_hand": {
     "unicode": "1F64B",
     "unicode_alternates": [],
     "name": "happy person raising one hand",
     "shortname": ":raising_hand:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22729,13 +25453,16 @@
       "raise",
       "notice",
       "attention",
-      "answer"
+      "answer",
+      "people",
+      "women",
+      "diversity"
     ],
     "moji": "🙋"
   },
   "raising_hand_tone1": {
     "unicode": "1F64B-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "happy person raising one hand tone1",
     "shortname": ":raising_hand_tone1:",
     "category": "people",
@@ -22749,11 +25476,12 @@
       "notice",
       "attention",
       "answer"
-    ]
+    ],
+    "moji": "🙋🏻"
   },
   "raising_hand_tone2": {
     "unicode": "1F64B-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "happy person raising one hand tone2",
     "shortname": ":raising_hand_tone2:",
     "category": "people",
@@ -22767,11 +25495,12 @@
       "notice",
       "attention",
       "answer"
-    ]
+    ],
+    "moji": "🙋🏼"
   },
   "raising_hand_tone3": {
     "unicode": "1F64B-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "happy person raising one hand tone3",
     "shortname": ":raising_hand_tone3:",
     "category": "people",
@@ -22785,11 +25514,12 @@
       "notice",
       "attention",
       "answer"
-    ]
+    ],
+    "moji": "🙋🏽"
   },
   "raising_hand_tone4": {
     "unicode": "1F64B-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "happy person raising one hand tone4",
     "shortname": ":raising_hand_tone4:",
     "category": "people",
@@ -22803,11 +25533,12 @@
       "notice",
       "attention",
       "answer"
-    ]
+    ],
+    "moji": "🙋🏾"
   },
   "raising_hand_tone5": {
     "unicode": "1F64B-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "happy person raising one hand tone5",
     "shortname": ":raising_hand_tone5:",
     "category": "people",
@@ -22821,7 +25552,8 @@
       "notice",
       "attention",
       "answer"
-    ]
+    ],
+    "moji": "🙋🏿"
   },
   "ram": {
     "unicode": "1F40F",
@@ -22836,10 +25568,10 @@
       "nature",
       "sheep",
       "ram",
-      "sheep",
       "male",
       "horn",
-      "horns"
+      "horns",
+      "wildlife"
     ],
     "moji": "🐏"
   },
@@ -22848,7 +25580,7 @@
     "unicode_alternates": [],
     "name": "steaming bowl",
     "shortname": ":ramen:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22860,7 +25592,8 @@
       "noodles",
       "bowl",
       "steaming",
-      "soup"
+      "soup",
+      "japan"
     ],
     "moji": "🍜"
   },
@@ -22884,7 +25617,7 @@
   },
   "record_button": {
     "unicode": "23FA",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "black circle for record",
     "shortname": ":record_button:",
     "category": "symbols",
@@ -22892,8 +25625,10 @@
     "aliases_ascii": [],
     "keywords": [
       "sound",
-      "symbol"
-    ]
+      "symbol",
+      "circle"
+    ],
+    "moji": "⏺"
   },
   "recycle": {
     "unicode": "267B",
@@ -22902,14 +25637,15 @@
     ],
     "name": "black universal recycling symbol",
     "shortname": ":recycle:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
       "environment",
       "garbage",
-      "trash"
+      "trash",
+      "symbol"
     ],
     "moji": "â™»"
   },
@@ -22918,12 +25654,14 @@
     "unicode_alternates": [],
     "name": "automobile",
     "shortname": ":red_car:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "transportation",
-      "vehicle"
+      "vehicle",
+      "car",
+      "travel"
     ],
     "moji": "🚗"
   },
@@ -22932,11 +25670,14 @@
     "unicode_alternates": [],
     "name": "large red circle",
     "shortname": ":red_circle:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "circle"
     ],
     "moji": "🔴"
   },
@@ -22946,12 +25687,13 @@
     "unicode_alternates": [],
     "name": "registered sign",
     "shortname": ":registered:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "alphabet",
-      "circle"
+      "circle",
+      "symbol"
     ]
   },
   "relaxed": {
@@ -22961,7 +25703,7 @@
     ],
     "name": "white smiling face",
     "shortname": ":relaxed:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22969,7 +25711,9 @@
       "face",
       "happiness",
       "massage",
-      "smile"
+      "smile",
+      "happy",
+      "smiley"
     ],
     "moji": "☺"
   },
@@ -22978,7 +25722,7 @@
     "unicode_alternates": [],
     "name": "relieved face",
     "shortname": ":relieved:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -22989,8 +25733,9 @@
       "relaxed",
       "relieved",
       "satisfied",
-      "phew",
-      "relief"
+      "relief",
+      "smiley",
+      "emotion"
     ],
     "moji": "😌"
   },
@@ -22999,24 +25744,28 @@
     "unicode_alternates": [],
     "name": "reminder ribbon",
     "shortname": ":reminder_ribbon:",
-    "category": "celebration",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "awareness"
-    ]
+      "awareness",
+      "award"
+    ],
+    "moji": "🎗"
   },
   "repeat": {
     "unicode": "1F501",
     "unicode_alternates": [],
     "name": "clockwise rightwards and leftwards open circle arr",
     "shortname": ":repeat:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "loop",
-      "record"
+      "record",
+      "arrow",
+      "symbol"
     ],
     "moji": "🔁"
   },
@@ -23025,12 +25774,14 @@
     "unicode_alternates": [],
     "name": "clockwise rightwards and leftwards open circle arr",
     "shortname": ":repeat_one:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
-      "loop"
+      "loop",
+      "arrow",
+      "symbol"
     ],
     "moji": "🔂"
   },
@@ -23039,7 +25790,7 @@
     "unicode_alternates": [],
     "name": "restroom",
     "shortname": ":restroom:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23051,7 +25802,8 @@
       "restroom",
       "sign",
       "shared",
-      "toilet"
+      "toilet",
+      "symbol"
     ],
     "moji": "🚻"
   },
@@ -23060,7 +25812,7 @@
     "unicode_alternates": [],
     "name": "revolving hearts",
     "shortname": ":revolving_hearts:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23074,7 +25826,8 @@
       "moving",
       "circle",
       "multiple",
-      "lovers"
+      "lovers",
+      "symbol"
     ],
     "moji": "💞"
   },
@@ -23083,21 +25836,36 @@
     "unicode_alternates": [],
     "name": "black left-pointing double triangle",
     "shortname": ":rewind:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
-      "play"
+      "play",
+      "arrow",
+      "symbol"
     ],
     "moji": "⏪"
   },
+  "rhino": {
+    "unicode": "1F98F",
+    "unicode_alternates": [],
+    "name": "rhinoceros",
+    "shortname": ":rhino:",
+    "category": "nature",
+    "aliases": [
+      ":rhinoceros:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦏"
+  },
   "ribbon": {
     "unicode": "1F380",
     "unicode_alternates": [],
     "name": "ribbon",
     "shortname": ":ribbon:",
-    "category": "emoticons",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23108,7 +25876,10 @@
       "ribbon",
       "lace",
       "wrap",
-      "decorate"
+      "decorate",
+      "object",
+      "gift",
+      "birthday"
     ],
     "moji": "🎀"
   },
@@ -23117,7 +25888,7 @@
     "unicode_alternates": [],
     "name": "cooked rice",
     "shortname": ":rice:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23125,8 +25896,9 @@
       "rice",
       "white",
       "grain",
-      "food",
-      "bowl"
+      "bowl",
+      "sushi",
+      "japan"
     ],
     "moji": "🍚"
   },
@@ -23135,7 +25907,7 @@
     "unicode_alternates": [],
     "name": "rice ball",
     "shortname": ":rice_ball:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23146,7 +25918,8 @@
       "white",
       "nori",
       "seaweed",
-      "japanese"
+      "sushi",
+      "japan"
     ],
     "moji": "🍙"
   },
@@ -23155,7 +25928,7 @@
     "unicode_alternates": [],
     "name": "rice cracker",
     "shortname": ":rice_cracker:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23164,8 +25937,7 @@
       "rice",
       "cracker",
       "seaweed",
-      "food",
-      "japanese"
+      "sushi"
     ],
     "moji": "🍘"
   },
@@ -23174,7 +25946,7 @@
     "unicode_alternates": [],
     "name": "moon viewing ceremony",
     "shortname": ":rice_scene:",
-    "category": "objects",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23187,92 +25959,115 @@
       "rice",
       "scene",
       "festival",
-      "autumn"
+      "autumn",
+      "places",
+      "space",
+      "sky",
+      "travel"
     ],
     "moji": "🎑"
   },
-  "right_speaker": {
-    "unicode": "1F568",
+  "right_facing_fist": {
+    "unicode": "1F91C",
     "unicode_alternates": [],
-    "name": "right speaker",
-    "shortname": ":right_speaker:",
-    "category": "objects_symbols",
-    "aliases": [],
+    "name": "right-facing fist",
+    "shortname": ":right_facing_fist:",
+    "category": "people",
+    "aliases": [
+      ":right_fist:"
+    ],
     "aliases_ascii": [],
-    "keywords": [
-      "sound",
-      "listen",
-      "hear",
-      "noise",
-      "volume"
-    ]
+    "keywords": [],
+    "moji": "🤜"
   },
-  "right_speaker_one": {
-    "unicode": "1F569",
+  "right_facing_fist_tone1": {
+    "unicode": "1F91C-1F3FB",
     "unicode_alternates": [],
-    "name": "right speaker with one sound wave",
-    "shortname": ":right_speaker_one:",
-    "category": "objects_symbols",
+    "name": "right facing fist tone 1",
+    "shortname": ":right_facing_fist_tone1:",
+    "category": "people",
     "aliases": [
-      ":right_speaker_with_one_sound_wave:"
+      ":right_fist_tone1:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "low",
-      "volume"
-    ]
+    "keywords": [],
+    "moji": "🤜🏻"
   },
-  "right_speaker_three": {
-    "unicode": "1F56A",
+  "right_facing_fist_tone2": {
+    "unicode": "1F91C-1F3FC",
     "unicode_alternates": [],
-    "name": "right speaker with three sound waves",
-    "shortname": ":right_speaker_three:",
-    "category": "objects_symbols",
+    "name": "right facing fist tone 2",
+    "shortname": ":right_facing_fist_tone2:",
+    "category": "people",
     "aliases": [
-      ":right_speaker_with_three_sound_waves:"
+      ":right_fist_tone2:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "loud",
-      "high",
-      "volume"
-    ]
+    "keywords": [],
+    "moji": "🤜🏼"
+  },
+  "right_facing_fist_tone3": {
+    "unicode": "1F91C-1F3FD",
+    "unicode_alternates": [],
+    "name": "right facing fist tone 3",
+    "shortname": ":right_facing_fist_tone3:",
+    "category": "people",
+    "aliases": [
+      ":right_fist_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤜🏽"
+  },
+  "right_facing_fist_tone4": {
+    "unicode": "1F91C-1F3FE",
+    "unicode_alternates": [],
+    "name": "right facing fist tone 4",
+    "shortname": ":right_facing_fist_tone4:",
+    "category": "people",
+    "aliases": [
+      ":right_fist_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤜🏾"
+  },
+  "right_facing_fist_tone5": {
+    "unicode": "1F91C-1F3FF",
+    "unicode_alternates": [],
+    "name": "right facing fist tone 5",
+    "shortname": ":right_facing_fist_tone5:",
+    "category": "people",
+    "aliases": [
+      ":right_fist_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤜🏿"
   },
   "ring": {
     "unicode": "1F48D",
     "unicode_alternates": [],
     "name": "ring",
     "shortname": ":ring:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "marriage",
       "propose",
       "valentines",
-      "wedding"
+      "wedding",
+      "object",
+      "fashion",
+      "gem",
+      "accessories"
     ],
     "moji": "💍"
   },
-  "ringing_bell": {
-    "unicode": "1F56D",
-    "unicode_alternates": [],
-    "name": "ringing bell",
-    "shortname": ":ringing_bell:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "alert",
-      "ding",
-      "volume",
-      "sound",
-      "chime"
-    ]
-  },
   "robot": {
     "unicode": "1F916",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "robot face",
     "shortname": ":robot:",
     "category": "people",
@@ -23280,14 +26075,18 @@
       ":robot_face:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "monster",
+      "robot"
+    ],
+    "moji": "🤖"
   },
   "rocket": {
     "unicode": "1F680",
     "unicode_alternates": [],
     "name": "rocket",
     "shortname": ":rocket:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23298,16 +26097,33 @@
       "space",
       "spacecraft",
       "astronaut",
-      "cosmonaut"
+      "cosmonaut",
+      "transportation",
+      "object",
+      "fly",
+      "blast"
     ],
     "moji": "🚀"
   },
+  "rofl": {
+    "unicode": "1F923",
+    "unicode_alternates": [],
+    "name": "rolling on the floor laughing",
+    "shortname": ":rofl:",
+    "category": "people",
+    "aliases": [
+      ":rolling_on_the_floor_laughing:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤣"
+  },
   "roller_coaster": {
     "unicode": "1F3A2",
     "unicode_alternates": [],
     "name": "roller coaster",
     "shortname": ":roller_coaster:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23322,13 +26138,16 @@
       "park",
       "fair",
       "ride",
-      "entertainment"
+      "entertainment",
+      "places",
+      "vacation",
+      "roller coaster"
     ],
     "moji": "🎢"
   },
   "rolling_eyes": {
     "unicode": "1F644",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with rolling eyes",
     "shortname": ":rolling_eyes:",
     "category": "people",
@@ -23336,7 +26155,14 @@
       ":face_with_rolling_eyes:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "mad",
+      "smiley",
+      "rolling eyes",
+      "emotion",
+      "sarcastic"
+    ],
+    "moji": "🙄"
   },
   "rooster": {
     "unicode": "1F413",
@@ -23375,9 +26201,13 @@
       "fragrant",
       "flower",
       "thorns",
-      "love",
       "petals",
-      "romance"
+      "romance",
+      "nature",
+      "plant",
+      "rip",
+      "condolence",
+      "beautiful"
     ],
     "moji": "🌹"
   },
@@ -23386,31 +26216,21 @@
     "unicode_alternates": [],
     "name": "rosette",
     "shortname": ":rosette:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "flower"
-    ]
-  },
-  "rosette_black": {
-    "unicode": "1F3F6",
-    "unicode_alternates": [],
-    "name": "black rosette",
-    "shortname": ":rosette_black:",
-    "category": "objects_symbols",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "flower"
-    ]
+      "flower",
+      "tropical"
+    ],
+    "moji": "🏵"
   },
   "rotating_light": {
     "unicode": "1F6A8",
     "unicode_alternates": [],
     "name": "police cars revolving light",
     "shortname": ":rotating_light:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23419,8 +26239,8 @@
       "emergency",
       "police",
       "light",
-      "police",
-      "emergency"
+      "transportation",
+      "object"
     ],
     "moji": "🚨"
   },
@@ -23429,11 +26249,13 @@
     "unicode_alternates": [],
     "name": "round pushpin",
     "shortname": ":round_pushpin:",
-    "category": "places",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "stationery"
+      "stationery",
+      "object",
+      "office"
     ],
     "moji": "📍"
   },
@@ -23442,7 +26264,7 @@
     "unicode_alternates": [],
     "name": "rowboat",
     "shortname": ":rowboat:",
-    "category": "places",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23453,13 +26275,18 @@
       "boat",
       "row",
       "oar",
-      "paddle"
+      "paddle",
+      "men",
+      "workout",
+      "sport",
+      "rowing",
+      "diversity"
     ],
     "moji": "🚣"
   },
   "rowboat_tone1": {
     "unicode": "1F6A3-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "rowboat tone 1",
     "shortname": ":rowboat_tone1:",
     "category": "activity",
@@ -23473,11 +26300,12 @@
       "row",
       "oar",
       "paddle"
-    ]
+    ],
+    "moji": "🚣🏻"
   },
   "rowboat_tone2": {
     "unicode": "1F6A3-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "rowboat tone 2",
     "shortname": ":rowboat_tone2:",
     "category": "activity",
@@ -23491,11 +26319,12 @@
       "row",
       "oar",
       "paddle"
-    ]
+    ],
+    "moji": "🚣🏼"
   },
   "rowboat_tone3": {
     "unicode": "1F6A3-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "rowboat tone 3",
     "shortname": ":rowboat_tone3:",
     "category": "activity",
@@ -23509,11 +26338,12 @@
       "row",
       "oar",
       "paddle"
-    ]
+    ],
+    "moji": "🚣🏽"
   },
   "rowboat_tone4": {
     "unicode": "1F6A3-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "rowboat tone 4",
     "shortname": ":rowboat_tone4:",
     "category": "activity",
@@ -23527,11 +26357,12 @@
       "row",
       "oar",
       "paddle"
-    ]
+    ],
+    "moji": "🚣🏾"
   },
   "rowboat_tone5": {
     "unicode": "1F6A3-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "rowboat tone 5",
     "shortname": ":rowboat_tone5:",
     "category": "activity",
@@ -23545,14 +26376,15 @@
       "row",
       "oar",
       "paddle"
-    ]
+    ],
+    "moji": "🚣🏿"
   },
   "rugby_football": {
     "unicode": "1F3C9",
     "unicode_alternates": [],
     "name": "rugby football",
     "shortname": ":rugby_football:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23562,7 +26394,8 @@
       "ball",
       "sport",
       "team",
-      "england"
+      "england",
+      "game"
     ],
     "moji": "🏉"
   },
@@ -23571,7 +26404,7 @@
     "unicode_alternates": [],
     "name": "runner",
     "shortname": ":runner:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23581,16 +26414,19 @@
       "run",
       "runner",
       "jog",
-      "exercise",
       "sprint",
       "race",
-      "dash"
+      "dash",
+      "people",
+      "men",
+      "diversity",
+      "boys night"
     ],
     "moji": "🏃"
   },
   "runner_tone1": {
     "unicode": "1F3C3-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "runner tone 1",
     "shortname": ":runner_tone1:",
     "category": "people",
@@ -23605,11 +26441,12 @@
       "race",
       "dash",
       "marathon"
-    ]
+    ],
+    "moji": "🏃🏻"
   },
   "runner_tone2": {
     "unicode": "1F3C3-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "runner tone 2",
     "shortname": ":runner_tone2:",
     "category": "people",
@@ -23624,11 +26461,12 @@
       "race",
       "dash",
       "marathon"
-    ]
+    ],
+    "moji": "🏃🏼"
   },
   "runner_tone3": {
     "unicode": "1F3C3-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "runner tone 3",
     "shortname": ":runner_tone3:",
     "category": "people",
@@ -23643,11 +26481,12 @@
       "race",
       "dash",
       "marathon"
-    ]
+    ],
+    "moji": "🏃🏽"
   },
   "runner_tone4": {
     "unicode": "1F3C3-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "runner tone 4",
     "shortname": ":runner_tone4:",
     "category": "people",
@@ -23662,11 +26501,12 @@
       "race",
       "dash",
       "marathon"
-    ]
+    ],
+    "moji": "🏃🏾"
   },
   "runner_tone5": {
     "unicode": "1F3C3-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "runner tone 5",
     "shortname": ":runner_tone5:",
     "category": "people",
@@ -23681,14 +26521,15 @@
       "race",
       "dash",
       "marathon"
-    ]
+    ],
+    "moji": "🏃🏿"
   },
   "running_shirt_with_sash": {
     "unicode": "1F3BD",
     "unicode_alternates": [],
     "name": "running shirt with sash",
     "shortname": ":running_shirt_with_sash:",
-    "category": "emoticons",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23699,13 +26540,14 @@
       "shirt",
       "cloths",
       "compete",
-      "sports"
+      "sports",
+      "award"
     ],
     "moji": "🎽"
   },
   "sa": {
     "unicode": "1F202",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "squared katakana sa",
     "shortname": ":sa:",
     "category": "symbols",
@@ -23716,7 +26558,8 @@
       "japanese",
       "symbol",
       "word"
-    ]
+    ],
+    "moji": "🈂"
   },
   "sagittarius": {
     "unicode": "2650",
@@ -23725,7 +26568,7 @@
     ],
     "name": "sagittarius",
     "shortname": ":sagittarius:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23738,9 +26581,8 @@
       "stars",
       "zodiac",
       "sign",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♐"
   },
@@ -23751,12 +26593,15 @@
     ],
     "name": "sailboat",
     "shortname": ":sailboat:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "ship",
-      "transportation"
+      "transportation",
+      "travel",
+      "boat",
+      "vacation"
     ],
     "moji": "⛵"
   },
@@ -23765,7 +26610,7 @@
     "unicode_alternates": [],
     "name": "sake bottle and cup",
     "shortname": ":sake:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23774,26 +26619,41 @@
       "drunk",
       "wine",
       "sake",
-      "wine",
       "rice",
       "ferment",
       "alcohol",
       "japanese",
-      "drink"
+      "japan",
+      "girls night"
     ],
     "moji": "🍶"
   },
+  "salad": {
+    "unicode": "1F957",
+    "unicode_alternates": [],
+    "name": "green salad",
+    "shortname": ":salad:",
+    "category": "food",
+    "aliases": [
+      ":green_salad:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥗"
+  },
   "sandal": {
     "unicode": "1F461",
     "unicode_alternates": [],
     "name": "womans sandal",
     "shortname": ":sandal:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "fashion",
-      "shoes"
+      "shoes",
+      "shoe",
+      "accessories"
     ],
     "moji": "👡"
   },
@@ -23802,7 +26662,7 @@
     "unicode_alternates": [],
     "name": "father christmas",
     "shortname": ":santa:",
-    "category": "objects",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23823,14 +26683,18 @@
       "nice",
       "sleigh",
       "father",
-      "christmas",
-      "holiday"
+      "holiday",
+      "people",
+      "hat",
+      "winter",
+      "holidays",
+      "diversity"
     ],
     "moji": "🎅"
   },
   "santa_tone1": {
     "unicode": "1F385-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "father christmas tone 1",
     "shortname": ":santa_tone1:",
     "category": "people",
@@ -23852,11 +26716,12 @@
       "nice",
       "sleigh",
       "holiday"
-    ]
+    ],
+    "moji": "🎅🏻"
   },
   "santa_tone2": {
     "unicode": "1F385-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "father christmas tone 2",
     "shortname": ":santa_tone2:",
     "category": "people",
@@ -23878,11 +26743,12 @@
       "nice",
       "sleigh",
       "holiday"
-    ]
+    ],
+    "moji": "🎅🏼"
   },
   "santa_tone3": {
     "unicode": "1F385-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "father christmas tone 3",
     "shortname": ":santa_tone3:",
     "category": "people",
@@ -23904,11 +26770,12 @@
       "nice",
       "sleigh",
       "holiday"
-    ]
+    ],
+    "moji": "🎅🏽"
   },
   "santa_tone4": {
     "unicode": "1F385-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "father christmas tone 4",
     "shortname": ":santa_tone4:",
     "category": "people",
@@ -23930,11 +26797,12 @@
       "nice",
       "sleigh",
       "holiday"
-    ]
+    ],
+    "moji": "🎅🏾"
   },
   "santa_tone5": {
     "unicode": "1F385-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "father christmas tone 5",
     "shortname": ":santa_tone5:",
     "category": "people",
@@ -23956,7 +26824,8 @@
       "nice",
       "sleigh",
       "holiday"
-    ]
+    ],
+    "moji": "🎅🏿"
   },
   "satellite": {
     "unicode": "1F4E1",
@@ -23967,7 +26836,8 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "communication"
+      "communication",
+      "object"
     ],
     "moji": "📡"
   },
@@ -23976,21 +26846,23 @@
     "unicode_alternates": [],
     "name": "satellite",
     "shortname": ":satellite_orbital:",
-    "category": "objects_symbols",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "communication",
       "orbital",
-      "space"
-    ]
+      "space",
+      "object"
+    ],
+    "moji": "🛰"
   },
   "saxophone": {
     "unicode": "1F3B7",
     "unicode_alternates": [],
     "name": "saxophone",
     "shortname": ":saxophone:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -23998,15 +26870,14 @@
       "music",
       "saxophone",
       "sax",
-      "music",
-      "instrument",
-      "woodwind"
+      "woodwind",
+      "instruments"
     ],
     "moji": "🎷"
   },
   "scales": {
     "unicode": "2696",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "scales",
     "shortname": ":scales:",
     "category": "objects",
@@ -24020,14 +26891,15 @@
       "tool",
       "weight",
       "zodiac"
-    ]
+    ],
+    "moji": "âš–"
   },
   "school": {
     "unicode": "1F3EB",
     "unicode_alternates": [],
     "name": "school",
     "shortname": ":school:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24039,7 +26911,8 @@
       "high",
       "college",
       "teach",
-      "education"
+      "education",
+      "places"
     ],
     "moji": "🏫"
   },
@@ -24048,7 +26921,7 @@
     "unicode_alternates": [],
     "name": "school satchel",
     "shortname": ":school_satchel:",
-    "category": "objects",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24058,14 +26931,16 @@
       "school",
       "satchel",
       "backpack",
-      "bag",
       "packing",
       "pack",
       "hike",
-      "education",
       "adventure",
       "travel",
-      "sightsee"
+      "sightsee",
+      "fashion",
+      "office",
+      "vacation",
+      "accessories"
     ],
     "moji": "🎒"
   },
@@ -24081,19 +26956,39 @@
     "aliases_ascii": [],
     "keywords": [
       "cut",
-      "stationery"
+      "stationery",
+      "object",
+      "tool",
+      "weapon",
+      "office"
     ],
     "moji": "✂"
   },
+  "scooter": {
+    "unicode": "1F6F4",
+    "unicode_alternates": [],
+    "name": "scooter",
+    "shortname": ":scooter:",
+    "category": "travel",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🛴"
+  },
   "scorpion": {
     "unicode": "1F982",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "scorpion",
     "shortname": ":scorpion:",
     "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "insects",
+      "reptile",
+      "animal"
+    ],
+    "moji": "🦂"
   },
   "scorpius": {
     "unicode": "264F",
@@ -24102,7 +26997,7 @@
     ],
     "name": "scorpius",
     "shortname": ":scorpius:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24115,9 +27010,8 @@
       "stars",
       "zodiac",
       "sign",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♏"
   },
@@ -24126,7 +27020,7 @@
     "unicode_alternates": [],
     "name": "face screaming in fear",
     "shortname": ":scream:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24135,7 +27029,12 @@
       "scream",
       "painting",
       "artist",
-      "alien"
+      "alien",
+      "smiley",
+      "surprised",
+      "wow",
+      "emotion",
+      "omg"
     ],
     "moji": "😱"
   },
@@ -24144,7 +27043,7 @@
     "unicode_alternates": [],
     "name": "weary cat face",
     "shortname": ":scream_cat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24161,7 +27060,8 @@
       "exhausted",
       "scream",
       "painting",
-      "artist"
+      "artist",
+      "cat"
     ],
     "moji": "🙀"
   },
@@ -24174,7 +27074,9 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "documents"
+      "documents",
+      "object",
+      "office"
     ],
     "moji": "📜"
   },
@@ -24183,14 +27085,31 @@
     "unicode_alternates": [],
     "name": "seat",
     "shortname": ":seat:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "sit"
+      "sit",
+      "transportation",
+      "object",
+      "travel",
+      "vacation"
     ],
     "moji": "💺"
   },
+  "second_place": {
+    "unicode": "1F948",
+    "unicode_alternates": [],
+    "name": "second place medal",
+    "shortname": ":second_place:",
+    "category": "activity",
+    "aliases": [
+      ":second_place_medal:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥈"
+  },
   "secret": {
     "unicode": "3299",
     "unicode_alternates": [
@@ -24198,11 +27117,13 @@
     ],
     "name": "circled ideograph secret",
     "shortname": ":secret:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "privacy"
+      "privacy",
+      "japan",
+      "symbol"
     ],
     "moji": "㊙"
   },
@@ -24211,14 +27132,13 @@
     "unicode_alternates": [],
     "name": "see-no-evil monkey",
     "shortname": ":see_no_evil:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "animal",
       "monkey",
       "nature",
-      "monkey",
       "see",
       "eyes",
       "vision",
@@ -24241,34 +27161,118 @@
       "nature",
       "plant",
       "seedling",
-      "plant",
       "new",
       "start",
-      "grow"
+      "grow",
+      "leaf"
     ],
     "moji": "🌱"
   },
+  "selfie": {
+    "unicode": "1F933",
+    "unicode_alternates": [],
+    "name": "selfie",
+    "shortname": ":selfie:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤳"
+  },
+  "selfie_tone1": {
+    "unicode": "1F933-1F3FB",
+    "unicode_alternates": [],
+    "name": "selfie tone 1",
+    "shortname": ":selfie_tone1:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤳🏻"
+  },
+  "selfie_tone2": {
+    "unicode": "1F933-1F3FC",
+    "unicode_alternates": [],
+    "name": "selfie tone 2",
+    "shortname": ":selfie_tone2:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤳🏼"
+  },
+  "selfie_tone3": {
+    "unicode": "1F933-1F3FD",
+    "unicode_alternates": [],
+    "name": "selfie tone 3",
+    "shortname": ":selfie_tone3:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤳🏽"
+  },
+  "selfie_tone4": {
+    "unicode": "1F933-1F3FE",
+    "unicode_alternates": [],
+    "name": "selfie tone 4",
+    "shortname": ":selfie_tone4:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤳🏾"
+  },
+  "selfie_tone5": {
+    "unicode": "1F933-1F3FF",
+    "unicode_alternates": [],
+    "name": "selfie tone 5",
+    "shortname": ":selfie_tone5:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤳🏿"
+  },
   "seven": {
     "moji": "7️⃣",
     "unicode": "0037-20E3",
     "unicode_alternates": [
       "0037-FE0F-20E3"
     ],
-    "name": "digit seven",
+    "name": "keycap digit seven",
     "shortname": ":seven:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "7",
       "blue-square",
       "numbers",
-      "prime"
+      "prime",
+      "number",
+      "math",
+      "symbol"
     ]
   },
+  "shallow_pan_of_food": {
+    "unicode": "1F958",
+    "unicode_alternates": [],
+    "name": "shallow pan of food",
+    "shortname": ":shallow_pan_of_food:",
+    "category": "food",
+    "aliases": [
+      ":paella:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [
+      "pan of food"
+    ],
+    "moji": "🥘"
+  },
   "shamrock": {
     "unicode": "2618",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "shamrock",
     "shortname": ":shamrock:",
     "category": "nature",
@@ -24276,15 +27280,29 @@
     "aliases_ascii": [],
     "keywords": [
       "nature",
-      "plant"
-    ]
+      "plant",
+      "luck",
+      "leaf"
+    ],
+    "moji": "☘"
+  },
+  "shark": {
+    "unicode": "1F988",
+    "unicode_alternates": [],
+    "name": "shark",
+    "shortname": ":shark:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦈"
   },
   "shaved_ice": {
     "unicode": "1F367",
     "unicode_alternates": [],
     "name": "shaved ice",
     "shortname": ":shaved_ice:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24295,7 +27313,8 @@
       "dessert",
       "treat",
       "syrup",
-      "flavoring"
+      "flavoring",
+      "food"
     ],
     "moji": "🍧"
   },
@@ -24334,7 +27353,6 @@
       "sea",
       "shell",
       "spiral",
-      "beach",
       "sand",
       "crab",
       "nautilus"
@@ -24346,7 +27364,7 @@
     "unicode_alternates": [],
     "name": "shield",
     "shortname": ":shield:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24354,12 +27372,13 @@
       "route",
       "sign",
       "highway",
-      "interstate"
-    ]
+      "object"
+    ],
+    "moji": "🛡"
   },
   "shinto_shrine": {
     "unicode": "26E9",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "shinto shrine",
     "shortname": ":shinto_shrine:",
     "category": "travel",
@@ -24367,15 +27386,20 @@
     "aliases_ascii": [],
     "keywords": [
       "religion",
-      "symbol"
-    ]
+      "symbol",
+      "places",
+      "building",
+      "travel",
+      "vacation"
+    ],
+    "moji": "⛩"
   },
   "ship": {
     "unicode": "1F6A2",
     "unicode_alternates": [],
     "name": "ship",
     "shortname": ":ship:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24383,7 +27407,9 @@
       "transportation",
       "ferry",
       "ship",
-      "boat"
+      "boat",
+      "travel",
+      "vacation"
     ],
     "moji": "🚢"
   },
@@ -24392,7 +27418,7 @@
     "unicode_alternates": [],
     "name": "t-shirt",
     "shortname": ":shirt:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24406,7 +27432,7 @@
     "unicode_alternates": [],
     "name": "shopping bags",
     "shortname": ":shopping_bags:",
-    "category": "travel_places",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24414,8 +27440,25 @@
       "mall",
       "buy",
       "store",
-      "shop"
-    ]
+      "shop",
+      "object",
+      "birthday",
+      "parties"
+    ],
+    "moji": "🛍"
+  },
+  "shopping_cart": {
+    "unicode": "1F6D2",
+    "unicode_alternates": [],
+    "name": "shopping trolley",
+    "shortname": ":shopping_cart:",
+    "category": "objects",
+    "aliases": [
+      ":shopping_trolley:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🛒"
   },
   "shower": {
     "unicode": "1F6BF",
@@ -24433,22 +27476,100 @@
       "shower",
       "soap",
       "water",
-      "clean",
       "shampoo",
-      "lather"
+      "lather",
+      "object"
     ],
     "moji": "🚿"
   },
+  "shrimp": {
+    "unicode": "1F990",
+    "unicode_alternates": [],
+    "name": "shrimp",
+    "shortname": ":shrimp:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦐"
+  },
+  "shrug": {
+    "unicode": "1F937",
+    "unicode_alternates": [],
+    "name": "shrug",
+    "shortname": ":shrug:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤷"
+  },
+  "shrug_tone1": {
+    "unicode": "1F937-1F3FB",
+    "unicode_alternates": [],
+    "name": "shrug tone 1",
+    "shortname": ":shrug_tone1:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤷🏻"
+  },
+  "shrug_tone2": {
+    "unicode": "1F937-1F3FC",
+    "unicode_alternates": [],
+    "name": "shrug tone 2",
+    "shortname": ":shrug_tone2:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤷🏼"
+  },
+  "shrug_tone3": {
+    "unicode": "1F937-1F3FD",
+    "unicode_alternates": [],
+    "name": "shrug tone 3",
+    "shortname": ":shrug_tone3:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤷🏽"
+  },
+  "shrug_tone4": {
+    "unicode": "1F937-1F3FE",
+    "unicode_alternates": [],
+    "name": "shrug tone 4",
+    "shortname": ":shrug_tone4:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤷🏾"
+  },
+  "shrug_tone5": {
+    "unicode": "1F937-1F3FF",
+    "unicode_alternates": [],
+    "name": "shrug tone 5",
+    "shortname": ":shrug_tone5:",
+    "category": "people",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤷🏿"
+  },
   "signal_strength": {
     "unicode": "1F4F6",
     "unicode_alternates": [],
     "name": "antenna with bars",
     "shortname": ":signal_strength:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "📶"
   },
@@ -24458,15 +27579,18 @@
     "unicode_alternates": [
       "0036-FE0F-20E3"
     ],
-    "name": "digit six",
+    "name": "keycap digit six",
     "shortname": ":six:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "6",
       "blue-square",
-      "numbers"
+      "numbers",
+      "number",
+      "math",
+      "symbol"
     ]
   },
   "six_pointed_star": {
@@ -24474,11 +27598,15 @@
     "unicode_alternates": [],
     "name": "six pointed star with middle dot",
     "shortname": ":six_pointed_star:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "purple-square"
+      "purple-square",
+      "religion",
+      "jew",
+      "star",
+      "symbol"
     ],
     "moji": "🔯"
   },
@@ -24487,7 +27615,7 @@
     "unicode_alternates": [],
     "name": "ski and ski boot",
     "shortname": ":ski:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24499,18 +27627,19 @@
       "cross-country",
       "poles",
       "snow",
-      "winter",
       "mountain",
       "alpine",
       "powder",
       "slalom",
-      "freestyle"
+      "freestyle",
+      "sport",
+      "skiing"
     ],
     "moji": "🎿"
   },
   "skier": {
     "unicode": "26F7",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "skier",
     "shortname": ":skier:",
     "category": "activity",
@@ -24521,15 +27650,20 @@
       "ski",
       "snow",
       "sport",
-      "travel"
-    ]
+      "travel",
+      "hat",
+      "vacation",
+      "cold",
+      "skiing"
+    ],
+    "moji": "â›·"
   },
   "skull": {
     "unicode": "1F480",
     "unicode_alternates": [],
     "name": "skull",
     "shortname": ":skull:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [
       ":skeleton:"
     ],
@@ -24537,13 +27671,15 @@
     "keywords": [
       "dead",
       "skeleton",
-      "dying"
+      "dying",
+      "halloween",
+      "skull"
     ],
     "moji": "💀"
   },
   "skull_crossbones": {
     "unicode": "2620",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "skull and crossbones",
     "shortname": ":skull_crossbones:",
     "category": "objects",
@@ -24556,15 +27692,19 @@
       "death",
       "face",
       "monster",
-      "person"
-    ]
+      "person",
+      "symbol",
+      "dead",
+      "skull"
+    ],
+    "moji": "☠"
   },
   "sleeping": {
     "unicode": "1F634",
     "unicode_alternates": [],
     "name": "sleeping face",
     "shortname": ":sleeping:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24572,9 +27712,11 @@
       "sleepy",
       "tired",
       "sleep",
-      "sleepy",
       "sleeping",
-      "snore"
+      "snore",
+      "smiley",
+      "emotion",
+      "goodnight"
     ],
     "moji": "😴"
   },
@@ -24583,21 +27725,23 @@
     "unicode_alternates": [],
     "name": "sleeping accommodation",
     "shortname": ":sleeping_accommodation:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "hotel",
       "motel",
-      "rest"
-    ]
+      "rest",
+      "tired"
+    ],
+    "moji": "🛌"
   },
   "sleepy": {
     "unicode": "1F62A",
     "unicode_alternates": [],
     "name": "sleepy face",
     "shortname": ":sleepy:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24605,8 +27749,10 @@
       "rest",
       "tired",
       "sleepy",
-      "tired",
-      "exhausted"
+      "exhausted",
+      "smiley",
+      "sick",
+      "emotion"
     ],
     "moji": "😪"
   },
@@ -24624,8 +27770,12 @@
       "slight",
       "frown",
       "unhappy",
-      "disappointed"
-    ]
+      "disappointed",
+      "sad",
+      "smiley",
+      "emotion"
+    ],
+    "moji": "🙁"
   },
   "slight_smile": {
     "unicode": "1F642",
@@ -24640,15 +27790,17 @@
     "keywords": [
       "slight",
       "smile",
-      "happy"
-    ]
+      "happy",
+      "smiley"
+    ],
+    "moji": "🙂"
   },
   "slot_machine": {
     "unicode": "1F3B0",
     "unicode_alternates": [],
     "name": "slot machine",
     "shortname": ":slot_machine:",
-    "category": "places",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24657,10 +27809,11 @@
       "vegas",
       "slot",
       "machine",
-      "gamble",
       "one-armed bandit",
       "slots",
-      "luck"
+      "luck",
+      "game",
+      "boys night"
     ],
     "moji": "🎰"
   },
@@ -24669,11 +27822,13 @@
     "unicode_alternates": [],
     "name": "small blue diamond",
     "shortname": ":small_blue_diamond:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol"
     ],
     "moji": "🔹"
   },
@@ -24682,11 +27837,13 @@
     "unicode_alternates": [],
     "name": "small orange diamond",
     "shortname": ":small_orange_diamond:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol"
     ],
     "moji": "🔸"
   },
@@ -24695,11 +27852,14 @@
     "unicode_alternates": [],
     "name": "up-pointing red triangle",
     "shortname": ":small_red_triangle:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "triangle"
     ],
     "moji": "🔺"
   },
@@ -24708,11 +27868,14 @@
     "unicode_alternates": [],
     "name": "down-pointing red triangle",
     "shortname": ":small_red_triangle_down:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "triangle"
     ],
     "moji": "🔻"
   },
@@ -24721,7 +27884,7 @@
     "unicode_alternates": [],
     "name": "smiling face with open mouth and smiling eyes",
     "shortname": ":smile:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ":)",
@@ -24739,7 +27902,8 @@
       "laugh",
       "smile",
       "smiley",
-      "smiling"
+      "smiling",
+      "emotion"
     ],
     "moji": "😄"
   },
@@ -24748,7 +27912,7 @@
     "unicode_alternates": [],
     "name": "grinning cat face with smiling eyes",
     "shortname": ":smile_cat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24757,7 +27921,8 @@
       "cat",
       "smile",
       "grin",
-      "grinning"
+      "grinning",
+      "happy"
     ],
     "moji": "😸"
   },
@@ -24766,7 +27931,7 @@
     "unicode_alternates": [],
     "name": "smiling face with open mouth",
     "shortname": ":smiley:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ":D",
@@ -24780,7 +27945,9 @@
       "joy",
       "smiling",
       "smile",
-      "smiley"
+      "smiley",
+      "emotion",
+      "good"
     ],
     "moji": "😃"
   },
@@ -24789,7 +27956,7 @@
     "unicode_alternates": [],
     "name": "smiling cat face with open mouth",
     "shortname": ":smiley_cat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24798,8 +27965,7 @@
       "happy",
       "smile",
       "smiley",
-      "cat",
-      "happy"
+      "cat"
     ],
     "moji": "😺"
   },
@@ -24808,16 +27974,19 @@
     "unicode_alternates": [],
     "name": "smiling face with horns",
     "shortname": ":smiling_imp:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "devil",
       "horns",
-      "horns",
-      "devil",
       "impish",
-      "trouble"
+      "trouble",
+      "silly",
+      "smiley",
+      "angry",
+      "monster",
+      "boys night"
     ],
     "moji": "😈"
   },
@@ -24826,7 +27995,7 @@
     "unicode_alternates": [],
     "name": "smirking face",
     "shortname": ":smirk:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24836,10 +28005,12 @@
       "smug",
       "smirking",
       "smirk",
-      "smug",
-      "smile",
       "half-smile",
-      "conceited"
+      "conceited",
+      "silly",
+      "smiley",
+      "sexy",
+      "sarcastic"
     ],
     "moji": "😏"
   },
@@ -24848,7 +28019,7 @@
     "unicode_alternates": [],
     "name": "cat face with wry smile",
     "shortname": ":smirk_cat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24858,7 +28029,8 @@
       "smirking",
       "wry",
       "confident",
-      "confidence"
+      "confidence",
+      "cat"
     ],
     "moji": "😼"
   },
@@ -24875,13 +28047,14 @@
       "kills",
       "tobacco",
       "smoking",
-      "cigarette",
       "smoke",
       "cancer",
       "lungs",
       "inhale",
       "tar",
-      "nicotine"
+      "nicotine",
+      "symbol",
+      "drugs"
     ],
     "moji": "🚬"
   },
@@ -24898,10 +28071,10 @@
       "shell",
       "slow",
       "snail",
-      "slow",
       "escargot",
       "french",
-      "appetizer"
+      "appetizer",
+      "insects"
     ],
     "moji": "🐌"
   },
@@ -24915,16 +28088,32 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "evil"
+      "evil",
+      "wildlife",
+      "reptile",
+      "creationism"
     ],
     "moji": "🐍"
   },
+  "sneezing_face": {
+    "unicode": "1F927",
+    "unicode_alternates": [],
+    "name": "sneezing face",
+    "shortname": ":sneezing_face:",
+    "category": "people",
+    "aliases": [
+      ":sneeze:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤧"
+  },
   "snowboarder": {
     "unicode": "1F3C2",
     "unicode_alternates": [],
     "name": "snowboarder",
     "shortname": ":snowboarder:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -24932,13 +28121,16 @@
       "winter",
       "snow",
       "boarding",
-      "sports",
       "freestyle",
       "halfpipe",
       "board",
       "mountain",
       "alpine",
-      "winter"
+      "hat",
+      "vacation",
+      "cold",
+      "sport",
+      "snowboarding"
     ],
     "moji": "🏂"
   },
@@ -24965,13 +28157,13 @@
       "droplet",
       "ice",
       "crystal",
-      "cold",
       "chilly",
-      "winter",
       "unique",
       "special",
       "below zero",
-      "elsa"
+      "elsa",
+      "sky",
+      "holidays"
     ],
     "moji": "❄"
   },
@@ -24991,13 +28183,15 @@
       "season",
       "weather",
       "winter",
-      "xmas"
+      "xmas",
+      "holidays",
+      "snow"
     ],
     "moji": "⛄"
   },
   "snowman2": {
     "unicode": "2603",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "snowman",
     "shortname": ":snowman2:",
     "category": "nature",
@@ -25007,15 +28201,19 @@
       "cold",
       "nature",
       "snow",
-      "weather"
-    ]
+      "weather",
+      "winter",
+      "holidays",
+      "christmas"
+    ],
+    "moji": "☃"
   },
   "sob": {
     "unicode": "1F62D",
     "unicode_alternates": [],
     "name": "loudly crying face",
     "shortname": ":sob:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25024,14 +28222,14 @@
       "sad",
       "tears",
       "upset",
-      "cry",
       "sob",
-      "tears",
-      "sad",
       "melancholy",
       "morn",
       "somber",
-      "hurt"
+      "hurt",
+      "smiley",
+      "emotion",
+      "heartbreak"
     ],
     "moji": "😭"
   },
@@ -25042,7 +28240,7 @@
     ],
     "name": "soccer ball",
     "shortname": ":soccer:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25051,7 +28249,10 @@
       "football",
       "sports",
       "european",
-      "football"
+      "game",
+      "ball",
+      "sport",
+      "soccer"
     ],
     "moji": "âš½"
   },
@@ -25060,12 +28261,13 @@
     "unicode_alternates": [],
     "name": "soon with rightwards arrow above",
     "shortname": ":soon:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arrow",
-      "words"
+      "words",
+      "symbol"
     ],
     "moji": "🔜"
   },
@@ -25074,14 +28276,15 @@
     "unicode_alternates": [],
     "name": "squared sos",
     "shortname": ":sos:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "emergency",
       "help",
       "red-square",
-      "words"
+      "words",
+      "symbol"
     ],
     "moji": "🆘"
   },
@@ -25090,12 +28293,14 @@
     "unicode_alternates": [],
     "name": "speaker with one sound wave",
     "shortname": ":sound:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "speaker",
-      "volume"
+      "volume",
+      "alarm",
+      "symbol"
     ],
     "moji": "🔉"
   },
@@ -25104,12 +28309,14 @@
     "unicode_alternates": [],
     "name": "alien monster",
     "shortname": ":space_invader:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "arcade",
-      "game"
+      "game",
+      "monster",
+      "alien"
     ],
     "moji": "👾"
   },
@@ -25120,12 +28327,14 @@
     ],
     "name": "black spade suit",
     "shortname": ":spades:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "cards",
-      "poker"
+      "poker",
+      "symbol",
+      "game"
     ],
     "moji": "â™ "
   },
@@ -25134,7 +28343,7 @@
     "unicode_alternates": [],
     "name": "spaghetti",
     "shortname": ":spaghetti:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25145,7 +28354,7 @@
       "noodles",
       "tomato",
       "sauce",
-      "italian"
+      "pasta"
     ],
     "moji": "🍝"
   },
@@ -25156,12 +28365,13 @@
     ],
     "name": "sparkle",
     "shortname": ":sparkle:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "green-square",
-      "stars"
+      "stars",
+      "symbol"
     ],
     "moji": "❇"
   },
@@ -25170,13 +28380,14 @@
     "unicode_alternates": [],
     "name": "firework sparkler",
     "shortname": ":sparkler:",
-    "category": "objects",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "night",
       "shine",
-      "stars"
+      "stars",
+      "parties"
     ],
     "moji": "🎇"
   },
@@ -25185,14 +28396,16 @@
     "unicode_alternates": [],
     "name": "sparkles",
     "shortname": ":sparkles:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "cool",
       "shine",
       "shiny",
-      "stars"
+      "stars",
+      "star",
+      "girls night"
     ],
     "moji": "✨"
   },
@@ -25201,14 +28414,16 @@
     "unicode_alternates": [],
     "name": "sparkling heart",
     "shortname": ":sparkling_heart:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "affection",
       "like",
       "love",
-      "valentines"
+      "valentines",
+      "symbol",
+      "girls night"
     ],
     "moji": "💖"
   },
@@ -25217,13 +28432,12 @@
     "unicode_alternates": [],
     "name": "speak-no-evil monkey",
     "shortname": ":speak_no_evil:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "animal",
       "monkey",
-      "monkey",
       "mouth",
       "talk",
       "say",
@@ -25240,36 +28454,41 @@
     "unicode_alternates": [],
     "name": "speaker",
     "shortname": ":speaker:",
-    "category": "objects",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "sound",
       "listen",
       "hear",
-      "noise"
-    ]
+      "noise",
+      "alarm",
+      "symbol"
+    ],
+    "moji": "🔈"
   },
   "speaking_head": {
     "unicode": "1F5E3",
     "unicode_alternates": [],
     "name": "speaking head in silhouette",
     "shortname": ":speaking_head:",
-    "category": "objects_symbols",
+    "category": "people",
     "aliases": [
       ":speaking_head_in_silhouette:"
     ],
     "aliases_ascii": [],
     "keywords": [
-      "talk"
-    ]
+      "talk",
+      "people"
+    ],
+    "moji": "🗣"
   },
   "speech_balloon": {
     "unicode": "1F4AC",
     "unicode_alternates": [],
     "name": "speech balloon",
     "shortname": ":speech_balloon:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25281,96 +28500,18 @@
       "conversation",
       "communication",
       "comic",
-      "dialogue"
+      "dialogue",
+      "symbol",
+      "free speech"
     ],
     "moji": "💬"
   },
-  "speech_left": {
-    "unicode": "1F5E8",
-    "unicode_alternates": [],
-    "name": "left speech bubble",
-    "shortname": ":speech_left:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":left_speech_bubble:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "balloon",
-      "words",
-      "talk",
-      "conversation",
-      "communication",
-      "comic",
-      "dialogue"
-    ]
-  },
-  "speech_right": {
-    "unicode": "1F5E9",
-    "unicode_alternates": [],
-    "name": "right speech bubble",
-    "shortname": ":speech_right:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":right_speech_bubble:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "balloon",
-      "words",
-      "talk",
-      "conversation",
-      "communication",
-      "comic",
-      "dialogue"
-    ]
-  },
-  "speech_three": {
-    "unicode": "1F5EB",
-    "unicode_alternates": [],
-    "name": "three speech bubbles",
-    "shortname": ":speech_three:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":three_speech_bubbles:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "balloon",
-      "words",
-      "talk",
-      "conversation",
-      "communication",
-      "comic",
-      "dialogue"
-    ]
-  },
-  "speech_two": {
-    "unicode": "1F5EA",
-    "unicode_alternates": [],
-    "name": "two speech bubbles",
-    "shortname": ":speech_two:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":two_speech_bubbles:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "balloon",
-      "words",
-      "talk",
-      "conversation",
-      "communication",
-      "comic",
-      "dialogue"
-    ]
-  },
   "speedboat": {
     "unicode": "1F6A4",
     "unicode_alternates": [],
     "name": "speedboat",
     "shortname": ":speedboat:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25381,7 +28522,10 @@
       "speed",
       "ski",
       "power",
-      "boat"
+      "boat",
+      "travel",
+      "vacation",
+      "tropical"
     ],
     "moji": "🚤"
   },
@@ -25395,8 +28539,12 @@
     "aliases_ascii": [],
     "keywords": [
       "arachnid",
-      "eight-legged"
-    ]
+      "eight-legged",
+      "insects",
+      "halloween",
+      "animal"
+    ],
+    "moji": "🕷"
   },
   "spider_web": {
     "unicode": "1F578",
@@ -25407,8 +28555,21 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "cobweb"
-    ]
+      "cobweb",
+      "halloween"
+    ],
+    "moji": "🕸"
+  },
+  "spoon": {
+    "unicode": "1F944",
+    "unicode_alternates": [],
+    "name": "spoon",
+    "shortname": ":spoon:",
+    "category": "food",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥄"
   },
   "spy": {
     "unicode": "1F575",
@@ -25423,12 +28584,19 @@
     "keywords": [
       "pi",
       "undercover",
-      "investigator"
-    ]
+      "investigator",
+      "people",
+      "hat",
+      "men",
+      "glasses",
+      "diversity",
+      "job"
+    ],
+    "moji": "🕵"
   },
   "spy_tone1": {
     "unicode": "1F575-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sleuth or spy tone 1",
     "shortname": ":spy_tone1:",
     "category": "people",
@@ -25441,11 +28609,12 @@
       "undercover",
       "investigator",
       "person"
-    ]
+    ],
+    "moji": "🕵🏻"
   },
   "spy_tone2": {
     "unicode": "1F575-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sleuth or spy tone 2",
     "shortname": ":spy_tone2:",
     "category": "people",
@@ -25458,11 +28627,12 @@
       "undercover",
       "investigator",
       "person"
-    ]
+    ],
+    "moji": "🕵🏼"
   },
   "spy_tone3": {
     "unicode": "1F575-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sleuth or spy tone 3",
     "shortname": ":spy_tone3:",
     "category": "people",
@@ -25475,11 +28645,12 @@
       "undercover",
       "investigator",
       "person"
-    ]
+    ],
+    "moji": "🕵🏽"
   },
   "spy_tone4": {
     "unicode": "1F575-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sleuth or spy tone 4",
     "shortname": ":spy_tone4:",
     "category": "people",
@@ -25492,11 +28663,12 @@
       "undercover",
       "investigator",
       "person"
-    ]
+    ],
+    "moji": "🕵🏾"
   },
   "spy_tone5": {
     "unicode": "1F575-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "sleuth or spy tone 5",
     "shortname": ":spy_tone5:",
     "category": "people",
@@ -25509,14 +28681,26 @@
       "undercover",
       "investigator",
       "person"
-    ]
+    ],
+    "moji": "🕵🏿"
+  },
+  "squid": {
+    "unicode": "1F991",
+    "unicode_alternates": [],
+    "name": "squid",
+    "shortname": ":squid:",
+    "category": "nature",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🦑"
   },
   "stadium": {
     "unicode": "1F3DF",
     "unicode_alternates": [],
     "name": "stadium",
     "shortname": ":stadium:",
-    "category": "travel_places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25524,8 +28708,14 @@
       "event",
       "concert",
       "convention",
-      "game"
-    ]
+      "game",
+      "places",
+      "building",
+      "travel",
+      "vacation",
+      "boys night"
+    ],
+    "moji": "🏟"
   },
   "star": {
     "unicode": "2B50",
@@ -25539,7 +28729,10 @@
     "aliases_ascii": [],
     "keywords": [
       "night",
-      "yellow"
+      "yellow",
+      "space",
+      "sky",
+      "star"
     ],
     "moji": "⭐"
   },
@@ -25548,7 +28741,7 @@
     "unicode_alternates": [],
     "name": "glowing star",
     "shortname": ":star2:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25559,13 +28752,15 @@
       "star",
       "five",
       "points",
-      "classic"
+      "classic",
+      "space",
+      "sky"
     ],
     "moji": "🌟"
   },
   "star_and_crescent": {
     "unicode": "262A",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "star and crescent",
     "shortname": ":star_and_crescent:",
     "category": "symbols",
@@ -25576,11 +28771,12 @@
       "muslim",
       "religion",
       "symbol"
-    ]
+    ],
+    "moji": "☪"
   },
   "star_of_david": {
     "unicode": "2721",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "star of david",
     "shortname": ":star_of_david:",
     "category": "symbols",
@@ -25590,15 +28786,17 @@
       "jew",
       "jewish",
       "religion",
-      "symbol"
-    ]
+      "symbol",
+      "star"
+    ],
+    "moji": "✡"
   },
   "stars": {
     "unicode": "1F320",
     "unicode_alternates": [],
     "name": "shooting star",
     "shortname": ":stars:",
-    "category": "nature",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25608,9 +28806,9 @@
       "shoot",
       "star",
       "sky",
-      "night",
       "comet",
-      "meteoroid"
+      "meteoroid",
+      "space"
     ],
     "moji": "🌠"
   },
@@ -25619,7 +28817,7 @@
     "unicode_alternates": [],
     "name": "station",
     "shortname": ":station:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25628,7 +28826,8 @@
       "vehicle",
       "station",
       "train",
-      "subway"
+      "subway",
+      "travel"
     ],
     "moji": "🚉"
   },
@@ -25637,12 +28836,18 @@
     "unicode_alternates": [],
     "name": "statue of liberty",
     "shortname": ":statue_of_liberty:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "american",
-      "newyork"
+      "newyork",
+      "places",
+      "america",
+      "travel",
+      "vacation",
+      "statue of liberty",
+      "free speech"
     ],
     "moji": "🗽"
   },
@@ -25651,7 +28856,7 @@
     "unicode_alternates": [],
     "name": "steam locomotive",
     "shortname": ":steam_locomotive:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25660,35 +28865,17 @@
       "vehicle",
       "locomotive",
       "steam",
-      "train",
-      "engine"
+      "engine",
+      "travel"
     ],
     "moji": "🚂"
   },
-  "stereo": {
-    "unicode": "1F4FE",
-    "unicode_alternates": [],
-    "name": "portable stereo",
-    "shortname": ":stereo:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":portable_stereo:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "communication",
-      "music",
-      "program",
-      "boom",
-      "box"
-    ]
-  },
   "stew": {
     "unicode": "1F372",
     "unicode_alternates": [],
     "name": "pot of food",
     "shortname": ":stew:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25697,30 +28884,16 @@
       "stew",
       "hearty",
       "soup",
-      "thick",
-      "hot",
-      "pot"
-    ],
-    "moji": "🍲"
-  },
-  "stock_chart": {
-    "unicode": "1F5E0",
-    "unicode_alternates": [],
-    "name": "stock chart",
-    "shortname": ":stock_chart:",
-    "category": "objects_symbols",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": [
-      "graph",
-      "presentation",
-      "stats",
-      "business"
-    ]
+      "thick",
+      "hot",
+      "pot",
+      "steam"
+    ],
+    "moji": "🍲"
   },
   "stop_button": {
     "unicode": "23F9",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "black square for stop",
     "shortname": ":stop_button:",
     "category": "symbols",
@@ -25728,12 +28901,14 @@
     "aliases_ascii": [],
     "keywords": [
       "sound",
-      "symbol"
-    ]
+      "symbol",
+      "square"
+    ],
+    "moji": "⏹"
   },
   "stopwatch": {
     "unicode": "23F1",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "stopwatch",
     "shortname": ":stopwatch:",
     "category": "objects",
@@ -25742,8 +28917,10 @@
     "keywords": [
       "clock",
       "object",
-      "time"
-    ]
+      "time",
+      "electronics"
+    ],
+    "moji": "⏱"
   },
   "straight_ruler": {
     "unicode": "1F4CF",
@@ -25754,7 +28931,10 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "stationery"
+      "stationery",
+      "object",
+      "tool",
+      "office"
     ],
     "moji": "📏"
   },
@@ -25763,7 +28943,7 @@
     "unicode_alternates": [],
     "name": "strawberry",
     "shortname": ":strawberry:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25782,7 +28962,7 @@
     "unicode_alternates": [],
     "name": "face with stuck-out tongue",
     "shortname": ":stuck_out_tongue:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ":P",
@@ -25807,8 +28987,10 @@
       "prank",
       "tongue",
       "silly",
-      "playful",
-      "cheeky"
+      "cheeky",
+      "smiley",
+      "sex",
+      "emotion"
     ],
     "moji": "😛"
   },
@@ -25817,7 +28999,7 @@
     "unicode_alternates": [],
     "name": "face with stuck-out tongue and tightly-closed eyes",
     "shortname": ":stuck_out_tongue_closed_eyes:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25828,8 +29010,10 @@
       "tongue",
       "kidding",
       "silly",
-      "playful",
-      "ecstatic"
+      "ecstatic",
+      "happy",
+      "smiley",
+      "emotion"
     ],
     "moji": "😝"
   },
@@ -25838,7 +29022,7 @@
     "unicode_alternates": [],
     "name": "face with stuck-out tongue and winking eye",
     "shortname": ":stuck_out_tongue_winking_eye:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ">:P",
@@ -25856,11 +29040,27 @@
       "winking",
       "kidding",
       "silly",
-      "playful",
-      "crazy"
+      "crazy",
+      "happy",
+      "smiley",
+      "emotion",
+      "parties"
     ],
     "moji": "😜"
   },
+  "stuffed_flatbread": {
+    "unicode": "1F959",
+    "unicode_alternates": [],
+    "name": "stuffed flatbread",
+    "shortname": ":stuffed_flatbread:",
+    "category": "food",
+    "aliases": [
+      ":stuffed_pita:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥙"
+  },
   "sun_with_face": {
     "unicode": "1F31E",
     "unicode_alternates": [],
@@ -25874,7 +29074,9 @@
       "sun",
       "anthropomorphic",
       "face",
-      "sky"
+      "sky",
+      "day",
+      "hump day"
     ],
     "moji": "🌞"
   },
@@ -25902,7 +29104,7 @@
     "unicode_alternates": [],
     "name": "smiling face with sunglasses",
     "shortname": ":sunglasses:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       "B-)",
@@ -25920,8 +29122,11 @@
       "sun",
       "glasses",
       "sunny",
-      "cool",
-      "smooth"
+      "smooth",
+      "silly",
+      "smiley",
+      "emojione",
+      "boys night"
     ],
     "moji": "😎"
   },
@@ -25937,15 +29142,21 @@
     "aliases_ascii": [],
     "keywords": [
       "brightness",
-      "weather"
-    ]
+      "weather",
+      "sky",
+      "day",
+      "sun",
+      "hot",
+      "morning"
+    ],
+    "moji": "☀"
   },
   "sunrise": {
     "unicode": "1F305",
     "unicode_alternates": [],
     "name": "sunrise",
     "shortname": ":sunrise:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25955,9 +29166,13 @@
       "view",
       "sunrise",
       "sun",
-      "morning",
       "color",
-      "sky"
+      "sky",
+      "places",
+      "travel",
+      "tropical",
+      "day",
+      "hump day"
     ],
     "moji": "🌅"
   },
@@ -25966,7 +29181,7 @@
     "unicode_alternates": [],
     "name": "sunrise over mountains",
     "shortname": ":sunrise_over_mountains:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25979,7 +29194,11 @@
       "mountain",
       "rural",
       "color",
-      "sky"
+      "sky",
+      "places",
+      "travel",
+      "day",
+      "camp"
     ],
     "moji": "🌄"
   },
@@ -25988,7 +29207,7 @@
     "unicode_alternates": [],
     "name": "surfer",
     "shortname": ":surfer:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -25998,15 +29217,19 @@
       "surfer",
       "surf",
       "wave",
-      "ocean",
       "ride",
-      "swell"
+      "swell",
+      "men",
+      "vacation",
+      "tropical",
+      "sport",
+      "diversity"
     ],
     "moji": "🏄"
   },
   "surfer_tone1": {
     "unicode": "1F3C4-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "surfer tone 1",
     "shortname": ":surfer_tone1:",
     "category": "activity",
@@ -26018,14 +29241,14 @@
       "sport",
       "surf",
       "wave",
-      "ocean",
       "ride",
       "swell"
-    ]
+    ],
+    "moji": "🏄🏻"
   },
   "surfer_tone2": {
     "unicode": "1F3C4-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "surfer tone 2",
     "shortname": ":surfer_tone2:",
     "category": "activity",
@@ -26037,14 +29260,14 @@
       "sport",
       "surf",
       "wave",
-      "ocean",
       "ride",
       "swell"
-    ]
+    ],
+    "moji": "🏄🏼"
   },
   "surfer_tone3": {
     "unicode": "1F3C4-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "surfer tone 3",
     "shortname": ":surfer_tone3:",
     "category": "activity",
@@ -26056,14 +29279,14 @@
       "sport",
       "surf",
       "wave",
-      "ocean",
       "ride",
       "swell"
-    ]
+    ],
+    "moji": "🏄🏽"
   },
   "surfer_tone4": {
     "unicode": "1F3C4-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "surfer tone 4",
     "shortname": ":surfer_tone4:",
     "category": "activity",
@@ -26075,14 +29298,14 @@
       "sport",
       "surf",
       "wave",
-      "ocean",
       "ride",
       "swell"
-    ]
+    ],
+    "moji": "🏄🏾"
   },
   "surfer_tone5": {
     "unicode": "1F3C4-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "surfer tone 5",
     "shortname": ":surfer_tone5:",
     "category": "activity",
@@ -26094,17 +29317,17 @@
       "sport",
       "surf",
       "wave",
-      "ocean",
       "ride",
       "swell"
-    ]
+    ],
+    "moji": "🏄🏿"
   },
   "sushi": {
     "unicode": "1F363",
     "unicode_alternates": [],
     "name": "sushi",
     "shortname": ":sushi:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26114,7 +29337,7 @@
       "fish",
       "raw",
       "nigiri",
-      "japanese"
+      "japan"
     ],
     "moji": "🍣"
   },
@@ -26123,7 +29346,7 @@
     "unicode_alternates": [],
     "name": "suspension railway",
     "shortname": ":suspension_railway:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26133,7 +29356,7 @@
       "railway",
       "rail",
       "train",
-      "transportation"
+      "travel"
     ],
     "moji": "🚟"
   },
@@ -26142,7 +29365,7 @@
     "unicode_alternates": [],
     "name": "face with cold sweat",
     "shortname": ":sweat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       "':(",
@@ -26158,7 +29381,11 @@
       "clammy",
       "diaphoresis",
       "face",
-      "hot"
+      "hot",
+      "sad",
+      "smiley",
+      "stressed",
+      "emotion"
     ],
     "moji": "😓"
   },
@@ -26167,11 +29394,14 @@
     "unicode_alternates": [],
     "name": "splashing sweat symbol",
     "shortname": ":sweat_drops:",
-    "category": "emoticons",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "water"
+      "water",
+      "rain",
+      "stressed",
+      "sweat"
     ],
     "moji": "💦"
   },
@@ -26180,7 +29410,7 @@
     "unicode_alternates": [],
     "name": "smiling face with open mouth and cold sweat",
     "shortname": ":sweat_smile:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       "':)",
@@ -26197,7 +29427,10 @@
       "smiling",
       "cold",
       "sweat",
-      "perspiration"
+      "perspiration",
+      "smiley",
+      "workout",
+      "emotion"
     ],
     "moji": "😅"
   },
@@ -26206,7 +29439,7 @@
     "unicode_alternates": [],
     "name": "roasted sweet potato",
     "shortname": ":sweet_potato:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26216,7 +29449,8 @@
       "potato",
       "potassium",
       "roasted",
-      "roast"
+      "roast",
+      "vegetables"
     ],
     "moji": "🍠"
   },
@@ -26225,7 +29459,7 @@
     "unicode_alternates": [],
     "name": "swimmer",
     "shortname": ":swimmer:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26238,13 +29472,16 @@
       "freestyle",
       "butterfly",
       "breaststroke",
-      "backstroke"
+      "backstroke",
+      "workout",
+      "sport",
+      "diversity"
     ],
     "moji": "🏊"
   },
   "swimmer_tone1": {
     "unicode": "1F3CA-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "swimmer tone 1",
     "shortname": ":swimmer_tone1:",
     "category": "activity",
@@ -26260,11 +29497,12 @@
       "butterfly",
       "breaststroke",
       "backstroke"
-    ]
+    ],
+    "moji": "🏊🏻"
   },
   "swimmer_tone2": {
     "unicode": "1F3CA-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "swimmer tone 2",
     "shortname": ":swimmer_tone2:",
     "category": "activity",
@@ -26280,11 +29518,12 @@
       "butterfly",
       "breaststroke",
       "backstroke"
-    ]
+    ],
+    "moji": "🏊🏼"
   },
   "swimmer_tone3": {
     "unicode": "1F3CA-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "swimmer tone 3",
     "shortname": ":swimmer_tone3:",
     "category": "activity",
@@ -26300,11 +29539,12 @@
       "butterfly",
       "breaststroke",
       "backstroke"
-    ]
+    ],
+    "moji": "🏊🏽"
   },
   "swimmer_tone4": {
     "unicode": "1F3CA-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "swimmer tone 4",
     "shortname": ":swimmer_tone4:",
     "category": "activity",
@@ -26320,11 +29560,12 @@
       "butterfly",
       "breaststroke",
       "backstroke"
-    ]
+    ],
+    "moji": "🏊🏾"
   },
   "swimmer_tone5": {
     "unicode": "1F3CA-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "swimmer tone 5",
     "shortname": ":swimmer_tone5:",
     "category": "activity",
@@ -26340,30 +29581,40 @@
       "butterfly",
       "breaststroke",
       "backstroke"
-    ]
+    ],
+    "moji": "🏊🏿"
   },
   "symbols": {
     "unicode": "1F523",
     "unicode_alternates": [],
     "name": "input symbol for symbols",
     "shortname": ":symbols:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "🔣"
   },
   "synagogue": {
     "unicode": "1F54D",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "synagogue",
     "shortname": ":synagogue:",
     "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "places",
+      "religion",
+      "building",
+      "travel",
+      "vacation",
+      "condolence"
+    ],
+    "moji": "🕍"
   },
   "syringe": {
     "unicode": "1F489",
@@ -26379,19 +29630,26 @@
       "health",
       "hospital",
       "medicine",
-      "needle"
+      "needle",
+      "object",
+      "weapon"
     ],
     "moji": "💉"
   },
   "taco": {
     "unicode": "1F32E",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "taco",
     "shortname": ":taco:",
-    "category": "foods",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "food",
+      "mexican",
+      "vagina"
+    ],
+    "moji": "🌮"
   },
   "tada": {
     "unicode": "1F389",
@@ -26404,14 +29662,21 @@
     "keywords": [
       "contulations",
       "party",
-      "party",
       "popper",
       "tada",
       "celebration",
       "victory",
       "announcement",
       "climax",
-      "congratulations"
+      "congratulations",
+      "object",
+      "birthday",
+      "holidays",
+      "cheers",
+      "good",
+      "girls night",
+      "boys night",
+      "parties"
     ],
     "moji": "🎉"
   },
@@ -26420,7 +29685,7 @@
     "unicode_alternates": [],
     "name": "tanabata tree",
     "shortname": ":tanabata_tree:",
-    "category": "objects",
+    "category": "nature",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26431,7 +29696,8 @@
       "festival",
       "star",
       "wish",
-      "holiday"
+      "holiday",
+      "trees"
     ],
     "moji": "🎋"
   },
@@ -26440,7 +29706,7 @@
     "unicode_alternates": [],
     "name": "tangerine",
     "shortname": ":tangerine:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26460,7 +29726,7 @@
     ],
     "name": "taurus",
     "shortname": ":taurus:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26473,9 +29739,8 @@
       "constellation",
       "stars",
       "zodiac",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♉"
   },
@@ -26484,7 +29749,7 @@
     "unicode_alternates": [],
     "name": "taxi",
     "shortname": ":taxi:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26497,7 +29762,8 @@
       "automobile",
       "city",
       "transport",
-      "service"
+      "service",
+      "travel"
     ],
     "moji": "🚕"
   },
@@ -26506,7 +29772,7 @@
     "unicode_alternates": [],
     "name": "teacup without handle",
     "shortname": ":tea:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26517,10 +29783,13 @@
       "green",
       "tea",
       "leaf",
-      "drink",
       "teacup",
       "hot",
-      "beverage"
+      "beverage",
+      "japan",
+      "caffeine",
+      "steam",
+      "morning"
     ],
     "moji": "🍵"
   },
@@ -26537,26 +29806,12 @@
     "keywords": [
       "communication",
       "dial",
-      "technology"
+      "technology",
+      "electronics",
+      "phone"
     ],
     "moji": "☎"
   },
-  "telephone_black": {
-    "unicode": "1F57F",
-    "unicode_alternates": [],
-    "name": "black touchtone telephone",
-    "shortname": ":telephone_black:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":black_touchtone_telephone:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "communication",
-      "dial",
-      "technology"
-    ]
-  },
   "telephone_receiver": {
     "unicode": "1F4DE",
     "unicode_alternates": [],
@@ -26568,26 +29823,12 @@
     "keywords": [
       "communication",
       "dial",
-      "technology"
+      "technology",
+      "electronics",
+      "phone"
     ],
     "moji": "📞"
   },
-  "telephone_white": {
-    "unicode": "1F57E",
-    "unicode_alternates": [],
-    "name": "white touchtone telephone",
-    "shortname": ":telephone_white:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":white_touchtone_telephone:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "communication",
-      "dial",
-      "technology"
-    ]
-  },
   "telescope": {
     "unicode": "1F52D",
     "unicode_alternates": [],
@@ -26598,13 +29839,15 @@
     "aliases_ascii": [],
     "keywords": [
       "space",
-      "stars"
+      "stars",
+      "object",
+      "science"
     ],
     "moji": "🔭"
   },
   "ten": {
     "unicode": "1F51F",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "keycap ten",
     "shortname": ":ten:",
     "category": "symbols",
@@ -26615,15 +29858,18 @@
       "blue-square",
       "numbers",
       "symbol",
-      "word"
-    ]
+      "word",
+      "number",
+      "math"
+    ],
+    "moji": "🔟"
   },
   "tennis": {
     "unicode": "1F3BE",
     "unicode_alternates": [],
     "name": "tennis racquet and ball",
     "shortname": ":tennis:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -26637,7 +29883,8 @@
       "game",
       "net",
       "court",
-      "love"
+      "love",
+      "sport"
     ],
     "moji": "🎾"
   },
@@ -26648,13 +29895,16 @@
     ],
     "name": "tent",
     "shortname": ":tent:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "camp",
       "outdoors",
-      "photo"
+      "photo",
+      "places",
+      "travel",
+      "vacation"
     ],
     "moji": "⛺"
   },
@@ -26663,16 +29913,21 @@
     "unicode_alternates": [],
     "name": "thermometer",
     "shortname": ":thermometer:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "temperature"
-    ]
+      "temperature",
+      "object",
+      "science",
+      "health",
+      "hot"
+    ],
+    "moji": "🌡"
   },
   "thermometer_face": {
     "unicode": "1F912",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "face with thermometer",
     "shortname": ":thermometer_face:",
     "category": "people",
@@ -26680,11 +29935,17 @@
       ":face_with_thermometer:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "smiley",
+      "health",
+      "sick",
+      "emotion"
+    ],
+    "moji": "🤒"
   },
   "thinking": {
     "unicode": "1F914",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thinking face",
     "shortname": ":thinking:",
     "category": "people",
@@ -26692,66 +29953,47 @@
       ":thinking_face:"
     ],
     "aliases_ascii": [],
-    "keywords": []
-  },
-  "thought_balloon": {
-    "unicode": "1F4AD",
-    "unicode_alternates": [],
-    "name": "thought balloon",
-    "shortname": ":thought_balloon:",
-    "category": "emoticons",
-    "aliases": [],
-    "aliases_ascii": [],
     "keywords": [
-      "bubble",
-      "cloud",
-      "speech",
-      "thought",
-      "balloon",
-      "comic",
-      "think",
-      "day dream",
-      "wonder"
+      "smiley",
+      "thinking",
+      "boys night"
     ],
-    "moji": "💭"
+    "moji": "🤔"
   },
-  "thought_left": {
-    "unicode": "1F5EC",
+  "third_place": {
+    "unicode": "1F949",
     "unicode_alternates": [],
-    "name": "left thought bubble",
-    "shortname": ":thought_left:",
-    "category": "objects_symbols",
+    "name": "third place medal",
+    "shortname": ":third_place:",
+    "category": "activity",
     "aliases": [
-      ":left_thought_bubble:"
+      ":third_place_medal:"
     ],
     "aliases_ascii": [],
-    "keywords": [
-      "balloon",
-      "cloud",
-      "comic",
-      "think",
-      "day dream",
-      "wonder"
-    ]
+    "keywords": [],
+    "moji": "🥉"
   },
-  "thought_right": {
-    "unicode": "1F5ED",
-    "unicode_alternates": [],
-    "name": "right thought bubble",
-    "shortname": ":thought_right:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":right_thought_bubble:"
-    ],
+  "thought_balloon": {
+    "unicode": "1F4AD",
+    "unicode_alternates": [],
+    "name": "thought balloon",
+    "shortname": ":thought_balloon:",
+    "category": "symbols",
+    "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "balloon",
+      "bubble",
       "cloud",
+      "speech",
+      "thought",
+      "balloon",
       "comic",
       "think",
       "day dream",
-      "wonder"
-    ]
+      "wonder",
+      "symbol"
+    ],
+    "moji": "💭"
   },
   "three": {
     "moji": "3️⃣",
@@ -26759,50 +30001,19 @@
     "unicode_alternates": [
       "0033-FE0F-20E3"
     ],
-    "name": "digit three",
+    "name": "keycap digit three",
     "shortname": ":three:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "3",
       "blue-square",
       "numbers",
-      "prime"
-    ]
-  },
-  "thumbs_down_reverse": {
-    "unicode": "1F593",
-    "unicode_alternates": [],
-    "name": "reversed thumbs down sign",
-    "shortname": ":thumbs_down_reverse:",
-    "category": "people",
-    "aliases": [
-      ":reversed_thumbs_down_sign:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "hand",
-      "no",
-      "-1"
-    ]
-  },
-  "thumbs_up_reverse": {
-    "unicode": "1F592",
-    "unicode_alternates": [],
-    "name": "reversed thumbs up sign",
-    "shortname": ":thumbs_up_reverse:",
-    "category": "people",
-    "aliases": [
-      ":reversed_thumbs_up_sign:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "cool",
-      "hand",
-      "like",
-      "yes",
-      "+1"
+      "prime",
+      "number",
+      "math",
+      "symbol"
     ]
   },
   "thumbsdown": {
@@ -26810,20 +30021,23 @@
     "unicode_alternates": [],
     "name": "thumbs down sign",
     "shortname": ":thumbsdown:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [
       ":-1:"
     ],
     "aliases_ascii": [],
     "keywords": [
       "hand",
-      "no"
+      "no",
+      "body",
+      "hands",
+      "diversity"
     ],
     "moji": "👎"
   },
   "thumbsdown_tone1": {
     "unicode": "1F44E-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs down sign tone 1",
     "shortname": ":thumbsdown_tone1:",
     "category": "people",
@@ -26835,11 +30049,12 @@
       "hand",
       "no",
       "-1"
-    ]
+    ],
+    "moji": "👎🏻"
   },
   "thumbsdown_tone2": {
     "unicode": "1F44E-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs down sign tone 2",
     "shortname": ":thumbsdown_tone2:",
     "category": "people",
@@ -26851,11 +30066,12 @@
       "hand",
       "no",
       "-1"
-    ]
+    ],
+    "moji": "👎🏼"
   },
   "thumbsdown_tone3": {
     "unicode": "1F44E-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs down sign tone 3",
     "shortname": ":thumbsdown_tone3:",
     "category": "people",
@@ -26867,11 +30083,12 @@
       "hand",
       "no",
       "-1"
-    ]
+    ],
+    "moji": "👎🏽"
   },
   "thumbsdown_tone4": {
     "unicode": "1F44E-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs down sign tone 4",
     "shortname": ":thumbsdown_tone4:",
     "category": "people",
@@ -26883,11 +30100,12 @@
       "hand",
       "no",
       "-1"
-    ]
+    ],
+    "moji": "👎🏾"
   },
   "thumbsdown_tone5": {
     "unicode": "1F44E-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs down sign tone 5",
     "shortname": ":thumbsdown_tone5:",
     "category": "people",
@@ -26899,14 +30117,15 @@
       "hand",
       "no",
       "-1"
-    ]
+    ],
+    "moji": "👎🏿"
   },
   "thumbsup": {
     "unicode": "1F44D",
     "unicode_alternates": [],
     "name": "thumbs up sign",
     "shortname": ":thumbsup:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [
       ":+1:"
     ],
@@ -26915,13 +30134,22 @@
       "cool",
       "hand",
       "like",
-      "yes"
+      "yes",
+      "body",
+      "hands",
+      "hi",
+      "luck",
+      "thank you",
+      "diversity",
+      "perfect",
+      "good",
+      "beautiful"
     ],
     "moji": "👍"
   },
   "thumbsup_tone1": {
     "unicode": "1F44D-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs up sign tone 1",
     "shortname": ":thumbsup_tone1:",
     "category": "people",
@@ -26935,11 +30163,12 @@
       "like",
       "yes",
       "+1"
-    ]
+    ],
+    "moji": "👍🏻"
   },
   "thumbsup_tone2": {
     "unicode": "1F44D-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs up sign tone 2",
     "shortname": ":thumbsup_tone2:",
     "category": "people",
@@ -26953,11 +30182,12 @@
       "like",
       "yes",
       "+1"
-    ]
+    ],
+    "moji": "👍🏼"
   },
   "thumbsup_tone3": {
     "unicode": "1F44D-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs up sign tone 3",
     "shortname": ":thumbsup_tone3:",
     "category": "people",
@@ -26971,11 +30201,12 @@
       "like",
       "yes",
       "+1"
-    ]
+    ],
+    "moji": "👍🏽"
   },
   "thumbsup_tone4": {
     "unicode": "1F44D-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs up sign tone 4",
     "shortname": ":thumbsup_tone4:",
     "category": "people",
@@ -26989,11 +30220,12 @@
       "like",
       "yes",
       "+1"
-    ]
+    ],
+    "moji": "👍🏾"
   },
   "thumbsup_tone5": {
     "unicode": "1F44D-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thumbs up sign tone 5",
     "shortname": ":thumbsup_tone5:",
     "category": "people",
@@ -27007,11 +30239,12 @@
       "like",
       "yes",
       "+1"
-    ]
+    ],
+    "moji": "👍🏿"
   },
   "thunder_cloud_rain": {
     "unicode": "26C8",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "thunder cloud and rain",
     "shortname": ":thunder_cloud_rain:",
     "category": "nature",
@@ -27021,15 +30254,20 @@
     "aliases_ascii": [],
     "keywords": [
       "nature",
-      "weather"
-    ]
+      "weather",
+      "sky",
+      "cloud",
+      "cold",
+      "rain"
+    ],
+    "moji": "⛈"
   },
   "ticket": {
     "unicode": "1F3AB",
     "unicode_alternates": [],
     "name": "ticket",
     "shortname": ":ticket:",
-    "category": "places",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27042,7 +30280,10 @@
       "stub",
       "admission",
       "proof",
-      "purchase"
+      "purchase",
+      "theatre",
+      "movie",
+      "parties"
     ],
     "moji": "🎫"
   },
@@ -27064,8 +30305,12 @@
       "entertainment",
       "stub",
       "proof",
-      "purchase"
-    ]
+      "purchase",
+      "theatre",
+      "movie",
+      "parties"
+    ],
+    "moji": "🎟"
   },
   "tiger": {
     "unicode": "1F42F",
@@ -27076,7 +30321,10 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "animal"
+      "animal",
+      "wildlife",
+      "roar",
+      "cat"
     ],
     "moji": "🐯"
   },
@@ -27096,13 +30344,15 @@
       "striped",
       "tony",
       "tigger",
-      "hobs"
+      "hobs",
+      "wildlife",
+      "roar"
     ],
     "moji": "🐅"
   },
   "timer": {
     "unicode": "23F2",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "timer clock",
     "shortname": ":timer:",
     "category": "objects",
@@ -27113,14 +30363,15 @@
     "keywords": [
       "object",
       "time"
-    ]
+    ],
+    "moji": "⏲"
   },
   "tired_face": {
     "unicode": "1F62B",
     "unicode_alternates": [],
     "name": "tired face",
     "shortname": ":tired_face:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27131,13 +30382,18 @@
       "whine",
       "exhausted",
       "sleepy",
-      "tired"
+      "tired",
+      "sad",
+      "smiley",
+      "emotion"
     ],
     "moji": "😫"
   },
   "tm": {
     "unicode": "2122",
-    "unicode_alternates": "2122-fe0f",
+    "unicode_alternates": [
+      "2122-FE0F"
+    ],
     "name": "trade mark sign",
     "shortname": ":tm:",
     "category": "symbols",
@@ -27149,7 +30405,8 @@
       "symbol",
       "tm",
       "word"
-    ]
+    ],
+    "moji": "â„¢"
   },
   "toilet": {
     "unicode": "1F6BD",
@@ -27168,7 +30425,8 @@
       "porcelain",
       "waste",
       "flush",
-      "plumbing"
+      "plumbing",
+      "object"
     ],
     "moji": "🚽"
   },
@@ -27177,12 +30435,16 @@
     "unicode_alternates": [],
     "name": "tokyo tower",
     "shortname": ":tokyo_tower:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "japan",
-      "photo"
+      "photo",
+      "places",
+      "travel",
+      "vacation",
+      "eiffel tower"
     ],
     "moji": "🗼"
   },
@@ -27191,7 +30453,7 @@
     "unicode_alternates": [],
     "name": "tomato",
     "shortname": ":tomato:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27200,80 +30462,83 @@
       "nature",
       "vegetable",
       "tomato",
-      "fruit",
       "sauce",
-      "italian"
+      "italian",
+      "vegetables"
     ],
     "moji": "🍅"
   },
   "tone1": {
     "unicode": "1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "emoji modifier Fitzpatrick type-1-2",
     "shortname": ":tone1:",
     "category": "modifier",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [],
+    "moji": "🏻"
   },
   "tone2": {
     "unicode": "1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "emoji modifier Fitzpatrick type-3",
     "shortname": ":tone2:",
     "category": "modifier",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [],
+    "moji": "🏼"
   },
   "tone3": {
     "unicode": "1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "emoji modifier Fitzpatrick type-4",
     "shortname": ":tone3:",
     "category": "modifier",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [],
+    "moji": "🏽"
   },
   "tone4": {
     "unicode": "1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "emoji modifier Fitzpatrick type-5",
     "shortname": ":tone4:",
     "category": "modifier",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [],
+    "moji": "🏾"
   },
   "tone5": {
     "unicode": "1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "emoji modifier Fitzpatrick type-6",
     "shortname": ":tone5:",
     "category": "modifier",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [],
+    "moji": "🏿"
   },
   "tongue": {
     "unicode": "1F445",
     "unicode_alternates": [],
     "name": "tongue",
     "shortname": ":tongue:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "mouth",
       "playful",
       "tongue",
-      "mouth",
       "taste",
       "buds",
       "food",
       "silly",
-      "playful",
       "tease",
       "kiss",
       "french kiss",
@@ -27281,7 +30546,10 @@
       "tasty",
       "playfulness",
       "silliness",
-      "intimacy"
+      "intimacy",
+      "body",
+      "sexy",
+      "lip"
     ],
     "moji": "👅"
   },
@@ -27290,26 +30558,31 @@
     "unicode_alternates": [],
     "name": "hammer and wrench",
     "shortname": ":tools:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [
       ":hammer_and_wrench:"
     ],
     "aliases_ascii": [],
     "keywords": [
-      "tools"
-    ]
+      "tools",
+      "object",
+      "tool"
+    ],
+    "moji": "🛠"
   },
   "top": {
     "unicode": "1F51D",
     "unicode_alternates": [],
     "name": "top with upwards arrow above",
     "shortname": ":top:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
-      "words"
+      "words",
+      "arrow",
+      "symbol"
     ],
     "moji": "🔝"
   },
@@ -27318,7 +30591,7 @@
     "unicode_alternates": [],
     "name": "top hat",
     "shortname": ":tophat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27337,14 +30610,15 @@
       "topper",
       "london",
       "period piece",
-      "magic",
-      "magician"
+      "magician",
+      "fashion",
+      "accessories"
     ],
     "moji": "🎩"
   },
   "track_next": {
     "unicode": "23ED",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "black right-pointing double triangle with vertical bar",
     "shortname": ":track_next:",
     "category": "symbols",
@@ -27358,11 +30632,12 @@
       "next track",
       "sound",
       "symbol"
-    ]
+    ],
+    "moji": "⏭"
   },
   "track_previous": {
     "unicode": "23EE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "black left-pointing double triangle with vertical bar",
     "shortname": ":track_previous:",
     "category": "symbols",
@@ -27376,28 +30651,34 @@
       "previous track",
       "sound",
       "symbol"
-    ]
+    ],
+    "moji": "⏮"
   },
   "trackball": {
     "unicode": "1F5B2",
     "unicode_alternates": [],
     "name": "trackball",
     "shortname": ":trackball:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "input",
       "device",
-      "gadget"
-    ]
+      "gadget",
+      "electronics",
+      "work",
+      "game",
+      "office"
+    ],
+    "moji": "🖲"
   },
   "tractor": {
     "unicode": "1F69C",
     "unicode_alternates": [],
     "name": "tractor",
     "shortname": ":tractor:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27409,7 +30690,8 @@
       "farm",
       "construction",
       "machine",
-      "digger"
+      "digger",
+      "transportation"
     ],
     "moji": "🚜"
   },
@@ -27418,18 +30700,19 @@
     "unicode_alternates": [],
     "name": "horizontal traffic light",
     "shortname": ":traffic_light:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "traffic",
       "transportation",
-      "traffic",
       "light",
       "stop",
       "go",
       "yield",
-      "horizontal"
+      "horizontal",
+      "object",
+      "stop light"
     ],
     "moji": "🚥"
   },
@@ -27438,20 +30721,24 @@
     "unicode_alternates": [],
     "name": "Tram Car",
     "shortname": ":train:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "tram",
-      "rail"
-    ]
+      "rail",
+      "transportation",
+      "travel",
+      "train"
+    ],
+    "moji": "🚋"
   },
   "train2": {
     "unicode": "1F686",
     "unicode_alternates": [],
     "name": "train",
     "shortname": ":train2:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27459,66 +30746,35 @@
       "vehicle",
       "train",
       "locomotive",
-      "rail"
+      "rail",
+      "travel"
     ],
     "moji": "🚆"
   },
-  "train_diesel": {
-    "unicode": "1F6F2",
-    "unicode_alternates": [],
-    "name": "diesel locomotive",
-    "shortname": ":train_diesel:",
-    "category": "travel_places",
-    "aliases": [
-      ":diesel_locomotive:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "train",
-      "transportation",
-      "engine",
-      "rail"
-    ]
-  },
   "tram": {
     "unicode": "1F68A",
     "unicode_alternates": [],
     "name": "tram",
     "shortname": ":tram:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "transportation",
       "vehicle",
       "tram",
-      "transportation",
-      "transport"
+      "transport",
+      "travel",
+      "train"
     ],
     "moji": "🚊"
   },
-  "triangle_round": {
-    "unicode": "1F6C6",
-    "unicode_alternates": [],
-    "name": "triangle with rounded corners",
-    "shortname": ":triangle_round:",
-    "category": "objects_symbols",
-    "aliases": [
-      ":triangle_with_rounded_corners:"
-    ],
-    "aliases_ascii": [],
-    "keywords": [
-      "caution",
-      "warning",
-      "alert"
-    ]
-  },
   "triangular_flag_on_post": {
     "unicode": "1F6A9",
     "unicode_alternates": [],
     "name": "triangular flag on post",
     "shortname": ":triangular_flag_on_post:",
-    "category": "places",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27527,7 +30783,8 @@
       "flag",
       "golf",
       "post",
-      "flagpole"
+      "flagpole",
+      "object"
     ],
     "moji": "🚩"
   },
@@ -27543,7 +30800,10 @@
       "architect",
       "math",
       "sketch",
-      "stationery"
+      "stationery",
+      "object",
+      "tool",
+      "office"
     ],
     "moji": "📐"
   },
@@ -27552,12 +30812,14 @@
     "unicode_alternates": [],
     "name": "trident emblem",
     "shortname": ":trident:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "spear",
-      "weapon"
+      "weapon",
+      "object",
+      "symbol"
     ],
     "moji": "🔱"
   },
@@ -27566,7 +30828,7 @@
     "unicode_alternates": [],
     "name": "face with look of triumph",
     "shortname": ":triumph:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27575,7 +30837,11 @@
       "phew",
       "triumph",
       "steam",
-      "breath"
+      "breath",
+      "mad",
+      "smiley",
+      "angry",
+      "emotion"
     ],
     "moji": "😤"
   },
@@ -27584,7 +30850,7 @@
     "unicode_alternates": [],
     "name": "trolleybus",
     "shortname": ":trolleybus:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27595,7 +30861,7 @@
       "bus",
       "city",
       "transport",
-      "transportation"
+      "travel"
     ],
     "moji": "🚎"
   },
@@ -27604,7 +30870,7 @@
     "unicode_alternates": [],
     "name": "trophy",
     "shortname": ":trophy:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27617,11 +30883,13 @@
       "trophy",
       "first",
       "show",
-      "place",
-      "win",
       "reward",
       "achievement",
-      "medal"
+      "medal",
+      "object",
+      "game",
+      "perfect",
+      "parties"
     ],
     "moji": "🏆"
   },
@@ -27630,7 +30898,7 @@
     "unicode_alternates": [],
     "name": "tropical drink",
     "shortname": ":tropical_drink:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27642,7 +30910,9 @@
       "coconut",
       "pina",
       "fruit",
-      "umbrella"
+      "umbrella",
+      "cocktail",
+      "alcohol"
     ],
     "moji": "🍹"
   },
@@ -27656,7 +30926,8 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "swim"
+      "swim",
+      "wildlife"
     ],
     "moji": "🐠"
   },
@@ -27665,7 +30936,7 @@
     "unicode_alternates": [],
     "name": "delivery truck",
     "shortname": ":truck:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27682,16 +30953,15 @@
     "unicode_alternates": [],
     "name": "trumpet",
     "shortname": ":trumpet:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "brass",
       "music",
       "trumpet",
-      "brass",
-      "music",
-      "instrument"
+      "instrument",
+      "instruments"
     ],
     "moji": "🎺"
   },
@@ -27711,34 +30981,40 @@
       "flower",
       "bulb",
       "spring",
-      "easter"
+      "easter",
+      "vagina",
+      "girls night"
     ],
     "moji": "🌷"
   },
-  "turkey": {
-    "unicode": "1F983",
-    "unicode_alternates": "",
-    "name": "turkey",
-    "shortname": ":turkey:",
-    "category": "nature",
-    "aliases": [],
-    "aliases_ascii": [],
-    "keywords": []
-  },
-  "turned_ok_hand": {
-    "unicode": "1F58F",
+  "tumbler_glass": {
+    "unicode": "1F943",
     "unicode_alternates": [],
-    "name": "turned ok hand sign",
-    "shortname": ":turned_ok_hand:",
-    "category": "people",
+    "name": "tumbler glass",
+    "shortname": ":tumbler_glass:",
+    "category": "food",
     "aliases": [
-      ":turned_ok_hand_sign:"
+      ":whisky:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [
+      "booze"
     ],
+    "moji": "🥃"
+  },
+  "turkey": {
+    "unicode": "1F983",
+    "unicode_alternates": [],
+    "name": "turkey",
+    "shortname": ":turkey:",
+    "category": "nature",
+    "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "perfect",
-      "okay"
-    ]
+      "wildlife",
+      "animal"
+    ],
+    "moji": "🦃"
   },
   "turtle": {
     "unicode": "1F422",
@@ -27756,15 +31032,15 @@
       "tortoise",
       "chelonian",
       "reptile",
-      "slow",
       "snap",
-      "steady"
+      "steady",
+      "wildlife"
     ],
     "moji": "🐢"
   },
   "tv": {
     "unicode": "1F4FA",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "television",
     "shortname": ":tv:",
     "category": "objects",
@@ -27778,19 +31054,23 @@
       "tv",
       "entertainment",
       "object",
-      "video"
-    ]
+      "video",
+      "electronics"
+    ],
+    "moji": "📺"
   },
   "twisted_rightwards_arrows": {
     "unicode": "1F500",
     "unicode_alternates": [],
     "name": "twisted rightwards arrows",
     "shortname": ":twisted_rightwards_arrows:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "arrow",
+      "symbol"
     ],
     "moji": "🔀"
   },
@@ -27800,16 +31080,19 @@
     "unicode_alternates": [
       "0032-FE0F-20E3"
     ],
-    "name": "digit two",
+    "name": "keycap digit two",
     "shortname": ":two:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "2",
       "blue-square",
       "numbers",
-      "prime"
+      "prime",
+      "number",
+      "math",
+      "symbol"
     ]
   },
   "two_hearts": {
@@ -27817,7 +31100,7 @@
     "unicode_alternates": [],
     "name": "two hearts",
     "shortname": ":two_hearts:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27828,8 +31111,8 @@
       "heart",
       "hearts",
       "two",
-      "love",
-      "emotion"
+      "emotion",
+      "symbol"
     ],
     "moji": "💕"
   },
@@ -27838,7 +31121,7 @@
     "unicode_alternates": [],
     "name": "two men holding hands",
     "shortname": ":two_men_holding_hands:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27850,11 +31133,13 @@
       "men",
       "gay",
       "homosexual",
-      "friends",
       "hands",
       "holding",
       "team",
-      "unity"
+      "unity",
+      "people",
+      "sex",
+      "lgbt"
     ],
     "moji": "👬"
   },
@@ -27863,7 +31148,7 @@
     "unicode_alternates": [],
     "name": "two women holding hands",
     "shortname": ":two_women_holding_hands:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27875,14 +31160,17 @@
       "women",
       "hands",
       "girlfriends",
-      "friends",
       "sisters",
       "mother",
       "daughter",
       "gay",
       "homosexual",
-      "couple",
-      "unity"
+      "unity",
+      "people",
+      "sex",
+      "lgbt",
+      "lesbian",
+      "girls night"
     ],
     "moji": "👭"
   },
@@ -27891,7 +31179,7 @@
     "unicode_alternates": [],
     "name": "squared cjk unified ideograph-5272",
     "shortname": ":u5272:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27899,7 +31187,8 @@
       "cut",
       "divide",
       "kanji",
-      "pink"
+      "pink",
+      "symbol"
     ],
     "moji": "🈹"
   },
@@ -27908,14 +31197,16 @@
     "unicode_alternates": [],
     "name": "squared cjk unified ideograph-5408",
     "shortname": ":u5408:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "chinese",
       "japanese",
       "join",
-      "kanji"
+      "kanji",
+      "japan",
+      "symbol"
     ],
     "moji": "🈴"
   },
@@ -27924,12 +31215,13 @@
     "unicode_alternates": [],
     "name": "squared cjk unified ideograph-55b6",
     "shortname": ":u55b6:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "japanese",
-      "opening hours"
+      "opening hours",
+      "symbol"
     ],
     "moji": "🈺"
   },
@@ -27940,14 +31232,15 @@
     ],
     "name": "squared cjk unified ideograph-6307",
     "shortname": ":u6307:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "chinese",
       "green-square",
       "kanji",
-      "point"
+      "point",
+      "symbol"
     ],
     "moji": "🈯"
   },
@@ -27956,7 +31249,7 @@
     "unicode_alternates": [],
     "name": "squared cjk unified ideograph-6708",
     "shortname": ":u6708:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27964,7 +31257,8 @@
       "japanese",
       "kanji",
       "moon",
-      "orange-square"
+      "orange-square",
+      "symbol"
     ],
     "moji": "🈷"
   },
@@ -27973,14 +31267,15 @@
     "unicode_alternates": [],
     "name": "squared cjk unified ideograph-6709",
     "shortname": ":u6709:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "chinese",
       "have",
       "kanji",
-      "orange-square"
+      "orange-square",
+      "symbol"
     ],
     "moji": "🈶"
   },
@@ -27989,7 +31284,7 @@
     "unicode_alternates": [],
     "name": "squared cjk unified ideograph-6e80",
     "shortname": ":u6e80:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -27997,7 +31292,9 @@
       "full",
       "japanese",
       "kanji",
-      "red-square"
+      "red-square",
+      "japan",
+      "symbol"
     ],
     "moji": "🈵"
   },
@@ -28008,7 +31305,7 @@
     ],
     "name": "squared cjk unified ideograph-7121",
     "shortname": ":u7121:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28017,7 +31314,8 @@
       "kanji",
       "no",
       "nothing",
-      "orange-square"
+      "orange-square",
+      "symbol"
     ],
     "moji": "🈚"
   },
@@ -28026,13 +31324,14 @@
     "unicode_alternates": [],
     "name": "squared cjk unified ideograph-7533",
     "shortname": ":u7533:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "chinese",
       "japanese",
-      "kanji"
+      "kanji",
+      "symbol"
     ],
     "moji": "🈸"
   },
@@ -28041,7 +31340,7 @@
     "unicode_alternates": [],
     "name": "squared cjk unified ideograph-7981",
     "shortname": ":u7981:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28050,7 +31349,9 @@
       "japanese",
       "kanji",
       "limit",
-      "restricted"
+      "restricted",
+      "japan",
+      "symbol"
     ],
     "moji": "🈲"
   },
@@ -28059,14 +31360,15 @@
     "unicode_alternates": [],
     "name": "squared cjk unified ideograph-7a7a",
     "shortname": ":u7a7a:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "chinese",
       "empty",
       "japanese",
-      "kanji"
+      "kanji",
+      "symbol"
     ],
     "moji": "🈳"
   },
@@ -28082,13 +31384,15 @@
     "aliases_ascii": [],
     "keywords": [
       "rain",
-      "weather"
+      "weather",
+      "sky",
+      "cold"
     ],
     "moji": "☔"
   },
   "umbrella2": {
     "unicode": "2602",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "umbrella",
     "shortname": ":umbrella2:",
     "category": "nature",
@@ -28098,15 +31402,19 @@
       "clothing",
       "nature",
       "rain",
-      "weather"
-    ]
+      "weather",
+      "object",
+      "sky",
+      "cold"
+    ],
+    "moji": "☂"
   },
   "unamused": {
     "unicode": "1F612",
     "unicode_alternates": [],
     "name": "unamused face",
     "shortname": ":unamused:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28120,7 +31428,12 @@
       "depressed",
       "unhappy",
       "disapprove",
-      "lame"
+      "lame",
+      "sad",
+      "mad",
+      "smiley",
+      "tired",
+      "emotion"
     ],
     "moji": "😒"
   },
@@ -28129,20 +31442,21 @@
     "unicode_alternates": [],
     "name": "no one under eighteen symbol",
     "shortname": ":underage:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "18",
       "drink",
       "night",
-      "pub"
+      "pub",
+      "symbol"
     ],
     "moji": "🔞"
   },
   "unicorn": {
     "unicode": "1F984",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "unicorn face",
     "shortname": ":unicorn:",
     "category": "nature",
@@ -28150,7 +31464,10 @@
       ":unicorn_face:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "animal"
+    ],
+    "moji": "🦄"
   },
   "unlock": {
     "unicode": "1F513",
@@ -28162,7 +31479,9 @@
     "aliases_ascii": [],
     "keywords": [
       "privacy",
-      "security"
+      "security",
+      "object",
+      "lock"
     ],
     "moji": "🔓"
   },
@@ -28171,17 +31490,18 @@
     "unicode_alternates": [],
     "name": "squared up with exclamation mark",
     "shortname": ":up:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "blue-square"
+      "blue-square",
+      "symbol"
     ],
     "moji": "🆙"
   },
   "upside_down": {
     "unicode": "1F643",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "upside-down face",
     "shortname": ":upside_down:",
     "category": "people",
@@ -28189,11 +31509,16 @@
       ":upside_down_face:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "silly",
+      "smiley",
+      "sarcastic"
+    ],
+    "moji": "🙃"
   },
   "urn": {
     "unicode": "26B1",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "funeral urn",
     "shortname": ":urn:",
     "category": "objects",
@@ -28203,8 +31528,11 @@
     "aliases_ascii": [],
     "keywords": [
       "death",
-      "object"
-    ]
+      "object",
+      "dead",
+      "rip"
+    ],
+    "moji": "âš±"
   },
   "v": {
     "unicode": "270C",
@@ -28213,7 +31541,7 @@
     ],
     "name": "victory hand",
     "shortname": ":v:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28222,13 +31550,19 @@
       "ohyeah",
       "peace",
       "two",
-      "victory"
+      "victory",
+      "body",
+      "hands",
+      "hi",
+      "thank you",
+      "diversity",
+      "girls night"
     ],
     "moji": "✌"
   },
   "v_tone1": {
     "unicode": "270C-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "victory hand tone 1",
     "shortname": ":v_tone1:",
     "category": "people",
@@ -28240,11 +31574,12 @@
       "peace",
       "two",
       "v"
-    ]
+    ],
+    "moji": "✌🏻"
   },
   "v_tone2": {
     "unicode": "270C-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "victory hand tone 2",
     "shortname": ":v_tone2:",
     "category": "people",
@@ -28256,11 +31591,12 @@
       "peace",
       "two",
       "v"
-    ]
+    ],
+    "moji": "✌🏼"
   },
   "v_tone3": {
     "unicode": "270C-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "victory hand tone 3",
     "shortname": ":v_tone3:",
     "category": "people",
@@ -28272,11 +31608,12 @@
       "peace",
       "two",
       "v"
-    ]
+    ],
+    "moji": "✌🏽"
   },
   "v_tone4": {
     "unicode": "270C-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "victory hand tone 4",
     "shortname": ":v_tone4:",
     "category": "people",
@@ -28288,11 +31625,12 @@
       "peace",
       "two",
       "v"
-    ]
+    ],
+    "moji": "✌🏾"
   },
   "v_tone5": {
     "unicode": "270C-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "victory hand tone 5",
     "shortname": ":v_tone5:",
     "category": "people",
@@ -28304,14 +31642,15 @@
       "peace",
       "two",
       "v"
-    ]
+    ],
+    "moji": "✌🏿"
   },
   "vertical_traffic_light": {
     "unicode": "1F6A6",
     "unicode_alternates": [],
     "name": "vertical traffic light",
     "shortname": ":vertical_traffic_light:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28321,7 +31660,9 @@
       "stop",
       "go",
       "yield",
-      "vertical"
+      "vertical",
+      "object",
+      "stop light"
     ],
     "moji": "🚦"
   },
@@ -28336,7 +31677,8 @@
     "keywords": [
       "oldschool",
       "record",
-      "video"
+      "video",
+      "electronics"
     ],
     "moji": "📼"
   },
@@ -28345,12 +31687,13 @@
     "unicode_alternates": [],
     "name": "vibration mode",
     "shortname": ":vibration_mode:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "orange-square",
-      "phone"
+      "phone",
+      "symbol"
     ],
     "moji": "📳"
   },
@@ -28364,7 +31707,10 @@
     "aliases_ascii": [],
     "keywords": [
       "film",
-      "record"
+      "record",
+      "electronics",
+      "camera",
+      "movie"
     ],
     "moji": "📹"
   },
@@ -28373,7 +31719,7 @@
     "unicode_alternates": [],
     "name": "video game",
     "shortname": ":video_game:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28383,11 +31729,11 @@
       "play",
       "video",
       "game",
-      "console",
-      "controller",
       "nintendo",
       "xbox",
-      "playstation"
+      "playstation",
+      "electronics",
+      "boys night"
     ],
     "moji": "🎮"
   },
@@ -28396,7 +31742,7 @@
     "unicode_alternates": [],
     "name": "violin",
     "shortname": ":violin:",
-    "category": "objects",
+    "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28404,8 +31750,8 @@
       "music",
       "violin",
       "fiddle",
-      "music",
-      "instrument"
+      "instruments",
+      "sarcastic"
     ],
     "moji": "🎻"
   },
@@ -28416,7 +31762,7 @@
     ],
     "name": "virgo",
     "shortname": ":virgo:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28428,9 +31774,8 @@
       "constellation",
       "stars",
       "zodiac",
-      "sign",
-      "zodiac",
-      "horoscope"
+      "horoscope",
+      "symbol"
     ],
     "moji": "♍"
   },
@@ -28439,7 +31784,7 @@
     "unicode_alternates": [],
     "name": "volcano",
     "shortname": ":volcano:",
-    "category": "nature",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28449,31 +31794,40 @@
       "lava",
       "magma",
       "hot",
-      "explode"
+      "explode",
+      "places",
+      "tropical"
     ],
     "moji": "🌋"
   },
   "volleyball": {
     "unicode": "1F3D0",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "volleyball",
     "shortname": ":volleyball:",
     "category": "activity",
     "aliases": [],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "game",
+      "ball",
+      "sport",
+      "volleyball"
+    ],
+    "moji": "🏐"
   },
   "vs": {
     "unicode": "1F19A",
     "unicode_alternates": [],
     "name": "squared vs",
     "shortname": ":vs:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "orange-square",
-      "words"
+      "words",
+      "symbol"
     ],
     "moji": "🆚"
   },
@@ -28493,12 +31847,17 @@
       "leonard",
       "nimoy",
       "star trek",
-      "live long"
-    ]
+      "live long",
+      "body",
+      "hands",
+      "hi",
+      "diversity"
+    ],
+    "moji": "🖖"
   },
   "vulcan_tone1": {
     "unicode": "1F596-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with part between middle and ring fingers tone 1",
     "shortname": ":vulcan_tone1:",
     "category": "people",
@@ -28513,11 +31872,12 @@
       "nimoy",
       "star trek",
       "live long"
-    ]
+    ],
+    "moji": "🖖🏻"
   },
   "vulcan_tone2": {
     "unicode": "1F596-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with part between middle and ring fingers tone 2",
     "shortname": ":vulcan_tone2:",
     "category": "people",
@@ -28532,11 +31892,12 @@
       "nimoy",
       "star trek",
       "live long"
-    ]
+    ],
+    "moji": "🖖🏼"
   },
   "vulcan_tone3": {
     "unicode": "1F596-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with part between middle and ring fingers tone 3",
     "shortname": ":vulcan_tone3:",
     "category": "people",
@@ -28551,11 +31912,12 @@
       "nimoy",
       "star trek",
       "live long"
-    ]
+    ],
+    "moji": "🖖🏽"
   },
   "vulcan_tone4": {
     "unicode": "1F596-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with part between middle and ring fingers tone 4",
     "shortname": ":vulcan_tone4:",
     "category": "people",
@@ -28570,11 +31932,12 @@
       "nimoy",
       "star trek",
       "live long"
-    ]
+    ],
+    "moji": "🖖🏾"
   },
   "vulcan_tone5": {
     "unicode": "1F596-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "raised hand with part between middle and ring fingers tone 5",
     "shortname": ":vulcan_tone5:",
     "category": "people",
@@ -28589,14 +31952,15 @@
       "nimoy",
       "star trek",
       "live long"
-    ]
+    ],
+    "moji": "🖖🏿"
   },
   "walking": {
     "unicode": "1F6B6",
     "unicode_alternates": [],
     "name": "pedestrian",
     "shortname": ":walking:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28607,13 +31971,16 @@
       "stroll",
       "stride",
       "foot",
-      "feet"
+      "feet",
+      "people",
+      "men",
+      "diversity"
     ],
     "moji": "🚶"
   },
   "walking_tone1": {
     "unicode": "1F6B6-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "pedestrian tone 1",
     "shortname": ":walking_tone1:",
     "category": "people",
@@ -28626,11 +31993,12 @@
       "stride",
       "hiking",
       "hike"
-    ]
+    ],
+    "moji": "🚶🏻"
   },
   "walking_tone2": {
     "unicode": "1F6B6-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "pedestrian tone 2",
     "shortname": ":walking_tone2:",
     "category": "people",
@@ -28643,11 +32011,12 @@
       "stride",
       "hiking",
       "hike"
-    ]
+    ],
+    "moji": "🚶🏼"
   },
   "walking_tone3": {
     "unicode": "1F6B6-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "pedestrian tone 3",
     "shortname": ":walking_tone3:",
     "category": "people",
@@ -28660,11 +32029,12 @@
       "stride",
       "hiking",
       "hike"
-    ]
+    ],
+    "moji": "🚶🏽"
   },
   "walking_tone4": {
     "unicode": "1F6B6-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "pedestrian tone 4",
     "shortname": ":walking_tone4:",
     "category": "people",
@@ -28677,11 +32047,12 @@
       "stride",
       "hiking",
       "hike"
-    ]
+    ],
+    "moji": "🚶🏾"
   },
   "walking_tone5": {
     "unicode": "1F6B6-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "pedestrian tone 5",
     "shortname": ":walking_tone5:",
     "category": "people",
@@ -28694,7 +32065,8 @@
       "stride",
       "hiking",
       "hike"
-    ]
+    ],
+    "moji": "🚶🏿"
   },
   "waning_crescent_moon": {
     "unicode": "1F318",
@@ -28712,7 +32084,8 @@
       "sky",
       "night",
       "cheese",
-      "phase"
+      "phase",
+      "space"
     ],
     "moji": "🌘"
   },
@@ -28732,7 +32105,8 @@
       "sky",
       "night",
       "cheese",
-      "phase"
+      "phase",
+      "space"
     ],
     "moji": "🌖"
   },
@@ -28743,12 +32117,14 @@
     ],
     "name": "warning sign",
     "shortname": ":warning:",
-    "category": "places",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "exclamation",
-      "wip"
+      "wip",
+      "symbol",
+      "punctuation"
     ],
     "moji": "âš "
   },
@@ -28757,14 +32133,17 @@
     "unicode_alternates": [],
     "name": "wastebasket",
     "shortname": ":wastebasket:",
-    "category": "objects_symbols",
+    "category": "objects",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "trash",
       "garbage",
-      "dispose"
-    ]
+      "dispose",
+      "object",
+      "work"
+    ],
+    "moji": "🗑"
   },
   "watch": {
     "unicode": "231A",
@@ -28778,7 +32157,8 @@
     "aliases_ascii": [],
     "keywords": [
       "accessories",
-      "time"
+      "time",
+      "electronics"
     ],
     "moji": "⌚"
   },
@@ -28800,16 +32180,83 @@
       "asia",
       "bovine",
       "milk",
-      "dairy"
+      "dairy",
+      "wildlife"
     ],
     "moji": "🐃"
   },
+  "water_polo": {
+    "unicode": "1F93D",
+    "unicode_alternates": [],
+    "name": "water polo",
+    "shortname": ":water_polo:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤽"
+  },
+  "water_polo_tone1": {
+    "unicode": "1F93D-1F3FB",
+    "unicode_alternates": [],
+    "name": "water polo tone 1",
+    "shortname": ":water_polo_tone1:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤽🏻"
+  },
+  "water_polo_tone2": {
+    "unicode": "1F93D-1F3FC",
+    "unicode_alternates": [],
+    "name": "water polo tone 2",
+    "shortname": ":water_polo_tone2:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤽🏼"
+  },
+  "water_polo_tone3": {
+    "unicode": "1F93D-1F3FD",
+    "unicode_alternates": [],
+    "name": "water polo tone 3",
+    "shortname": ":water_polo_tone3:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤽🏽"
+  },
+  "water_polo_tone4": {
+    "unicode": "1F93D-1F3FE",
+    "unicode_alternates": [],
+    "name": "water polo tone 4",
+    "shortname": ":water_polo_tone4:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤽🏾"
+  },
+  "water_polo_tone5": {
+    "unicode": "1F93D-1F3FF",
+    "unicode_alternates": [],
+    "name": "water polo tone 5",
+    "shortname": ":water_polo_tone5:",
+    "category": "activity",
+    "aliases": [],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤽🏿"
+  },
   "watermelon": {
     "unicode": "1F349",
     "unicode_alternates": [],
     "name": "watermelon",
     "shortname": ":watermelon:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28818,7 +32265,6 @@
       "melon",
       "watermelon",
       "summer",
-      "fruit",
       "large"
     ],
     "moji": "🍉"
@@ -28828,7 +32274,7 @@
     "unicode_alternates": [],
     "name": "waving hand sign",
     "shortname": ":wave:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28836,13 +32282,16 @@
       "gesture",
       "goodbye",
       "hands",
-      "solong"
+      "solong",
+      "body",
+      "hi",
+      "diversity"
     ],
     "moji": "👋"
   },
   "wave_tone1": {
     "unicode": "1F44B-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "waving hand sign tone 1",
     "shortname": ":wave_tone1:",
     "category": "people",
@@ -28855,11 +32304,12 @@
       "solong",
       "hi",
       "wave"
-    ]
+    ],
+    "moji": "👋🏻"
   },
   "wave_tone2": {
     "unicode": "1F44B-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "waving hand sign tone 2",
     "shortname": ":wave_tone2:",
     "category": "people",
@@ -28872,11 +32322,12 @@
       "solong",
       "hi",
       "wave"
-    ]
+    ],
+    "moji": "👋🏼"
   },
   "wave_tone3": {
     "unicode": "1F44B-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "waving hand sign tone 3",
     "shortname": ":wave_tone3:",
     "category": "people",
@@ -28889,11 +32340,12 @@
       "solong",
       "hi",
       "wave"
-    ]
+    ],
+    "moji": "👋🏽"
   },
   "wave_tone4": {
     "unicode": "1F44B-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "waving hand sign tone 4",
     "shortname": ":wave_tone4:",
     "category": "people",
@@ -28906,11 +32358,12 @@
       "solong",
       "hi",
       "wave"
-    ]
+    ],
+    "moji": "👋🏾"
   },
   "wave_tone5": {
     "unicode": "1F44B-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "waving hand sign tone 5",
     "shortname": ":wave_tone5:",
     "category": "people",
@@ -28923,19 +32376,21 @@
       "solong",
       "hi",
       "wave"
-    ]
+    ],
+    "moji": "👋🏿"
   },
   "wavy_dash": {
     "unicode": "3030",
     "unicode_alternates": [],
     "name": "wavy dash",
     "shortname": ":wavy_dash:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "draw",
-      "line"
+      "line",
+      "symbol"
     ],
     "moji": "〰"
   },
@@ -28954,7 +32409,8 @@
       "sky",
       "night",
       "cheese",
-      "phase"
+      "phase",
+      "space"
     ],
     "moji": "🌒"
   },
@@ -28967,7 +32423,10 @@
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "nature"
+      "nature",
+      "space",
+      "sky",
+      "moon"
     ],
     "moji": "🌔"
   },
@@ -28976,7 +32435,7 @@
     "unicode_alternates": [],
     "name": "water closet",
     "shortname": ":wc:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -28985,13 +32444,13 @@
       "toilet",
       "water",
       "closet",
-      "toilet",
       "bathroom",
       "throne",
       "porcelain",
       "waste",
       "flush",
-      "plumbing"
+      "plumbing",
+      "symbol"
     ],
     "moji": "🚾"
   },
@@ -29000,7 +32459,7 @@
     "unicode_alternates": [],
     "name": "weary face",
     "shortname": ":weary:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -29010,13 +32469,14 @@
       "sleepy",
       "tired",
       "weary",
-      "sleepy",
-      "tired",
       "tiredness",
       "study",
       "finals",
       "school",
-      "exhausted"
+      "exhausted",
+      "smiley",
+      "stressed",
+      "emotion"
     ],
     "moji": "😩"
   },
@@ -29025,7 +32485,7 @@
     "unicode_alternates": [],
     "name": "wedding",
     "shortname": ":wedding:",
-    "category": "places",
+    "category": "travel",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -29035,7 +32495,11 @@
       "groom",
       "like",
       "love",
-      "marriage"
+      "marriage",
+      "places",
+      "wedding",
+      "building",
+      "parties"
     ],
     "moji": "💒"
   },
@@ -29051,7 +32515,10 @@
       "animal",
       "nature",
       "ocean",
-      "sea"
+      "sea",
+      "wildlife",
+      "tropical",
+      "whales"
     ],
     "moji": "🐳"
   },
@@ -29073,13 +32540,16 @@
       "bloated",
       "fat",
       "large",
-      "massive"
+      "massive",
+      "wildlife",
+      "tropical",
+      "whales"
     ],
     "moji": "🐋"
   },
   "wheel_of_dharma": {
     "unicode": "2638",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "wheel of dharma",
     "shortname": ":wheel_of_dharma:",
     "category": "symbols",
@@ -29089,7 +32559,8 @@
       "buddhist",
       "religion",
       "symbol"
-    ]
+    ],
+    "moji": "☸"
   },
   "wheelchair": {
     "unicode": "267F",
@@ -29098,12 +32569,13 @@
     ],
     "name": "wheelchair symbol",
     "shortname": ":wheelchair:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
-      "disabled"
+      "disabled",
+      "symbol"
     ],
     "moji": "♿"
   },
@@ -29112,13 +32584,14 @@
     "unicode_alternates": [],
     "name": "white heavy check mark",
     "shortname": ":white_check_mark:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "agree",
       "green-square",
-      "ok"
+      "ok",
+      "symbol"
     ],
     "moji": "✅"
   },
@@ -29129,11 +32602,14 @@
     ],
     "name": "medium white circle",
     "shortname": ":white_circle:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "circle"
     ],
     "moji": "⚪"
   },
@@ -29142,7 +32618,7 @@
     "unicode_alternates": [],
     "name": "white flower",
     "shortname": ":white_flower:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -29158,7 +32634,8 @@
       "homework",
       "student",
       "assignment",
-      "praise"
+      "praise",
+      "symbol"
     ],
     "moji": "💮"
   },
@@ -29169,11 +32646,14 @@
     ],
     "name": "white large square",
     "shortname": ":white_large_square:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "square"
     ],
     "moji": "⬜"
   },
@@ -29184,11 +32664,14 @@
     ],
     "name": "white medium small square",
     "shortname": ":white_medium_small_square:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "square"
     ],
     "moji": "â—½"
   },
@@ -29199,11 +32682,14 @@
     ],
     "name": "white medium square",
     "shortname": ":white_medium_square:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "square"
     ],
     "moji": "â—»"
   },
@@ -29214,11 +32700,14 @@
     ],
     "name": "white small square",
     "shortname": ":white_small_square:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "square"
     ],
     "moji": "â–«"
   },
@@ -29227,17 +32716,20 @@
     "unicode_alternates": [],
     "name": "white square button",
     "shortname": ":white_square_button:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
-      "shape"
+      "shape",
+      "shapes",
+      "symbol",
+      "square"
     ],
     "moji": "🔳"
   },
   "white_sun_cloud": {
     "unicode": "1F325",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white sun behind cloud",
     "shortname": ":white_sun_cloud:",
     "category": "nature",
@@ -29247,12 +32739,17 @@
     "aliases_ascii": [],
     "keywords": [
       "nature",
-      "weather"
-    ]
+      "weather",
+      "sky",
+      "cloud",
+      "cold",
+      "sun"
+    ],
+    "moji": "🌥"
   },
   "white_sun_rain_cloud": {
     "unicode": "1F326",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white sun behind cloud with rain",
     "shortname": ":white_sun_rain_cloud:",
     "category": "nature",
@@ -29262,12 +32759,18 @@
     "aliases_ascii": [],
     "keywords": [
       "nature",
-      "weather"
-    ]
+      "weather",
+      "sky",
+      "cloud",
+      "cold",
+      "rain",
+      "sun"
+    ],
+    "moji": "🌦"
   },
   "white_sun_small_cloud": {
     "unicode": "1F324",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "white sun with small cloud",
     "shortname": ":white_sun_small_cloud:",
     "category": "nature",
@@ -29277,8 +32780,25 @@
     "aliases_ascii": [],
     "keywords": [
       "nature",
-      "weather"
-    ]
+      "weather",
+      "sky",
+      "cloud",
+      "sun"
+    ],
+    "moji": "🌤"
+  },
+  "wilted_rose": {
+    "unicode": "1F940",
+    "unicode_alternates": [],
+    "name": "wilted flower",
+    "shortname": ":wilted_rose:",
+    "category": "nature",
+    "aliases": [
+      ":wilted_flower:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🥀"
   },
   "wind_blowing_face": {
     "unicode": "1F32C",
@@ -29290,8 +32810,11 @@
     "aliases_ascii": [],
     "keywords": [
       "mother",
-      "nature"
-    ]
+      "nature",
+      "weather",
+      "cold"
+    ],
+    "moji": "🌬"
   },
   "wind_chime": {
     "unicode": "1F390",
@@ -29314,7 +32837,9 @@
       "soothing",
       "protective",
       "spiritual",
-      "sound"
+      "sound",
+      "object",
+      "japan"
     ],
     "moji": "🎐"
   },
@@ -29323,7 +32848,7 @@
     "unicode_alternates": [],
     "name": "wine glass",
     "shortname": ":wine_glass:",
-    "category": "objects",
+    "category": "food",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -29338,7 +32863,10 @@
       "grapes",
       "tasting",
       "wine",
-      "winery"
+      "winery",
+      "italian",
+      "girls night",
+      "parties"
     ],
     "moji": "🍷"
   },
@@ -29347,7 +32875,7 @@
     "unicode_alternates": [],
     "name": "winking face",
     "shortname": ":wink:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [
       ";)",
@@ -29367,7 +32895,10 @@
       "wink",
       "winking",
       "friendly",
-      "joke"
+      "joke",
+      "silly",
+      "smiley",
+      "emotion"
     ],
     "moji": "😉"
   },
@@ -29381,7 +32912,9 @@
     "aliases_ascii": [],
     "keywords": [
       "animal",
-      "nature"
+      "nature",
+      "wildlife",
+      "roar"
     ],
     "moji": "🐺"
   },
@@ -29390,18 +32923,25 @@
     "unicode_alternates": [],
     "name": "woman",
     "shortname": ":woman:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "female",
-      "girls"
+      "girls",
+      "people",
+      "women",
+      "sex",
+      "diversity",
+      "feminist",
+      "selfie",
+      "girls night"
     ],
     "moji": "👩"
   },
   "woman_tone1": {
     "unicode": "1F469-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "woman tone 1",
     "shortname": ":woman_tone1:",
     "category": "people",
@@ -29411,11 +32951,12 @@
       "female",
       "girl",
       "lady"
-    ]
+    ],
+    "moji": "👩🏻"
   },
   "woman_tone2": {
     "unicode": "1F469-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "woman tone 2",
     "shortname": ":woman_tone2:",
     "category": "people",
@@ -29425,11 +32966,12 @@
       "female",
       "girl",
       "lady"
-    ]
+    ],
+    "moji": "👩🏼"
   },
   "woman_tone3": {
     "unicode": "1F469-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "woman tone 3",
     "shortname": ":woman_tone3:",
     "category": "people",
@@ -29439,11 +32981,12 @@
       "female",
       "girl",
       "lady"
-    ]
+    ],
+    "moji": "👩🏽"
   },
   "woman_tone4": {
     "unicode": "1F469-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "woman tone 4",
     "shortname": ":woman_tone4:",
     "category": "people",
@@ -29453,11 +32996,12 @@
       "female",
       "girl",
       "lady"
-    ]
+    ],
+    "moji": "👩🏾"
   },
   "woman_tone5": {
     "unicode": "1F469-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "woman tone 5",
     "shortname": ":woman_tone5:",
     "category": "people",
@@ -29467,14 +33011,15 @@
       "female",
       "girl",
       "lady"
-    ]
+    ],
+    "moji": "👩🏿"
   },
   "womans_clothes": {
     "unicode": "1F45A",
     "unicode_alternates": [],
     "name": "womans clothes",
     "shortname": ":womans_clothes:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -29490,7 +33035,8 @@
       "shopping",
       "shop",
       "dressing",
-      "dressed"
+      "dressed",
+      "women"
     ],
     "moji": "👚"
   },
@@ -29499,13 +33045,14 @@
     "unicode_alternates": [],
     "name": "womans hat",
     "shortname": ":womans_hat:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "accessories",
       "fashion",
-      "female"
+      "female",
+      "women"
     ],
     "moji": "👒"
   },
@@ -29514,7 +33061,7 @@
     "unicode_alternates": [],
     "name": "womens symbol",
     "shortname": ":womens:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -29525,7 +33072,8 @@
       "sign",
       "girl",
       "female",
-      "avatar"
+      "avatar",
+      "symbol"
     ],
     "moji": "🚺"
   },
@@ -29534,7 +33082,7 @@
     "unicode_alternates": [],
     "name": "worried face",
     "shortname": ":worried:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -29544,8 +33092,10 @@
       "worried",
       "anxious",
       "distressed",
-      "nervous",
-      "tense"
+      "tense",
+      "sad",
+      "smiley",
+      "emotion"
     ],
     "moji": "😟"
   },
@@ -29560,30 +33110,111 @@
     "keywords": [
       "diy",
       "ikea",
-      "tools"
+      "tools",
+      "object",
+      "tool"
     ],
     "moji": "🔧"
   },
-  "writing_hand": {
-    "unicode": "1F58E",
+  "wrestlers": {
+    "unicode": "1F93C",
     "unicode_alternates": [],
-    "name": "left writing hand",
-    "shortname": ":writing_hand:",
-    "category": "people",
+    "name": "wrestlers",
+    "shortname": ":wrestlers:",
+    "category": "activity",
+    "aliases": [
+      ":wrestling:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤼"
+  },
+  "wrestlers_tone1": {
+    "unicode": "1F93C-1F3FB",
+    "unicode_alternates": [],
+    "name": "wrestlers tone 1",
+    "shortname": ":wrestlers_tone1:",
+    "category": "activity",
+    "aliases": [
+      ":wrestling_tone1:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤼🏻"
+  },
+  "wrestlers_tone2": {
+    "unicode": "1F93C-1F3FC",
+    "unicode_alternates": [],
+    "name": "wrestlers tone 2",
+    "shortname": ":wrestlers_tone2:",
+    "category": "activity",
+    "aliases": [
+      ":wrestling_tone2:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤼🏼"
+  },
+  "wrestlers_tone3": {
+    "unicode": "1F93C-1F3FD",
+    "unicode_alternates": [],
+    "name": "wrestlers tone 3",
+    "shortname": ":wrestlers_tone3:",
+    "category": "activity",
+    "aliases": [
+      ":wrestling_tone3:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤼🏽"
+  },
+  "wrestlers_tone4": {
+    "unicode": "1F93C-1F3FE",
+    "unicode_alternates": [],
+    "name": "wrestlers tone 4",
+    "shortname": ":wrestlers_tone4:",
+    "category": "activity",
+    "aliases": [
+      ":wrestling_tone4:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤼🏾"
+  },
+  "wrestlers_tone5": {
+    "unicode": "1F93C-1F3FF",
+    "unicode_alternates": [],
+    "name": "wrestlers tone 5",
+    "shortname": ":wrestlers_tone5:",
+    "category": "activity",
     "aliases": [
-      ":left_writing_hand:"
+      ":wrestling_tone5:"
+    ],
+    "aliases_ascii": [],
+    "keywords": [],
+    "moji": "🤼🏿"
+  },
+  "writing_hand": {
+    "unicode": "270D",
+    "unicode_alternates": [
+      "270D-FE0F"
     ],
+    "name": "writing hand",
+    "shortname": ":writing_hand:",
+    "category": "people",
+    "aliases": [],
     "aliases_ascii": [],
     "keywords": [
+      "body",
+      "hands",
       "write",
-      "sign",
-      "signature",
-      "draw"
-    ]
+      "diversity"
+    ],
+    "moji": "✍"
   },
   "writing_hand_tone1": {
     "unicode": "270D-1F3FB",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "writing hand tone 1",
     "shortname": ":writing_hand_tone1:",
     "category": "people",
@@ -29594,11 +33225,12 @@
       "sign",
       "signature",
       "draw"
-    ]
+    ],
+    "moji": "✍🏻"
   },
   "writing_hand_tone2": {
     "unicode": "270D-1F3FC",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "writing hand tone 2",
     "shortname": ":writing_hand_tone2:",
     "category": "people",
@@ -29609,11 +33241,12 @@
       "sign",
       "signature",
       "draw"
-    ]
+    ],
+    "moji": "✍🏼"
   },
   "writing_hand_tone3": {
     "unicode": "270D-1F3FD",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "writing hand tone 3",
     "shortname": ":writing_hand_tone3:",
     "category": "people",
@@ -29624,11 +33257,12 @@
       "sign",
       "signature",
       "draw"
-    ]
+    ],
+    "moji": "✍🏽"
   },
   "writing_hand_tone4": {
     "unicode": "270D-1F3FE",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "writing hand tone 4",
     "shortname": ":writing_hand_tone4:",
     "category": "people",
@@ -29639,11 +33273,12 @@
       "sign",
       "signature",
       "draw"
-    ]
+    ],
+    "moji": "✍🏾"
   },
   "writing_hand_tone5": {
     "unicode": "270D-1F3FF",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "writing hand tone 5",
     "shortname": ":writing_hand_tone5:",
     "category": "people",
@@ -29654,20 +33289,23 @@
       "sign",
       "signature",
       "draw"
-    ]
+    ],
+    "moji": "✍🏿"
   },
   "x": {
     "unicode": "274C",
     "unicode_alternates": [],
     "name": "cross mark",
     "shortname": ":x:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "delete",
       "no",
-      "remove"
+      "remove",
+      "symbol",
+      "sol"
     ],
     "moji": "❌"
   },
@@ -29676,7 +33314,7 @@
     "unicode_alternates": [],
     "name": "yellow heart",
     "shortname": ":yellow_heart:",
-    "category": "emoticons",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -29687,7 +33325,6 @@
       "yellow",
       "gold",
       "heart",
-      "love",
       "friendship",
       "happy",
       "happiness",
@@ -29696,7 +33333,8 @@
       "respectful",
       "honest",
       "caring",
-      "selfless"
+      "selfless",
+      "symbol"
     ],
     "moji": "💛"
   },
@@ -29715,10 +33353,7 @@
       "money",
       "yen",
       "japan",
-      "japanese",
       "banknote",
-      "money",
-      "currency",
       "paper",
       "cash",
       "bill"
@@ -29727,7 +33362,7 @@
   },
   "yin_yang": {
     "unicode": "262F",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "yin yang",
     "shortname": ":yin_yang:",
     "category": "symbols",
@@ -29739,14 +33374,15 @@
       "symbol",
       "tao",
       "taoist"
-    ]
+    ],
+    "moji": "☯"
   },
   "yum": {
     "unicode": "1F60B",
     "unicode_alternates": [],
     "name": "face savouring delicious food",
     "shortname": ":yum:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
@@ -29762,7 +33398,12 @@
       "yummy",
       "yum",
       "tasty",
-      "savory"
+      "savory",
+      "silly",
+      "smiley",
+      "emotion",
+      "sarcastic",
+      "good"
     ],
     "moji": "😋"
   },
@@ -29779,7 +33420,9 @@
     "keywords": [
       "lightning bolt",
       "thunder",
-      "weather"
+      "weather",
+      "sky",
+      "diarrhea"
     ],
     "moji": "âš¡"
   },
@@ -29789,20 +33432,23 @@
     "unicode_alternates": [
       "0030-FE0F-20E3"
     ],
-    "name": "digit zero",
+    "name": "keycap digit zero",
     "shortname": ":zero:",
-    "category": "other",
+    "category": "symbols",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "blue-square",
       "null",
-      "numbers"
+      "numbers",
+      "number",
+      "math",
+      "symbol"
     ]
   },
   "zipper_mouth": {
     "unicode": "1F910",
-    "unicode_alternates": "",
+    "unicode_alternates": [],
     "name": "zipper-mouth face",
     "shortname": ":zipper_mouth:",
     "category": "people",
@@ -29810,19 +33456,24 @@
       ":zipper_mouth_face:"
     ],
     "aliases_ascii": [],
-    "keywords": []
+    "keywords": [
+      "mad",
+      "smiley"
+    ],
+    "moji": "🤐"
   },
   "zzz": {
     "unicode": "1F4A4",
     "unicode_alternates": [],
     "name": "sleeping symbol",
     "shortname": ":zzz:",
-    "category": "emoticons",
+    "category": "people",
     "aliases": [],
     "aliases_ascii": [],
     "keywords": [
       "sleepy",
-      "tired"
+      "tired",
+      "goodnight"
     ],
     "moji": "💤"
   }
diff --git a/lib/api/branches.rb b/lib/api/branches.rb
index d467eb9d4742c31a7a07c4783a860d3cc18b85b3..66b853eb342cb37244be0d442062ca4525a3052e 100644
--- a/lib/api/branches.rb
+++ b/lib/api/branches.rb
@@ -15,7 +15,8 @@ module API
       #   GET /projects/:id/repository/branches
       get ":id/repository/branches" do
         branches = user_project.repository.branches.sort_by(&:name)
-        present branches, with: Entities::RepoObject, project: user_project
+
+        present branches, with: Entities::RepoBranch, project: user_project
       end
 
       # Get a single branch
@@ -28,7 +29,8 @@ module API
       get ':id/repository/branches/:branch', requirements: { branch: /.+/ } do
         @branch = user_project.repository.branches.find { |item| item.name == params[:branch] }
         not_found!("Branch") unless @branch
-        present @branch, with: Entities::RepoObject, project: user_project
+
+        present @branch, with: Entities::RepoBranch, project: user_project
       end
 
       # Protect a single branch
@@ -36,6 +38,8 @@ module API
       # Parameters:
       #   id (required) - The ID of a project
       #   branch (required) - The name of the branch
+      #   developers_can_push (optional) - Flag if developers can push to that branch
+      #   developers_can_merge (optional) - Flag if developers can merge to that branch
       # Example Request:
       #   PUT /projects/:id/repository/branches/:branch/protect
       put ':id/repository/branches/:branch/protect',
@@ -43,11 +47,22 @@ module API
         authorize_admin_project
 
         @branch = user_project.repository.find_branch(params[:branch])
-        not_found!("Branch") unless @branch
+        not_found!('Branch') unless @branch
         protected_branch = user_project.protected_branches.find_by(name: @branch.name)
-        user_project.protected_branches.create(name: @branch.name) unless protected_branch
+        developers_can_push = to_boolean(params[:developers_can_push])
+        developers_can_merge = to_boolean(params[:developers_can_merge])
+
+        if protected_branch
+          protected_branch.developers_can_push = developers_can_push unless developers_can_push.nil?
+          protected_branch.developers_can_merge = developers_can_merge unless developers_can_merge.nil?
+          protected_branch.save
+        else
+          user_project.protected_branches.create(name: @branch.name,
+                                                 developers_can_push: developers_can_push || false,
+                                                 developers_can_merge: developers_can_merge || false)
+        end
 
-        present @branch, with: Entities::RepoObject, project: user_project
+        present @branch, with: Entities::RepoBranch, project: user_project
       end
 
       # Unprotect a single branch
@@ -66,7 +81,7 @@ module API
         protected_branch = user_project.protected_branches.find_by(name: @branch.name)
         protected_branch.destroy if protected_branch
 
-        present @branch, with: Entities::RepoObject, project: user_project
+        present @branch, with: Entities::RepoBranch, project: user_project
       end
 
       # Create branch
@@ -84,7 +99,7 @@ module API
 
         if result[:status] == :success
           present result[:branch],
-                  with: Entities::RepoObject,
+                  with: Entities::RepoBranch,
                   project: user_project
         else
           render_api_error!(result[:message], 400)
diff --git a/lib/api/commit_statuses.rb b/lib/api/commit_statuses.rb
index 323a70868900afd1277eada973162f2a70cb8375..acb4812b5cf5ab22d65e5da017c2ed08e912cf30 100644
--- a/lib/api/commit_statuses.rb
+++ b/lib/api/commit_statuses.rb
@@ -64,7 +64,7 @@ module API
           ref = branches.first
         end
 
-        pipeline = @project.ensure_pipeline(commit.sha, ref)
+        pipeline = @project.ensure_pipeline(commit.sha, ref, current_user)
 
         name = params[:name] || params[:context]
         status = GenericCommitStatus.running_or_pending.find_by(pipeline: pipeline, name: name, ref: params[:ref])
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 8e03c08f47b80fbbdb03c32673c866403988909b..d7e745824599f2fd87e47e36c17319d9dad70f71 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -114,21 +114,23 @@ module API
       end
     end
 
-    class RepoObject < Grape::Entity
+    class RepoBranch < Grape::Entity
       expose :name
 
-      expose :commit do |repo_obj, options|
-        if repo_obj.respond_to?(:commit)
-          repo_obj.commit
-        elsif options[:project]
-          options[:project].repository.commit(repo_obj.target)
-        end
+      expose :commit do |repo_branch, options|
+        options[:project].repository.commit(repo_branch.target)
       end
 
-      expose :protected do |repo, options|
-        if options[:project]
-          options[:project].protected_branch? repo.name
-        end
+      expose :protected do |repo_branch, options|
+        options[:project].protected_branch? repo_branch.name
+      end
+
+      expose :developers_can_push do |repo_branch, options|
+        options[:project].developers_can_push_to_protected_branch? repo_branch.name
+      end
+
+      expose :developers_can_merge do |repo_branch, options|
+        options[:project].developers_can_merge_to_protected_branch? repo_branch.name
       end
     end
 
@@ -187,6 +189,7 @@ module API
       end
       expose :user_notes_count
       expose :upvotes, :downvotes
+      expose :due_date
     end
 
     class ExternalIssue < Grape::Entity
@@ -424,27 +427,14 @@ module API
     end
 
     class RepoTag < Grape::Entity
-      expose :name
-      expose :message do |repo_obj, _options|
-        if repo_obj.respond_to?(:message)
-          repo_obj.message
-        else
-          nil
-        end
-      end
+      expose :name, :message
 
-      expose :commit do |repo_obj, options|
-        if repo_obj.respond_to?(:commit)
-          repo_obj.commit
-        elsif options[:project]
-          options[:project].repository.commit(repo_obj.target)
-        end
+      expose :commit do |repo_tag, options|
+        options[:project].repository.commit(repo_tag.target)
       end
 
-      expose :release, using: Entities::Release do |repo_obj, options|
-        if options[:project]
-          options[:project].releases.find_by(tag: repo_obj.name)
-        end
+      expose :release, using: Entities::Release do |repo_tag, options|
+        options[:project].releases.find_by(tag: repo_tag.name)
       end
     end
 
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index 77e407b54c54f95920fb8b22a4375a4bcc06eb8b..d6e4eb2afd77d818bc3139fed5827c6267d27387 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -9,6 +9,13 @@ module API
       [ true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON' ].include?(value)
     end
 
+    def to_boolean(value)
+      return true if value =~ /^(true|t|yes|y|1|on)$/i
+      return false if value =~ /^(false|f|no|n|0|off)$/i
+
+      nil
+    end
+
     def find_user_by_private_token
       token_string = (params[PRIVATE_TOKEN_PARAM] || env[PRIVATE_TOKEN_HEADER]).to_s
       User.find_by_authentication_token(token_string) || User.find_by_personal_access_token(token_string)
@@ -17,7 +24,7 @@ module API
     def current_user
       @current_user ||= (find_user_by_private_token || doorkeeper_guard)
 
-      unless @current_user && Gitlab::UserAccess.allowed?(@current_user)
+      unless @current_user && Gitlab::UserAccess.new(@current_user).allowed?
         return nil
       end
 
diff --git a/lib/api/issues.rb b/lib/api/issues.rb
index 8a03a41e9c592345685ce44e96375a82923387f6..c588103e517eb05894ba94b7d0d9292786004a09 100644
--- a/lib/api/issues.rb
+++ b/lib/api/issues.rb
@@ -152,12 +152,13 @@ module API
       #   milestone_id (optional) - The ID of a milestone to assign issue
       #   labels (optional)       - The labels of an issue
       #   created_at (optional)   - Date time string, ISO 8601 formatted
+      #   due_date (optional)     - Date time string in the format YEAR-MONTH-DAY
       # Example Request:
       #   POST /projects/:id/issues
-      post ":id/issues" do
+      post ':id/issues' do
         required_attributes! [:title]
 
-        keys = [:title, :description, :assignee_id, :milestone_id]
+        keys = [:title, :description, :assignee_id, :milestone_id, :due_date]
         keys << :created_at if current_user.admin? || user_project.owner == current_user
         attrs = attributes_for_keys(keys)
 
@@ -201,12 +202,13 @@ module API
       #   labels (optional) - The labels of an issue
       #   state_event (optional) - The state event of an issue (close|reopen)
       #   updated_at (optional) - Date time string, ISO 8601 formatted
+      #   due_date (optional)     - Date time string in the format YEAR-MONTH-DAY
       # Example Request:
       #   PUT /projects/:id/issues/:issue_id
-      put ":id/issues/:issue_id" do
+      put ':id/issues/:issue_id' do
         issue = user_project.issues.find(params[:issue_id])
         authorize! :update_issue, issue
-        keys = [:title, :description, :assignee_id, :milestone_id, :state_event]
+        keys = [:title, :description, :assignee_id, :milestone_id, :state_event, :due_date]
         keys << :updated_at if current_user.admin? || user_project.owner == current_user
         attrs = attributes_for_keys(keys)
 
diff --git a/lib/api/todos.rb b/lib/api/todos.rb
index 2a6bfa98ca4c666c002dcf12fd2fecfbd4252f58..26c24c3baffcf67b71630651c5f80cfefd9bfe2d 100644
--- a/lib/api/todos.rb
+++ b/lib/api/todos.rb
@@ -75,7 +75,7 @@ module API
         todos = find_todos
         todos.each(&:done)
 
-        present paginate(Kaminari.paginate_array(todos)), with: Entities::Todo, current_user: current_user
+        todos.length
       end
     end
   end
diff --git a/lib/banzai/filter/autolink_filter.rb b/lib/banzai/filter/autolink_filter.rb
index fac7dad324333593f0f745f133224989b77db460..9ed45707515c16a2d0baa4f09777f3876c7832e6 100644
--- a/lib/banzai/filter/autolink_filter.rb
+++ b/lib/banzai/filter/autolink_filter.rb
@@ -56,6 +56,8 @@ module Banzai
         # period (e.g., http://localhost:3000/)
         rinku = Rinku.auto_link(html, :urls, options, IGNORE_PARENTS.to_a, 1)
 
+        return if rinku == html
+
         # Rinku returns a String, so parse it back to a Nokogiri::XML::Document
         # for further processing.
         @doc = parse_html(rinku)
diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb
index aa2f7743a5ef0199edc4e303e87302ea2bd153e4..013813ef00b2aa512f0bdd953a02edc3cd19362d 100644
--- a/lib/ci/gitlab_ci_yaml_processor.rb
+++ b/lib/ci/gitlab_ci_yaml_processor.rb
@@ -19,28 +19,62 @@ module Ci
       raise ValidationError, e.message
     end
 
-    def builds_for_stage_and_ref(stage, ref, tag = false, trigger_request = nil)
-      builds.select do |build|
-        build[:stage] == stage &&
-          process?(build[:only], build[:except], ref, tag, trigger_request)
+    def jobs_for_ref(ref, tag = false, trigger_request = nil)
+      @jobs.select do |_, job|
+        process?(job[:only], job[:except], ref, tag, trigger_request)
       end
     end
 
-    def builds
-      @jobs.map do |name, job|
-        build_job(name, job)
+    def jobs_for_stage_and_ref(stage, ref, tag = false, trigger_request = nil)
+      jobs_for_ref(ref, tag, trigger_request).select do |_, job|
+        job[:stage] == stage
       end
     end
 
-    def global_variables
-      @variables
+    def builds_for_ref(ref, tag = false, trigger_request = nil)
+      jobs_for_ref(ref, tag, trigger_request).map do |name, _|
+        build_attributes(name)
+      end
     end
 
-    def job_variables(name)
-      job = @jobs[name.to_sym]
-      return [] unless job
+    def builds_for_stage_and_ref(stage, ref, tag = false, trigger_request = nil)
+      jobs_for_stage_and_ref(stage, ref, tag, trigger_request).map do |name, _|
+        build_attributes(name)
+      end
+    end
 
-      job[:variables] || []
+    def builds
+      @jobs.map do |name, _|
+        build_attributes(name)
+      end
+    end
+
+    def build_attributes(name)
+      job = @jobs[name.to_sym] || {}
+      {
+        stage_idx: @stages.index(job[:stage]),
+        stage: job[:stage],
+        ##
+        # Refactoring note:
+        #  - before script behaves differently than after script
+        #  - after script returns an array of commands
+        #  - before script should be a concatenated command
+        commands: [job[:before_script] || @before_script, job[:script]].flatten.compact.join("\n"),
+        tag_list: job[:tags] || [],
+        name: job[:name],
+        allow_failure: job[:allow_failure] || false,
+        when: job[:when] || 'on_success',
+        environment: job[:environment],
+        yaml_variables: yaml_variables(name),
+        options: {
+          image: job[:image] || @image,
+          services: job[:services] || @services,
+          artifacts: job[:artifacts],
+          cache: job[:cache] || @cache,
+          dependencies: job[:dependencies],
+          after_script: job[:after_script] || @after_script,
+        }.compact
+      }
     end
 
     private
@@ -67,27 +101,22 @@ module Ci
       end
     end
 
-    def build_job(name, job)
-      {
-        stage_idx: @stages.index(job[:stage]),
-        stage: job[:stage],
-        commands: [job[:before_script] || @before_script, job[:script]].flatten.compact.join("\n"),
-        tag_list: job[:tags] || [],
-        name: job[:name],
-        only: job[:only],
-        except: job[:except],
-        allow_failure: job[:allow_failure] || false,
-        when: job[:when] || 'on_success',
-        environment: job[:environment],
-        options: {
-          image: job[:image] || @image,
-          services: job[:services] || @services,
-          artifacts: job[:artifacts],
-          cache: job[:cache] || @cache,
-          dependencies: job[:dependencies],
-          after_script: job[:after_script] || @after_script,
-        }.compact
-      }
+    def yaml_variables(name)
+      variables = global_variables.merge(job_variables(name))
+      variables.map do |key, value|
+        { key: key, value: value, public: true }
+      end
+    end
+
+    def global_variables
+      @variables || {}
+    end
+
+    def job_variables(name)
+      job = @jobs[name.to_sym]
+      return {} unless job
+
+      job[:variables] || {}
     end
 
     def validate_job!(name, job)
diff --git a/lib/container_registry/client.rb b/lib/container_registry/client.rb
index 42232b7129d2c4ab7f284d80d39b9f9d95aeebb4..2edddb84fc3f7b4d49324269f2d360dc4ee3fcd8 100644
--- a/lib/container_registry/client.rb
+++ b/lib/container_registry/client.rb
@@ -7,62 +7,91 @@ module ContainerRegistry
 
     MANIFEST_VERSION = 'application/vnd.docker.distribution.manifest.v2+json'
 
+    # Taken from: FaradayMiddleware::FollowRedirects
+    REDIRECT_CODES = Set.new [301, 302, 303, 307]
+
     def initialize(base_uri, options = {})
       @base_uri = base_uri
-      @faraday = Faraday.new(@base_uri) do |conn|
-        initialize_connection(conn, options)
-      end
+      @options = options
     end
 
     def repository_tags(name)
-      response_body @faraday.get("/v2/#{name}/tags/list")
+      response_body faraday.get("/v2/#{name}/tags/list")
     end
 
     def repository_manifest(name, reference)
-      response_body @faraday.get("/v2/#{name}/manifests/#{reference}")
+      response_body faraday.get("/v2/#{name}/manifests/#{reference}")
     end
 
     def repository_tag_digest(name, reference)
-      response = @faraday.head("/v2/#{name}/manifests/#{reference}")
+      response = faraday.head("/v2/#{name}/manifests/#{reference}")
       response.headers['docker-content-digest'] if response.success?
     end
 
     def delete_repository_tag(name, reference)
-      @faraday.delete("/v2/#{name}/manifests/#{reference}").success?
+      faraday.delete("/v2/#{name}/manifests/#{reference}").success?
     end
 
     def blob(name, digest, type = nil)
-      headers = {}
-      headers['Accept'] = type if type
-      response_body @faraday.get("/v2/#{name}/blobs/#{digest}", nil, headers)
+      type ||= 'application/octet-stream'
+      response_body faraday_blob.get("/v2/#{name}/blobs/#{digest}", nil, 'Accept' => type), allow_redirect: true
     end
 
     def delete_blob(name, digest)
-      @faraday.delete("/v2/#{name}/blobs/#{digest}").success?
+      faraday.delete("/v2/#{name}/blobs/#{digest}").success?
     end
-    
+
     private
-    
+
     def initialize_connection(conn, options)
       conn.request :json
+
+      if options[:user] && options[:password]
+        conn.request(:basic_auth, options[:user].to_s, options[:password].to_s)
+      elsif options[:token]
+        conn.request(:authorization, :bearer, options[:token].to_s)
+      end
+
+      conn.adapter :net_http
+    end
+
+    def accept_manifest(conn)
       conn.headers['Accept'] = MANIFEST_VERSION
 
       conn.response :json, content_type: 'application/json'
       conn.response :json, content_type: 'application/vnd.docker.distribution.manifest.v1+prettyjws'
       conn.response :json, content_type: 'application/vnd.docker.distribution.manifest.v1+json'
       conn.response :json, content_type: 'application/vnd.docker.distribution.manifest.v2+json'
+    end
 
-      if options[:user] && options[:password]
-        conn.request(:basic_auth, options[:user].to_s, options[:password].to_s)
-      elsif options[:token]
-        conn.request(:authorization, :bearer, options[:token].to_s)
+    def response_body(response, allow_redirect: false)
+      if allow_redirect && REDIRECT_CODES.include?(response.status)
+        response = redirect_response(response.headers['location'])
       end
 
-      conn.adapter :net_http
+      response.body if response && response.success?
+    end
+
+    def redirect_response(location)
+      return unless location
+
+      # We explicitly remove authorization token
+      faraday_blob.get(location) do |req|
+        req['Authorization'] = ''
+      end
     end
 
-    def response_body(response)
-      response.body if response.success?
+    def faraday
+      @faraday ||= Faraday.new(@base_uri) do |conn|
+        initialize_connection(conn, @options)
+        accept_manifest(conn)
+      end
+    end
+
+    def faraday_blob
+      @faraday_blob ||= Faraday.new(@base_uri) do |conn|
+        initialize_connection(conn, @options)
+      end
     end
   end
 end
diff --git a/lib/container_registry/tag.rb b/lib/container_registry/tag.rb
index 708d01b95a1b14595cebb63580e3481e261e5d69..59040199920de94acbf180ba1771785120d620bf 100644
--- a/lib/container_registry/tag.rb
+++ b/lib/container_registry/tag.rb
@@ -53,7 +53,7 @@ module ContainerRegistry
     def config
       return unless config_blob
 
-      @config ||= ContainerRegistry::Config.new(self, config_blob)
+      @config ||= ContainerRegistry::Config.new(self, config_blob) if config_blob.data
     end
 
     def created_at
diff --git a/lib/gitlab/access.rb b/lib/gitlab/access.rb
index 831f1e635baca56b041c8c4e1f0c0de61eb3fb47..de41ea415a67d17ab461dde421c7a6fc551d7649 100644
--- a/lib/gitlab/access.rb
+++ b/lib/gitlab/access.rb
@@ -14,9 +14,10 @@ module Gitlab
     OWNER     = 50
 
     # Branch protection settings
-    PROTECTION_NONE         = 0
-    PROTECTION_DEV_CAN_PUSH = 1
-    PROTECTION_FULL         = 2
+    PROTECTION_NONE          = 0
+    PROTECTION_DEV_CAN_PUSH  = 1
+    PROTECTION_FULL          = 2
+    PROTECTION_DEV_CAN_MERGE = 3
 
     class << self
       def values
@@ -54,6 +55,7 @@ module Gitlab
       def protection_options
         {
           "Not protected: Both developers and masters can push new commits, force push, or delete the branch." => PROTECTION_NONE,
+          "Protected against pushes: Developers cannot push new commits, but are allowed to accept merge requests to the branch." => PROTECTION_DEV_CAN_MERGE,
           "Partially protected: Developers can push new commits, but cannot force push or delete the branch. Masters can do all of those." => PROTECTION_DEV_CAN_PUSH,
           "Fully protected: Developers cannot push new commits, force push, or delete the branch. Only masters can do any of those." => PROTECTION_FULL,
         }
diff --git a/lib/gitlab/award_emoji.rb b/lib/gitlab/award_emoji.rb
index c94bfc0e65ff751232d869c355f7e59289175d77..39b43ab5489a362ed9cfc3da7ba83209d653ce35 100644
--- a/lib/gitlab/award_emoji.rb
+++ b/lib/gitlab/award_emoji.rb
@@ -1,24 +1,14 @@
 module Gitlab
   class AwardEmoji
     CATEGORIES = {
-      other: "Other",
       objects: "Objects",
-      places: "Places",
-      travel_places: "Travel",
-      emoticons: "Emoticons",
-      objects_symbols: "Symbols",
+      travel: "Travel",
+      symbols: "Symbols",
       nature: "Nature",
-      celebration: "Celebration",
       people: "People",
       activity: "Activity",
       flags: "Flags",
-      food_drink: "Food"
-    }.with_indifferent_access
-
-    CATEGORY_ALIASES = {
-      symbols: "objects_symbols",
-      foods: "food_drink",
-      travel: "travel_places"
+      food: "Food"
     }.with_indifferent_access
 
     def self.normalize_emoji_name(name)
@@ -35,7 +25,7 @@ module Gitlab
           # Skip Fitzpatrick(tone) modifiers
           next if data["category"] == "modifier"
 
-          category = CATEGORY_ALIASES[data["category"]] || data["category"]
+          category = data["category"]
 
           @emoji_by_category[category] << data
         end
@@ -57,9 +47,9 @@ module Gitlab
     def self.aliases
       @aliases ||=
         begin
-         json_path = File.join(Rails.root, 'fixtures', 'emojis', 'aliases.json' )
-         JSON.parse(File.read(json_path))
-       end
+          json_path = File.join(Rails.root, 'fixtures', 'emojis', 'aliases.json')
+          JSON.parse(File.read(json_path))
+        end
     end
 
     # Returns an Array of Emoji names and their asset URLs.
diff --git a/lib/gitlab/backend/grack_auth.rb b/lib/gitlab/backend/grack_auth.rb
index 478f145bfedaf9782c3fccc433775e889d3528f0..ab94abeda7719396865170842a90219816319ed0 100644
--- a/lib/gitlab/backend/grack_auth.rb
+++ b/lib/gitlab/backend/grack_auth.rb
@@ -63,7 +63,7 @@ module Grack
     def ci_request?(login, password)
       matched_login = /(?<s>^[a-zA-Z]*-ci)-token$/.match(login)
 
-      if project && matched_login.present? && git_cmd == 'git-upload-pack'
+      if project && matched_login.present?
         underscored_service = matched_login['s'].underscore
 
         if underscored_service == 'gitlab_ci'
diff --git a/lib/gitlab/checks/change_access.rb b/lib/gitlab/checks/change_access.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5551fac4b8bdf6b14400ffe699bf0be43d3dba0a
--- /dev/null
+++ b/lib/gitlab/checks/change_access.rb
@@ -0,0 +1,96 @@
+module Gitlab
+  module Checks
+    class ChangeAccess
+      attr_reader :user_access, :project
+
+      def initialize(change, user_access:, project:)
+        @oldrev, @newrev, @ref = change.split(' ')
+        @branch_name = branch_name(@ref)
+        @user_access = user_access
+        @project = project
+      end
+
+      def exec
+        error = protected_branch_checks || tag_checks || push_checks
+
+        if error
+          GitAccessStatus.new(false, error)
+        else
+          GitAccessStatus.new(true)
+        end
+      end
+
+      protected
+
+      def protected_branch_checks
+        return unless project.protected_branch?(@branch_name)
+
+        if forced_push? && user_access.cannot_do_action?(:force_push_code_to_protected_branches)
+          return "You are not allowed to force push code to a protected branch on this project."
+        elsif Gitlab::Git.blank_ref?(@newrev) && user_access.cannot_do_action?(:remove_protected_branches)
+          return "You are not allowed to delete protected branches from this project."
+        end
+
+        if matching_merge_request?
+          if user_access.can_merge_to_branch?(@branch_name) || user_access.can_push_to_branch?(@branch_name)
+            return
+          else
+            "You are not allowed to merge code into protected branches on this project."
+          end
+        else
+          if user_access.can_push_to_branch?(@branch_name)
+            return
+          else
+            "You are not allowed to push code to protected branches on this project."
+          end
+        end
+      end
+
+      def tag_checks
+        tag_ref = tag_name(@ref)
+
+        if tag_ref && protected_tag?(tag_ref) && user_access.cannot_do_action?(:admin_project)
+          "You are not allowed to change existing tags on this project."
+        end
+      end
+
+      def push_checks
+        if user_access.cannot_do_action?(:push_code)
+          "You are not allowed to push code to this project."
+        end
+      end
+
+      private
+
+      def protected_tag?(tag_name)
+        project.repository.tag_exists?(tag_name)
+      end
+
+      def forced_push?
+        Gitlab::Checks::ForcePush.force_push?(@project, @oldrev, @newrev)
+      end
+
+      def matching_merge_request?
+        Checks::MatchingMergeRequest.new(@newrev, @branch_name, @project).match?
+      end
+
+      def branch_name(ref)
+        ref = @ref.to_s
+        if Gitlab::Git.branch_ref?(ref)
+          Gitlab::Git.ref_name(ref)
+        else
+          nil
+        end
+      end
+
+      def tag_name(ref)
+        ref = @ref.to_s
+        if Gitlab::Git.tag_ref?(ref)
+          Gitlab::Git.ref_name(ref)
+        else
+          nil
+        end
+      end
+    end
+  end
+end
diff --git a/lib/gitlab/checks/force_push.rb b/lib/gitlab/checks/force_push.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5fe86553bd014486944dc6fa936457e490e93628
--- /dev/null
+++ b/lib/gitlab/checks/force_push.rb
@@ -0,0 +1,17 @@
+module Gitlab
+  module Checks
+    class ForcePush
+      def self.force_push?(project, oldrev, newrev)
+        return false if project.empty_repo?
+
+        # Created or deleted branch
+        if Gitlab::Git.blank_ref?(oldrev) || Gitlab::Git.blank_ref?(newrev)
+          false
+        else
+          missed_ref, _ = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} --git-dir=#{project.repository.path_to_repo} rev-list --max-count=1 #{oldrev} ^#{newrev}))
+          missed_ref.present?
+        end
+      end
+    end
+  end
+end
diff --git a/lib/gitlab/checks/matching_merge_request.rb b/lib/gitlab/checks/matching_merge_request.rb
new file mode 100644
index 0000000000000000000000000000000000000000..849848515da66a210ff00a0f2c9de3ce6f306f7f
--- /dev/null
+++ b/lib/gitlab/checks/matching_merge_request.rb
@@ -0,0 +1,18 @@
+module Gitlab
+  module Checks
+    class MatchingMergeRequest
+      def initialize(newrev, branch_name, project)
+        @newrev = newrev
+        @branch_name = branch_name
+        @project = project
+      end
+
+      def match?
+        @project.merge_requests
+          .with_state(:locked)
+          .where(in_progress_merge_commit_sha: @newrev, target_branch: @branch_name)
+          .exists?
+      end
+    end
+  end
+end
diff --git a/lib/gitlab/ci/config/node/job.rb b/lib/gitlab/ci/config/node/job.rb
index 464abd4d2d81d439e706c3bf36703de79c50932a..aea9fef82296c996a38feb55a74f230ae1689a7f 100644
--- a/lib/gitlab/ci/config/node/job.rb
+++ b/lib/gitlab/ci/config/node/job.rb
@@ -25,9 +25,9 @@ module Gitlab
               validates :tags, array_of_strings: true
               validates :allow_failure, boolean: true
               validates :when,
-                inclusion: { in: %w[on_success on_failure always],
-                             message: 'should be on_success, on_failure ' \
-                                      'or always' }
+                inclusion: { in: %w[on_success on_failure always manual],
+                             message: 'should be on_success, on_failure, ' \
+                                      'always or manual' }
               validates :environment,
                 type: {
                   with: String,
diff --git a/lib/gitlab/diff/file.rb b/lib/gitlab/diff/file.rb
index 7e01f7b61fba1ff5f4e807dbe11ed77603eee3fd..b09ca1fb8b0c785f4d6cf78683b78137706d54cb 100644
--- a/lib/gitlab/diff/file.rb
+++ b/lib/gitlab/diff/file.rb
@@ -5,7 +5,7 @@ module Gitlab
 
       delegate :new_file, :deleted_file, :renamed_file,
         :old_path, :new_path, :a_mode, :b_mode,
-        :submodule?, :too_large?, to: :diff, prefix: false
+        :submodule?, :too_large?, :collapsed?, to: :diff, prefix: false
 
       def initialize(diff, repository:, diff_refs: nil)
         @diff = diff
@@ -68,10 +68,6 @@ module Gitlab
         @lines ||= Gitlab::Diff::Parser.new.parse(raw_diff.each_line).to_a
       end
 
-      def collapsed_by_default?
-        diff.diff.bytesize > 10240 # 10 KB
-      end
-
       def highlighted_diff_lines
         @highlighted_diff_lines ||= Gitlab::Diff::Highlight.new(self, repository: self.repository).highlight
       end
diff --git a/lib/gitlab/force_push_check.rb b/lib/gitlab/force_push_check.rb
deleted file mode 100644
index 93c6a5bb7f58ea0c5a56d3f6da1d57cd7c70d25a..0000000000000000000000000000000000000000
--- a/lib/gitlab/force_push_check.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-module Gitlab
-  class ForcePushCheck
-    def self.force_push?(project, oldrev, newrev)
-      return false if project.empty_repo?
-
-      # Created or deleted branch
-      if Gitlab::Git.blank_ref?(oldrev) || Gitlab::Git.blank_ref?(newrev)
-        false
-      else
-        missed_refs, _ = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} --git-dir=#{project.repository.path_to_repo} rev-list #{oldrev} ^#{newrev}))
-        missed_refs.split("\n").size > 0
-      end
-    end
-  end
-end
diff --git a/lib/gitlab/git_access.rb b/lib/gitlab/git_access.rb
index 7679c7e4bb8e4192918417c4859214213150406b..8e8f39d9cb25435ee7a8bb9faafda59b8e3eeb79 100644
--- a/lib/gitlab/git_access.rb
+++ b/lib/gitlab/git_access.rb
@@ -1,52 +1,17 @@
+# Check a user's access to perform a git action. All public methods in this
+# class return an instance of `GitlabAccessStatus`
 module Gitlab
   class GitAccess
     DOWNLOAD_COMMANDS = %w{ git-upload-pack git-upload-archive }
     PUSH_COMMANDS = %w{ git-receive-pack }
 
-    attr_reader :actor, :project, :protocol
+    attr_reader :actor, :project, :protocol, :user_access
 
     def initialize(actor, project, protocol)
       @actor    = actor
       @project  = project
       @protocol = protocol
-    end
-
-    def user
-      return @user if defined?(@user)
-
-      @user =
-        case actor
-        when User
-          actor
-        when DeployKey
-          nil
-        when Key
-          actor.user
-        end
-    end
-
-    def deploy_key
-      actor if actor.is_a?(DeployKey)
-    end
-
-    def can_push_to_branch?(ref)
-      return false unless user
-
-      if project.protected_branch?(ref) && !project.developers_can_push_to_protected_branch?(ref)
-        user.can?(:push_code_to_protected_branches, project)
-      else
-        user.can?(:push_code, project)
-      end
-    end
-
-    def can_read_project?
-      if user
-        user.can?(:read_project, project)
-      elsif deploy_key
-        deploy_key.projects.include?(project)
-      else
-        false
-      end
+      @user_access = UserAccess.new(user, project: project)
     end
 
     def check(cmd, changes = nil)
@@ -56,11 +21,11 @@ module Gitlab
         return build_status_object(false, "No user or key was provided.")
       end
 
-      if user && !user_allowed?
+      if user && !user_access.allowed?
         return build_status_object(false, "Your account has been blocked.")
       end
 
-      unless project && can_read_project?
+      unless project && (user_access.can_read_project? || deploy_key_can_read_project?)
         return build_status_object(false, 'The project you were looking for could not be found.')
       end
 
@@ -95,7 +60,7 @@ module Gitlab
     end
 
     def user_download_access_check
-      unless user.can?(:download_code, project)
+      unless user_access.can_do_action?(:download_code)
         return build_status_object(false, "You are not allowed to download code from this project.")
       end
 
@@ -125,46 +90,8 @@ module Gitlab
       build_status_object(true)
     end
 
-    def can_user_do_action?(action)
-      @permission_cache ||= {}
-      @permission_cache[action] ||= user.can?(action, project)
-    end
-
     def change_access_check(change)
-      oldrev, newrev, ref = change.split(' ')
-
-      action =
-        if project.protected_branch?(branch_name(ref))
-          protected_branch_action(oldrev, newrev, branch_name(ref))
-        elsif (tag_ref = tag_name(ref)) && protected_tag?(tag_ref)
-          # Prevent any changes to existing git tag unless user has permissions
-          :admin_project
-        else
-          :push_code
-        end
-
-      unless can_user_do_action?(action)
-        status =
-          case action
-          when :force_push_code_to_protected_branches
-            build_status_object(false, "You are not allowed to force push code to a protected branch on this project.")
-          when :remove_protected_branches
-            build_status_object(false, "You are not allowed to deleted protected branches from this project.")
-          when :push_code_to_protected_branches
-            build_status_object(false, "You are not allowed to push code to protected branches on this project.")
-          when :admin_project
-            build_status_object(false, "You are not allowed to change existing tags on this project.")
-          else # :push_code
-            build_status_object(false, "You are not allowed to push code to this project.")
-          end
-        return status
-      end
-
-      build_status_object(true)
-    end
-
-    def forced_push?(oldrev, newrev)
-      Gitlab::ForcePushCheck.force_push?(project, oldrev, newrev)
+      Checks::ChangeAccess.new(change, user_access: user_access, project: project).exec
     end
 
     def protocol_allowed?
@@ -173,48 +100,39 @@ module Gitlab
 
     private
 
-    def protected_branch_action(oldrev, newrev, branch_name)
-      # we dont allow force push to protected branch
-      if forced_push?(oldrev, newrev)
-        :force_push_code_to_protected_branches
-      elsif Gitlab::Git.blank_ref?(newrev)
-        # and we dont allow remove of protected branch
-        :remove_protected_branches
-      elsif project.developers_can_push_to_protected_branch?(branch_name)
-        :push_code
-      else
-        :push_code_to_protected_branches
-      end
+    def matching_merge_request?(newrev, branch_name)
+      Checks::MatchingMergeRequest.new(newrev, branch_name, project).match?
     end
 
-    def protected_tag?(tag_name)
-      project.repository.tag_exists?(tag_name)
-    end
-
-    def user_allowed?
-      Gitlab::UserAccess.allowed?(user)
-    end
-
-    def branch_name(ref)
-      ref = ref.to_s
-      if Gitlab::Git.branch_ref?(ref)
-        Gitlab::Git.ref_name(ref)
-      else
-        nil
-      end
+    def deploy_key
+      actor if actor.is_a?(DeployKey)
     end
 
-    def tag_name(ref)
-      ref = ref.to_s
-      if Gitlab::Git.tag_ref?(ref)
-        Gitlab::Git.ref_name(ref)
+    def deploy_key_can_read_project?
+      if deploy_key
+        return true if project.public?
+        deploy_key.projects.include?(project)
       else
-        nil
+        false
       end
     end
 
     protected
 
+    def user
+      return @user if defined?(@user)
+
+      @user =
+        case actor
+        when User
+          actor
+        when DeployKey
+          nil
+        when Key
+          actor.user
+        end
+    end
+
     def build_status_object(status, message = '')
       GitAccessStatus.new(status, message)
     end
diff --git a/lib/gitlab/git_access_wiki.rb b/lib/gitlab/git_access_wiki.rb
index 8672cbc0ec44ad4a276557dfec60faa24836c5ce..f71d3575909c68567203edd33958e3da97b5dea9 100644
--- a/lib/gitlab/git_access_wiki.rb
+++ b/lib/gitlab/git_access_wiki.rb
@@ -1,7 +1,7 @@
 module Gitlab
   class GitAccessWiki < GitAccess
     def change_access_check(change)
-      if user.can?(:create_wiki, project)
+      if user_access.can_do_action?(:create_wiki)
         build_status_object(true)
       else
         build_status_object(false, "You are not allowed to write to this project's wiki.")
diff --git a/lib/gitlab/gon_helper.rb b/lib/gitlab/gon_helper.rb
index d4f12cb1df9716cc86c7b115049ec03f9a370ee6..c5a11148d33f7c5dae8fa1c8b5811b91a177b9b7 100644
--- a/lib/gitlab/gon_helper.rb
+++ b/lib/gitlab/gon_helper.rb
@@ -5,7 +5,7 @@ module Gitlab
       gon.default_avatar_url     = URI::join(Gitlab.config.gitlab.url, ActionController::Base.helpers.image_path('no_avatar.png')).to_s
       gon.max_file_size          = current_application_settings.max_attachment_size
       gon.relative_url_root      = Gitlab.config.gitlab.relative_url_root
-      gon.shortcuts_path         = help_shortcuts_path
+      gon.shortcuts_path         = help_page_path('shortcuts')
       gon.user_color_scheme      = Gitlab::ColorSchemes.for_user(current_user).css_class
       gon.award_menu_url         = emojis_path
 
diff --git a/lib/gitlab/import_export.rb b/lib/gitlab/import_export.rb
index bab2ea73c4f10a63636a81dabd66cb3eecddeb0a..d6d14bd98a0fdb192c4c0e0a3d267f2ee1cca68b 100644
--- a/lib/gitlab/import_export.rb
+++ b/lib/gitlab/import_export.rb
@@ -2,7 +2,7 @@ module Gitlab
   module ImportExport
     extend self
 
-    VERSION = '0.1.1'
+    VERSION = '0.1.2'
     FILENAME_LIMIT = 50
 
     def export_path(relative_path:)
diff --git a/lib/gitlab/import_export/avatar_restorer.rb b/lib/gitlab/import_export/avatar_restorer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..352539eb594ead70aec67accc7d348ba31776f15
--- /dev/null
+++ b/lib/gitlab/import_export/avatar_restorer.rb
@@ -0,0 +1,31 @@
+module Gitlab
+  module ImportExport
+    class AvatarRestorer
+
+      def initialize(project:, shared:)
+        @project = project
+        @shared = shared
+      end
+
+      def restore
+        return true unless avatar_export_file
+
+        @project.avatar = File.open(avatar_export_file)
+        @project.save!
+      rescue => e
+        @shared.error(e)
+        false
+      end
+
+      private
+
+      def avatar_export_file
+        @avatar_export_file ||= Dir["#{avatar_export_path}/*"].first
+      end
+
+      def avatar_export_path
+        File.join(@shared.export_path, 'avatar')
+      end
+    end
+  end
+end
diff --git a/lib/gitlab/import_export/avatar_saver.rb b/lib/gitlab/import_export/avatar_saver.rb
new file mode 100644
index 0000000000000000000000000000000000000000..998c21e25869c3daa7529d722d19e421b9cdec83
--- /dev/null
+++ b/lib/gitlab/import_export/avatar_saver.rb
@@ -0,0 +1,31 @@
+module Gitlab
+  module ImportExport
+    class AvatarSaver
+      include Gitlab::ImportExport::CommandLineUtil
+
+      def initialize(project:, shared:)
+        @project = project
+        @shared = shared
+      end
+
+      def save
+        return true unless @project.avatar.exists?
+
+        copy_files(avatar_path, avatar_export_path)
+      rescue => e
+        @shared.error(e)
+        false
+      end
+
+      private
+
+      def avatar_export_path
+        File.join(@shared.export_path, 'avatar', @project.avatar_identifier)
+      end
+
+      def avatar_path
+        @project.avatar.path
+      end
+    end
+  end
+end
diff --git a/lib/gitlab/import_export/command_line_util.rb b/lib/gitlab/import_export/command_line_util.rb
index 2249904145c7df427cff988c0a6159fa1781a5aa..5dd0e34c18ea5b04420b66dab081895660ed3780 100644
--- a/lib/gitlab/import_export/command_line_util.rb
+++ b/lib/gitlab/import_export/command_line_util.rb
@@ -36,6 +36,15 @@ module Gitlab
       def git_bin_path
         Gitlab.config.git.bin_path
       end
+
+      def copy_files(source, destination)
+        # if we are copying files, create the destination folder
+        destination_folder = File.file?(source) ? File.dirname(destination) : destination
+
+        FileUtils.mkdir_p(destination_folder)
+        FileUtils.copy_entry(source, destination)
+        true
+      end
     end
   end
 end
diff --git a/lib/gitlab/import_export/import_export.yml b/lib/gitlab/import_export/import_export.yml
index 05f4ad527ac356ca14130690202d9a626e9d3f45..15afe8174a476ec5f970c73fbec40b54f47ec26c 100644
--- a/lib/gitlab/import_export/import_export.yml
+++ b/lib/gitlab/import_export/import_export.yml
@@ -53,7 +53,11 @@ included_attributes:
 excluded_attributes:
   snippets:
     - :expired_at
+  merge_request_diff:
+    - :st_diffs
 
 methods:
   statuses:
-    - :type
\ No newline at end of file
+    - :type
+  merge_request_diff:
+    - :utf8_st_diffs
\ No newline at end of file
diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb
index 8f66f48cbfeff88fb39d6fb63b294d51e5e4ec52..e9ee47fc090d5091bed7cfbccee80fa129c6006e 100644
--- a/lib/gitlab/import_export/importer.rb
+++ b/lib/gitlab/import_export/importer.rb
@@ -9,7 +9,7 @@ module Gitlab
       end
 
       def execute
-        if import_file && check_version! && [project_tree, repo_restorer, wiki_restorer, uploads_restorer].all?(&:restore)
+        if import_file && check_version! && [project_tree, avatar_restorer, repo_restorer, wiki_restorer, uploads_restorer].all?(&:restore)
           project_tree.restored_project
         else
           raise Projects::ImportService::Error.new(@shared.errors.join(', '))
@@ -35,6 +35,10 @@ module Gitlab
                                                                         project: @project)
       end
 
+      def avatar_restorer
+        Gitlab::ImportExport::AvatarRestorer.new(project: project_tree.restored_project, shared: @shared)
+      end
+
       def repo_restorer
         Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: repo_path,
                                                shared: @shared,
@@ -44,8 +48,7 @@ module Gitlab
       def wiki_restorer
         Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: wiki_repo_path,
                                                shared: @shared,
-                                               project: ProjectWiki.new(project_tree.restored_project),
-                                               wiki: true)
+                                               project: ProjectWiki.new(project_tree.restored_project))
       end
 
       def uploads_restorer
diff --git a/lib/gitlab/import_export/relation_factory.rb b/lib/gitlab/import_export/relation_factory.rb
index 6ba25a31641bd87b844b30f3102a334caa3f9560..e41c7e6bf4f5be0d8e1ecb872fa79b71c29292d5 100644
--- a/lib/gitlab/import_export/relation_factory.rb
+++ b/lib/gitlab/import_export/relation_factory.rb
@@ -33,6 +33,7 @@ module Gitlab
         update_project_references
         reset_ci_tokens if @relation_name == 'Ci::Trigger'
         @relation_hash['data'].deep_symbolize_keys! if @relation_name == :events && @relation_hash['data']
+        set_st_diffs if @relation_name == :merge_request_diff
 
         generate_imported_object
       end
@@ -129,6 +130,10 @@ module Gitlab
       def parsed_relation_hash
         @relation_hash.reject { |k, _v| !relation_class.attribute_method?(k) }
       end
+
+      def set_st_diffs
+        @relation_hash['st_diffs'] = @relation_hash.delete('utf8_st_diffs')
+      end
     end
   end
 end
diff --git a/lib/gitlab/import_export/repo_restorer.rb b/lib/gitlab/import_export/repo_restorer.rb
index 546dae4d122547d12ad29bed5858950694472cbd..f84de652a572e602c7cb89b642eb712fef8f2e9f 100644
--- a/lib/gitlab/import_export/repo_restorer.rb
+++ b/lib/gitlab/import_export/repo_restorer.rb
@@ -3,15 +3,14 @@ module Gitlab
     class RepoRestorer
       include Gitlab::ImportExport::CommandLineUtil
 
-      def initialize(project:, shared:, path_to_bundle:, wiki: false)
+      def initialize(project:, shared:, path_to_bundle:)
         @project = project
         @path_to_bundle = path_to_bundle
         @shared = shared
-        @wiki = wiki
       end
 
       def restore
-        return wiki? unless File.exist?(@path_to_bundle)
+        return true unless File.exist?(@path_to_bundle)
 
         FileUtils.mkdir_p(path_to_repo)
 
@@ -30,10 +29,6 @@ module Gitlab
       def path_to_repo
         @project.repository.path_to_repo
       end
-
-      def wiki?
-        @wiki
-      end
     end
   end
 end
diff --git a/lib/gitlab/import_export/repo_saver.rb b/lib/gitlab/import_export/repo_saver.rb
index cce43fe994bbd7b55d4b1d2b532caa3ce0fbb8a0..331e14021e6831ef388720ede3abcc99d65791a3 100644
--- a/lib/gitlab/import_export/repo_saver.rb
+++ b/lib/gitlab/import_export/repo_saver.rb
@@ -11,7 +11,7 @@ module Gitlab
       end
 
       def save
-        return false if @project.empty_repo?
+        return true if @project.empty_repo? # it's ok to have no repo
 
         @full_path = File.join(@shared.export_path, ImportExport.project_bundle_filename)
         bundle_to_disk
diff --git a/lib/gitlab/import_export/uploads_saver.rb b/lib/gitlab/import_export/uploads_saver.rb
index d6f4fa5751055e8aaca02a95e835852fe616c059..62a2553675cd927dd434de381fcc0b32ea5e1bf2 100644
--- a/lib/gitlab/import_export/uploads_saver.rb
+++ b/lib/gitlab/import_export/uploads_saver.rb
@@ -1,6 +1,8 @@
 module Gitlab
   module ImportExport
     class UploadsSaver
+      include Gitlab::ImportExport::CommandLineUtil
+
       def initialize(project:, shared:)
         @project = project
         @shared = shared
@@ -17,12 +19,6 @@ module Gitlab
 
       private
 
-      def copy_files(source, destination)
-        FileUtils.mkdir_p(destination)
-        FileUtils.copy_entry(source, destination)
-        true
-      end
-
       def uploads_export_path
         File.join(@shared.export_path, 'uploads')
       end
diff --git a/lib/gitlab/import_export/wiki_repo_saver.rb b/lib/gitlab/import_export/wiki_repo_saver.rb
index 1eedae39f8a3a7017f46ceb0cc4149da17a899ac..6107420e4dd79ab6bb8b7d1d60b72e2111877e21 100644
--- a/lib/gitlab/import_export/wiki_repo_saver.rb
+++ b/lib/gitlab/import_export/wiki_repo_saver.rb
@@ -4,6 +4,7 @@ module Gitlab
       def save
         @wiki = ProjectWiki.new(@project)
         return true unless wiki_repository_exists? # it's okay to have no Wiki
+
         bundle_to_disk(File.join(@shared.export_path, project_filename))
       end
 
diff --git a/lib/gitlab/lfs/response.rb b/lib/gitlab/lfs/response.rb
index 811363405a813110f1ee5df06e3b24a9a57ac5b3..a1ee1aa81ff090de51b6c1db73076ed5261a5dca 100644
--- a/lib/gitlab/lfs/response.rb
+++ b/lib/gitlab/lfs/response.rb
@@ -47,6 +47,8 @@ module Gitlab
       end
 
       def render_storage_upload_store_response(oid, size, tmp_file_name)
+        return render_forbidden unless tmp_file_name
+
         render_response_to_push do
           render_lfs_upload_ok(oid, size, tmp_file_name)
         end
diff --git a/lib/gitlab/lfs/router.rb b/lib/gitlab/lfs/router.rb
index 69bd5e6230587830b381fcf1a4adb378b09b2e61..f2a76a56b8f2452ea1a789e90feb20a548830060 100644
--- a/lib/gitlab/lfs/router.rb
+++ b/lib/gitlab/lfs/router.rb
@@ -74,8 +74,6 @@ module Gitlab
           lfs.render_storage_upload_authorize_response(oid, size)
         else
           tmp_file_name = sanitize_tmp_filename(@request.env['HTTP_X_GITLAB_LFS_TMP'])
-          return nil unless tmp_file_name
-
           lfs.render_storage_upload_store_response(oid, size, tmp_file_name)
         end
       end
diff --git a/lib/gitlab/user_access.rb b/lib/gitlab/user_access.rb
index d1b42c1f9b97a0c45bd0bfde190b129e6ec1aa9f..c0f85e9b3a85a509be84b9ece06c8ddc364d1160 100644
--- a/lib/gitlab/user_access.rb
+++ b/lib/gitlab/user_access.rb
@@ -1,7 +1,23 @@
 module Gitlab
-  module UserAccess
-    def self.allowed?(user)
-      return false if user.blocked?
+  class UserAccess
+    attr_reader :user, :project
+
+    def initialize(user, project: nil)
+      @user = user
+      @project = project
+    end
+
+    def can_do_action?(action)
+      @permission_cache ||= {}
+      @permission_cache[action] ||= user.can?(action, project)
+    end
+
+    def cannot_do_action?(action)
+      !can_do_action?(action)
+    end
+
+    def allowed?
+      return false if user.blank? || user.blocked?
 
       if user.requires_ldap_check? && user.try_obtain_ldap_lease
         return false unless Gitlab::LDAP::Access.allowed?(user)
@@ -9,5 +25,31 @@ module Gitlab
 
       true
     end
+
+    def can_push_to_branch?(ref)
+      return false unless user
+
+      if project.protected_branch?(ref) && !project.developers_can_push_to_protected_branch?(ref)
+        user.can?(:push_code_to_protected_branches, project)
+      else
+        user.can?(:push_code, project)
+      end
+    end
+
+    def can_merge_to_branch?(ref)
+      return false unless user
+
+      if project.protected_branch?(ref) && !project.developers_can_merge_to_protected_branch?(ref)
+        user.can?(:push_code_to_protected_branches, project)
+      else
+        user.can?(:push_code, project)
+      end
+    end
+
+    def can_read_project?
+      return false unless user
+
+      user.can?(:read_project, project)
+    end
   end
 end
diff --git a/lib/tasks/gemojione.rake b/lib/tasks/gemojione.rake
index e930ace1041ad446e2203e136314b6019e293d2f..993112aee3be341125b045c64e91d7747f1ff8d4 100644
--- a/lib/tasks/gemojione.rake
+++ b/lib/tasks/gemojione.rake
@@ -4,7 +4,7 @@ namespace :gemojione do
     require 'digest/sha2'
     require 'json'
 
-    dir = Gemojione.index.images_path
+    dir = Gemojione.images_path
     digests = []
     aliases = Hash.new { |hash, key| hash[key] = [] }
     aliases_path = File.join(Rails.root, 'fixtures', 'emojis', 'aliases.json')
@@ -50,9 +50,14 @@ namespace :gemojione do
     SIZE   = 20
     RETINA = SIZE * 2
 
+    # Update these values to the width and height of the spritesheet when
+    # new emoji are added.
+    SPRITESHEET_WIDTH = 860
+    SPRITESHEET_HEIGHT = 840
+
     Dir.mktmpdir do |tmpdir|
       # Copy the Gemojione assets to the temporary folder for resizing
-      FileUtils.cp_r(Gemojione.index.images_path, tmpdir)
+      FileUtils.cp_r(Gemojione.images_path, tmpdir)
 
       Dir.chdir(tmpdir) do
         Dir["**/*.png"].each do |png|
@@ -64,7 +69,7 @@ namespace :gemojione do
 
       # Combine the resized assets into a packed sprite and re-generate the SCSS
       SpriteFactory.cssurl = "image-url('$IMAGE')"
-      SpriteFactory.run!(File.join(tmpdir, 'images'), {
+      SpriteFactory.run!(File.join(tmpdir, 'png'), {
         output_style: style_path,
         output_image: "app/assets/images/emoji.png",
         selector:     '.emoji-',
@@ -97,7 +102,7 @@ namespace :gemojione do
                  only screen and (min-resolution: 192dpi),
                  only screen and (min-resolution: 2dppx) {
             background-image: image-url('emoji@2x.png');
-            background-size: 840px 820px;
+            background-size: #{SPRITESHEET_WIDTH}px #{SPRITESHEET_HEIGHT}px;
           }
         }
         CSS
@@ -107,7 +112,7 @@ namespace :gemojione do
     # Now do it again but for Retina
     Dir.mktmpdir do |tmpdir|
       # Copy the Gemojione assets to the temporary folder for resizing
-      FileUtils.cp_r(Gemojione.index.images_path, tmpdir)
+      FileUtils.cp_r(Gemojione.images_path, tmpdir)
 
       Dir.chdir(tmpdir) do
         Dir["**/*.png"].each do |png|
@@ -116,7 +121,7 @@ namespace :gemojione do
       end
 
       # Combine the resized assets into a packed sprite and re-generate the SCSS
-      SpriteFactory.run!(File.join(tmpdir, 'images'), {
+      SpriteFactory.run!(File.join(tmpdir), {
         output_image: "app/assets/images/emoji@2x.png",
         style:        false,
         nocomments:   true,
diff --git a/lib/tasks/gitlab/track_deployment.rake b/lib/tasks/gitlab/track_deployment.rake
new file mode 100644
index 0000000000000000000000000000000000000000..84aa2e8507a16c67b7c3ff2437b99974d4849e36
--- /dev/null
+++ b/lib/tasks/gitlab/track_deployment.rake
@@ -0,0 +1,9 @@
+namespace :gitlab do
+  desc 'GitLab | Tracks a deployment in GitLab Performance Monitoring'
+  task track_deployment: :environment do
+    metric = Gitlab::Metrics::Metric.
+      new('deployments', version: Gitlab::VERSION)
+
+    Gitlab::Metrics.submit_metrics([metric.to_hash])
+  end
+end
diff --git a/spec/controllers/help_controller_spec.rb b/spec/controllers/help_controller_spec.rb
index 267d511c2dbca06342b188b0c7fa2dd3533b8a38..347bef1e129c1d549d84b1d1d5b1b1d8607bf94c 100644
--- a/spec/controllers/help_controller_spec.rb
+++ b/spec/controllers/help_controller_spec.rb
@@ -63,4 +63,13 @@ describe HelpController do
       end
     end
   end
+
+  describe 'GET #ui' do
+    context 'for UI Development Kit' do
+      it 'renders found' do
+        get :ui
+        expect(response).to have_http_status(200)
+      end
+    end
+  end
 end
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index 1b1b1bdf52d23cd36845df856b25c12a71150513..3edce4d339c53979daf98e29fe7cdca0f4208f34 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -43,6 +43,26 @@ describe ProjectsController do
       end
     end
 
+    context "project with empty repo" do
+      let(:empty_project) { create(:project_empty_repo, :public) }
+
+      before { sign_in(user) }
+
+      User.project_views.keys.each do |project_view|
+        context "with #{project_view} view set" do
+          before do
+            user.update_attributes(project_view: project_view)
+
+            get :show, namespace_id: empty_project.namespace.path, id: empty_project.path
+          end
+
+          it "renders the empty project view" do
+            expect(response).to render_template('empty')
+          end
+        end
+      end
+    end
+
     context "rendering default project view" do
       render_views
 
diff --git a/spec/factories/ci/builds.rb b/spec/factories/ci/builds.rb
index fe05a0cfc001977e51100f58a15f6c238dd462cc..5e19e403c6bb4e2be2adf022ef414ac0d76e29e4 100644
--- a/spec/factories/ci/builds.rb
+++ b/spec/factories/ci/builds.rb
@@ -3,6 +3,8 @@ include ActionDispatch::TestProcess
 FactoryGirl.define do
   factory :ci_build, class: Ci::Build do
     name 'test'
+    stage 'test'
+    stage_idx 0
     ref 'master'
     tag false
     created_at 'Di 29. Okt 09:50:00 CET 2013'
@@ -15,6 +17,11 @@ FactoryGirl.define do
         services: ["postgres"]
       }
     end
+    yaml_variables do
+      [
+        { key: :DB_NAME, value: 'postgres', public: true }
+      ]
+    end
 
     pipeline factory: :ci_pipeline
 
@@ -38,6 +45,11 @@ FactoryGirl.define do
       status 'pending'
     end
 
+    trait :manual do
+      status 'skipped'
+      self.when 'manual'
+    end
+
     trait :allowed_to_fail do
       allow_failure true
     end
diff --git a/spec/features/admin/admin_builds_spec.rb b/spec/features/admin/admin_builds_spec.rb
index a6198389f04357f24d7f89d47352b6f78ad5e49a..e177059d9597c2d790869dfda97c9a9abd371662 100644
--- a/spec/features/admin/admin_builds_spec.rb
+++ b/spec/features/admin/admin_builds_spec.rb
@@ -36,12 +36,45 @@ describe 'Admin Builds' do
       end
     end
 
+    context 'Pending tab' do
+      context 'when have pending builds' do
+        it 'shows pending builds' do
+          build1 = create(:ci_build, pipeline: pipeline, status: :pending)
+          build2 = create(:ci_build, pipeline: pipeline, status: :running)
+          build3 = create(:ci_build, pipeline: pipeline, status: :success)
+          build4 = create(:ci_build, pipeline: pipeline, status: :failed)
+
+          visit admin_builds_path(scope: :pending)
+
+          expect(page).to have_selector('.nav-links li.active', text: 'Pending')
+          expect(page.find('.build-link')).to have_content(build1.id)
+          expect(page.find('.build-link')).not_to have_content(build2.id)
+          expect(page.find('.build-link')).not_to have_content(build3.id)
+          expect(page.find('.build-link')).not_to have_content(build4.id)
+          expect(page).to have_link 'Cancel all'
+        end
+      end
+
+      context 'when have no builds pending' do
+        it 'shows a message' do
+          create(:ci_build, pipeline: pipeline, status: :success)
+
+          visit admin_builds_path(scope: :pending)
+
+          expect(page).to have_selector('.nav-links li.active', text: 'Pending')
+          expect(page).to have_content 'No builds to show'
+          expect(page).not_to have_link 'Cancel all'
+        end
+      end
+    end
+
     context 'Running tab' do
       context 'when have running builds' do
         it 'shows running builds' do
-          build1 = create(:ci_build, pipeline: pipeline, status: :pending)
+          build1 = create(:ci_build, pipeline: pipeline, status: :running)
           build2 = create(:ci_build, pipeline: pipeline, status: :success)
           build3 = create(:ci_build, pipeline: pipeline, status: :failed)
+          build4 = create(:ci_build, pipeline: pipeline, status: :pending)
 
           visit admin_builds_path(scope: :running)
 
@@ -49,6 +82,7 @@ describe 'Admin Builds' do
           expect(page.find('.build-link')).to have_content(build1.id)
           expect(page.find('.build-link')).not_to have_content(build2.id)
           expect(page.find('.build-link')).not_to have_content(build3.id)
+          expect(page.find('.build-link')).not_to have_content(build4.id)
           expect(page).to have_link 'Cancel all'
         end
       end
diff --git a/spec/features/builds_spec.rb b/spec/features/builds_spec.rb
index 16832c297acd6c14d7d53d0406c3d29af2d3219c..cab3dc1d167c8672259767e2512d185a4dcff864 100644
--- a/spec/features/builds_spec.rb
+++ b/spec/features/builds_spec.rb
@@ -13,17 +13,33 @@ describe "Builds" do
   end
 
   describe "GET /:project/builds" do
+    context "Pending scope" do
+      before do
+        visit namespace_project_builds_path(@project.namespace, @project, scope: :pending)
+      end
+
+      it "shows Pending tab builds" do
+        expect(page).to have_link 'Cancel running'
+        expect(page).to have_selector('.nav-links li.active', text: 'Pending')
+        expect(page).to have_content @build.short_sha
+        expect(page).to have_content @build.ref
+        expect(page).to have_content @build.name
+      end
+    end
+
     context "Running scope" do
       before do
         @build.run!
         visit namespace_project_builds_path(@project.namespace, @project, scope: :running)
       end
 
-      it { expect(page).to have_selector('.nav-links li.active', text: 'Running') }
-      it { expect(page).to have_link 'Cancel running' }
-      it { expect(page).to have_content @build.short_sha }
-      it { expect(page).to have_content @build.ref }
-      it { expect(page).to have_content @build.name }
+      it "shows Running tab builds" do
+        expect(page).to have_selector('.nav-links li.active', text: 'Running')
+        expect(page).to have_link 'Cancel running'
+        expect(page).to have_content @build.short_sha
+        expect(page).to have_content @build.ref
+        expect(page).to have_content @build.name
+      end
     end
 
     context "Finished scope" do
@@ -32,9 +48,11 @@ describe "Builds" do
         visit namespace_project_builds_path(@project.namespace, @project, scope: :finished)
       end
 
-      it { expect(page).to have_selector('.nav-links li.active', text: 'Finished') }
-      it { expect(page).to have_content 'No builds to show' }
-      it { expect(page).to have_link 'Cancel running' }
+      it "shows Finished tab builds" do
+        expect(page).to have_selector('.nav-links li.active', text: 'Finished')
+        expect(page).to have_content 'No builds to show'
+        expect(page).to have_link 'Cancel running'
+      end
     end
 
     context "All builds" do
@@ -43,11 +61,13 @@ describe "Builds" do
         visit namespace_project_builds_path(@project.namespace, @project)
       end
 
-      it { expect(page).to have_selector('.nav-links li.active', text: 'All') }
-      it { expect(page).to have_content @build.short_sha }
-      it { expect(page).to have_content @build.ref }
-      it { expect(page).to have_content @build.name }
-      it { expect(page).not_to have_link 'Cancel running' }
+      it "shows All tab builds" do
+        expect(page).to have_selector('.nav-links li.active', text: 'All')
+        expect(page).to have_content @build.short_sha
+        expect(page).to have_content @build.ref
+        expect(page).to have_content @build.name
+        expect(page).not_to have_link 'Cancel running'
+      end
     end
   end
 
diff --git a/spec/features/environments_spec.rb b/spec/features/environments_spec.rb
index 7fb28f4174b01be2c13a32657d016700ecb6ecf0..9c018be14b7400a273554ed657bc4bd3e7c721e2 100644
--- a/spec/features/environments_spec.rb
+++ b/spec/features/environments_spec.rb
@@ -13,6 +13,7 @@ feature 'Environments', feature: true do
   describe 'when showing environments' do
     given!(:environment) { }
     given!(:deployment) { }
+    given!(:manual) { }
 
     before do
       visit namespace_project_environments_path(project.namespace, project)
@@ -43,6 +44,24 @@ feature 'Environments', feature: true do
         scenario 'does show deployment SHA' do
           expect(page).to have_link(deployment.short_sha)
         end
+
+        context 'with build and manual actions' do
+          given(:pipeline) { create(:ci_pipeline, project: project) }
+          given(:build) { create(:ci_build, pipeline: pipeline) }
+          given(:deployment) { create(:deployment, environment: environment, deployable: build) }
+          given(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'deploy to production') }
+
+          scenario 'does show a play button' do
+            expect(page).to have_link(manual.name.humanize)
+          end
+
+          scenario 'does allow to play manual action' do
+            expect(manual).to be_skipped
+            expect{ click_link(manual.name.humanize) }.not_to change { Ci::Pipeline.count }
+            expect(page).to have_content(manual.name)
+            expect(manual.reload).to be_pending
+          end
+        end
       end
     end
 
@@ -54,6 +73,7 @@ feature 'Environments', feature: true do
   describe 'when showing the environment' do
     given(:environment) { create(:environment, project: project) }
     given!(:deployment) { }
+    given!(:manual) { }
 
     before do
       visit namespace_project_environment_path(project.namespace, project, environment)
@@ -77,7 +97,8 @@ feature 'Environments', feature: true do
       end
 
       context 'with build' do
-        given(:build) { create(:ci_build, project: project) }
+        given(:pipeline) { create(:ci_pipeline, project: project) }
+        given(:build) { create(:ci_build, pipeline: pipeline) }
         given(:deployment) { create(:deployment, environment: environment, deployable: build) }
 
         scenario 'does show build name' do
@@ -87,6 +108,21 @@ feature 'Environments', feature: true do
         scenario 'does show retry button' do
           expect(page).to have_link('Retry')
         end
+
+        context 'with manual action' do
+          given(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'deploy to production') }
+
+          scenario 'does show a play button' do
+            expect(page).to have_link(manual.name.humanize)
+          end
+
+          scenario 'does allow to play manual action' do
+            expect(manual).to be_skipped
+            expect{ click_link(manual.name.humanize) }.not_to change { Ci::Pipeline.count }
+            expect(page).to have_content(manual.name)
+            expect(manual.reload).to be_pending
+          end
+        end
       end
     end
   end
diff --git a/spec/features/expand_collapse_diffs_spec.rb b/spec/features/expand_collapse_diffs_spec.rb
index 78bc888f2a6e3fa1ab2d255ead1f10bca603885c..688f68d3cff30c56dd75ed2919af35e398b27ed0 100644
--- a/spec/features/expand_collapse_diffs_spec.rb
+++ b/spec/features/expand_collapse_diffs_spec.rb
@@ -3,10 +3,11 @@ require 'spec_helper'
 feature 'Expand and collapse diffs', js: true, feature: true do
   include WaitForAjax
 
+  let(:branch) { 'expand-collapse-diffs' }
+
   before do
     login_as :admin
     project = create(:project)
-    branch = 'expand-collapse-diffs'
 
     # Ensure that undiffable.md is in .gitattributes
     project.repository.copy_gitattributes(branch)
@@ -167,6 +168,46 @@ feature 'Expand and collapse diffs', js: true, feature: true do
     end
   end
 
+  context 'visiting a commit without collapsed diffs' do
+    let(:branch) { 'feature' }
+
+    it 'does not show Expand all button' do
+      expect(page).not_to have_link('Expand all')
+    end
+  end
+
+  context 'visiting a commit with more than safe files' do
+    let(:branch) { 'expand-collapse-files' }
+
+    # safe-files -> 100 | safe-lines -> 5000 | commit-files -> 105
+    it 'does collapsing from the safe number of files to the end on small files' do
+      expect(page).to have_link('Expand all')
+
+      expect(page).to have_selector('.diff-content', count: 105)
+      expect(page).to have_selector('.diff-collapsed', count: 5)
+
+      %w(file-95.txt file-96.txt file-97.txt file-98.txt file-99.txt).each do |filename|
+        expect(find("[data-blob-diff-path*='#{filename}']")).to have_selector('.diff-collapsed')
+      end
+    end
+  end
+
+  context 'visiting a commit with more than safe lines' do
+    let(:branch) { 'expand-collapse-lines' }
+
+    # safe-files -> 100 | safe-lines -> 5000 | commit_files -> 8 (each 1250 lines)
+    it 'does collapsing from the safe number of lines to the end' do
+      expect(page).to have_link('Expand all')
+
+      expect(page).to have_selector('.diff-content', count: 6)
+      expect(page).to have_selector('.diff-collapsed', count: 2)
+
+      %w(file-4.txt file-5.txt).each do |filename|
+        expect(find("[data-blob-diff-path*='#{filename}']")).to have_selector('.diff-collapsed')
+      end
+    end
+  end
+
   context 'expanding all diffs' do
     before do
       click_link('Expand all')
diff --git a/spec/features/pipelines_spec.rb b/spec/features/pipelines_spec.rb
index e7ee0aaea3c6cf7feabecca37be9f54132f91acd..7f861db196981a1651e80e5d6a3b9b2222b00c85 100644
--- a/spec/features/pipelines_spec.rb
+++ b/spec/features/pipelines_spec.rb
@@ -62,6 +62,20 @@ describe "Pipelines" do
       end
     end
 
+    context 'with manual actions' do
+      let!(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'manual build', stage: 'test', commands: 'test') }
+
+      before { visit namespace_project_pipelines_path(project.namespace, project) }
+
+      it { expect(page).to have_link('Manual build') }
+
+      context 'when playing' do
+        before { click_link('Manual build') }
+
+        it { expect(manual.reload).to be_pending }
+      end
+    end
+
     context 'for generic statuses' do
       context 'when running' do
         let!(:running) { create(:generic_commit_status, status: 'running', pipeline: pipeline, stage: 'test') }
@@ -117,6 +131,7 @@ describe "Pipelines" do
       @success = create(:ci_build, :success, pipeline: pipeline, stage: 'build', name: 'build')
       @failed = create(:ci_build, :failed, pipeline: pipeline, stage: 'test', name: 'test', commands: 'test')
       @running = create(:ci_build, :running, pipeline: pipeline, stage: 'deploy', name: 'deploy')
+      @manual = create(:ci_build, :manual, pipeline: pipeline, stage: 'deploy', name: 'manual build')
       @external = create(:generic_commit_status, status: 'success', pipeline: pipeline, name: 'jenkins', stage: 'external')
     end
 
@@ -131,6 +146,7 @@ describe "Pipelines" do
       expect(page).to have_content(@external.id)
       expect(page).to have_content('Retry failed')
       expect(page).to have_content('Cancel running')
+      expect(page).to have_link('Play')
     end
 
     context 'retrying builds' do
@@ -154,6 +170,12 @@ describe "Pipelines" do
         it { expect(page).to have_selector('.ci-canceled') }
       end
     end
+
+    context 'playing manual build' do
+      before { click_link('Play') }
+
+      it { expect(@manual.reload).to be_pending }
+    end
   end
 
   describe 'POST /:project/pipelines' do
diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb
index 13d980a326f512f9656c16e6a1dc3e0e808b9e2f..b6acc509342af993f534b124a8faf6f065a42b93 100644
--- a/spec/features/security/project/internal_access_spec.rb
+++ b/spec/features/security/project/internal_access_spec.rb
@@ -426,4 +426,23 @@ describe "Internal Project Access", feature: true  do
     it { is_expected.to be_denied_for :external }
     it { is_expected.to be_denied_for :visitor }
   end
+
+  describe "GET /:project_path/container_registry" do
+    before do
+      stub_container_registry_tags('latest')
+      stub_container_registry_config(enabled: true)
+    end
+
+    subject { namespace_project_container_registry_index_path(project.namespace, project) }
+
+    it { is_expected.to be_allowed_for :admin }
+    it { is_expected.to be_allowed_for owner }
+    it { is_expected.to be_allowed_for master }
+    it { is_expected.to be_allowed_for developer }
+    it { is_expected.to be_allowed_for reporter }
+    it { is_expected.to be_allowed_for guest }
+    it { is_expected.to be_allowed_for :user }
+    it { is_expected.to be_denied_for :external }
+    it { is_expected.to be_denied_for :visitor }
+  end
 end
diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb
index ac9690cc12796f7001a98cfe7efd2df49229018f..ccb5c06dab013144d0d6974d892a9ecb40357954 100644
--- a/spec/features/security/project/private_access_spec.rb
+++ b/spec/features/security/project/private_access_spec.rb
@@ -362,4 +362,23 @@ describe "Private Project Access", feature: true  do
     it { is_expected.to be_denied_for :external }
     it { is_expected.to be_denied_for :visitor }
   end
+
+  describe "GET /:project_path/container_registry" do
+    before do
+      stub_container_registry_tags('latest')
+      stub_container_registry_config(enabled: true)
+    end
+
+    subject { namespace_project_container_registry_index_path(project.namespace, project) }
+
+    it { is_expected.to be_allowed_for :admin }
+    it { is_expected.to be_allowed_for owner }
+    it { is_expected.to be_allowed_for master }
+    it { is_expected.to be_allowed_for developer }
+    it { is_expected.to be_allowed_for reporter }
+    it { is_expected.to be_denied_for guest }
+    it { is_expected.to be_denied_for :user }
+    it { is_expected.to be_denied_for :external }
+    it { is_expected.to be_denied_for :visitor }
+  end
 end
diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb
index 737897de52b694b006a7043b5053be28206569ec..985663e7c989a4c9d76bd9bdab53c99ebb2819a2 100644
--- a/spec/features/security/project/public_access_spec.rb
+++ b/spec/features/security/project/public_access_spec.rb
@@ -426,4 +426,23 @@ describe "Public Project Access", feature: true  do
     it { is_expected.to be_denied_for :external }
     it { is_expected.to be_denied_for :visitor }
   end
+
+  describe "GET /:project_path/container_registry" do
+    before do
+      stub_container_registry_tags('latest')
+      stub_container_registry_config(enabled: true)
+    end
+
+    subject { namespace_project_container_registry_index_path(project.namespace, project) }
+
+    it { is_expected.to be_allowed_for :admin }
+    it { is_expected.to be_allowed_for owner }
+    it { is_expected.to be_allowed_for master }
+    it { is_expected.to be_allowed_for developer }
+    it { is_expected.to be_allowed_for reporter }
+    it { is_expected.to be_allowed_for guest }
+    it { is_expected.to be_allowed_for :user }
+    it { is_expected.to be_allowed_for :external }
+    it { is_expected.to be_allowed_for :visitor }
+  end
 end
diff --git a/spec/helpers/ci_status_helper_spec.rb b/spec/helpers/ci_status_helper_spec.rb
index 45199d0f09da61489db4f2d3ed95452faa654605..637b02d938877df3b8d3df37b5d5d3a107522afe 100644
--- a/spec/helpers/ci_status_helper_spec.rb
+++ b/spec/helpers/ci_status_helper_spec.rb
@@ -7,7 +7,13 @@ describe CiStatusHelper do
   let(:failed_commit) { double("Ci::Pipeline", status: 'failed') }
 
   describe 'ci_icon_for_status' do
-    it { expect(helper.ci_icon_for_status(success_commit.status)).to include('fa-check') }
-    it { expect(helper.ci_icon_for_status(failed_commit.status)).to include('fa-close') }
+    it 'renders to correct svg on success' do
+      expect(helper).to receive(:render).with('shared/icons/icon_status_success.svg', anything)
+      helper.ci_icon_for_status(success_commit.status)
+    end
+    it 'renders the correct svg on failure' do
+      expect(helper).to receive(:render).with('shared/icons/icon_status_failed.svg', anything)
+      helper.ci_icon_for_status(failed_commit.status)
+    end
   end
 end
diff --git a/spec/helpers/diff_helper_spec.rb b/spec/helpers/diff_helper_spec.rb
index 4b134a4841008a7c62dbd989bc566dd0c7cef2ad..c2fd2c8a5336e43eebda2225418195b2f6ae8ab2 100644
--- a/spec/helpers/diff_helper_spec.rb
+++ b/spec/helpers/diff_helper_spec.rb
@@ -30,12 +30,31 @@ describe DiffHelper do
       expect(helper.diff_view).to eq 'inline'
     end
   end
-
+  
   describe 'diff_options' do
-    it 'should return hard limit for a diff' do
+    it 'should return hard limit for a diff if force diff is true' do
       allow(controller).to receive(:params) { { force_show_diff: true } }
       expect(diff_options).to include(Commit.max_diff_options)
     end
+
+    it 'should return hard limit for a diff if expand_all_diffs is true' do
+      allow(controller).to receive(:params) { { expand_all_diffs: true } }
+      expect(diff_options).to include(Commit.max_diff_options)
+    end
+
+    it 'should return no collapse false' do
+      expect(diff_options).to include(no_collapse: false)
+    end
+
+    it 'should return no collapse true if expand_all_diffs' do
+      allow(controller).to receive(:params) { { expand_all_diffs: true } }
+      expect(diff_options).to include(no_collapse: true)
+    end
+
+    it 'should return no collapse true if action name diff_for_path' do
+      allow(controller).to receive(:action_name) { 'diff_for_path' }
+      expect(diff_options).to include(no_collapse: true)
+    end
   end
 
   describe 'unfold_bottom_class' do
diff --git a/spec/helpers/time_helper_spec.rb b/spec/helpers/time_helper_spec.rb
index 3f62527c5bbc1e756e69b89ba376d6e198530f04..413ead944b9ab422f0be56c0bb3d4636380d138d 100644
--- a/spec/helpers/time_helper_spec.rb
+++ b/spec/helpers/time_helper_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe TimeHelper do
-  describe "#duration_in_words" do
+  describe "#time_interval_in_words" do
     it "returns minutes and seconds" do
       intervals_in_words = {
         100 => "1 minute 40 seconds",
@@ -11,26 +11,23 @@ describe TimeHelper do
       }
 
       intervals_in_words.each do |interval, expectation|
-        expect(duration_in_words(Time.now + interval, Time.now)).to eq(expectation)
+        expect(time_interval_in_words(interval)).to eq(expectation)
       end
     end
-
-    it "calculates interval from now if there is no finished_at" do
-      expect(duration_in_words(nil, Time.now - 5)).to eq("5 seconds")
-    end
   end
 
-  describe "#time_interval_in_words" do
+  describe "#duration_in_numbers" do
     it "returns minutes and seconds" do
-      intervals_in_words = {
-        100 => "1 minute 40 seconds",
-        121 => "2 minutes 1 second",
-        3721 => "62 minutes 1 second",
-        0 => "0 seconds"
+      duration_in_numbers = {
+        [100, 0] => "01:40",
+        [121, 0] => "02:01",
+        [3721, 0] => "01:02:01",
+        [0, 0] => "00:00",
+        [nil, Time.now.to_i - 42] => "00:42"
       }
 
-      intervals_in_words.each do |interval, expectation|
-        expect(time_interval_in_words(interval)).to eq(expectation)
+      duration_in_numbers.each do |interval, expectation|
+        expect(duration_in_numbers(*interval)).to eq(expectation)
       end
     end
   end
diff --git a/spec/lib/banzai/filter/autolink_filter_spec.rb b/spec/lib/banzai/filter/autolink_filter_spec.rb
index 84c2ddf444e6f071944825c7f7be554b3383f6f7..dca7f9975701dd90ccc86d89baba7a3bbf569898 100644
--- a/spec/lib/banzai/filter/autolink_filter_spec.rb
+++ b/spec/lib/banzai/filter/autolink_filter_spec.rb
@@ -15,6 +15,16 @@ describe Banzai::Filter::AutolinkFilter, lib: true do
     expect(filter(act).to_html).to eq exp
   end
 
+  context 'when the input contains no links' do
+    it 'does not parse_html back the rinku returned value' do
+      act = HTML::Pipeline.parse('<p>This text contains no links to autolink</p>')
+
+      expect_any_instance_of(described_class).not_to receive(:parse_html)
+
+      filter(act).to_html
+    end
+  end
+
   context 'Rinku schemes' do
     it 'autolinks http' do
       doc = filter("See #{link}")
@@ -58,6 +68,16 @@ describe Banzai::Filter::AutolinkFilter, lib: true do
         expect(filter(act).to_html).to eq exp
       end
     end
+
+    context 'when the input contains link' do
+      it 'does parse_html back the rinku returned value' do
+        act = HTML::Pipeline.parse("<p>See #{link}</p>")
+
+        expect_any_instance_of(described_class).to receive(:parse_html).at_least(:once).and_call_original
+
+        filter(act).to_html
+      end
+    end
   end
 
   context 'other schemes' do
diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
index 9735af27aa1b98f4ad7a5e6ff243c8e2f3f6d1d5..5785b7e59fb4f1362dcc511d0d451abbb20aa911 100644
--- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
+++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
@@ -19,15 +19,14 @@ module Ci
         expect(config_processor.builds_for_stage_and_ref(type, "master").first).to eq({
           stage: "test",
           stage_idx: 1,
-          except: nil,
           name: :rspec,
-          only: nil,
           commands: "pwd\nrspec",
           tag_list: [],
           options: {},
           allow_failure: false,
           when: "on_success",
           environment: nil,
+          yaml_variables: []
         })
       end
 
@@ -432,11 +431,9 @@ module Ci
 
         expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1)
         expect(config_processor.builds_for_stage_and_ref("test", "master").first).to eq({
-          except: nil,
           stage: "test",
           stage_idx: 1,
           name: :rspec,
-          only: nil,
           commands: "pwd\nrspec",
           tag_list: [],
           options: {
@@ -446,6 +443,7 @@ module Ci
           allow_failure: false,
           when: "on_success",
           environment: nil,
+          yaml_variables: []
         })
       end
 
@@ -461,11 +459,9 @@ module Ci
 
         expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1)
         expect(config_processor.builds_for_stage_and_ref("test", "master").first).to eq({
-          except: nil,
           stage: "test",
           stage_idx: 1,
           name: :rspec,
-          only: nil,
           commands: "pwd\nrspec",
           tag_list: [],
           options: {
@@ -475,101 +471,126 @@ module Ci
           allow_failure: false,
           when: "on_success",
           environment: nil,
+          yaml_variables: []
         })
       end
     end
 
     describe 'Variables' do
-      context 'when global variables are defined' do
-        it 'returns global variables' do
-          variables = {
-            VAR1: 'value1',
-            VAR2: 'value2',
-          }
+      let(:config_processor) { GitlabCiYamlProcessor.new(YAML.dump(config), path) }
 
-          config = YAML.dump({
+      subject { config_processor.builds.first[:yaml_variables] }
+
+      context 'when global variables are defined' do
+        let(:variables) do
+          { VAR1: 'value1', VAR2: 'value2' }
+        end
+        let(:config) do
+          {
             variables: variables,
             before_script: ['pwd'],
             rspec: { script: 'rspec' }
-          })
+          }
+        end
 
-          config_processor = GitlabCiYamlProcessor.new(config, path)
+        it 'returns global variables' do
+          expect(subject).to contain_exactly(
+            { key: :VAR1, value: 'value1', public: true },
+            { key: :VAR2, value: 'value2', public: true }
+          )
+        end
+      end
+
+      context 'when job and global variables are defined' do
+        let(:global_variables) do
+          { VAR1: 'global1', VAR3: 'global3' }
+        end
+        let(:job_variables) do
+          { VAR1: 'value1', VAR2: 'value2' }
+        end
+        let(:config) do
+          {
+            before_script: ['pwd'],
+            variables: global_variables,
+            rspec: { script: 'rspec', variables: job_variables }
+          }
+        end
 
-          expect(config_processor.global_variables).to eq(variables)
+        it 'returns all unique variables' do
+          expect(subject).to contain_exactly(
+            { key: :VAR3, value: 'global3', public: true },
+            { key: :VAR1, value: 'value1', public: true },
+            { key: :VAR2, value: 'value2', public: true }
+          )
         end
       end
 
       context 'when job variables are defined' do
-        context 'when syntax is correct' do
-          it 'returns job variables' do
-            variables = {
-              KEY1: 'value1',
-              SOME_KEY_2: 'value2'
-            }
+        let(:config) do
+          {
+            before_script: ['pwd'],
+            rspec: { script: 'rspec', variables: variables }
+          }
+        end
+
+        context 'when also global variables are defined' do
 
-            config = YAML.dump(
-              { before_script: ['pwd'],
-                rspec: {
-                  variables: variables,
-                  script: 'rspec' }
-              })
+        end
 
-            config_processor = GitlabCiYamlProcessor.new(config, path)
+        context 'when syntax is correct' do
+          let(:variables) do
+            { VAR1: 'value1', VAR2: 'value2' }
+          end
 
-            expect(config_processor.job_variables(:rspec)).to eq variables
+          it 'returns job variables' do
+            expect(subject).to contain_exactly(
+              { key: :VAR1, value: 'value1', public: true },
+              { key: :VAR2, value: 'value2', public: true }
+            )
           end
         end
 
         context 'when syntax is incorrect' do
           context 'when variables defined but invalid' do
-            it 'raises error' do
-              variables = [:KEY1, 'value1', :KEY2, 'value2']
-
-              config =  YAML.dump(
-                { before_script: ['pwd'],
-                  rspec: {
-                    variables: variables,
-                    script: 'rspec' }
-                })
+            let(:variables) do
+              [ :VAR1, 'value1', :VAR2, 'value2' ]
+            end
 
-              expect { GitlabCiYamlProcessor.new(config, path) }
+            it 'raises error' do
+              expect { subject }
                 .to raise_error(GitlabCiYamlProcessor::ValidationError,
                                  /jobs:rspec:variables config should be a hash of key value pairs/)
             end
           end
 
           context 'when variables key defined but value not specified' do
-            it 'returns empty array' do
-              config =  YAML.dump(
-                { before_script: ['pwd'],
-                  rspec: {
-                    variables: nil,
-                    script: 'rspec' }
-                })
-
-              config_processor = GitlabCiYamlProcessor.new(config, path)
+            let(:variables) do
+              nil
+            end
 
+            it 'returns empty array' do
               ##
               # When variables config is empty, we assume this is a valid
               # configuration, see issue #18775
               #
-              expect(config_processor.job_variables(:rspec))
-                .to be_an_instance_of(Array).and be_empty
+              expect(subject).to be_an_instance_of(Array)
+              expect(subject).to be_empty
             end
           end
         end
       end
 
       context 'when job variables are not defined' do
-        it 'returns empty array' do
-          config = YAML.dump({
+        let(:config) do
+          {
             before_script: ['pwd'],
             rspec: { script: 'rspec' }
-          })
-
-          config_processor = GitlabCiYamlProcessor.new(config, path)
+          }
+        end
 
-          expect(config_processor.job_variables(:rspec)).to eq []
+        it 'returns empty array' do
+          expect(subject).to be_an_instance_of(Array)
+          expect(subject).to be_empty
         end
       end
     end
@@ -681,11 +702,9 @@ module Ci
 
         expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1)
         expect(config_processor.builds_for_stage_and_ref("test", "master").first).to eq({
-          except: nil,
           stage: "test",
           stage_idx: 1,
           name: :rspec,
-          only: nil,
           commands: "pwd\nrspec",
           tag_list: [],
           options: {
@@ -701,6 +720,7 @@ module Ci
           when: "on_success",
           allow_failure: false,
           environment: nil,
+          yaml_variables: []
         })
       end
 
@@ -819,17 +839,16 @@ module Ci
         it "doesn't create jobs that start with dot" do
           expect(subject.size).to eq(1)
           expect(subject.first).to eq({
-            except: nil,
             stage: "test",
             stage_idx: 1,
             name: :normal_job,
-            only: nil,
             commands: "test",
             tag_list: [],
             options: {},
             when: "on_success",
             allow_failure: false,
             environment: nil,
+            yaml_variables: []
           })
         end
       end
@@ -865,30 +884,28 @@ module Ci
         it "is correctly supported for jobs" do
           expect(subject.size).to eq(2)
           expect(subject.first).to eq({
-            except: nil,
             stage: "build",
             stage_idx: 0,
             name: :job1,
-            only: nil,
             commands: "execute-script-for-job",
             tag_list: [],
             options: {},
             when: "on_success",
             allow_failure: false,
             environment: nil,
+            yaml_variables: []
           })
           expect(subject.second).to eq({
-            except: nil,
             stage: "build",
             stage_idx: 0,
             name: :job2,
-            only: nil,
             commands: "execute-script-for-job",
             tag_list: [],
             options: {},
             when: "on_success",
             allow_failure: false,
             environment: nil,
+            yaml_variables: []
           })
         end
       end
@@ -1131,7 +1148,7 @@ EOT
         config = YAML.dump({ rspec: { script: "test", when: 1 } })
         expect do
           GitlabCiYamlProcessor.new(config, path)
-        end.to raise_error(GitlabCiYamlProcessor::ValidationError, "jobs:rspec when should be on_success, on_failure or always")
+        end.to raise_error(GitlabCiYamlProcessor::ValidationError, "jobs:rspec when should be on_success, on_failure, always or manual")
       end
 
       it "returns errors if job artifacts:name is not an a string" do
diff --git a/spec/lib/container_registry/blob_spec.rb b/spec/lib/container_registry/blob_spec.rb
index 4d8cb787ddeef5924d15064bfbe89933f0440793..bbacdc67ebd30d8dd7eb2c39da9cebf4762147b0 100644
--- a/spec/lib/container_registry/blob_spec.rb
+++ b/spec/lib/container_registry/blob_spec.rb
@@ -9,8 +9,9 @@ describe ContainerRegistry::Blob do
       'size' => 1000
     }
   end
+  let(:token) { 'authorization-token' }
   
-  let(:registry) { ContainerRegistry::Registry.new('http://example.com') }
+  let(:registry) { ContainerRegistry::Registry.new('http://example.com', token: token) }
   let(:repository) { registry.repository('group/test') }
   let(:blob) { repository.blob(config) }
 
@@ -58,4 +59,53 @@ describe ContainerRegistry::Blob do
 
     it { is_expected.to be_truthy }
   end
+
+  context '#data' do
+    let(:data) { '{"key":"value"}' }
+
+    subject { blob.data }
+
+    context 'when locally stored' do
+      before do
+        stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:0123456789012345').
+          to_return(
+            status: 200,
+            headers: { 'Content-Type' => 'application/json' },
+            body: data)
+      end
+
+      it { is_expected.to eq(data) }
+    end
+
+    context 'when externally stored' do
+      before do
+        stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:0123456789012345').
+          with(headers: { 'Authorization' => "bearer #{token}" }).
+          to_return(
+            status: 307,
+            headers: { 'Location' => location })
+      end
+
+      context 'for a valid address' do
+        let(:location) { 'http://external.com/blob/file' }
+
+        before do
+          stub_request(:get, location).
+            with(headers: { 'Authorization' => nil }).
+            to_return(
+              status: 200,
+              headers: { 'Content-Type' => 'application/json' },
+              body: data)
+        end
+
+        it { is_expected.to eq(data) }
+      end
+
+      context 'for invalid file' do
+        let(:location) { 'file:///etc/passwd' }
+
+        it { expect{ subject }.to raise_error(ArgumentError, 'invalid address') }
+      end
+    end
+  end
 end
diff --git a/spec/lib/container_registry/tag_spec.rb b/spec/lib/container_registry/tag_spec.rb
index c7324c2bf7726554615a5f800880c966192479c1..c5e31ae82b6a2cf1d709bafef3bc39bb8385b6b0 100644
--- a/spec/lib/container_registry/tag_spec.rb
+++ b/spec/lib/container_registry/tag_spec.rb
@@ -77,24 +77,47 @@ describe ContainerRegistry::Tag do
       end
 
       context 'config processing' do
-        before do
-          stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:d7a513a663c1a6dcdba9ed832ca53c02ac2af0c333322cd6ca92936d1d9917ac').
-            with(headers: { 'Accept' => 'application/octet-stream' }).
-            to_return(
-              status: 200,
-              body: File.read(Rails.root + 'spec/fixtures/container_registry/config_blob.json'))
-        end
+        shared_examples 'a processable' do
+          context '#config' do
+            subject { tag.config }
 
-        context '#config' do
-          subject { tag.config }
+            it { is_expected.not_to be_nil }
+          end
+
+          context '#created_at' do
+            subject { tag.created_at }
 
-          it { is_expected.not_to be_nil }
+            it { is_expected.not_to be_nil }
+          end
         end
 
-        context '#created_at' do
-          subject { tag.created_at }
+        context 'when locally stored' do
+          before do
+            stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:d7a513a663c1a6dcdba9ed832ca53c02ac2af0c333322cd6ca92936d1d9917ac').
+              with(headers: { 'Accept' => 'application/octet-stream' }).
+              to_return(
+                status: 200,
+                body: File.read(Rails.root + 'spec/fixtures/container_registry/config_blob.json'))
+          end
+
+          it_behaves_like 'a processable'
+        end
 
-          it { is_expected.not_to be_nil }
+        context 'when externally stored' do
+          before do
+            stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:d7a513a663c1a6dcdba9ed832ca53c02ac2af0c333322cd6ca92936d1d9917ac').
+              with(headers: { 'Accept' => 'application/octet-stream' }).
+              to_return(
+                status: 307,
+                headers: { 'Location' => 'http://external.com/blob/file' })
+
+            stub_request(:get, 'http://external.com/blob/file').
+              to_return(
+                status: 200,
+                body: File.read(Rails.root + 'spec/fixtures/container_registry/config_blob.json'))
+          end
+
+          it_behaves_like 'a processable'
         end
       end
     end
diff --git a/spec/lib/gitlab/badge/build_spec.rb b/spec/lib/gitlab/badge/build_spec.rb
index 2034445a197320280ae1c625988b25c6188e104b..f3b522a02f52d173e5fa06f0a8e09775c5dca69c 100644
--- a/spec/lib/gitlab/badge/build_spec.rb
+++ b/spec/lib/gitlab/badge/build_spec.rb
@@ -113,7 +113,7 @@ describe Gitlab::Badge::Build do
                                     sha: sha,
                                     ref: branch)
 
-    create(:ci_build, pipeline: pipeline)
+    create(:ci_build, pipeline: pipeline, stage: 'notify')
   end
 
   def status_node(data, status)
diff --git a/spec/lib/gitlab/bitbucket_import/client_spec.rb b/spec/lib/gitlab/bitbucket_import/client_spec.rb
index 760d66a148883cfe786dc3b8732078da9ee6d410..7543c29bcc449f5f94551b4cfc90f497415cfa5d 100644
--- a/spec/lib/gitlab/bitbucket_import/client_spec.rb
+++ b/spec/lib/gitlab/bitbucket_import/client_spec.rb
@@ -54,12 +54,12 @@ describe Gitlab::BitbucketImport::Client, lib: true do
   context 'project import' do
     it 'calls .from_project with no errors' do
       project = create(:empty_project)
+      project.import_url = "ssh://git@bitbucket.org/test/test.git"
       project.create_or_update_import_data(credentials:
                                              { user: "git",
                                                password: nil,
                                                bb_session: { bitbucket_access_token: "test",
                                                              bitbucket_access_token_secret: "test" } })
-      project.import_url = "ssh://git@bitbucket.org/test/test.git"
 
       expect { described_class.from_project(project) }.not_to raise_error
     end
diff --git a/spec/lib/gitlab/diff/file_spec.rb b/spec/lib/gitlab/diff/file_spec.rb
index 0460dcf4658afd8fa0be42def6d40591de575eaa..e883a6eb9c2e120f0ecbefc7a0bedd75c6090580 100644
--- a/spec/lib/gitlab/diff/file_spec.rb
+++ b/spec/lib/gitlab/diff/file_spec.rb
@@ -32,4 +32,18 @@ describe Gitlab::Diff::File, lib: true do
       expect(diff_file.too_large?).to eq(false)
     end
   end
+
+  describe '#collapsed?' do
+    it 'returns true for a file that is quite big' do
+      expect(diff).to receive(:collapsed?).and_return(true)
+
+      expect(diff_file.collapsed?).to eq(true)
+    end
+
+    it 'returns false for a file that is small enough' do
+      expect(diff).to receive(:collapsed?).and_return(false)
+
+      expect(diff_file.collapsed?).to eq(false)
+    end
+  end
 end
diff --git a/spec/lib/gitlab/diff/position_tracer_spec.rb b/spec/lib/gitlab/diff/position_tracer_spec.rb
index 08312e60f4a7f40b45df10e55a951b279bf919d5..c268f84c75900ddea0c604fb40503cf8685ea981 100644
--- a/spec/lib/gitlab/diff/position_tracer_spec.rb
+++ b/spec/lib/gitlab/diff/position_tracer_spec.rb
@@ -1639,7 +1639,8 @@ describe Gitlab::Diff::PositionTracer, lib: true do
           committer: committer
         }
 
-        repository.merge(current_user, second_create_file_commit.sha, branch_name, options)
+        merge_request = create(:merge_request, source_branch: second_create_file_commit.sha, target_branch: branch_name, source_project: project)
+        repository.merge(current_user, merge_request, options)
         project.commit(branch_name)
       end
 
diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb
index c79ba11f782dbe0e946e483a41db568908f47be3..ae064a878b03c687338c2be5795beda7826a72e8 100644
--- a/spec/lib/gitlab/git_access_spec.rb
+++ b/spec/lib/gitlab/git_access_spec.rb
@@ -6,67 +6,6 @@ describe Gitlab::GitAccess, lib: true do
   let(:user) { create(:user) }
   let(:actor) { user }
 
-  describe 'can_push_to_branch?' do
-    describe 'push to none protected branch' do
-      it "returns true if user is a master" do
-        project.team << [user, :master]
-        expect(access.can_push_to_branch?("random_branch")).to be_truthy
-      end
-
-      it "returns true if user is a developer" do
-        project.team << [user, :developer]
-        expect(access.can_push_to_branch?("random_branch")).to be_truthy
-      end
-
-      it "returns false if user is a reporter" do
-        project.team << [user, :reporter]
-        expect(access.can_push_to_branch?("random_branch")).to be_falsey
-      end
-    end
-
-    describe 'push to protected branch' do
-      before do
-        @branch = create :protected_branch, project: project
-      end
-      
-      it "returns true if user is a master" do
-        project.team << [user, :master]
-        expect(access.can_push_to_branch?(@branch.name)).to be_truthy
-      end
-
-      it "returns false if user is a developer" do
-        project.team << [user, :developer]
-        expect(access.can_push_to_branch?(@branch.name)).to be_falsey
-      end
-
-      it "returns false if user is a reporter" do
-        project.team << [user, :reporter]
-        expect(access.can_push_to_branch?(@branch.name)).to be_falsey
-      end
-    end
-
-    describe 'push to protected branch if allowed for developers' do
-      before do
-        @branch = create :protected_branch, project: project, developers_can_push: true
-      end
-      
-      it "returns true if user is a master" do
-        project.team << [user, :master]
-        expect(access.can_push_to_branch?(@branch.name)).to be_truthy
-      end
-
-      it "returns true if user is a developer" do
-        project.team << [user, :developer]
-        expect(access.can_push_to_branch?(@branch.name)).to be_truthy
-      end
-
-      it "returns false if user is a reporter" do
-        project.team << [user, :reporter]
-        expect(access.can_push_to_branch?(@branch.name)).to be_falsey
-      end
-    end
-  end
-
   describe '#check with single protocols allowed' do
     def disable_protocol(protocol)
       settings = ::ApplicationSetting.create_from_defaults
@@ -105,12 +44,12 @@ describe Gitlab::GitAccess, lib: true do
   end
 
   describe 'download_access_check' do
+    subject { access.check('git-upload-pack') }
+
     describe 'master permissions' do
       before { project.team << [user, :master] }
 
       context 'pull code' do
-        subject { access.download_access_check }
-
         it { expect(subject.allowed?).to be_truthy }
       end
     end
@@ -119,8 +58,6 @@ describe Gitlab::GitAccess, lib: true do
       before { project.team << [user, :guest] }
 
       context 'pull code' do
-        subject { access.download_access_check }
-
         it { expect(subject.allowed?).to be_falsey }
       end
     end
@@ -132,16 +69,12 @@ describe Gitlab::GitAccess, lib: true do
       end
 
       context 'pull code' do
-        subject { access.download_access_check }
-
         it { expect(subject.allowed?).to be_falsey }
       end
     end
 
     describe 'without acccess to project' do
       context 'pull code' do
-        subject { access.download_access_check }
-
         it { expect(subject.allowed?).to be_falsey }
       end
     end
@@ -151,110 +84,208 @@ describe Gitlab::GitAccess, lib: true do
       let(:actor) { key }
 
       context 'pull code' do
-        before { key.projects << project }
-        subject { access.download_access_check }
+        context 'when project is authorized' do
+          before { key.projects << project }
 
-        it { expect(subject.allowed?).to be_truthy }
+          it { expect(subject).to be_allowed }
+        end
+
+        context 'when unauthorized' do
+          context 'from public project' do
+            let(:project) { create(:project, :public) }
+
+            it { expect(subject).to be_allowed }
+          end
+
+          context 'from internal project' do
+            let(:project) { create(:project, :internal) }
+
+            it { expect(subject).not_to be_allowed }
+          end
+
+          context 'from private project' do
+            let(:project) { create(:project, :internal) }
+
+            it { expect(subject).not_to be_allowed }
+          end
+        end
       end
     end
   end
 
   describe 'push_access_check' do
-    def protect_feature_branch
-      create(:protected_branch, name: 'feature', project: project)
-    end
+    before { merge_into_protected_branch }
+    let(:unprotected_branch) { FFaker::Internet.user_name }
 
-    def changes
-      {
-        push_new_branch: "#{Gitlab::Git::BLANK_SHA} 570e7b2ab refs/heads/wow",
+    let(:changes) do
+      { push_new_branch: "#{Gitlab::Git::BLANK_SHA} 570e7b2ab refs/heads/wow",
         push_master: '6f6d7e7ed 570e7b2ab refs/heads/master',
         push_protected_branch: '6f6d7e7ed 570e7b2ab refs/heads/feature',
         push_remove_protected_branch: "570e7b2ab #{Gitlab::Git::BLANK_SHA} "\
                                       'refs/heads/feature',
         push_tag: '6f6d7e7ed 570e7b2ab refs/tags/v1.0.0',
         push_new_tag: "#{Gitlab::Git::BLANK_SHA} 570e7b2ab refs/tags/v7.8.9",
-        push_all: ['6f6d7e7ed 570e7b2ab refs/heads/master', '6f6d7e7ed 570e7b2ab refs/heads/feature']
-      }
+        push_all: ['6f6d7e7ed 570e7b2ab refs/heads/master', '6f6d7e7ed 570e7b2ab refs/heads/feature'],
+        merge_into_protected_branch: "0b4bc9a #{merge_into_protected_branch} refs/heads/feature" }
     end
 
-    def self.permissions_matrix
-      {
-        master: {
-          push_new_branch: true,
-          push_master: true,
-          push_protected_branch: true,
-          push_remove_protected_branch: false,
-          push_tag: true,
-          push_new_tag: true,
-          push_all: true,
-        },
-
-        developer: {
-          push_new_branch: true,
-          push_master: true,
-          push_protected_branch: false,
-          push_remove_protected_branch: false,
-          push_tag: false,
-          push_new_tag: true,
-          push_all: false,
-        },
-
-        reporter: {
-          push_new_branch: false,
-          push_master: false,
-          push_protected_branch: false,
-          push_remove_protected_branch: false,
-          push_tag: false,
-          push_new_tag: false,
-          push_all: false,
-        },
-
-        guest: {
-          push_new_branch: false,
-          push_master: false,
-          push_protected_branch: false,
-          push_remove_protected_branch: false,
-          push_tag: false,
-          push_new_tag: false,
-          push_all: false,
-        }
-      }
+    def stub_git_hooks
+      # Running the `pre-receive` hook is expensive, and not necessary for this test.
+      allow_any_instance_of(GitHooksService).to receive(:execute).and_yield
     end
 
-    def self.updated_permissions_matrix
-      updated_permissions_matrix = permissions_matrix.dup
-      updated_permissions_matrix[:developer][:push_protected_branch] = true
-      updated_permissions_matrix[:developer][:push_all] = true
-      updated_permissions_matrix
+    def merge_into_protected_branch
+      @protected_branch_merge_commit ||= begin
+        stub_git_hooks
+        project.repository.add_branch(user, unprotected_branch, 'feature')
+        target_branch = project.repository.lookup('feature')
+        source_branch = project.repository.commit_file(user, FFaker::InternetSE.login_user_name, FFaker::HipsterIpsum.paragraph, FFaker::HipsterIpsum.sentence, unprotected_branch, false)
+        rugged = project.repository.rugged
+        author = { email: "email@example.com", time: Time.now, name: "Example Git User" }
+
+        merge_index = rugged.merge_commits(target_branch, source_branch)
+        Rugged::Commit.create(rugged, author: author, committer: author, message: "commit message", parents: [target_branch, source_branch], tree: merge_index.write_tree(rugged))
+      end
     end
 
-    permissions_matrix.keys.each do |role|
-      describe "#{role} access" do
-        before { protect_feature_branch }
-        before { project.team << [user, role] }
+    def self.run_permission_checks(permissions_matrix)
+      permissions_matrix.keys.each do |role|
+        describe "#{role} access" do
+          before { project.team << [user, role] }
 
-        permissions_matrix[role].each do |action, allowed|
-          context action do
-            subject { access.push_access_check(changes[action]) }
+          permissions_matrix[role].each do |action, allowed|
+            context action do
+              subject { access.push_access_check(changes[action]) }
 
-            it { expect(subject.allowed?).to allowed ? be_truthy : be_falsey }
+              it { expect(subject.allowed?).to allowed ? be_truthy : be_falsey }
+            end
           end
         end
       end
     end
 
-    context "with enabled developers push to protected branches " do
-      updated_permissions_matrix.keys.each do |role|
-        describe "#{role} access" do
-          before { create(:protected_branch, name: 'feature', developers_can_push: true, project: project) }
-          before { project.team << [user, role] }
+    permissions_matrix = {
+      master: {
+        push_new_branch: true,
+        push_master: true,
+        push_protected_branch: true,
+        push_remove_protected_branch: false,
+        push_tag: true,
+        push_new_tag: true,
+        push_all: true,
+        merge_into_protected_branch: true
+      },
+
+      developer: {
+        push_new_branch: true,
+        push_master: true,
+        push_protected_branch: false,
+        push_remove_protected_branch: false,
+        push_tag: false,
+        push_new_tag: true,
+        push_all: false,
+        merge_into_protected_branch: false
+      },
+
+      reporter: {
+        push_new_branch: false,
+        push_master: false,
+        push_protected_branch: false,
+        push_remove_protected_branch: false,
+        push_tag: false,
+        push_new_tag: false,
+        push_all: false,
+        merge_into_protected_branch: false
+      },
+
+      guest: {
+        push_new_branch: false,
+        push_master: false,
+        push_protected_branch: false,
+        push_remove_protected_branch: false,
+        push_tag: false,
+        push_new_tag: false,
+        push_all: false,
+        merge_into_protected_branch: false
+      }
+    }
 
-          updated_permissions_matrix[role].each do |action, allowed|
-            context action do
-              subject { access.push_access_check(changes[action]) }
+    [['feature', 'exact'], ['feat*', 'wildcard']].each do |protected_branch_name, protected_branch_type|
+      context do
+        before { create(:protected_branch, name: protected_branch_name, project: project) }
 
-              it { expect(subject.allowed?).to allowed ? be_truthy : be_falsey }
+        run_permission_checks(permissions_matrix)
+      end
+
+      context "when 'developers can push' is turned on for the #{protected_branch_type} protected branch" do
+        before { create(:protected_branch, name: protected_branch_name, developers_can_push: true, project: project) }
+
+        run_permission_checks(permissions_matrix.deep_merge(developer: { push_protected_branch: true, push_all: true, merge_into_protected_branch: true }))
+      end
+
+      context "when 'developers can merge' is turned on for the #{protected_branch_type} protected branch" do
+        before { create(:protected_branch, name: protected_branch_name, developers_can_merge: true, project: project) }
+
+        context "when a merge request exists for the given source/target branch" do
+          context "when the merge request is in progress" do
+            before do
+              create(:merge_request, source_project: project, source_branch: unprotected_branch, target_branch: 'feature', state: 'locked', in_progress_merge_commit_sha: merge_into_protected_branch)
             end
+
+            run_permission_checks(permissions_matrix.deep_merge(developer: { merge_into_protected_branch: true }))
+          end
+
+          context "when the merge request is not in progress" do
+            before do
+              create(:merge_request, source_project: project, source_branch: unprotected_branch, target_branch: 'feature', in_progress_merge_commit_sha: nil)
+            end
+
+            run_permission_checks(permissions_matrix.deep_merge(developer: { merge_into_protected_branch: false }))
+          end
+        end
+
+        context "when a merge request does not exist for the given source/target branch" do
+          run_permission_checks(permissions_matrix.deep_merge(developer: { merge_into_protected_branch: false }))
+        end
+      end
+
+      context "when 'developers can merge' and 'developers can push' are turned on for the #{protected_branch_type} protected branch" do
+        before { create(:protected_branch, name: protected_branch_name, developers_can_merge: true, developers_can_push: true, project: project) }
+
+        run_permission_checks(permissions_matrix.deep_merge(developer: { push_protected_branch: true, push_all: true, merge_into_protected_branch: true }))
+      end
+    end
+
+    describe 'deploy key permissions' do
+      let(:key) { create(:deploy_key) }
+      let(:actor) { key }
+
+      context 'push code' do
+        subject { access.check('git-receive-pack') }
+
+        context 'when project is authorized' do
+          before { key.projects << project }
+
+          it { expect(subject).not_to be_allowed }
+        end
+
+        context 'when unauthorized' do
+          context 'to public project' do
+            let(:project) { create(:project, :public) }
+
+            it { expect(subject).not_to be_allowed }
+          end
+
+          context 'to internal project' do
+            let(:project) { create(:project, :internal) }
+
+            it { expect(subject).not_to be_allowed }
+          end
+
+          context 'to private project' do
+            let(:project) { create(:project, :internal) }
+
+            it { expect(subject).not_to be_allowed }
           end
         end
       end
diff --git a/spec/lib/gitlab/import_export/avatar_restorer_spec.rb b/spec/lib/gitlab/import_export/avatar_restorer_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5ae178414cc240f529a55e96e557b4c64956f61d
--- /dev/null
+++ b/spec/lib/gitlab/import_export/avatar_restorer_spec.rb
@@ -0,0 +1,25 @@
+require 'spec_helper'
+
+describe Gitlab::ImportExport::AvatarRestorer, lib: true do
+  let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: 'test') }
+  let(:project) { create(:empty_project) }
+
+  before do
+    allow_any_instance_of(described_class).to receive(:avatar_export_file)
+                                                .and_return(Rails.root + "spec/fixtures/dk.png")
+  end
+
+  after do
+    project.remove_avatar!
+  end
+
+  it 'restores a project avatar' do
+    expect(described_class.new(project: project, shared: shared).restore).to be true
+  end
+
+  it 'saves the avatar into the project' do
+    described_class.new(project: project, shared: shared).restore
+
+    expect(project.reload.avatar.file.exists?).to be true
+  end
+end
diff --git a/spec/lib/gitlab/import_export/avatar_saver_spec.rb b/spec/lib/gitlab/import_export/avatar_saver_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d6ee94442cbc7a6ef3a3fc5f6091fee15a886ddd
--- /dev/null
+++ b/spec/lib/gitlab/import_export/avatar_saver_spec.rb
@@ -0,0 +1,27 @@
+require 'spec_helper'
+
+describe Gitlab::ImportExport::AvatarSaver, lib: true do
+  let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: 'test') }
+  let(:export_path) { "#{Dir::tmpdir}/project_tree_saver_spec" }
+  let(:project_with_avatar) { create(:empty_project, avatar: fixture_file_upload(Rails.root + "spec/fixtures/dk.png", "image/png")) }
+  let(:project) { create(:empty_project) }
+
+  before do
+    FileUtils.mkdir_p("#{shared.export_path}/avatar/")
+    allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path)
+  end
+
+  after do
+    FileUtils.rm_rf("#{shared.export_path}/avatar")
+  end
+
+  it 'saves a project avatar' do
+    described_class.new(project: project_with_avatar, shared: shared).save
+
+    expect(File).to exist("#{shared.export_path}/avatar/dk.png")
+  end
+
+  it 'is fine not to have an avatar' do
+    expect(described_class.new(project: project, shared: shared).save).to be true
+  end
+end
diff --git a/spec/lib/gitlab/import_export/project.json b/spec/lib/gitlab/import_export/project.json
index 4113d829c3c60f04a244cb47f29b1439a14585dd..b1a5d72c6241433d674c52d995a5cbdf59079b02 100644
--- a/spec/lib/gitlab/import_export/project.json
+++ b/spec/lib/gitlab/import_export/project.json
@@ -2765,7 +2765,7 @@
             "committer_email": "dmitriy.zaporozhets@gmail.com"
           }
         ],
-        "st_diffs": [
+        "utf8_st_diffs": [
           {
             "diff": "Binary files a/.DS_Store and /dev/null differ\n",
             "new_path": ".DS_Store",
@@ -3138,7 +3138,7 @@
             "committer_email": "dmitriy.zaporozhets@gmail.com"
           }
         ],
-        "st_diffs": [
+        "utf8_st_diffs": [
           {
             "diff": "--- /dev/null\n+++ b/files/ruby/feature.rb\n@@ -0,0 +1,5 @@\n+class Feature\n+  def foo\n+    puts 'bar'\n+  end\n+end\n",
             "new_path": "files/ruby/feature.rb",
@@ -3423,7 +3423,7 @@
             "committer_email": "james@jameslopez.es"
           }
         ],
-        "st_diffs": [
+        "utf8_st_diffs": [
           {
             "diff": "--- /dev/null\n+++ b/test\n",
             "new_path": "test",
@@ -3960,7 +3960,7 @@
             "committer_email": "dmitriy.zaporozhets@gmail.com"
           }
         ],
-        "st_diffs": [
+        "utf8_st_diffs": [
           {
             "diff": "Binary files a/.DS_Store and /dev/null differ\n",
             "new_path": ".DS_Store",
@@ -4597,7 +4597,7 @@
             "committer_email": "marmis85@gmail.com"
           }
         ],
-        "st_diffs": [
+        "utf8_st_diffs": [
           {
             "diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n   - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n   - Add edit file button to MergeRequest diff\n   - Public groups (Jason Hollingsworth)\n",
             "new_path": "CHANGELOG",
@@ -5108,7 +5108,7 @@
             "committer_email": "stanhu@packetzoom.com"
           }
         ],
-        "st_diffs": [
+        "utf8_st_diffs": [
           {
             "diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n   - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n   - Add edit file button to MergeRequest diff\n   - Public groups (Jason Hollingsworth)\n",
             "new_path": "CHANGELOG",
@@ -5434,7 +5434,7 @@
         "id": 11,
         "state": "empty",
         "st_commits": null,
-        "st_diffs": [
+        "utf8_st_diffs": [
 
         ],
         "merge_request_id": 11,
@@ -5961,7 +5961,7 @@
             "committer_email": "dmitriy.zaporozhets@gmail.com"
           }
         ],
-        "st_diffs": [
+        "utf8_st_diffs": [
           {
             "diff": "Binary files a/.DS_Store and /dev/null differ\n",
             "new_path": ".DS_Store",
@@ -6400,7 +6400,7 @@
             "committer_email": "james@jameslopez.es"
           }
         ],
-        "st_diffs": [
+        "utf8_st_diffs": [
           {
             "diff": "--- /dev/null\n+++ b/test\n",
             "new_path": "test",
diff --git a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
index 877be300262ae4289e1fbc6969ab2eb3d0a81e4e..6ae20c943b1610bc355ff62e6023aa6803e08f8e 100644
--- a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
+++ b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
@@ -2,6 +2,7 @@ require 'spec_helper'
 
 describe Gitlab::ImportExport::ProjectTreeRestorer, services: true do
   describe 'restore project tree' do
+
     let(:user) { create(:user) }
     let(:namespace) { create(:namespace, owner: user) }
     let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: "", project_path: 'path') }
@@ -53,6 +54,12 @@ describe Gitlab::ImportExport::ProjectTreeRestorer, services: true do
           expect(event.note.noteable.project).not_to be_nil
         end
       end
+
+      it 'has the correct data for merge request st_diffs' do
+        # makes sure we are renaming the custom method +utf8_st_diffs+ into +st_diffs+
+
+        expect { restored_project_json }.to change(MergeRequestDiff.where.not(st_diffs: nil), :count).by(9)
+      end
     end
   end
 end
diff --git a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
index 1424de9e60be25b17d483da5100982db6e7e5fef..057ef6e76a06bca0bc9c622bb19e26e038c69c2a 100644
--- a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
+++ b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
@@ -102,12 +102,17 @@ describe Gitlab::ImportExport::ProjectTreeSaver, services: true do
       it 'has ci pipeline notes' do
         expect(saved_project_json['pipelines'].first['notes']).not_to be_empty
       end
+
+      it 'does not complain about non UTF-8 characters in MR diffs' do
+        ActiveRecord::Base.connection.execute("UPDATE merge_request_diffs SET st_diffs = '---\n- :diff: !binary |-\n    LS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvbnVjb3IucGRmCkBAIC0wLDAg\n    KzEsMTY3OSBAQAorJVBERi0xLjUNJeLjz9MNCisxIDAgb2JqDTw8L01ldGFk\n    YXR'")
+
+        expect(project_tree_saver.save).to be true
+      end
     end
   end
 
   def setup_project
     issue = create(:issue, assignee: user)
-    merge_request = create(:merge_request)
     label = create(:label)
     snippet = create(:project_snippet)
     release = create(:release)
@@ -115,12 +120,12 @@ describe Gitlab::ImportExport::ProjectTreeSaver, services: true do
     project = create(:project,
                      :public,
                      issues: [issue],
-                     merge_requests: [merge_request],
                      labels: [label],
                      snippets: [snippet],
                      releases: [release]
                     )
 
+    merge_request = create(:merge_request, source_project: project)
     commit_status = create(:commit_status, project: project)
 
     ci_pipeline = create(:ci_pipeline,
diff --git a/spec/lib/gitlab/lfs/lfs_router_spec.rb b/spec/lib/gitlab/lfs/lfs_router_spec.rb
deleted file mode 100644
index 659facd6c19e663dfa06f4b061c5c2b80cd227e2..0000000000000000000000000000000000000000
--- a/spec/lib/gitlab/lfs/lfs_router_spec.rb
+++ /dev/null
@@ -1,730 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Lfs::Router, lib: true do
-  let(:project) { create(:project) }
-  let(:public_project) { create(:project, :public) }
-  let(:forked_project) { fork_project(public_project, user) }
-
-  let(:user) { create(:user) }
-  let(:user_two) { create(:user) }
-  let!(:lfs_object) { create(:lfs_object, :with_file) }
-
-  let(:request) { Rack::Request.new(env) }
-  let(:env) do
-    {
-      'rack.input'     => '',
-      'REQUEST_METHOD' => 'GET',
-    }
-  end
-
-  let(:lfs_router_auth) { new_lfs_router(project, user: user) }
-  let(:lfs_router_ci_auth) { new_lfs_router(project, ci: true) }
-  let(:lfs_router_noauth) { new_lfs_router(project) }
-  let(:lfs_router_public_auth) { new_lfs_router(public_project, user: user) }
-  let(:lfs_router_public_ci_auth) { new_lfs_router(public_project, ci: true) }
-  let(:lfs_router_public_noauth) { new_lfs_router(public_project) }
-  let(:lfs_router_forked_noauth) { new_lfs_router(forked_project) }
-  let(:lfs_router_forked_auth) { new_lfs_router(forked_project, user: user_two) }
-  let(:lfs_router_forked_ci_auth) { new_lfs_router(forked_project, ci: true) }
-
-  let(:sample_oid) { "b68143e6463773b1b6c6fd009a76c32aeec041faff32ba2ed42fd7f708a17f80" }
-  let(:sample_size) { 499013 }
-  let(:respond_with_deprecated) {[ 501, { "Content-Type" => "application/json; charset=utf-8" }, ["{\"message\":\"Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.\",\"documentation_url\":\"#{Gitlab.config.gitlab.url}/help\"}"]]}
-  let(:respond_with_disabled) {[ 501, { "Content-Type" => "application/json; charset=utf-8" }, ["{\"message\":\"Git LFS is not enabled on this GitLab server, contact your admin.\",\"documentation_url\":\"#{Gitlab.config.gitlab.url}/help\"}"]]}
-
-  describe 'when lfs is disabled' do
-    before do
-      allow(Gitlab.config.lfs).to receive(:enabled).and_return(false)
-      env['REQUEST_METHOD'] = 'POST'
-      body = {
-                'objects' => [
-                  { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
-                    'size' => 1575078
-                  },
-                  { 'oid' => sample_oid,
-                    'size' => sample_size
-                  }
-                ],
-                'operation' => 'upload'
-              }.to_json
-      env['rack.input'] = StringIO.new(body)
-      env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/info/lfs/objects/batch"
-    end
-
-    it 'responds with 501' do
-      expect(lfs_router_auth.try_call).to match_array(respond_with_disabled)
-    end
-  end
-
-  describe 'when fetching lfs object using deprecated API' do
-    before do
-      enable_lfs
-      env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/info/lfs/objects/#{sample_oid}"
-    end
-
-    it 'responds with 501' do
-      expect(lfs_router_auth.try_call).to match_array(respond_with_deprecated)
-    end
-  end
-
-  describe 'when fetching lfs object' do
-    before do
-      enable_lfs
-      env['HTTP_ACCEPT'] = "application/vnd.git-lfs+json; charset=utf-8"
-      env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}"
-    end
-
-    describe 'and request comes from gitlab-workhorse' do
-      context 'without user being authorized' do
-        it "responds with status 401" do
-          expect(lfs_router_noauth.try_call.first).to eq(401)
-        end
-      end
-
-      context 'with required headers' do
-        before do
-          project.lfs_objects << lfs_object
-          env['HTTP_X_SENDFILE_TYPE'] = "X-Sendfile"
-        end
-
-        context 'when user does not have project access' do
-          it "responds with status 403" do
-            expect(lfs_router_auth.try_call.first).to eq(403)
-          end
-        end
-
-        context 'when user has project access' do
-          before do
-            project.team << [user, :master]
-          end
-
-          it "responds with status 200" do
-            expect(lfs_router_auth.try_call.first).to eq(200)
-          end
-
-          it "responds with the file location" do
-            expect(lfs_router_auth.try_call[1]['Content-Type']).to eq("application/octet-stream")
-            expect(lfs_router_auth.try_call[1]['X-Sendfile']).to eq(lfs_object.file.path)
-          end
-        end
-
-        context 'when CI is authorized' do
-          it "responds with status 200" do
-            expect(lfs_router_ci_auth.try_call.first).to eq(200)
-          end
-
-          it "responds with the file location" do
-            expect(lfs_router_ci_auth.try_call[1]['Content-Type']).to eq("application/octet-stream")
-            expect(lfs_router_ci_auth.try_call[1]['X-Sendfile']).to eq(lfs_object.file.path)
-          end
-        end
-      end
-
-      context 'without required headers' do
-        it "responds with status 403" do
-          expect(lfs_router_auth.try_call.first).to eq(403)
-        end
-      end
-    end
-  end
-
-  describe 'when handling lfs request using deprecated API' do
-    before do
-      enable_lfs
-      env['REQUEST_METHOD'] = 'POST'
-      env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/info/lfs/objects"
-    end
-
-    it 'responds with 501' do
-      expect(lfs_router_auth.try_call).to match_array(respond_with_deprecated)
-    end
-  end
-
-  describe 'when handling lfs batch request' do
-    before do
-      enable_lfs
-      env['REQUEST_METHOD'] = 'POST'
-      env['PATH_INFO'] = "#{project.repository.path_with_namespace}.git/info/lfs/objects/batch"
-    end
-
-    describe 'download' do
-      before do
-        body = { 'operation' => 'download',
-                 'objects' => [
-                   { 'oid' => sample_oid,
-                     'size' => sample_size
-                   }]
-        }.to_json
-        env['rack.input'] = StringIO.new(body)
-      end
-
-      shared_examples 'an authorized requests' do
-        context 'when downloading an lfs object that is assigned to our project' do
-          before do
-            project.lfs_objects << lfs_object
-          end
-
-          it 'responds with status 200 and href to download' do
-            response = router.try_call
-            expect(response.first).to eq(200)
-            response_body = ActiveSupport::JSON.decode(response.last.first)
-
-            expect(response_body).to eq('objects' => [
-              { 'oid' => sample_oid,
-                'size' => sample_size,
-                'actions' => {
-                  'download' => {
-                    'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
-                    'header' => { 'Authorization' => auth }
-                  }
-                }
-              }])
-          end
-        end
-
-        context 'when downloading an lfs object that is assigned to other project' do
-          before do
-            public_project.lfs_objects << lfs_object
-          end
-
-          it 'responds with status 200 and error message' do
-            response = router.try_call
-            expect(response.first).to eq(200)
-            response_body = ActiveSupport::JSON.decode(response.last.first)
-
-            expect(response_body).to eq('objects' => [
-              { 'oid' => sample_oid,
-                'size' => sample_size,
-                'error' => {
-                  'code' => 404,
-                  'message' => "Object does not exist on the server or you don't have permissions to access it",
-                }
-              }])
-          end
-        end
-
-        context 'when downloading a lfs object that does not exist' do
-          before do
-            body = { 'operation' => 'download',
-                     'objects' => [
-                       { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
-                         'size' => 1575078
-                       }]
-            }.to_json
-            env['rack.input'] = StringIO.new(body)
-          end
-
-          it "responds with status 200 and error message" do
-            response = router.try_call
-            expect(response.first).to eq(200)
-            response_body = ActiveSupport::JSON.decode(response.last.first)
-
-            expect(response_body).to eq('objects' => [
-              { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
-                'size' => 1575078,
-                'error' => {
-                  'code' => 404,
-                  'message' => "Object does not exist on the server or you don't have permissions to access it",
-                }
-              }])
-          end
-        end
-
-        context 'when downloading one new and one existing lfs object' do
-          before do
-            body = { 'operation' => 'download',
-                     'objects' => [
-                       { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
-                         'size' => 1575078
-                       },
-                       { 'oid' => sample_oid,
-                         'size' => sample_size
-                       }
-                     ]
-            }.to_json
-            env['rack.input'] = StringIO.new(body)
-            project.lfs_objects << lfs_object
-          end
-
-          it "responds with status 200 with upload hypermedia link for the new object" do
-            response = router.try_call
-            expect(response.first).to eq(200)
-            response_body = ActiveSupport::JSON.decode(response.last.first)
-
-            expect(response_body).to eq('objects' => [
-              { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
-                'size' => 1575078,
-                'error' => {
-                  'code' => 404,
-                  'message' => "Object does not exist on the server or you don't have permissions to access it",
-                }
-              },
-              { 'oid' => sample_oid,
-                'size' => sample_size,
-                'actions' => {
-                  'download' => {
-                    'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
-                    'header' => { 'Authorization' => auth }
-                  }
-                }
-              }])
-          end
-        end
-      end
-
-      context 'when user is authenticated' do
-        let(:auth) { authorize(user) }
-
-        before do
-          env["HTTP_AUTHORIZATION"] = auth
-          project.team << [user, role]
-        end
-
-        it_behaves_like 'an authorized requests' do
-          let(:role) { :reporter }
-          let(:router) { lfs_router_auth }
-        end
-
-        context 'when user does is not member of the project' do
-          let(:role) { :guest }
-
-          it 'responds with 403' do
-            expect(lfs_router_auth.try_call.first).to eq(403)
-          end
-        end
-
-        context 'when user does not have download access' do
-          let(:role) { :guest }
-
-          it 'responds with 403' do
-            expect(lfs_router_auth.try_call.first).to eq(403)
-          end
-        end
-      end
-
-      context 'when CI is authorized' do
-        let(:auth) { 'gitlab-ci-token:password' }
-
-        before do
-          env["HTTP_AUTHORIZATION"] = auth
-        end
-
-        it_behaves_like 'an authorized requests' do
-          let(:router) { lfs_router_ci_auth }
-        end
-      end
-
-      context 'when user is not authenticated' do
-        describe 'is accessing public project' do
-          before do
-            public_project.lfs_objects << lfs_object
-          end
-
-          it 'responds with status 200 and href to download' do
-            response = lfs_router_public_noauth.try_call
-            expect(response.first).to eq(200)
-            response_body = ActiveSupport::JSON.decode(response.last.first)
-
-            expect(response_body).to eq('objects' => [
-              { 'oid' => sample_oid,
-                'size' => sample_size,
-                'actions' => {
-                  'download' => {
-                    'href' => "#{public_project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
-                    'header' => {}
-                  }
-                }
-              }])
-          end
-        end
-
-        describe 'is accessing non-public project' do
-          before do
-            project.lfs_objects << lfs_object
-          end
-
-          it 'responds with authorization required' do
-            expect(lfs_router_noauth.try_call.first).to eq(401)
-          end
-        end
-      end
-    end
-
-    describe 'upload' do
-      before do
-        body = { 'operation' => 'upload',
-                 'objects' => [
-                   { 'oid' => sample_oid,
-                     'size' => sample_size
-                   }]
-        }.to_json
-        env['rack.input'] = StringIO.new(body)
-      end
-
-      describe 'when request is authenticated' do
-        describe 'when user has project push access' do
-          before do
-            @auth = authorize(user)
-            env["HTTP_AUTHORIZATION"] = @auth
-            project.team << [user, :developer]
-          end
-
-          context 'when pushing an lfs object that already exists' do
-            before do
-              public_project.lfs_objects << lfs_object
-            end
-
-            it "responds with status 200 and links the object to the project" do
-              response_body = lfs_router_auth.try_call.last
-              response = ActiveSupport::JSON.decode(response_body.first)
-
-              expect(response['objects']).to be_kind_of(Array)
-              expect(response['objects'].first['oid']).to eq(sample_oid)
-              expect(response['objects'].first['size']).to eq(sample_size)
-              expect(lfs_object.projects.pluck(:id)).not_to include(project.id)
-              expect(lfs_object.projects.pluck(:id)).to include(public_project.id)
-              expect(response['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}")
-              expect(response['objects'].first['actions']['upload']['header']).to eq('Authorization' => @auth)
-            end
-          end
-
-          context 'when pushing a lfs object that does not exist' do
-            before do
-              body = { 'operation' => 'upload',
-                       'objects' => [
-                         { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
-                           'size' => 1575078
-                         }]
-              }.to_json
-              env['rack.input'] = StringIO.new(body)
-            end
-
-            it "responds with status 200 and upload hypermedia link" do
-              response = lfs_router_auth.try_call
-              expect(response.first).to eq(200)
-
-              response_body = ActiveSupport::JSON.decode(response.last.first)
-              expect(response_body['objects']).to be_kind_of(Array)
-              expect(response_body['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
-              expect(response_body['objects'].first['size']).to eq(1575078)
-              expect(lfs_object.projects.pluck(:id)).not_to include(project.id)
-              expect(response_body['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
-              expect(response_body['objects'].first['actions']['upload']['header']).to eq('Authorization' => @auth)
-            end
-          end
-
-          context 'when pushing one new and one existing lfs object' do
-            before do
-              body = { 'operation' => 'upload',
-                       'objects' => [
-                         { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
-                           'size' => 1575078
-                         },
-                         { 'oid' => sample_oid,
-                           'size' => sample_size
-                         }
-                       ]
-              }.to_json
-              env['rack.input'] = StringIO.new(body)
-              project.lfs_objects << lfs_object
-            end
-
-            it "responds with status 200 with upload hypermedia link for the new object" do
-              response = lfs_router_auth.try_call
-              expect(response.first).to eq(200)
-
-              response_body = ActiveSupport::JSON.decode(response.last.first)
-              expect(response_body['objects']).to be_kind_of(Array)
-
-              expect(response_body['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
-              expect(response_body['objects'].first['size']).to eq(1575078)
-              expect(response_body['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
-              expect(response_body['objects'].first['actions']['upload']['header']).to eq("Authorization" => @auth)
-
-              expect(response_body['objects'].last['oid']).to eq(sample_oid)
-              expect(response_body['objects'].last['size']).to eq(sample_size)
-              expect(response_body['objects'].last).not_to have_key('actions')
-            end
-          end
-        end
-
-        context 'when user does not have push access' do
-          it 'responds with 403' do
-            expect(lfs_router_auth.try_call.first).to eq(403)
-          end
-        end
-
-        context 'when CI is authorized' do
-          it 'responds with 401' do
-            expect(lfs_router_ci_auth.try_call.first).to eq(401)
-          end
-        end
-      end
-
-      context 'when user is not authenticated' do
-        context 'when user has push access' do
-          before do
-            project.team << [user, :master]
-          end
-
-          it "responds with status 401" do
-            expect(lfs_router_public_noauth.try_call.first).to eq(401)
-          end
-        end
-
-        context 'when user does not have push access' do
-          it "responds with status 401" do
-            expect(lfs_router_public_noauth.try_call.first).to eq(401)
-          end
-        end
-      end
-
-      context 'when CI is authorized' do
-        let(:auth) { 'gitlab-ci-token:password' }
-
-        before do
-          env["HTTP_AUTHORIZATION"] = auth
-        end
-
-        it "responds with status 403" do
-          expect(lfs_router_public_ci_auth.try_call.first).to eq(401)
-        end
-      end
-    end
-
-    describe 'unsupported' do
-      before do
-        body = { 'operation' => 'other',
-                 'objects' => [
-                   { 'oid' => sample_oid,
-                     'size' => sample_size
-                   }]
-        }.to_json
-        env['rack.input'] = StringIO.new(body)
-      end
-
-      it 'responds with status 404' do
-        expect(lfs_router_public_noauth.try_call.first).to eq(404)
-      end
-    end
-  end
-
-  describe 'when pushing a lfs object' do
-    before do
-      enable_lfs
-      env['REQUEST_METHOD'] = 'PUT'
-    end
-
-    shared_examples 'unauthorized' do
-      context 'and request is sent by gitlab-workhorse to authorize the request' do
-        before do
-          header_for_upload_authorize(router.project)
-        end
-
-        it 'responds with status 401' do
-          expect(router.try_call.first).to eq(401)
-        end
-      end
-
-      context 'and request is sent by gitlab-workhorse to finalize the upload' do
-        before do
-          headers_for_upload_finalize(router.project)
-        end
-
-        it 'responds with status 401' do
-          expect(router.try_call.first).to eq(401)
-        end
-      end
-
-      context 'and request is sent with a malformed headers' do
-        before do
-          env["PATH_INFO"] = "#{router.project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}"
-          env["HTTP_X_GITLAB_LFS_TMP"] = "cat /etc/passwd"
-        end
-
-        it 'does not recognize it as a valid lfs command' do
-          expect(router.try_call).to eq(nil)
-        end
-      end
-    end
-
-    shared_examples 'forbidden' do
-      context 'and request is sent by gitlab-workhorse to authorize the request' do
-        before do
-          header_for_upload_authorize(router.project)
-        end
-
-        it 'responds with 403' do
-          expect(router.try_call.first).to eq(403)
-        end
-      end
-
-      context 'and request is sent by gitlab-workhorse to finalize the upload' do
-        before do
-          headers_for_upload_finalize(router.project)
-        end
-
-        it 'responds with 403' do
-          expect(router.try_call.first).to eq(403)
-        end
-      end
-    end
-
-    describe 'to one project' do
-      describe 'when user is authenticated' do
-        describe 'when user has push access to the project' do
-          before do
-            project.team << [user, :developer]
-          end
-
-          context 'and request is sent by gitlab-workhorse to authorize the request' do
-            before do
-              header_for_upload_authorize(project)
-            end
-
-            it 'responds with status 200, location of lfs store and object details' do
-              json_response = ActiveSupport::JSON.decode(lfs_router_auth.try_call.last.first)
-
-              expect(lfs_router_auth.try_call.first).to eq(200)
-              expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload")
-              expect(json_response['LfsOid']).to eq(sample_oid)
-              expect(json_response['LfsSize']).to eq(sample_size)
-            end
-          end
-
-          context 'and request is sent by gitlab-workhorse to finalize the upload' do
-            before do
-              headers_for_upload_finalize(project)
-            end
-
-            it 'responds with status 200 and lfs object is linked to the project' do
-              expect(lfs_router_auth.try_call.first).to eq(200)
-              expect(lfs_object.projects.pluck(:id)).to include(project.id)
-            end
-          end
-        end
-
-        describe 'and user does not have push access' do
-          let(:router) { lfs_router_auth }
-
-          it_behaves_like 'forbidden'
-        end
-      end
-
-      context 'when CI is authenticated' do
-        let(:router) { lfs_router_ci_auth }
-
-        it_behaves_like 'unauthorized'
-      end
-
-      context 'for unauthenticated' do
-        let(:router) { new_lfs_router(project) }
-
-        it_behaves_like 'unauthorized'
-      end
-    end
-
-    describe 'to a forked project' do
-      let(:forked_project) { fork_project(public_project, user) }
-
-      describe 'when user is authenticated' do
-        describe 'when user has push access to the project' do
-          before do
-            forked_project.team << [user_two, :developer]
-          end
-
-          context 'and request is sent by gitlab-workhorse to authorize the request' do
-            before do
-              header_for_upload_authorize(forked_project)
-            end
-
-            it 'responds with status 200, location of lfs store and object details' do
-              json_response = ActiveSupport::JSON.decode(lfs_router_forked_auth.try_call.last.first)
-
-              expect(lfs_router_forked_auth.try_call.first).to eq(200)
-              expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload")
-              expect(json_response['LfsOid']).to eq(sample_oid)
-              expect(json_response['LfsSize']).to eq(sample_size)
-            end
-          end
-
-          context 'and request is sent by gitlab-workhorse to finalize the upload' do
-            before do
-              headers_for_upload_finalize(forked_project)
-            end
-
-            it 'responds with status 200 and lfs object is linked to the source project' do
-              expect(lfs_router_forked_auth.try_call.first).to eq(200)
-              expect(lfs_object.projects.pluck(:id)).to include(public_project.id)
-            end
-          end
-        end
-
-        describe 'and user does not have push access' do
-          let(:router) { lfs_router_forked_auth }
-
-          it_behaves_like 'forbidden'
-        end
-      end
-
-      context 'when CI is authenticated' do
-        let(:router) { lfs_router_forked_ci_auth }
-
-        it_behaves_like 'unauthorized'
-      end
-
-      context 'for unauthenticated' do
-        let(:router) { lfs_router_forked_noauth }
-
-        it_behaves_like 'unauthorized'
-      end
-
-      describe 'and second project not related to fork or a source project' do
-        let(:second_project) { create(:project) }
-        let(:lfs_router_second_project) { new_lfs_router(second_project, user: user) }
-
-        before do
-          public_project.lfs_objects << lfs_object
-          headers_for_upload_finalize(second_project)
-        end
-
-        context 'when pushing the same lfs object to the second project' do
-          before do
-            second_project.team << [user, :master]
-          end
-
-          it 'responds with 200 and links the lfs object to the project' do
-            expect(lfs_router_second_project.try_call.first).to eq(200)
-            expect(lfs_object.projects.pluck(:id)).to include(second_project.id, public_project.id)
-          end
-        end
-      end
-    end
-  end
-
-  def enable_lfs
-    allow(Gitlab.config.lfs).to receive(:enabled).and_return(true)
-  end
-
-  def authorize(user)
-    ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.password)
-  end
-
-  def new_lfs_router(project, user: nil, ci: false)
-    Gitlab::Lfs::Router.new(project, user, ci, request)
-  end
-
-  def header_for_upload_authorize(project)
-    env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}/authorize"
-  end
-
-  def headers_for_upload_finalize(project)
-    env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}"
-    env["HTTP_X_GITLAB_LFS_TMP"] = "#{sample_oid}6e561c9d4"
-  end
-
-  def fork_project(project, user, object = nil)
-    allow(RepositoryForkWorker).to receive(:perform_async).and_return(true)
-    Projects::ForkService.new(project, user, {}).execute
-  end
-end
diff --git a/spec/lib/gitlab/user_access_spec.rb b/spec/lib/gitlab/user_access_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..aa9ec243498bd9d706ec135fb7aa6afee2f26fa1
--- /dev/null
+++ b/spec/lib/gitlab/user_access_spec.rb
@@ -0,0 +1,88 @@
+require 'spec_helper'
+
+describe Gitlab::UserAccess, lib: true do
+  let(:access) { Gitlab::UserAccess.new(user, project: project) }
+  let(:project) { create(:project) }
+  let(:user) { create(:user) }
+
+  describe 'can_push_to_branch?' do
+    describe 'push to none protected branch' do
+      it 'returns true if user is a master' do
+        project.team << [user, :master]
+        expect(access.can_push_to_branch?('random_branch')).to be_truthy
+      end
+
+      it 'returns true if user is a developer' do
+        project.team << [user, :developer]
+        expect(access.can_push_to_branch?('random_branch')).to be_truthy
+      end
+
+      it 'returns false if user is a reporter' do
+        project.team << [user, :reporter]
+        expect(access.can_push_to_branch?('random_branch')).to be_falsey
+      end
+    end
+
+    describe 'push to protected branch' do
+      let(:branch) { create :protected_branch, project: project }
+
+      it 'returns true if user is a master' do
+        project.team << [user, :master]
+        expect(access.can_push_to_branch?(branch.name)).to be_truthy
+      end
+
+      it 'returns false if user is a developer' do
+        project.team << [user, :developer]
+        expect(access.can_push_to_branch?(branch.name)).to be_falsey
+      end
+
+      it 'returns false if user is a reporter' do
+        project.team << [user, :reporter]
+        expect(access.can_push_to_branch?(branch.name)).to be_falsey
+      end
+    end
+
+    describe 'push to protected branch if allowed for developers' do
+      before do
+        @branch = create :protected_branch, project: project, developers_can_push: true
+      end
+
+      it 'returns true if user is a master' do
+        project.team << [user, :master]
+        expect(access.can_push_to_branch?(@branch.name)).to be_truthy
+      end
+
+      it 'returns true if user is a developer' do
+        project.team << [user, :developer]
+        expect(access.can_push_to_branch?(@branch.name)).to be_truthy
+      end
+
+      it 'returns false if user is a reporter' do
+        project.team << [user, :reporter]
+        expect(access.can_push_to_branch?(@branch.name)).to be_falsey
+      end
+    end
+
+    describe 'merge to protected branch if allowed for developers' do
+      before do
+        @branch = create :protected_branch, project: project, developers_can_merge: true
+      end
+
+      it 'returns true if user is a master' do
+        project.team << [user, :master]
+        expect(access.can_merge_to_branch?(@branch.name)).to be_truthy
+      end
+
+      it 'returns true if user is a developer' do
+        project.team << [user, :developer]
+        expect(access.can_merge_to_branch?(@branch.name)).to be_truthy
+      end
+
+      it 'returns false if user is a reporter' do
+        project.team << [user, :reporter]
+        expect(access.can_merge_to_branch?(@branch.name)).to be_falsey
+      end
+    end
+
+  end
+end
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb
index e8171788872383d1b9645919fa32b49170263f6e..06d984c7a404f053e02ad7c54b7f3e53524f39a6 100644
--- a/spec/models/build_spec.rb
+++ b/spec/models/build_spec.rb
@@ -191,16 +191,16 @@ describe Ci::Build, models: true do
   end
 
   describe '#variables' do
-    context 'returns variables' do
-      subject { build.variables }
+    let(:predefined_variables) do
+      [
+        { key: :CI_BUILD_NAME, value: 'test', public: true },
+        { key: :CI_BUILD_STAGE, value: 'test', public: true },
+      ]
+    end
 
-      let(:predefined_variables) do
-        [
-          { key: :CI_BUILD_NAME, value: 'test', public: true },
-          { key: :CI_BUILD_STAGE, value: 'stage', public: true },
-        ]
-      end
+    subject { build.variables }
 
+    context 'returns variables' do
       let(:yaml_variables) do
         [
           { key: :DB_NAME, value: 'postgres', public: true }
@@ -208,7 +208,7 @@ describe Ci::Build, models: true do
       end
 
       before do
-        build.update_attributes(stage: 'stage')
+        build.yaml_variables = yaml_variables
       end
 
       it { is_expected.to eq(predefined_variables + yaml_variables) }
@@ -260,21 +260,53 @@ describe Ci::Build, models: true do
 
           it { is_expected.to eq(predefined_variables + predefined_trigger_variable + yaml_variables + secure_variables + trigger_variables) }
         end
+      end
+    end
+
+    context 'when yaml_variables is undefined' do
+      before do
+        build.yaml_variables = nil
+      end
 
-        context 'when job variables are defined' do
-          ##
-          # Job-level variables are defined in gitlab_ci.yml fixture
-          #
-          context 'when job variables are unique' do
-            let(:build) { create(:ci_build, name: 'staging') }
-
-            it 'includes job variables' do
-              expect(subject).to include(
-                { key: :KEY1, value: 'value1', public: true },
-                { key: :KEY2, value: 'value2', public: true }
-              )
-            end
+      context 'use from gitlab-ci.yml' do
+        before do
+          stub_ci_pipeline_yaml_file(config)
+        end
+
+        context 'if config is not found' do
+          let(:config) { nil }
+
+          it { is_expected.to eq(predefined_variables) }
+        end
+
+        context 'if config does not have a questioned job' do
+          let(:config) do
+            YAML.dump({
+                        test_other: {
+                          script: 'Hello World'
+                        }
+                      })
           end
+
+          it { is_expected.to eq(predefined_variables) }
+        end
+
+        context 'if config has variables' do
+          let(:config) do
+            YAML.dump({
+                        test: {
+                          script: 'Hello World',
+                          variables: {
+                            KEY: 'value'
+                          }
+                        }
+                      })
+          end
+          let(:variables) do
+            [{ key: :KEY, value: 'value', public: true }]
+          end
+
+          it { is_expected.to eq(predefined_variables + variables) }
         end
       end
     end
@@ -686,4 +718,120 @@ describe Ci::Build, models: true do
       end
     end
   end
+
+  describe '#manual?' do
+    before do
+      build.update(when: value)
+    end
+
+    subject { build.manual? }
+
+    context 'when is set to manual' do
+      let(:value) { 'manual' }
+
+      it { is_expected.to be_truthy }
+    end
+
+    context 'when set to something else' do
+      let(:value) { 'something else' }
+
+      it { is_expected.to be_falsey }
+    end
+  end
+
+  describe '#other_actions' do
+    let(:build) { create(:ci_build, :manual, pipeline: pipeline) }
+    let!(:other_build) { create(:ci_build, :manual, pipeline: pipeline, name: 'other action') }
+
+    subject { build.other_actions }
+
+    it 'returns other actions' do
+      is_expected.to contain_exactly(other_build)
+    end
+  end
+
+  describe '#play' do
+    let(:build) { create(:ci_build, :manual, pipeline: pipeline) }
+
+    subject { build.play }
+
+    it 'enques a build' do
+      is_expected.to be_pending
+      is_expected.to eq(build)
+    end
+
+    context 'for success build' do
+      before { build.queue }
+
+      it 'creates a new build' do
+        is_expected.to be_pending
+        is_expected.not_to eq(build)
+      end
+    end
+  end
+
+  describe '#when' do
+    subject { build.when }
+
+    context 'if is undefined' do
+      before do
+        build.when = nil
+      end
+
+      context 'use from gitlab-ci.yml' do
+        before do
+          stub_ci_pipeline_yaml_file(config)
+        end
+
+        context 'if config is not found' do
+          let(:config) { nil }
+
+          it { is_expected.to eq('on_success') }
+        end
+
+        context 'if config does not have a questioned job' do
+          let(:config) do
+            YAML.dump({
+                        test_other: {
+                          script: 'Hello World'
+                        }
+                      })
+          end
+
+          it { is_expected.to eq('on_success') }
+        end
+
+        context 'if config has when' do
+          let(:config) do
+            YAML.dump({
+                        test: {
+                          script: 'Hello World',
+                          when: 'always'
+                        }
+                      })
+          end
+
+          it { is_expected.to eq('always') }
+        end
+      end
+    end
+  end
+
+  describe '#retryable?' do
+    context 'when build is running' do
+      before { build.run! }
+
+      it 'should return false' do
+        expect(build.retryable?).to be false
+      end
+    end
+
+    context 'when build is finished' do
+      before { build.success! }
+
+      it 'should return true' do
+        expect(build.retryable?).to be true
+      end
+    end
+  end
 end
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index 4e5481f9154f052aed94b1d27bf63f198be7dd52..c29e4811385a7a754f92dcebce99b637fbf84d7c 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -5,9 +5,12 @@ describe Ci::Pipeline, models: true do
   let(:pipeline) { FactoryGirl.create :ci_pipeline, project: project }
 
   it { is_expected.to belong_to(:project) }
+  it { is_expected.to belong_to(:user) }
+
   it { is_expected.to have_many(:statuses) }
   it { is_expected.to have_many(:trigger_requests) }
   it { is_expected.to have_many(:builds) }
+
   it { is_expected.to validate_presence_of :sha }
   it { is_expected.to validate_presence_of :status }
 
@@ -257,6 +260,68 @@ describe Ci::Pipeline, models: true do
           expect(pipeline.reload.status).to eq('canceled')
         end
       end
+
+      context 'when listing manual actions' do
+        let(:yaml) do
+          {
+            stages: ["build", "test", "test_failure", "deploy", "cleanup"],
+            build: {
+              stage: "build",
+              script: "BUILD",
+            },
+            test: {
+              stage: "test",
+              script: "TEST",
+            },
+            test_failure: {
+              stage: "test_failure",
+              script: "ON test failure",
+              when: "on_failure",
+            },
+            deploy: {
+              stage: "deploy",
+              script: "PUBLISH",
+            },
+            production: {
+              stage: "deploy",
+              script: "PUBLISH",
+              when: "manual",
+            },
+            cleanup: {
+              stage: "cleanup",
+              script: "TIDY UP",
+              when: "always",
+            },
+            clear_cache: {
+              stage: "cleanup",
+              script: "CLEAR CACHE",
+              when: "manual",
+            }
+          }
+        end
+
+        it 'returns only for skipped builds' do
+          # currently all builds are created
+          expect(create_builds).to be_truthy
+          expect(manual_actions).to be_empty
+
+          # succeed stage build
+          pipeline.builds.running_or_pending.each(&:success)
+          expect(manual_actions).to be_empty
+
+          # succeed stage test
+          pipeline.builds.running_or_pending.each(&:success)
+          expect(manual_actions).to be_one # production
+
+          # succeed stage deploy
+          pipeline.builds.running_or_pending.each(&:success)
+          expect(manual_actions).to be_many # production and clear cache
+        end
+
+        def manual_actions
+          pipeline.manual_actions
+        end
+      end
     end
 
     context 'when no builds created' do
@@ -413,4 +478,28 @@ describe Ci::Pipeline, models: true do
       end
     end
   end
+
+  describe '#manual_actions' do
+    subject { pipeline.manual_actions }
+
+    it 'when none defined' do
+      is_expected.to be_empty
+    end
+
+    context 'when action defined' do
+      let!(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'deploy') }
+
+      it 'returns one action' do
+        is_expected.to contain_exactly(manual)
+      end
+
+      context 'there are multiple of the same name' do
+        let!(:manual2) { create(:ci_build, :manual, pipeline: pipeline, name: 'deploy') }
+
+        it 'returns latest one' do
+          is_expected.to contain_exactly(manual2)
+        end
+      end
+    end
+  end
 end
diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb
index 05f22c7a9ebd79749178366ee2524b9a20dd94a4..ff6371ad68540677ac639f1090d4bbeb8dc9935a 100644
--- a/spec/models/commit_status_spec.rb
+++ b/spec/models/commit_status_spec.rb
@@ -177,10 +177,10 @@ describe CommitStatus, models: true do
 
   describe '#stages' do
     before do
-      FactoryGirl.create :commit_status, pipeline: pipeline, stage: 'build', stage_idx: 0, status: 'success'
-      FactoryGirl.create :commit_status, pipeline: pipeline, stage: 'build', stage_idx: 0, status: 'failed'
-      FactoryGirl.create :commit_status, pipeline: pipeline, stage: 'deploy', stage_idx: 2, status: 'running'
-      FactoryGirl.create :commit_status, pipeline: pipeline, stage: 'test', stage_idx: 1, status: 'success'
+      create :commit_status, pipeline: pipeline, stage: 'build', name: 'linux', stage_idx: 0, status: 'success'
+      create :commit_status, pipeline: pipeline, stage: 'build', name: 'mac', stage_idx: 0, status: 'failed'
+      create :commit_status, pipeline: pipeline, stage: 'deploy', name: 'staging', stage_idx: 2, status: 'running'
+      create :commit_status, pipeline: pipeline, stage: 'test', name: 'rspec', stage_idx: 1, status: 'success'
     end
 
     context 'stages list' do
@@ -192,7 +192,7 @@ describe CommitStatus, models: true do
     end
 
     context 'stages with statuses' do
-      subject { CommitStatus.where(pipeline: pipeline).stages_status }
+      subject { CommitStatus.where(pipeline: pipeline).latest.stages_status }
 
       it 'return list of stages with statuses' do
         is_expected.to eq({
@@ -201,6 +201,20 @@ describe CommitStatus, models: true do
           'deploy' => 'running'
         })
       end
+
+      context 'when build is retried' do
+        before do
+          create :commit_status, pipeline: pipeline, stage: 'build', name: 'mac', stage_idx: 0, status: 'success'
+        end
+
+        it 'ignores a previous state' do
+          is_expected.to eq({
+            'build' => 'success',
+            'test' => 'success',
+            'deploy' => 'running'
+          })
+        end
+      end
     end
   end
 
diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb
index b273018707f491a8d2cf3c53a201ac78f998e164..7df3df4bb9e652016122d0e6ed99b605a15ca28e 100644
--- a/spec/models/deployment_spec.rb
+++ b/spec/models/deployment_spec.rb
@@ -11,6 +11,7 @@ describe Deployment, models: true do
   it { is_expected.to delegate_method(:name).to(:environment).with_prefix }
   it { is_expected.to delegate_method(:commit).to(:project) }
   it { is_expected.to delegate_method(:commit_title).to(:commit).as(:try) }
+  it { is_expected.to delegate_method(:manual_actions).to(:deployable).as(:try) }
 
   it { is_expected.to validate_presence_of(:ref) }
   it { is_expected.to validate_presence_of(:sha) }
diff --git a/spec/models/project_services/builds_email_service_spec.rb b/spec/models/project_services/builds_email_service_spec.rb
index 236df8f047df335a682329594893cde6110c1311..ca2cd8aa551f7727cb045a1a83ca5da0275fe6a7 100644
--- a/spec/models/project_services/builds_email_service_spec.rb
+++ b/spec/models/project_services/builds_email_service_spec.rb
@@ -23,6 +23,44 @@ describe BuildsEmailService do
     end
   end
 
+  describe '#test_data' do
+    let(:build)   { create(:ci_build) }
+    let(:project) { build.project }
+    let(:user)    { create(:user) }
+
+    before { project.team << [user, :developer] }
+
+    it 'builds test data' do
+      data = subject.test_data(project)
+
+      expect(data[:object_kind]).to eq("build")
+    end
+  end
+
+  describe '#test' do
+    it 'sends email' do
+      data = Gitlab::BuildDataBuilder.build(create(:ci_build))
+      subject.recipients = 'test@gitlab.com'
+
+      expect(BuildEmailWorker).to receive(:perform_async)
+
+      subject.test(data)
+    end
+
+    context 'notify only failed builds is true' do
+      it 'sends email' do
+        data = Gitlab::BuildDataBuilder.build(create(:ci_build))
+        data[:build_status] = "success"
+        subject.recipients = 'test@gitlab.com'
+
+        expect(subject).not_to receive(:notify_only_broken_builds)
+        expect(BuildEmailWorker).to receive(:perform_async)
+
+        subject.test(data)
+      end
+    end
+  end
+
   describe '#execute' do
     it 'sends email' do
       subject.recipients = 'test@gitlab.com'
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index e842c58dd8245d885943ed08b80f17e82d5fafc8..9dc34276f188edbb0617ccb1434e3c67180e22bb 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -142,10 +142,10 @@ describe Project, models: true do
       expect(project2).to be_valid
     end
 
-    it 'does not allow to introduce an empty URI' do
+    it 'allows an empty URI' do
       project2 = build(:project, import_url: '')
 
-      expect(project2).not_to be_valid
+      expect(project2).to be_valid
     end
 
     it 'does not produce import data on an empty URI' do
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index b39b958450c0ef17d9375824bc846f6ad024d993..110df6bbd22cc80579445e3c4351c8262f3590d3 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -4,16 +4,17 @@ describe Repository, models: true do
   include RepoHelpers
   TestBlob = Struct.new(:name)
 
-  let(:repository) { create(:project).repository }
+  let(:project) { create(:project) }
+  let(:repository) { project.repository }
   let(:user) { create(:user) }
   let(:commit_options) do
     author = repository.user_to_committer(user)
     { message: 'Test message', committer: author, author: author }
   end
   let(:merge_commit) do
-    source_sha = repository.find_branch('feature').target
-    merge_commit_sha = repository.merge(user, source_sha, 'master', commit_options)
-    repository.commit(merge_commit_sha)
+    merge_request = create(:merge_request, source_branch: 'feature', target_branch: 'master', source_project: project)
+    merge_commit_id = repository.merge(user, merge_request, commit_options)
+    repository.commit(merge_commit_id)
   end
 
   describe '#branch_names_contains' do
@@ -129,6 +130,36 @@ describe Repository, models: true do
     end
   end
 
+  describe :commit_file do
+    it 'commits change to a file successfully' do
+      expect do
+        repository.commit_file(user, 'CHANGELOG', 'Changelog!',
+                              'Updates file content',
+                              'master', true)
+      end.to change { repository.commits('master').count }.by(1)
+
+      blob = repository.blob_at('master', 'CHANGELOG')
+
+      expect(blob.data).to eq('Changelog!')
+    end
+  end
+
+  describe :update_file do
+    it 'updates filename successfully' do
+      expect do
+        repository.update_file(user, 'NEWLICENSE', 'Copyright!',
+                                     branch: 'master',
+                                     previous_path: 'LICENSE',
+                                     message: 'Changes filename')
+      end.to change { repository.commits('master').count }.by(1)
+
+      files = repository.ls_files('master')
+
+      expect(files).not_to include('LICENSE')
+      expect(files).to include('NEWLICENSE')
+    end
+  end
+
   describe "search_files" do
     let(:results) { repository.search_files('feature', 'master') }
     subject { results }
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index ff39f187759192ac471f73dca05ec845f5662259..3bf82cf2668de2cbfbc825ce2e9e79e59e852c51 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -31,6 +31,8 @@ describe User, models: true do
     it { is_expected.to have_many(:spam_logs).dependent(:destroy) }
     it { is_expected.to have_many(:todos).dependent(:destroy) }
     it { is_expected.to have_many(:award_emoji).dependent(:destroy) }
+    it { is_expected.to have_many(:builds).dependent(:nullify) }
+    it { is_expected.to have_many(:pipelines).dependent(:nullify) }
 
     describe '#group_members' do
       it 'does not include group memberships for which user is a requester' do
@@ -885,16 +887,25 @@ describe User, models: true do
   end
 
   describe '#authorized_projects' do
-    let!(:user) { create(:user) }
-    let!(:private_project) { create(:project, :private) }
+    context 'with a minimum access level' do
+      it 'includes projects for which the user is an owner' do
+        user = create(:user)
+        project = create(:empty_project, :private, namespace: user.namespace)
 
-    before do
-      private_project.team << [user, Gitlab::Access::MASTER]
-    end
+        expect(user.authorized_projects(Gitlab::Access::REPORTER))
+          .to contain_exactly(project)
+      end
 
-    subject { user.authorized_projects }
+      it 'includes projects for which the user is a master' do
+        user = create(:user)
+        project = create(:empty_project, :private)
+
+        project.team << [user, Gitlab::Access::MASTER]
 
-    it { is_expected.to eq([private_project]) }
+        expect(user.authorized_projects(Gitlab::Access::REPORTER))
+          .to contain_exactly(project)
+      end
+    end
   end
 
   describe '#ci_authorized_runners' do
diff --git a/spec/requests/api/api_helpers_spec.rb b/spec/requests/api/api_helpers_spec.rb
index 830259538899382380009f8e3c35a5812d909c5d..831889afb6c894fc2b783acb38223e02292aad17 100644
--- a/spec/requests/api/api_helpers_spec.rb
+++ b/spec/requests/api/api_helpers_spec.rb
@@ -49,7 +49,7 @@ describe API::Helpers, api: true do
 
       it "should return nil for a user without access" do
         env[API::Helpers::PRIVATE_TOKEN_HEADER] = user.private_token
-        allow(Gitlab::UserAccess).to receive(:allowed?).and_return(false)
+        allow_any_instance_of(Gitlab::UserAccess).to receive(:allowed?).and_return(false)
         expect(current_user).to be_nil
       end
 
@@ -73,7 +73,7 @@ describe API::Helpers, api: true do
 
       it "should return nil for a user without access" do
         env[API::Helpers::PRIVATE_TOKEN_HEADER] = personal_access_token.token
-        allow(Gitlab::UserAccess).to receive(:allowed?).and_return(false)
+        allow_any_instance_of(Gitlab::UserAccess).to receive(:allowed?).and_return(false)
         expect(current_user).to be_nil
       end
 
@@ -211,4 +211,27 @@ describe API::Helpers, api: true do
       expect(sudo_identifier).to eq(' 123')
     end
   end
+
+  describe '.to_boolean' do
+    it 'converts a valid string to a boolean' do
+      expect(to_boolean('true')).to be_truthy
+      expect(to_boolean('YeS')).to be_truthy
+      expect(to_boolean('t')).to be_truthy
+      expect(to_boolean('1')).to be_truthy
+      expect(to_boolean('ON')).to be_truthy
+      expect(to_boolean('FaLse')).to be_falsy
+      expect(to_boolean('F')).to be_falsy
+      expect(to_boolean('NO')).to be_falsy
+      expect(to_boolean('n')).to be_falsy
+      expect(to_boolean('0')).to be_falsy
+      expect(to_boolean('oFF')).to be_falsy
+    end
+
+    it 'converts an invalid string to nil' do
+      expect(to_boolean('fals')).to be_nil
+      expect(to_boolean('yeah')).to be_nil
+      expect(to_boolean('')).to be_nil
+      expect(to_boolean(nil)).to be_nil
+    end
+  end
 end
diff --git a/spec/requests/api/branches_spec.rb b/spec/requests/api/branches_spec.rb
index b11ca26ee68563c35302d14fad5fcb0318c94e20..719da27f91982c5f7182be71fabb271f4933f4e5 100644
--- a/spec/requests/api/branches_spec.rb
+++ b/spec/requests/api/branches_spec.rb
@@ -32,6 +32,8 @@ describe API::API, api: true  do
       expect(json_response['name']).to eq(branch_name)
       expect(json_response['commit']['id']).to eq(branch_sha)
       expect(json_response['protected']).to eq(false)
+      expect(json_response['developers_can_push']).to eq(false)
+      expect(json_response['developers_can_merge']).to eq(false)
     end
 
     it "should return a 403 error if guest" do
@@ -45,14 +47,95 @@ describe API::API, api: true  do
     end
   end
 
-  describe "PUT /projects/:id/repository/branches/:branch/protect" do
-    it "should protect a single branch" do
+  describe 'PUT /projects/:id/repository/branches/:branch/protect' do
+    it 'protects a single branch' do
       put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user)
+
       expect(response).to have_http_status(200)
+      expect(json_response['name']).to eq(branch_name)
+      expect(json_response['commit']['id']).to eq(branch_sha)
+      expect(json_response['protected']).to eq(true)
+      expect(json_response['developers_can_push']).to eq(false)
+      expect(json_response['developers_can_merge']).to eq(false)
+    end
+
+    it 'protects a single branch and developers can push' do
+      put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
+        developers_can_push: true
+
+      expect(response).to have_http_status(200)
+      expect(json_response['name']).to eq(branch_name)
+      expect(json_response['commit']['id']).to eq(branch_sha)
+      expect(json_response['protected']).to eq(true)
+      expect(json_response['developers_can_push']).to eq(true)
+      expect(json_response['developers_can_merge']).to eq(false)
+    end
 
+    it 'protects a single branch and developers can merge' do
+      put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
+        developers_can_merge: true
+
+      expect(response).to have_http_status(200)
       expect(json_response['name']).to eq(branch_name)
       expect(json_response['commit']['id']).to eq(branch_sha)
       expect(json_response['protected']).to eq(true)
+      expect(json_response['developers_can_push']).to eq(false)
+      expect(json_response['developers_can_merge']).to eq(true)
+    end
+
+    it 'protects a single branch and developers can push and merge' do
+      put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
+        developers_can_push: true, developers_can_merge: true
+
+      expect(response).to have_http_status(200)
+      expect(json_response['name']).to eq(branch_name)
+      expect(json_response['commit']['id']).to eq(branch_sha)
+      expect(json_response['protected']).to eq(true)
+      expect(json_response['developers_can_push']).to eq(true)
+      expect(json_response['developers_can_merge']).to eq(true)
+    end
+
+    it 'protects a single branch and developers cannot push and merge' do
+      put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
+        developers_can_push: 'tru', developers_can_merge: 'tr'
+
+      expect(response).to have_http_status(200)
+      expect(json_response['name']).to eq(branch_name)
+      expect(json_response['commit']['id']).to eq(branch_sha)
+      expect(json_response['protected']).to eq(true)
+      expect(json_response['developers_can_push']).to eq(false)
+      expect(json_response['developers_can_merge']).to eq(false)
+    end
+
+    context 'on a protected branch' do
+      let(:protected_branch) { 'foo' }
+
+      before do
+        project.repository.add_branch(user, protected_branch, 'master')
+        create(:protected_branch, project: project, name: protected_branch, developers_can_push: true, developers_can_merge: true)
+      end
+
+      it 'updates that a developer can push' do
+        put api("/projects/#{project.id}/repository/branches/#{protected_branch}/protect", user),
+          developers_can_push: false, developers_can_merge: false
+
+        expect(response).to have_http_status(200)
+        expect(json_response['name']).to eq(protected_branch)
+        expect(json_response['protected']).to eq(true)
+        expect(json_response['developers_can_push']).to eq(false)
+        expect(json_response['developers_can_merge']).to eq(false)
+      end
+
+      it 'does not update that a developer can push' do
+        put api("/projects/#{project.id}/repository/branches/#{protected_branch}/protect", user),
+          developers_can_push: 'foobar', developers_can_merge: 'foo'
+
+        expect(response).to have_http_status(200)
+        expect(json_response['name']).to eq(protected_branch)
+        expect(json_response['protected']).to eq(true)
+        expect(json_response['developers_can_push']).to eq(true)
+        expect(json_response['developers_can_merge']).to eq(true)
+      end
     end
 
     it "should return a 404 error if branch not found" do
diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb
index 6adccb4ebae9348f8d7e928b602a70b68267b2ef..12f2cfa69426d4dce431f72ebcd0a70792c4a0d1 100644
--- a/spec/requests/api/issues_spec.rb
+++ b/spec/requests/api/issues_spec.rb
@@ -503,6 +503,20 @@ describe API::API, api: true  do
       ])
     end
 
+    context 'with due date' do
+      it 'creates a new project issue' do
+        due_date = 2.weeks.from_now.strftime('%Y-%m-%d')
+
+        post api("/projects/#{project.id}/issues", user),
+          title: 'new issue', due_date: due_date
+
+        expect(response).to have_http_status(201)
+        expect(json_response['title']).to eq('new issue')
+        expect(json_response['description']).to be_nil
+        expect(json_response['due_date']).to eq(due_date)
+      end
+    end
+
     context 'when an admin or owner makes the request' do
       it 'accepts the creation date to be set' do
         creation_time = 2.weeks.ago
@@ -683,6 +697,17 @@ describe API::API, api: true  do
     end
   end
 
+  describe 'PUT /projects/:id/issues/:issue_id to update due date' do
+    it 'creates a new project issue' do
+      due_date = 2.weeks.from_now.strftime('%Y-%m-%d')
+
+      put api("/projects/#{project.id}/issues/#{issue.id}", user), due_date: due_date
+
+      expect(response).to have_http_status(200)
+      expect(json_response['due_date']).to eq(due_date)
+    end
+  end
+
   describe "DELETE /projects/:id/issues/:issue_id" do
     it "rejects a non member from deleting an issue" do
       delete api("/projects/#{project.id}/issues/#{issue.id}", non_member)
diff --git a/spec/requests/api/todos_spec.rb b/spec/requests/api/todos_spec.rb
index 92a4fa216cd2b4d4c3fea0f5094837def558bdcb..3ccd0af652f7a05fb1f9c7743cca64c432482429 100644
--- a/spec/requests/api/todos_spec.rb
+++ b/spec/requests/api/todos_spec.rb
@@ -134,8 +134,7 @@ describe API::Todos, api: true do
         delete api('/todos', john_doe)
 
         expect(response.status).to eq(200)
-        expect(json_response).to be_an Array
-        expect(json_response.length).to eq(3)
+        expect(response.body).to eq('3')
         expect(pending_1.reload).to be_done
         expect(pending_2.reload).to be_done
         expect(pending_3.reload).to be_done
diff --git a/spec/requests/lfs_http_spec.rb b/spec/requests/lfs_http_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..93d2bc160cc8fc3ca3abcc52b3c773417a24c0b5
--- /dev/null
+++ b/spec/requests/lfs_http_spec.rb
@@ -0,0 +1,768 @@
+require 'spec_helper'
+
+describe Gitlab::Lfs::Router do
+  let(:user) { create(:user) }
+  let!(:lfs_object) { create(:lfs_object, :with_file) }
+
+  let(:headers) do
+    {
+      'Authorization' => authorization,
+      'X-Sendfile-Type' => sendfile
+    }.compact
+  end
+  let(:authorization) { }
+  let(:sendfile) { }
+
+  let(:sample_oid) { lfs_object.oid }
+  let(:sample_size) { lfs_object.size }
+
+  describe 'when lfs is disabled' do
+    let(:project) { create(:empty_project) }
+    let(:body) do
+      {
+        'objects' => [
+          { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+            'size' => 1575078
+          },
+          { 'oid' => sample_oid,
+            'size' => sample_size
+          }
+        ],
+        'operation' => 'upload'
+      }
+    end
+
+    before do
+      allow(Gitlab.config.lfs).to receive(:enabled).and_return(false)
+      post_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+    end
+
+    it 'responds with 501' do
+      expect(response).to have_http_status(501)
+      expect(json_response).to include('message' => 'Git LFS is not enabled on this GitLab server, contact your admin.')
+    end
+  end
+
+  describe 'deprecated API' do
+    let(:project) { create(:empty_project) }
+
+    before do
+      enable_lfs
+    end
+
+    shared_examples 'a deprecated' do
+      it 'responds with 501' do
+        expect(response).to have_http_status(501)
+      end
+
+      it 'returns deprecated message' do
+        expect(json_response).to include('message' => 'Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.')
+      end
+    end
+
+    context 'when fetching lfs object using deprecated API' do
+      let(:authorization) { authorize_user }
+
+      before do
+        get "#{project.http_url_to_repo}/info/lfs/objects/#{sample_oid}", nil, headers
+      end
+
+      it_behaves_like 'a deprecated'
+    end
+
+    context 'when handling lfs request using deprecated API' do
+      before do
+        post_json "#{project.http_url_to_repo}/info/lfs/objects", nil, headers
+      end
+
+      it_behaves_like 'a deprecated'
+    end
+  end
+
+  describe 'when fetching lfs object' do
+    let(:project) { create(:empty_project) }
+    let(:update_permissions) { }
+
+    before do
+      enable_lfs
+      update_permissions
+      get "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", nil, headers
+    end
+
+    context 'and request comes from gitlab-workhorse' do
+      context 'without user being authorized' do
+        it 'responds with status 401' do
+          expect(response).to have_http_status(401)
+        end
+      end
+
+      context 'with required headers' do
+        shared_examples 'responds with a file' do
+          let(:sendfile) { 'X-Sendfile' }
+
+          it 'responds with status 200' do
+            expect(response).to have_http_status(200)
+          end
+
+          it 'responds with the file location' do
+            expect(response.headers['Content-Type']).to eq('application/octet-stream')
+            expect(response.headers['X-Sendfile']).to eq(lfs_object.file.path)
+          end
+        end
+
+        context 'with user is authorized' do
+          let(:authorization) { authorize_user }
+
+          context 'and does not have project access' do
+            let(:update_permissions) do
+              project.lfs_objects << lfs_object
+            end
+
+            it 'responds with status 403' do
+              expect(response).to have_http_status(403)
+            end
+          end
+
+          context 'and does have project access' do
+            let(:update_permissions) do
+              project.team << [user, :master]
+              project.lfs_objects << lfs_object
+            end
+
+            it_behaves_like 'responds with a file'
+          end
+        end
+
+        context 'when CI is authorized' do
+          let(:authorization) { authorize_ci_project }
+
+          let(:update_permissions) do
+            project.lfs_objects << lfs_object
+          end
+
+          it_behaves_like 'responds with a file'
+        end
+      end
+
+      context 'without required headers' do
+        let(:authorization) { authorize_user }
+
+        it 'responds with status 403' do
+          expect(response).to have_http_status(403)
+        end
+      end
+    end
+  end
+
+  describe 'when handling lfs batch request' do
+    let(:update_lfs_permissions) { }
+    let(:update_user_permissions) { }
+
+    before do
+      enable_lfs
+      update_lfs_permissions
+      update_user_permissions
+      post_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+    end
+
+    describe 'download' do
+      let(:project) { create(:empty_project) }
+      let(:body) do
+        { 'operation' => 'download',
+          'objects' => [
+            { 'oid' => sample_oid,
+              'size' => sample_size
+            }]
+        }
+      end
+
+      shared_examples 'an authorized requests' do
+        context 'when downloading an lfs object that is assigned to our project' do
+          let(:update_lfs_permissions) do
+            project.lfs_objects << lfs_object
+          end
+
+          it 'responds with status 200' do
+            expect(response).to have_http_status(200)
+          end
+
+          it 'with href to download' do
+            expect(json_response).to eq('objects' => [
+              { 'oid' => sample_oid,
+                'size' => sample_size,
+                'actions' => {
+                  'download' => {
+                    'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
+                    'header' => { 'Authorization' => authorization }
+                  }
+                }
+              }])
+          end
+        end
+
+        context 'when downloading an lfs object that is assigned to other project' do
+          let(:other_project) { create(:empty_project) }
+          let(:update_lfs_permissions) do
+            other_project.lfs_objects << lfs_object
+          end
+
+          it 'responds with status 200' do
+            expect(response).to have_http_status(200)
+          end
+
+          it 'with href to download' do
+            expect(json_response).to eq('objects' => [
+              { 'oid' => sample_oid,
+                'size' => sample_size,
+                'error' => {
+                  'code' => 404,
+                  'message' => "Object does not exist on the server or you don't have permissions to access it",
+                }
+              }])
+          end
+        end
+
+        context 'when downloading a lfs object that does not exist' do
+          let(:body) do
+            { 'operation' => 'download',
+              'objects' => [
+                { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+                  'size' => 1575078
+                }]
+            }
+          end
+
+          it 'responds with status 200' do
+            expect(response).to have_http_status(200)
+          end
+
+          it 'with an 404 for specific object' do
+            expect(json_response).to eq('objects' => [
+              { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+                'size' => 1575078,
+                'error' => {
+                  'code' => 404,
+                  'message' => "Object does not exist on the server or you don't have permissions to access it",
+                }
+              }])
+          end
+        end
+
+        context 'when downloading one new and one existing lfs object' do
+          let(:body) do
+            { 'operation' => 'download',
+              'objects' => [
+                { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+                  'size' => 1575078
+                },
+                { 'oid' => sample_oid,
+                  'size' => sample_size
+                }
+              ]
+            }
+          end
+
+          let(:update_lfs_permissions) do
+            project.lfs_objects << lfs_object
+          end
+
+          it 'responds with status 200' do
+            expect(response).to have_http_status(200)
+          end
+
+          it 'responds with upload hypermedia link for the new object' do
+            expect(json_response).to eq('objects' => [
+              { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+                'size' => 1575078,
+                'error' => {
+                  'code' => 404,
+                  'message' => "Object does not exist on the server or you don't have permissions to access it",
+                }
+              },
+              { 'oid' => sample_oid,
+                'size' => sample_size,
+                'actions' => {
+                  'download' => {
+                    'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
+                    'header' => { 'Authorization' => authorization }
+                  }
+                }
+              }])
+          end
+        end
+      end
+
+      context 'when user is authenticated' do
+        let(:authorization) { authorize_user }
+
+        let(:update_user_permissions) do
+          project.team << [user, role]
+        end
+
+        it_behaves_like 'an authorized requests' do
+          let(:role) { :reporter }
+        end
+
+        context 'when user does is not member of the project' do
+          let(:role) { :guest }
+
+          it 'responds with 403' do
+            expect(response).to have_http_status(403)
+          end
+        end
+
+        context 'when user does not have download access' do
+          let(:role) { :guest }
+
+          it 'responds with 403' do
+            expect(response).to have_http_status(403)
+          end
+        end
+      end
+
+      context 'when CI is authorized' do
+        let(:authorization) { authorize_ci_project }
+
+        it_behaves_like 'an authorized requests'
+      end
+
+      context 'when user is not authenticated' do
+        describe 'is accessing public project' do
+          let(:project) { create(:project, :public) }
+
+          let(:update_lfs_permissions) do
+            project.lfs_objects << lfs_object
+          end
+
+          it 'responds with status 200 and href to download' do
+            expect(response).to have_http_status(200)
+          end
+
+          it 'responds with status 200 and href to download' do
+            expect(json_response).to eq('objects' => [
+              { 'oid' => sample_oid,
+                'size' => sample_size,
+                'actions' => {
+                  'download' => {
+                    'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
+                    'header' => {}
+                  }
+                }
+              }])
+          end
+        end
+
+        describe 'is accessing non-public project' do
+          let(:update_lfs_permissions) do
+            project.lfs_objects << lfs_object
+          end
+
+          it 'responds with authorization required' do
+            expect(response).to have_http_status(401)
+          end
+        end
+      end
+    end
+
+    describe 'upload' do
+      let(:project) { create(:project, :public) }
+      let(:body) do
+        { 'operation' => 'upload',
+          'objects' => [
+            { 'oid' => sample_oid,
+              'size' => sample_size
+            }]
+        }
+      end
+
+      describe 'when request is authenticated' do
+        describe 'when user has project push access' do
+          let(:authorization) { authorize_user }
+
+          let(:update_user_permissions) do
+            project.team << [user, :developer]
+          end
+
+          context 'when pushing an lfs object that already exists' do
+            let(:other_project) { create(:empty_project) }
+            let(:update_lfs_permissions) do
+              other_project.lfs_objects << lfs_object
+            end
+
+            it 'responds with status 200' do
+              expect(response).to have_http_status(200)
+            end
+
+            it 'responds with links the object to the project' do
+              expect(json_response['objects']).to be_kind_of(Array)
+              expect(json_response['objects'].first['oid']).to eq(sample_oid)
+              expect(json_response['objects'].first['size']).to eq(sample_size)
+              expect(lfs_object.projects.pluck(:id)).not_to include(project.id)
+              expect(lfs_object.projects.pluck(:id)).to include(other_project.id)
+              expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}")
+              expect(json_response['objects'].first['actions']['upload']['header']).to eq('Authorization' => authorization)
+            end
+          end
+
+          context 'when pushing a lfs object that does not exist' do
+            let(:body) do
+              { 'operation' => 'upload',
+                'objects' => [
+                  { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+                    'size' => 1575078
+                  }]
+              }
+            end
+
+            it 'responds with status 200' do
+              expect(response).to have_http_status(200)
+            end
+
+            it 'responds with upload hypermedia link' do
+              expect(json_response['objects']).to be_kind_of(Array)
+              expect(json_response['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
+              expect(json_response['objects'].first['size']).to eq(1575078)
+              expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
+              expect(json_response['objects'].first['actions']['upload']['header']).to eq('Authorization' => authorization)
+            end
+          end
+
+          context 'when pushing one new and one existing lfs object' do
+            let(:body) do
+              { 'operation' => 'upload',
+                'objects' => [
+                  { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+                    'size' => 1575078
+                  },
+                  { 'oid' => sample_oid,
+                    'size' => sample_size
+                  }
+                ]
+              }
+            end
+
+            let(:update_lfs_permissions) do
+              project.lfs_objects << lfs_object
+            end
+
+            it 'responds with status 200' do
+              expect(response).to have_http_status(200)
+            end
+
+            it 'responds with upload hypermedia link for the new object' do
+              expect(json_response['objects']).to be_kind_of(Array)
+
+              expect(json_response['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
+              expect(json_response['objects'].first['size']).to eq(1575078)
+              expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{project.http_url_to_repo}/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
+              expect(json_response['objects'].first['actions']['upload']['header']).to eq("Authorization" => authorization)
+
+              expect(json_response['objects'].last['oid']).to eq(sample_oid)
+              expect(json_response['objects'].last['size']).to eq(sample_size)
+              expect(json_response['objects'].last).not_to have_key('actions')
+            end
+          end
+        end
+
+        context 'when user does not have push access' do
+          let(:authorization) { authorize_user }
+
+          it 'responds with 403' do
+            expect(response).to have_http_status(403)
+          end
+        end
+
+        context 'when CI is authorized' do
+          let(:authorization) { authorize_ci_project }
+
+          it 'responds with 401' do
+            expect(response).to have_http_status(401)
+          end
+        end
+      end
+
+      context 'when user is not authenticated' do
+        context 'when user has push access' do
+          let(:update_user_permissions) do
+            project.team << [user, :master]
+          end
+
+          it 'responds with status 401' do
+            expect(response).to have_http_status(401)
+          end
+        end
+
+        context 'when user does not have push access' do
+          it 'responds with status 401' do
+            expect(response).to have_http_status(401)
+          end
+        end
+      end
+
+      context 'when CI is authorized' do
+        let(:authorization) { authorize_ci_project }
+
+        it 'responds with status 403' do
+          expect(response).to have_http_status(401)
+        end
+      end
+    end
+
+    describe 'unsupported' do
+      let(:project) { create(:empty_project) }
+      let(:body) do
+        { 'operation' => 'other',
+          'objects' => [
+            { 'oid' => sample_oid,
+              'size' => sample_size
+            }]
+        }
+      end
+
+      it 'responds with status 404' do
+        expect(response).to have_http_status(404)
+      end
+    end
+  end
+
+  describe 'when pushing a lfs object' do
+    before do
+      enable_lfs
+    end
+
+    shared_examples 'unauthorized' do
+      context 'and request is sent by gitlab-workhorse to authorize the request' do
+        before do
+          put_authorize
+        end
+
+        it 'responds with status 401' do
+          expect(response).to have_http_status(401)
+        end
+      end
+
+      context 'and request is sent by gitlab-workhorse to finalize the upload' do
+        before do
+          put_finalize
+        end
+
+        it 'responds with status 401' do
+          expect(response).to have_http_status(401)
+        end
+      end
+
+      context 'and request is sent with a malformed headers' do
+        before do
+          put_finalize('cat /etc/passwd')
+        end
+
+        it 'does not recognize it as a valid lfs command' do
+          expect(response).to have_http_status(403)
+        end
+      end
+    end
+
+    shared_examples 'forbidden' do
+      context 'and request is sent by gitlab-workhorse to authorize the request' do
+        before do
+          put_authorize
+        end
+
+        it 'responds with 403' do
+          expect(response).to have_http_status(403)
+        end
+      end
+
+      context 'and request is sent by gitlab-workhorse to finalize the upload' do
+        before do
+          put_finalize
+        end
+
+        it 'responds with 403' do
+          expect(response).to have_http_status(403)
+        end
+      end
+    end
+
+    describe 'to one project' do
+      let(:project) { create(:empty_project) }
+
+      describe 'when user is authenticated' do
+        let(:authorization) { authorize_user }
+
+        describe 'when user has push access to the project' do
+          before do
+            project.team << [user, :developer]
+          end
+
+          context 'and request is sent by gitlab-workhorse to authorize the request' do
+            before do
+              put_authorize
+            end
+
+            it 'responds with status 200' do
+              expect(response).to have_http_status(200)
+            end
+
+            it 'responds with status 200, location of lfs store and object details' do
+              expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload")
+              expect(json_response['LfsOid']).to eq(sample_oid)
+              expect(json_response['LfsSize']).to eq(sample_size)
+            end
+          end
+
+          context 'and request is sent by gitlab-workhorse to finalize the upload' do
+            before do
+              put_finalize
+            end
+
+            it 'responds with status 200' do
+              expect(response).to have_http_status(200)
+            end
+
+            it 'lfs object is linked to the project' do
+              expect(lfs_object.projects.pluck(:id)).to include(project.id)
+            end
+          end
+        end
+
+        describe 'and user does not have push access' do
+          it_behaves_like 'forbidden'
+        end
+      end
+
+      context 'when CI is authenticated' do
+        let(:authorization) { authorize_ci_project }
+
+        it_behaves_like 'unauthorized'
+      end
+
+      context 'for unauthenticated' do
+        it_behaves_like 'unauthorized'
+      end
+    end
+
+    describe 'to a forked project' do
+      let(:upstream_project) { create(:project, :public) }
+      let(:project_owner) { create(:user) }
+      let(:project) { fork_project(upstream_project, project_owner) }
+
+      describe 'when user is authenticated' do
+        let(:authorization) { authorize_user }
+
+        describe 'when user has push access to the project' do
+          before do
+            project.team << [user, :developer]
+          end
+
+          context 'and request is sent by gitlab-workhorse to authorize the request' do
+            before do
+              put_authorize
+            end
+
+            it 'responds with status 200' do
+              expect(response).to have_http_status(200)
+            end
+
+            it 'with location of lfs store and object details' do
+              expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload")
+              expect(json_response['LfsOid']).to eq(sample_oid)
+              expect(json_response['LfsSize']).to eq(sample_size)
+            end
+          end
+
+          context 'and request is sent by gitlab-workhorse to finalize the upload' do
+            before do
+              put_finalize
+            end
+
+            it 'responds with status 200' do
+              expect(response).to have_http_status(200)
+            end
+
+            it 'lfs object is linked to the source project' do
+              expect(lfs_object.projects.pluck(:id)).to include(upstream_project.id)
+            end
+          end
+        end
+
+        describe 'and user does not have push access' do
+          it_behaves_like 'forbidden'
+        end
+      end
+
+      context 'when CI is authenticated' do
+        let(:authorization) { authorize_ci_project }
+
+        it_behaves_like 'unauthorized'
+      end
+
+      context 'for unauthenticated' do
+        it_behaves_like 'unauthorized'
+      end
+
+      describe 'and second project not related to fork or a source project' do
+        let(:second_project) { create(:empty_project) }
+        let(:authorization) { authorize_user }
+
+        before do
+          second_project.team << [user, :master]
+          upstream_project.lfs_objects << lfs_object
+        end
+
+        context 'when pushing the same lfs object to the second project' do
+          before do
+            put "#{second_project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}", nil,
+                headers.merge('X-Gitlab-Lfs-Tmp' => lfs_tmp_file).compact
+          end
+
+          it 'responds with status 200' do
+            expect(response).to have_http_status(200)
+          end
+
+          it 'links the lfs object to the project' do
+            expect(lfs_object.projects.pluck(:id)).to include(second_project.id, upstream_project.id)
+          end
+        end
+      end
+    end
+
+    def put_authorize
+      put "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}/authorize", nil, headers
+    end
+
+    def put_finalize(lfs_tmp = lfs_tmp_file)
+      put "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}", nil,
+          headers.merge('X-Gitlab-Lfs-Tmp' => lfs_tmp).compact
+    end
+
+    def lfs_tmp_file
+      "#{sample_oid}012345678"
+    end
+  end
+
+  def enable_lfs
+    allow(Gitlab.config.lfs).to receive(:enabled).and_return(true)
+  end
+
+  def authorize_ci_project
+    ActionController::HttpAuthentication::Basic.encode_credentials('gitlab-ci-token', project.runners_token)
+  end
+
+  def authorize_user
+    ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.password)
+  end
+
+  def fork_project(project, user, object = nil)
+    allow(RepositoryForkWorker).to receive(:perform_async).and_return(true)
+    Projects::ForkService.new(project, user, {}).execute
+  end
+
+  def post_json(url, body = nil, headers = nil)
+    post(url, body.try(:to_json), (headers || {}).merge('Content-Type' => 'application/json'))
+  end
+
+  def json_response
+    @json_response ||= JSON.parse(response.body)
+  end
+end
diff --git a/spec/routing/routing_spec.rb b/spec/routing/routing_spec.rb
index 2c755919456cf9207e6ddfa94c8673fee31237b1..0a52c1ab9332575da7c6a048ee548dda0568191d 100644
--- a/spec/routing/routing_spec.rb
+++ b/spec/routing/routing_spec.rb
@@ -116,12 +116,9 @@ describe HelpController, "routing" do
     expect(get(path)).to route_to('help#show',
                                   path: 'workflow/protected_branches/protected_branches1',
                                   format: 'png')
-    path = '/help/shortcuts'
-    expect(get(path)).to route_to('help#show',
-                                  path: 'shortcuts')
+    
     path = '/help/ui'
-    expect(get(path)).to route_to('help#show',
-                                  path: 'ui')
+    expect(get(path)).to route_to('help#ui')
   end
 end
 
diff --git a/spec/services/auth/container_registry_authentication_service_spec.rb b/spec/services/auth/container_registry_authentication_service_spec.rb
index 67777ad48bc69c45cd164c99f8297ea9c998d502..7cc71f706ce6c9638b473408ece6f204d5335125 100644
--- a/spec/services/auth/container_registry_authentication_service_spec.rb
+++ b/spec/services/auth/container_registry_authentication_service_spec.rb
@@ -87,51 +87,105 @@ describe Auth::ContainerRegistryAuthenticationService, services: true do
   end
 
   context 'user authorization' do
-    let(:project) { create(:project) }
     let(:current_user) { create(:user) }
 
-    context 'allow to use scope-less authentication' do
-      it_behaves_like 'a valid token'
-    end
+    context 'for private project' do
+      let(:project) { create(:empty_project) }
 
-    context 'allow developer to push images' do
-      before { project.team << [current_user, :developer] }
+      context 'allow to use scope-less authentication' do
+        it_behaves_like 'a valid token'
+      end
 
-      let(:current_params) do
-        { scope: "repository:#{project.path_with_namespace}:push" }
+      context 'allow developer to push images' do
+        before { project.team << [current_user, :developer] }
+
+        let(:current_params) do
+          { scope: "repository:#{project.path_with_namespace}:push" }
+        end
+
+        it_behaves_like 'a pushable'
       end
 
-      it_behaves_like 'a pushable'
-    end
+      context 'allow reporter to pull images' do
+        before { project.team << [current_user, :reporter] }
+
+        let(:current_params) do
+          { scope: "repository:#{project.path_with_namespace}:pull" }
+        end
 
-    context 'allow reporter to pull images' do
-      before { project.team << [current_user, :reporter] }
+        it_behaves_like 'a pullable'
+      end
 
-      let(:current_params) do
-        { scope: "repository:#{project.path_with_namespace}:pull" }
+      context 'return a least of privileges' do
+        before { project.team << [current_user, :reporter] }
+
+        let(:current_params) do
+          { scope: "repository:#{project.path_with_namespace}:push,pull" }
+        end
+
+        it_behaves_like 'a pullable'
       end
 
-      it_behaves_like 'a pullable'
+      context 'disallow guest to pull or push images' do
+        before { project.team << [current_user, :guest] }
+
+        let(:current_params) do
+          { scope: "repository:#{project.path_with_namespace}:pull,push" }
+        end
+
+        it_behaves_like 'an inaccessible'
+      end
     end
 
-    context 'return a least of privileges' do
-      before { project.team << [current_user, :reporter] }
+    context 'for public project' do
+      let(:project) { create(:empty_project, :public) }
 
-      let(:current_params) do
-        { scope: "repository:#{project.path_with_namespace}:push,pull" }
+      context 'allow anyone to pull images' do
+        let(:current_params) do
+          { scope: "repository:#{project.path_with_namespace}:pull" }
+        end
+
+        it_behaves_like 'a pullable'
       end
 
-      it_behaves_like 'a pullable'
+      context 'disallow anyone to push images' do
+        let(:current_params) do
+          { scope: "repository:#{project.path_with_namespace}:push" }
+        end
+
+        it_behaves_like 'an inaccessible'
+      end
     end
 
-    context 'disallow guest to pull or push images' do
-      before { project.team << [current_user, :guest] }
+    context 'for internal project' do
+      let(:project) { create(:empty_project, :internal) }
 
-      let(:current_params) do
-        { scope: "repository:#{project.path_with_namespace}:pull,push" }
+      context 'for internal user' do
+        context 'allow anyone to pull images' do
+          let(:current_params) do
+            { scope: "repository:#{project.path_with_namespace}:pull" }
+          end
+
+          it_behaves_like 'a pullable'
+        end
+
+        context 'disallow anyone to push images' do
+          let(:current_params) do
+            { scope: "repository:#{project.path_with_namespace}:push" }
+          end
+
+          it_behaves_like 'an inaccessible'
+        end
       end
 
-      it_behaves_like 'an inaccessible'
+      context 'for external user' do
+        let(:current_user) { create(:user, external: true) }
+        let(:current_params) do
+          { scope: "repository:#{project.path_with_namespace}:pull,push" }
+        end
+
+        it_behaves_like 'an inaccessible'
+      end
     end
   end
 
diff --git a/spec/services/create_commit_builds_service_spec.rb b/spec/services/create_commit_builds_service_spec.rb
index 4d09bc5fb12cee43b1cab104368aac1b32b2b32e..d4c5e584421627b21d1a08fc59d975bf0aa6d4b4 100644
--- a/spec/services/create_commit_builds_service_spec.rb
+++ b/spec/services/create_commit_builds_service_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe CreateCommitBuildsService, services: true do
   let(:service) { CreateCommitBuildsService.new }
   let(:project) { FactoryGirl.create(:empty_project) }
-  let(:user) { nil }
+  let(:user) { create(:user) }
 
   before do
     stub_ci_pipeline_to_return_yaml_file
@@ -24,6 +24,7 @@ describe CreateCommitBuildsService, services: true do
       it { expect(pipeline).to be_valid }
       it { expect(pipeline).to be_persisted }
       it { expect(pipeline).to eq(project.pipelines.last) }
+      it { expect(pipeline).to have_attributes(user: user) }
       it { expect(pipeline.builds.first).to be_kind_of(Ci::Build) }
     end
 
diff --git a/spec/services/create_deployment_service_spec.rb b/spec/services/create_deployment_service_spec.rb
index 654e441f3cd44f404d0d40facadf0fdcd5e3f69e..8da2a2b3c1b2c430d51cd93bce5c09383abf8b79 100644
--- a/spec/services/create_deployment_service_spec.rb
+++ b/spec/services/create_deployment_service_spec.rb
@@ -89,6 +89,12 @@ describe CreateDeploymentService, services: true do
         expect_any_instance_of(described_class).to receive(:execute)
         subject
       end
+
+      it 'is set as deployable' do
+        subject
+
+        expect(Deployment.last.deployable).to eq(deployable)
+      end
     end
 
     context 'without environment specified' do
@@ -105,6 +111,8 @@ describe CreateDeploymentService, services: true do
 
       context 'when build succeeds' do
         it_behaves_like 'does create environment and deployment' do
+          let(:deployable) { build }
+
           subject { build.success }
         end
       end
@@ -114,6 +122,14 @@ describe CreateDeploymentService, services: true do
           subject { build.drop }
         end
       end
+
+      context 'when build is retried' do
+        it_behaves_like 'does create environment and deployment' do
+          let(:deployable) { Ci::Build.retry(build) }
+
+          subject { deployable.success }
+        end
+      end
     end
   end
 end
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb
index afabeed4a80f095df92c7efff04047189acca865..47c0580e0f044339888250b46ceecf915ab4f947 100644
--- a/spec/services/git_push_service_spec.rb
+++ b/spec/services/git_push_service_spec.rb
@@ -224,7 +224,7 @@ describe GitPushService, services: true do
       it "when pushing a branch for the first time" do
         expect(project).to receive(:execute_hooks)
         expect(project.default_branch).to eq("master")
-        expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: false })
+        expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: false, developers_can_merge: false })
         execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' )
       end
 
@@ -242,7 +242,17 @@ describe GitPushService, services: true do
 
         expect(project).to receive(:execute_hooks)
         expect(project.default_branch).to eq("master")
-        expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: true })
+        expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: true, developers_can_merge: false })
+
+        execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master')
+      end
+
+      it "when pushing a branch for the first time with default branch protection set to 'developers can merge'" do
+        stub_application_setting(default_branch_protection: Gitlab::Access::PROTECTION_DEV_CAN_MERGE)
+
+        expect(project).to receive(:execute_hooks)
+        expect(project.default_branch).to eq("master")
+        expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: false, developers_can_merge: true })
         execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' )
       end
 
diff --git a/spec/services/issues/bulk_update_service_spec.rb b/spec/services/issues/bulk_update_service_spec.rb
index 4a689e64dc5d0641bcb0accd71381b2b050e5e9f..ba3a4dfc048fd742fa9aedd324130a53c790fdfe 100644
--- a/spec/services/issues/bulk_update_service_spec.rb
+++ b/spec/services/issues/bulk_update_service_spec.rb
@@ -262,4 +262,42 @@ describe Issues::BulkUpdateService, services: true do
       end
     end
   end
+
+  describe :subscribe_issues do
+    let(:issues) { create_list(:issue, 5, project: project) }
+    let(:params) do
+      {
+        subscription_event: 'subscribe',
+        issues_ids: issues.map(&:id).join(',')
+      }
+    end
+
+    it 'subscribes the given user' do
+      issues.each do |issue|
+        expect(issue.subscribed?(user)).to be_truthy
+      end
+    end
+  end
+
+  describe :unsubscribe_issues do
+    let(:issues) { create_list(:closed_issue, 5, project: project) }
+    let(:params) do
+      {
+        subscription_event: 'unsubscribe',
+        issues_ids: issues.map(&:id).join(',')
+      }
+    end
+
+    before do
+      issues.each do |issue|
+        issue.subscriptions.create(user: user, subscribed: true)
+      end
+    end
+
+    it 'unsubscribes the given user' do
+      issues.each do |issue|
+        expect(issue.subscribed?(user)).to be_falsey
+      end
+    end
+  end
 end
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index 06f56d85aa86955c733bc0ff0e90a51eff3b5469..ce643b3f860be7505ad8f04447eeeb12f159cdb6 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -88,8 +88,7 @@ describe MergeRequests::RefreshService, services: true do
         # Merge master -> feature branch
         author = { email: 'test@gitlab.com', time: Time.now, name: "Me" }
         commit_options = { message: 'Test message', committer: author, author: author }
-        master_commit = @project.repository.commit('master')
-        @project.repository.merge(@user, master_commit.id, 'feature', commit_options)
+        @project.repository.merge(@user, @merge_request, commit_options)
         commit = @project.repository.commit('feature')
         service.new(@project, @user).execute(@oldrev, commit.id, 'refs/heads/feature')
         reload_mrs
diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb
index bb6c84262f6144c91df9c57bb8cca0ab0c5649a9..83f2ad96fd8bad4071b573c32b87dd03ce1d8788 100644
--- a/spec/support/test_env.rb
+++ b/spec/support/test_env.rb
@@ -18,7 +18,9 @@ module TestEnv
     'orphaned-branch'       => '45127a9',
     'binary-encoding'       => '7b1cf43',
     'gitattributes'         => '5a62481',
-    'expand-collapse-diffs' => '4842455'
+    'expand-collapse-diffs' => '4842455',
+    'expand-collapse-files' => '025db92',
+    'expand-collapse-lines' => '238e82d'
   }
 
   # gitlab-test-fork is a fork of gitlab-fork, but we don't necessarily
diff --git a/spec/views/projects/builds/show.html.haml_spec.rb b/spec/views/projects/builds/show.html.haml_spec.rb
index cd18d19ef5e7c2cbc5eedd34bd7b4e146a8b696b..42220a20c75bef6f547687af1b4cdaa08f26d93d 100644
--- a/spec/views/projects/builds/show.html.haml_spec.rb
+++ b/spec/views/projects/builds/show.html.haml_spec.rb
@@ -3,8 +3,12 @@ require 'spec_helper'
 describe 'projects/builds/show' do
   include Devise::TestHelpers
 
-  let(:build) { create(:ci_build) }
-  let(:project) { build.project }
+  let(:project) { create(:project) }
+  let(:pipeline) do
+    create(:ci_pipeline, project: project,
+                         sha: project.commit.id)
+  end
+  let(:build) { create(:ci_build, pipeline: pipeline) }
 
   before do
     assign(:build, build)
@@ -34,4 +38,15 @@ describe 'projects/builds/show' do
       expect(rendered).to have_link('Retry')
     end
   end
+
+  describe 'commit title in sidebar' do
+    let(:commit_title) { project.commit.title }
+
+    it 'shows commit title and not show commit message' do
+      render
+      
+      expect(rendered).to have_css('p.build-light-text.append-bottom-0',
+        text: /\A\n#{Regexp.escape(commit_title)}\n\Z/)
+    end
+  end
 end