From 8ae95009b7d9a23b16e0f2088602215450e38a5f Mon Sep 17 00:00:00 2001 From: Dot-Rar Date: Sun, 9 Feb 2020 14:26:52 +0000 Subject: [PATCH] panel update --- app/http/endpoints/manage/panelcreate.go | 192 ++ app/http/endpoints/manage/paneldelete.go | 71 + app/http/endpoints/manage/panels.go | 144 ++ app/http/endpoints/manage/settings.go | 4 +- app/http/endpoints/manage/updatesettings.go | 6 +- app/http/server.go | 5 + cache/panelcreate.go | 17 + cmd/panel/main.go | 15 +- database/table/panels.go | 51 + emojis.json | 1939 +++++++++++++++++++ public/static/css/discordmock.css | 4 - public/templates/includes/navbar.tmpl | 3 + public/templates/views/panels.tmpl | 237 +++ public/templates/views/settings.tmpl | 5 + utils/emojiutil.go | 30 + 15 files changed, 2713 insertions(+), 10 deletions(-) create mode 100644 app/http/endpoints/manage/panelcreate.go create mode 100644 app/http/endpoints/manage/paneldelete.go create mode 100644 app/http/endpoints/manage/panels.go create mode 100644 cache/panelcreate.go create mode 100644 database/table/panels.go create mode 100644 emojis.json create mode 100644 public/templates/views/panels.tmpl create mode 100644 utils/emojiutil.go diff --git a/app/http/endpoints/manage/panelcreate.go b/app/http/endpoints/manage/panelcreate.go new file mode 100644 index 0000000..4a19194 --- /dev/null +++ b/app/http/endpoints/manage/panelcreate.go @@ -0,0 +1,192 @@ +package manage + +import ( + "fmt" + "github.com/TicketsBot/GoPanel/cache" + "github.com/TicketsBot/GoPanel/config" + "github.com/TicketsBot/GoPanel/database/table" + "github.com/TicketsBot/GoPanel/utils" + "github.com/TicketsBot/GoPanel/utils/discord/objects" + "github.com/gin-gonic/contrib/sessions" + "github.com/gin-gonic/gin" + "strconv" + "strings" +) + +func PanelCreateHandler(ctx *gin.Context) { + store := sessions.Default(ctx) + if store == nil { + return + } + defer store.Save() + + if utils.IsLoggedIn(store) { + userIdStr := store.Get("userid").(string) + userId, err := utils.GetUserId(store) + if err != nil { + ctx.String(500, err.Error()) + return + } + + // Verify the guild exists + guildIdStr := ctx.Param("id") + guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + if err != nil { + ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page + return + } + + // Get object for selected guild + var guild objects.Guild + for _, g := range table.GetGuilds(userIdStr) { + if g.Id == guildIdStr { + guild = g + break + } + } + + // Verify the user has permissions to be here + if !utils.Contains(config.Conf.Admins, userIdStr) && !guild.Owner && !table.IsAdmin(guildId, userId) { + ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 403 Page + return + } + + // Get CSRF token + csrfCorrect := ctx.PostForm("csrf") == store.Get("csrf").(string) + if !csrfCorrect { + ctx.Redirect(302, "/") + return + } + + // Get if the guild is premium + premiumChan := make(chan bool) + go utils.IsPremiumGuild(store, guildIdStr, premiumChan) + premium := <-premiumChan + + // Check the user hasn't met their panel quota + if !premium { + panels := make(chan []table.Panel) + go table.GetPanelsByGuild(guildId, panels) + if len(<-panels) > 1 { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?metQuota=true", guildId)) + return + } + } + + // Validate title + title := ctx.PostForm("title") + if len(title) == 0 || len(title) > 255 { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validTitle=false", guildId)) + return + } + + // Validate content + content := ctx.PostForm("content") + if len(content) == 0 || len(content) > 1024 { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validContent=false", guildId)) + return + } + + // Validate colour + panelColourHex := ctx.PostForm("colour") + panelColour, err := strconv.ParseUint(panelColourHex, 16, 32) + if err != nil { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validColour=false", guildId)) + return + } + + // Validate channel + channelIdStr := ctx.PostForm("channel") + channelId, err := strconv.ParseInt(channelIdStr, 10, 64); if err != nil { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validChannel=false", guildId)) + return + } + + validChannel := make(chan bool) + go validateChannel(guildId, channelId, validChannel) + if !<-validChannel { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validChannel=false", guildId)) + return + } + + // Validate category + categoryStr := ctx.PostForm("category") + categoryId, err := strconv.ParseInt(categoryStr, 10, 64); if err != nil { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validCategory=false", guildId)) + return + } + + validCategory := make(chan bool) + go validateCategory(guildId, categoryId, validChannel) + if !<-validCategory { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validCategory=false", guildId)) + return + } + + // Validate reaction emote + reaction := strings.ToLower(ctx.PostForm("reaction")) + if len(title) == 0 || len(title) > 32 { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validReaction=false", guildId)) + return + } + reaction = strings.Replace(reaction, ":", "", -1) + + emoji := utils.GetEmojiByName(reaction) + if emoji == "" { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validReaction=false", guildId)) + return + } + + settings := table.Panel{ + ChannelId: channelId, + GuildId: guildId, + Title: title, + Content: content, + Colour: int(panelColour), + TargetCategory: categoryId, + ReactionEmote: emoji, + } + + go cache.Client.PublishPanelCreate(settings) + + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?created=true", guildId)) + } else { + ctx.Redirect(302, "/login") + } +} + +func validateChannel(guildId, channelId int64, res chan bool) { + // Get channels from DB + channelsChan := make(chan []table.Channel) + go table.GetCachedChannelsByGuild(guildId, channelsChan) + channels := <-channelsChan + + // Compare channel IDs + validChannel := false + for _, guildChannel := range channels { + if guildChannel.ChannelId == channelId { + validChannel = true + break + } + } + + res <- validChannel +} + +func validateCategory(guildId, categoryId int64, res chan bool) { + // Get channels from DB + categoriesChan := make(chan []table.Channel) + go table.GetCategories(guildId, categoriesChan) + categories := <-categoriesChan + + // Compare channel IDs + validCategory := false + for _, category := range categories { + if category.ChannelId == categoryId { + validCategory = true + break + } + } + + res <- validCategory +} diff --git a/app/http/endpoints/manage/paneldelete.go b/app/http/endpoints/manage/paneldelete.go new file mode 100644 index 0000000..adc135e --- /dev/null +++ b/app/http/endpoints/manage/paneldelete.go @@ -0,0 +1,71 @@ +package manage + +import ( + "fmt" + "github.com/TicketsBot/GoPanel/config" + "github.com/TicketsBot/GoPanel/database/table" + "github.com/TicketsBot/GoPanel/utils" + "github.com/TicketsBot/GoPanel/utils/discord/objects" + "github.com/gin-gonic/contrib/sessions" + "github.com/gin-gonic/gin" + "strconv" +) + +func PanelDeleteHandler(ctx *gin.Context) { + store := sessions.Default(ctx) + if store == nil { + return + } + defer store.Save() + + if utils.IsLoggedIn(store) { + userIdStr := store.Get("userid").(string) + userId, err := utils.GetUserId(store) + if err != nil { + ctx.String(500, err.Error()) + return + } + + // Verify the guild exists + guildIdStr := ctx.Param("id") + guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + if err != nil { + ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page + return + } + + messageIdStr := ctx.Param("msg") + messageId, err := strconv.ParseInt(messageIdStr, 10, 64); if err != nil { + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels", guildId)) + return + } + + // Get object for selected guild + var guild objects.Guild + for _, g := range table.GetGuilds(userIdStr) { + if g.Id == guildIdStr { + guild = g + break + } + } + + // Verify the user has permissions to be here + if !utils.Contains(config.Conf.Admins, userIdStr) && !guild.Owner && !table.IsAdmin(guildId, userId) { + ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 403 Page + return + } + + // Get CSRF token + csrfCorrect := ctx.Query("csrf") == store.Get("csrf").(string) + if !csrfCorrect { + ctx.Redirect(302, "/") + return + } + + go table.DeletePanel(messageId) + + ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels", guildId)) + } else { + ctx.Redirect(302, "/login") + } +} diff --git a/app/http/endpoints/manage/panels.go b/app/http/endpoints/manage/panels.go new file mode 100644 index 0000000..2b6f5a5 --- /dev/null +++ b/app/http/endpoints/manage/panels.go @@ -0,0 +1,144 @@ +package manage + +import ( + "github.com/TicketsBot/GoPanel/config" + "github.com/TicketsBot/GoPanel/database/table" + "github.com/TicketsBot/GoPanel/utils" + "github.com/TicketsBot/GoPanel/utils/discord/objects" + "github.com/gin-gonic/contrib/sessions" + "github.com/gin-gonic/gin" + "strconv" +) + +type wrappedPanel struct { + MessageId int64 + ChannelName string + Title string + Content string + CategoryName string +} + +func PanelHandler(ctx *gin.Context) { + store := sessions.Default(ctx) + if store == nil { + return + } + defer store.Save() + + if utils.IsLoggedIn(store) { + userIdStr := store.Get("userid").(string) + userId, err := utils.GetUserId(store) + if err != nil { + ctx.String(500, err.Error()) + return + } + + // Verify the guild exists + guildIdStr := ctx.Param("id") + guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + if err != nil { + ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page + return + } + + // Get object for selected guild + var guild objects.Guild + for _, g := range table.GetGuilds(userIdStr) { + if g.Id == guildIdStr { + guild = g + break + } + } + + // Verify the user has permissions to be here + if !utils.Contains(config.Conf.Admins, userIdStr) && !guild.Owner && !table.IsAdmin(guildId, userId) { + ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 403 Page + return + } + + // Get active panels + panelChan := make(chan []table.Panel) + go table.GetPanelsByGuild(guildId, panelChan) + panels := <-panelChan + + // Get channels + channelsChan := make(chan []table.Channel) + go table.GetCachedChannelsByGuild(guildId, channelsChan) + channels := <-channelsChan + + // Get default panel settings + settings := table.GetPanelSettings(guildId) + + // Convert to wrapped panels + wrappedPanels := make([]wrappedPanel, 0) + for _, panel := range panels { + wrapper := wrappedPanel{ + MessageId: panel.MessageId, + Title: panel.Title, + Content: panel.Content, + CategoryName: "", + } + + if panel.Title == "" { + wrapper.Title = settings.Title + } + if panel.Content == "" { + wrapper.Content = settings.Content + } + + // Get channel name & category name + for _, guildChannel := range channels { + if guildChannel.ChannelId == panel.ChannelId { + wrapper.ChannelName = guildChannel.Name + } else if guildChannel.ChannelId == panel.TargetCategory { + wrapper.CategoryName = guildChannel.Name + } + } + + wrappedPanels = append(wrappedPanels, wrapper) + } + + // Format channels to be text channels only + channelMap := make(map[int64]string) + for _, channel := range channels { + if channel.Type == 0 { + channelMap[channel.ChannelId] = channel.Name + } + } + + // Get categories & format + categories := make(map[int64]string) + for _, channel := range channels { + if channel.Type == 4 { + categories[channel.ChannelId] = channel.Name + } + } + + // Get is premium + isPremiumChan := make(chan bool) + go utils.IsPremiumGuild(store, guildIdStr, isPremiumChan) + isPremium := <-isPremiumChan + + ctx.HTML(200, "manage/panels", gin.H{ + "name": store.Get("name").(string), + "guildId": guildIdStr, + "csrf": store.Get("csrf").(string), + "avatar": store.Get("avatar").(string), + "baseUrl": config.Conf.Server.BaseUrl, + "panelcount": len(panels), + "premium": isPremium, + "panels": wrappedPanels, + "channels": channelMap, + "categories": categories, + + "validTitle": ctx.Query("validTitle") != "true", + "validContent": ctx.Query("validContent") != "false", + "validColour": ctx.Query("validColour") != "false", + "validChannel": ctx.Query("validChannel") != "false", + "validCategory": ctx.Query("validCategory") != "false", + "validReaction": ctx.Query("validReaction") != "false", + "created": ctx.Query("created") == "true", + "metQuota": ctx.Query("metQuota") == "true", + }) + } +} diff --git a/app/http/endpoints/manage/settings.go b/app/http/endpoints/manage/settings.go index 9e75abe..f17f6ca 100644 --- a/app/http/endpoints/manage/settings.go +++ b/app/http/endpoints/manage/settings.go @@ -69,8 +69,8 @@ func SettingsHandler(ctx *gin.Context) { // Archive channel // Create a list of IDs var channelIds []string - for _, c := range guild.Channels { - channelIds = append(channelIds, c.Id) + for _, c := range channels { + channelIds = append(channelIds, strconv.Itoa(int(c.ChannelId))) } panelSettings := table.GetPanelSettings(guildId) diff --git a/app/http/endpoints/manage/updatesettings.go b/app/http/endpoints/manage/updatesettings.go index b359983..87d1615 100644 --- a/app/http/endpoints/manage/updatesettings.go +++ b/app/http/endpoints/manage/updatesettings.go @@ -67,7 +67,7 @@ func UpdateSettingsHandler(ctx *gin.Context) { // Get welcome message welcomeMessageValid := false welcomeMessage := ctx.PostForm("welcomeMessage") - if welcomeMessage != "" && len(welcomeMessage) > 1000 { + if welcomeMessage != "" && len(welcomeMessage) < 1000 { table.UpdateWelcomeMessage(guildId, welcomeMessage) welcomeMessageValid = true } @@ -139,7 +139,7 @@ func UpdateSettingsHandler(ctx *gin.Context) { // Get panel colour panelColourHex := ctx.PostForm("panelcolour") - if panelColourHex == "" { + if panelColourHex != "" { panelColour, err := strconv.ParseUint(panelColourHex, 16, 32) if err == nil { table.UpdatePanelColour(guildId, int(panelColour)) @@ -150,7 +150,7 @@ func UpdateSettingsHandler(ctx *gin.Context) { usersCanClose := ctx.PostForm("userscanclose") == "on" table.SetUserCanClose(guildId, usersCanClose) - ctx.Redirect(302, fmt.Sprintf("/manage/%d/settings?validPrefix=%t&validWelcomeMessage=%t&ticketLimitValid=%t", guildId, prefixValid, welcomeMessageValid, ticketLimitValid)) + ctx.Redirect(302, fmt.Sprintf("/manage/%d/settings?validPrefix=%t&validWelcomeMessage=%t&validTicketLimit=%t", guildId, prefixValid, welcomeMessageValid, ticketLimitValid)) } else { ctx.Redirect(302, "/login") } diff --git a/app/http/server.go b/app/http/server.go index 78a07b8..e532070 100644 --- a/app/http/server.go +++ b/app/http/server.go @@ -49,6 +49,10 @@ func StartServer() { router.GET("/manage/:id/blacklist", manage.BlacklistHandler) router.GET("/manage/:id/blacklist/remove/:user", manage.BlacklistRemoveHandler) + router.GET("/manage/:id/panels", manage.PanelHandler) + router.POST("/manage/:id/panels/create", manage.PanelCreateHandler) + router.GET("/manage/:id/panels/delete/:msg", manage.PanelDeleteHandler) + router.GET("/manage/:id/tickets", manage.TicketListHandler) router.GET("/manage/:id/tickets/view/:uuid", manage.TicketViewHandler) router.POST("/manage/:id/tickets/view/:uuid", manage.SendMessage) @@ -69,6 +73,7 @@ func createRenderer() multitemplate.Renderer { r = addManageTemplate(r, "settings") r = addManageTemplate(r, "ticketlist") r = addManageTemplate(r, "ticketview") + r = addManageTemplate(r, "panels") return r } diff --git a/cache/panelcreate.go b/cache/panelcreate.go new file mode 100644 index 0000000..dc08137 --- /dev/null +++ b/cache/panelcreate.go @@ -0,0 +1,17 @@ +package cache + +import ( + "encoding/json" + "github.com/TicketsBot/GoPanel/database/table" + "github.com/apex/log" +) + +func (c *RedisClient) PublishPanelCreate(settings table.Panel) { + encoded, err := json.Marshal(settings); if err != nil { + log.Error(err.Error()) + return + } + + c.Publish("tickets:panel:create", string(encoded)) +} + diff --git a/cmd/panel/main.go b/cmd/panel/main.go index 4578464..acde42e 100644 --- a/cmd/panel/main.go +++ b/cmd/panel/main.go @@ -1,22 +1,35 @@ package main import ( + crypto_rand "crypto/rand" + "encoding/binary" "fmt" "github.com/TicketsBot/GoPanel/app/http" "github.com/TicketsBot/GoPanel/app/http/endpoints/manage" "github.com/TicketsBot/GoPanel/cache" "github.com/TicketsBot/GoPanel/config" "github.com/TicketsBot/GoPanel/database" + "github.com/TicketsBot/GoPanel/utils" + "github.com/TicketsBot/TicketsGo/sentry" "math/rand" "time" ) func main() { - rand.Seed(time.Now().UnixNano() % 3497) + var b [8]byte + _, err := crypto_rand.Read(b[:]) + if err == nil { + rand.Seed(int64(binary.LittleEndian.Uint64(b[:]))) + } else { + sentry.Error(err) + rand.Seed(time.Now().UnixNano()) + } config.LoadConfig() database.ConnectToDatabase() + utils.LoadEmoji() + cache.Client = cache.NewRedisClient() go Listen(cache.Client) diff --git a/database/table/panels.go b/database/table/panels.go new file mode 100644 index 0000000..ae0c775 --- /dev/null +++ b/database/table/panels.go @@ -0,0 +1,51 @@ +package table + +import ( + "github.com/TicketsBot/GoPanel/database" +) + +type Panel struct { + MessageId int64 `gorm:"column:MESSAGEID"` + ChannelId int64 `gorm:"column:CHANNELID"` + GuildId int64 `gorm:"column:GUILDID"` // Might be useful in the future so we store it + + Title string `gorm:"column:TITLE;type:VARCHAR(255)"` + Content string `gorm:"column:CONTENT;type:TEXT"` + Colour int `gorm:"column:COLOUR` + TargetCategory int64 `gorm:"column:TARGETCATEGORY"` + ReactionEmote string `gorm:"column:REACTIONEMOTE;type:VARCHAR(32)"` +} + +func (Panel) TableName() string { + return "panels" +} + +func AddPanel(messageId, channelId, guildId int64, title, content string, colour int, targetCategory int64, reactionEmote string) { + database.Database.Create(&Panel{ + MessageId: messageId, + ChannelId: channelId, + GuildId: guildId, + + Title: title, + Content: content, + Colour: colour, + TargetCategory: targetCategory, + ReactionEmote: reactionEmote, + }) +} + +func IsPanel(messageId int64, ch chan bool) { + var count int + database.Database.Table(Panel{}.TableName()).Where(Panel{MessageId: messageId}).Count(&count) + ch <- count > 0 +} + +func GetPanelsByGuild(guildId int64, ch chan []Panel) { + var panels []Panel + database.Database.Where(Panel{GuildId: guildId}).Find(&panels) + ch <- panels +} + +func DeletePanel(msgId int64) { + database.Database.Where(Panel{MessageId: msgId}).Delete(Panel{}) +} diff --git a/emojis.json b/emojis.json new file mode 100644 index 0000000..e3164c1 --- /dev/null +++ b/emojis.json @@ -0,0 +1,1939 @@ +{ + "100": "๐Ÿ’ฏ", + "1234": "๐Ÿ”ข", + "grinning": "๐Ÿ˜€", + "smiley": "๐Ÿ˜ƒ", + "smile": "๐Ÿ˜„", + "grin": "๐Ÿ˜", + "laughing": "๐Ÿ˜†", + "satisfied": "๐Ÿ˜†", + "sweat_smile": "๐Ÿ˜…", + "joy": "๐Ÿ˜‚", + "rofl": "๐Ÿคฃ", + "rolling_on_the_floor_laughing": "๐Ÿคฃ", + "relaxed": "โ˜บ๏ธ", + "blush": "๐Ÿ˜Š", + "innocent": "๐Ÿ˜‡", + "slight_smile": "๐Ÿ™‚", + "slightly_smiling_face": "๐Ÿ™‚", + "upside_down": "๐Ÿ™ƒ", + "upside_down_face": "๐Ÿ™ƒ", + "wink": "๐Ÿ˜‰", + "relieved": "๐Ÿ˜Œ", + "heart_eyes": "๐Ÿ˜", + "smiling_face_with_3_hearts": "๐Ÿฅฐ", + "kissing_heart": "๐Ÿ˜˜", + "kissing": "๐Ÿ˜—", + "kissing_smiling_eyes": "๐Ÿ˜™", + "kissing_closed_eyes": "๐Ÿ˜š", + "yum": "๐Ÿ˜‹", + "stuck_out_tongue": "๐Ÿ˜›", + "stuck_out_tongue_closed_eyes": "๐Ÿ˜", + "stuck_out_tongue_winking_eye": "๐Ÿ˜œ", + "zany_face": "๐Ÿคช", + "face_with_raised_eyebrow": "๐Ÿคจ", + "face_with_monocle": "๐Ÿง", + "nerd": "๐Ÿค“", + "nerd_face": "๐Ÿค“", + "sunglasses": "๐Ÿ˜Ž", + "star_struck": "๐Ÿคฉ", + "partying_face": "๐Ÿฅณ", + "smirk": "๐Ÿ˜", + "unamused": "๐Ÿ˜’", + "disappointed": "๐Ÿ˜ž", + "pensive": "๐Ÿ˜”", + "worried": "๐Ÿ˜Ÿ", + "confused": "๐Ÿ˜•", + "slight_frown": "๐Ÿ™", + "slightly_frowning_face": "๐Ÿ™", + "frowning2": "โ˜น๏ธ", + "white_frowning_face": "โ˜น๏ธ", + "persevere": "๐Ÿ˜ฃ", + "confounded": "๐Ÿ˜–", + "tired_face": "๐Ÿ˜ซ", + "weary": "๐Ÿ˜ฉ", + "pleading_face": "๐Ÿฅบ", + "cry": "๐Ÿ˜ข", + "sob": "๐Ÿ˜ญ", + "triumph": "๐Ÿ˜ค", + "angry": "๐Ÿ˜ ", + "rage": "๐Ÿ˜ก", + "face_with_symbols_over_mouth": "๐Ÿคฌ", + "exploding_head": "๐Ÿคฏ", + "flushed": "๐Ÿ˜ณ", + "hot_face": "๐Ÿฅต", + "cold_face": "๐Ÿฅถ", + "scream": "๐Ÿ˜ฑ", + "fearful": "๐Ÿ˜จ", + "cold_sweat": "๐Ÿ˜ฐ", + "disappointed_relieved": "๐Ÿ˜ฅ", + "sweat": "๐Ÿ˜“", + "hugging": "๐Ÿค—", + "hugging_face": "๐Ÿค—", + "thinking": "๐Ÿค”", + "thinking_face": "๐Ÿค”", + "face_with_hand_over_mouth": "๐Ÿคญ", + "yawning_face": "๐Ÿฅฑ", + "shushing_face": "๐Ÿคซ", + "lying_face": "๐Ÿคฅ", + "liar": "๐Ÿคฅ", + "no_mouth": "๐Ÿ˜ถ", + "neutral_face": "๐Ÿ˜", + "expressionless": "๐Ÿ˜‘", + "grimacing": "๐Ÿ˜ฌ", + "rolling_eyes": "๐Ÿ™„", + "face_with_rolling_eyes": "๐Ÿ™„", + "hushed": "๐Ÿ˜ฏ", + "frowning": "๐Ÿ˜ฆ", + "anguished": "๐Ÿ˜ง", + "open_mouth": "๐Ÿ˜ฎ", + "astonished": "๐Ÿ˜ฒ", + "sleeping": "๐Ÿ˜ด", + "drooling_face": "๐Ÿคค", + "drool": "๐Ÿคค", + "sleepy": "๐Ÿ˜ช", + "dizzy_face": "๐Ÿ˜ต", + "zipper_mouth": "๐Ÿค", + "zipper_mouth_face": "๐Ÿค", + "woozy_face": "๐Ÿฅด", + "nauseated_face": "๐Ÿคข", + "sick": "๐Ÿคข", + "face_vomiting": "๐Ÿคฎ", + "sneezing_face": "๐Ÿคง", + "sneeze": "๐Ÿคง", + "mask": "๐Ÿ˜ท", + "thermometer_face": "๐Ÿค’", + "face_with_thermometer": "๐Ÿค’", + "head_bandage": "๐Ÿค•", + "face_with_head_bandage": "๐Ÿค•", + "money_mouth": "๐Ÿค‘", + "money_mouth_face": "๐Ÿค‘", + "cowboy": "๐Ÿค ", + "face_with_cowboy_hat": "๐Ÿค ", + "smiling_imp": "๐Ÿ˜ˆ", + "imp": "๐Ÿ‘ฟ", + "japanese_ogre": "๐Ÿ‘น", + "japanese_goblin": "๐Ÿ‘บ", + "clown": "๐Ÿคก", + "clown_face": "๐Ÿคก", + "poop": "๐Ÿ’ฉ", + "shit": "๐Ÿ’ฉ", + "hankey": "๐Ÿ’ฉ", + "poo": "๐Ÿ’ฉ", + "ghost": "๐Ÿ‘ป", + "skull": "๐Ÿ’€", + "skeleton": "๐Ÿ’€", + "skull_crossbones": "โ˜ ๏ธ", + "skull_and_crossbones": "โ˜ ๏ธ", + "alien": "๐Ÿ‘ฝ", + "space_invader": "๐Ÿ‘พ", + "robot": "๐Ÿค–", + "robot_face": "๐Ÿค–", + "jack_o_lantern": "๐ŸŽƒ", + "smiley_cat": "๐Ÿ˜บ", + "smile_cat": "๐Ÿ˜ธ", + "joy_cat": "๐Ÿ˜น", + "heart_eyes_cat": "๐Ÿ˜ป", + "smirk_cat": "๐Ÿ˜ผ", + "kissing_cat": "๐Ÿ˜ฝ", + "scream_cat": "๐Ÿ™€", + "crying_cat_face": "๐Ÿ˜ฟ", + "pouting_cat": "๐Ÿ˜พ", + "palms_up_together": "๐Ÿคฒ", + "open_hands": "๐Ÿ‘", + "raised_hands": "๐Ÿ™Œ", + "clap": "๐Ÿ‘", + "handshake": "๐Ÿค", + "shaking_hands": "๐Ÿค", + "thumbsup": "๐Ÿ‘", + "+1": "๐Ÿ‘", + "thumbup": "๐Ÿ‘", + "thumbsdown": "๐Ÿ‘Ž", + "-1": "๐Ÿ‘Ž", + "thumbdown": "๐Ÿ‘Ž", + "punch": "๐Ÿ‘Š", + "fist": "โœŠ", + "left_facing_fist": "๐Ÿค›", + "left_fist": "๐Ÿค›", + "right_facing_fist": "๐Ÿคœ", + "right_fist": "๐Ÿคœ", + "fingers_crossed": "๐Ÿคž", + "hand_with_index_and_middle_finger_crossed": "๐Ÿคž", + "v": "โœŒ๏ธ", + "love_you_gesture": "๐ŸคŸ", + "metal": "๐Ÿค˜", + "sign_of_the_horns": "๐Ÿค˜", + "ok_hand": "๐Ÿ‘Œ", + "pinching_hand": "๐Ÿค", + "point_left": "๐Ÿ‘ˆ", + "point_right": "๐Ÿ‘‰", + "point_up_2": "๐Ÿ‘†", + "point_down": "๐Ÿ‘‡", + "point_up": "โ˜๏ธ", + "raised_hand": "โœ‹", + "raised_back_of_hand": "๐Ÿคš", + "back_of_hand": "๐Ÿคš", + "hand_splayed": "๐Ÿ–๏ธ", + "raised_hand_with_fingers_splayed": "๐Ÿ–๏ธ", + "vulcan": "๐Ÿ––", + "raised_hand_with_part_between_middle_and_ring_fingers": "๐Ÿ––", + "wave": "๐Ÿ‘‹", + "call_me": "๐Ÿค™", + "call_me_hand": "๐Ÿค™", + "muscle": "๐Ÿ’ช", + "mechanical_arm": "๐Ÿฆพ", + "middle_finger": "๐Ÿ–•", + "reversed_hand_with_middle_finger_extended": "๐Ÿ–•", + "writing_hand": "โœ๏ธ", + "pray": "๐Ÿ™", + "foot": "๐Ÿฆถ", + "leg": "๐Ÿฆต", + "mechanical_leg": "๐Ÿฆฟ", + "lipstick": "๐Ÿ’„", + "kiss": "๐Ÿ’‹", + "lips": "๐Ÿ‘„", + "tooth": "๐Ÿฆท", + "bone": "๐Ÿฆด", + "tongue": "๐Ÿ‘…", + "ear": "๐Ÿ‘‚", + "ear_with_hearing_aid": "๐Ÿฆป", + "nose": "๐Ÿ‘ƒ", + "footprints": "๐Ÿ‘ฃ", + "eye": "๐Ÿ‘๏ธ", + "eyes": "๐Ÿ‘€", + "brain": "๐Ÿง ", + "speaking_head": "๐Ÿ—ฃ๏ธ", + "speaking_head_in_silhouette": "๐Ÿ—ฃ๏ธ", + "bust_in_silhouette": "๐Ÿ‘ค", + "busts_in_silhouette": "๐Ÿ‘ฅ", + "baby": "๐Ÿ‘ถ", + "girl": "๐Ÿ‘ง", + "child": "๐Ÿง’", + "boy": "๐Ÿ‘ฆ", + "woman": "๐Ÿ‘ฉ", + "adult": "๐Ÿง‘", + "man": "๐Ÿ‘จ", + "woman_curly_haired": "๐Ÿ‘ฉโ€๐Ÿฆฑ", + "man_curly_haired": "๐Ÿ‘จโ€๐Ÿฆฑ", + "woman_red_haired": "๐Ÿ‘ฉโ€๐Ÿฆฐ", + "man_red_haired": "๐Ÿ‘จโ€๐Ÿฆฐ", + "blond_haired_woman": "๐Ÿ‘ฑโ€โ™€๏ธ", + "blond_haired_person": "๐Ÿ‘ฑ", + "person_with_blond_hair": "๐Ÿ‘ฑ", + "blond_haired_man": "๐Ÿ‘ฑโ€โ™‚๏ธ", + "woman_white_haired": "๐Ÿ‘ฉโ€๐Ÿฆณ", + "man_white_haired": "๐Ÿ‘จโ€๐Ÿฆณ", + "woman_bald": "๐Ÿ‘ฉโ€๐Ÿฆฒ", + "man_bald": "๐Ÿ‘จโ€๐Ÿฆฒ", + "bearded_person": "๐Ÿง”", + "older_woman": "๐Ÿ‘ต", + "grandma": "๐Ÿ‘ต", + "older_adult": "๐Ÿง“", + "older_man": "๐Ÿ‘ด", + "man_with_chinese_cap": "๐Ÿ‘ฒ", + "man_with_gua_pi_mao": "๐Ÿ‘ฒ", + "person_wearing_turban": "๐Ÿ‘ณ", + "man_with_turban": "๐Ÿ‘ณ", + "woman_wearing_turban": "๐Ÿ‘ณโ€โ™€๏ธ", + "man_wearing_turban": "๐Ÿ‘ณโ€โ™‚๏ธ", + "woman_with_headscarf": "๐Ÿง•", + "police_officer": "๐Ÿ‘ฎ", + "cop": "๐Ÿ‘ฎ", + "woman_police_officer": "๐Ÿ‘ฎโ€โ™€๏ธ", + "man_police_officer": "๐Ÿ‘ฎโ€โ™‚๏ธ", + "construction_worker": "๐Ÿ‘ท", + "woman_construction_worker": "๐Ÿ‘ทโ€โ™€๏ธ", + "man_construction_worker": "๐Ÿ‘ทโ€โ™‚๏ธ", + "guard": "๐Ÿ’‚", + "guardsman": "๐Ÿ’‚", + "woman_guard": "๐Ÿ’‚โ€โ™€๏ธ", + "man_guard": "๐Ÿ’‚โ€โ™‚๏ธ", + "detective": "๐Ÿ•ต๏ธ", + "spy": "๐Ÿ•ต๏ธ", + "sleuth_or_spy": "๐Ÿ•ต๏ธ", + "woman_detective": "๐Ÿ•ต๏ธโ€โ™€๏ธ", + "man_detective": "๐Ÿ•ต๏ธโ€โ™‚๏ธ", + "woman_health_worker": "๐Ÿ‘ฉโ€โš•๏ธ", + "man_health_worker": "๐Ÿ‘จโ€โš•๏ธ", + "woman_farmer": "๐Ÿ‘ฉโ€๐ŸŒพ", + "man_farmer": "๐Ÿ‘จโ€๐ŸŒพ", + "woman_cook": "๐Ÿ‘ฉโ€๐Ÿณ", + "man_cook": "๐Ÿ‘จโ€๐Ÿณ", + "woman_student": "๐Ÿ‘ฉโ€๐ŸŽ“", + "man_student": "๐Ÿ‘จโ€๐ŸŽ“", + "woman_singer": "๐Ÿ‘ฉโ€๐ŸŽค", + "man_singer": "๐Ÿ‘จโ€๐ŸŽค", + "woman_teacher": "๐Ÿ‘ฉโ€๐Ÿซ", + "man_teacher": "๐Ÿ‘จโ€๐Ÿซ", + "woman_factory_worker": "๐Ÿ‘ฉโ€๐Ÿญ", + "man_factory_worker": "๐Ÿ‘จโ€๐Ÿญ", + "woman_technologist": "๐Ÿ‘ฉโ€๐Ÿ’ป", + "man_technologist": "๐Ÿ‘จโ€๐Ÿ’ป", + "woman_office_worker": "๐Ÿ‘ฉโ€๐Ÿ’ผ", + "man_office_worker": "๐Ÿ‘จโ€๐Ÿ’ผ", + "woman_mechanic": "๐Ÿ‘ฉโ€๐Ÿ”ง", + "man_mechanic": "๐Ÿ‘จโ€๐Ÿ”ง", + "woman_scientist": "๐Ÿ‘ฉโ€๐Ÿ”ฌ", + "man_scientist": "๐Ÿ‘จโ€๐Ÿ”ฌ", + "woman_artist": "๐Ÿ‘ฉโ€๐ŸŽจ", + "man_artist": "๐Ÿ‘จโ€๐ŸŽจ", + "woman_firefighter": "๐Ÿ‘ฉโ€๐Ÿš’", + "man_firefighter": "๐Ÿ‘จโ€๐Ÿš’", + "woman_pilot": "๐Ÿ‘ฉโ€โœˆ๏ธ", + "man_pilot": "๐Ÿ‘จโ€โœˆ๏ธ", + "woman_astronaut": "๐Ÿ‘ฉโ€๐Ÿš€", + "man_astronaut": "๐Ÿ‘จโ€๐Ÿš€", + "woman_judge": "๐Ÿ‘ฉโ€โš–๏ธ", + "man_judge": "๐Ÿ‘จโ€โš–๏ธ", + "bride_with_veil": "๐Ÿ‘ฐ", + "man_in_tuxedo": "๐Ÿคต", + "princess": "๐Ÿ‘ธ", + "prince": "๐Ÿคด", + "superhero": "๐Ÿฆธ", + "woman_superhero": "๐Ÿฆธโ€โ™€๏ธ", + "man_superhero": "๐Ÿฆธโ€โ™‚๏ธ", + "supervillain": "๐Ÿฆน", + "woman_supervillain": "๐Ÿฆนโ€โ™€๏ธ", + "man_supervillain": "๐Ÿฆนโ€โ™‚๏ธ", + "mrs_claus": "๐Ÿคถ", + "mother_christmas": "๐Ÿคถ", + "santa": "๐ŸŽ…", + "mage": "๐Ÿง™", + "woman_mage": "๐Ÿง™โ€โ™€๏ธ", + "man_mage": "๐Ÿง™โ€โ™‚๏ธ", + "elf": "๐Ÿง", + "woman_elf": "๐Ÿงโ€โ™€๏ธ", + "man_elf": "๐Ÿงโ€โ™‚๏ธ", + "vampire": "๐Ÿง›", + "woman_vampire": "๐Ÿง›โ€โ™€๏ธ", + "man_vampire": "๐Ÿง›โ€โ™‚๏ธ", + "zombie": "๐ŸงŸ", + "woman_zombie": "๐ŸงŸโ€โ™€๏ธ", + "man_zombie": "๐ŸงŸโ€โ™‚๏ธ", + "genie": "๐Ÿงž", + "woman_genie": "๐Ÿงžโ€โ™€๏ธ", + "man_genie": "๐Ÿงžโ€โ™‚๏ธ", + "merperson": "๐Ÿงœ", + "mermaid": "๐Ÿงœโ€โ™€๏ธ", + "merman": "๐Ÿงœโ€โ™‚๏ธ", + "fairy": "๐Ÿงš", + "woman_fairy": "๐Ÿงšโ€โ™€๏ธ", + "man_fairy": "๐Ÿงšโ€โ™‚๏ธ", + "angel": "๐Ÿ‘ผ", + "pregnant_woman": "๐Ÿคฐ", + "expecting_woman": "๐Ÿคฐ", + "breast_feeding": "๐Ÿคฑ", + "person_bowing": "๐Ÿ™‡", + "bow": "๐Ÿ™‡", + "woman_bowing": "๐Ÿ™‡โ€โ™€๏ธ", + "man_bowing": "๐Ÿ™‡โ€โ™‚๏ธ", + "person_tipping_hand": "๐Ÿ’", + "information_desk_person": "๐Ÿ’", + "woman_tipping_hand": "๐Ÿ’โ€โ™€๏ธ", + "man_tipping_hand": "๐Ÿ’โ€โ™‚๏ธ", + "person_gesturing_no": "๐Ÿ™…", + "no_good": "๐Ÿ™…", + "woman_gesturing_no": "๐Ÿ™…โ€โ™€๏ธ", + "man_gesturing_no": "๐Ÿ™…โ€โ™‚๏ธ", + "person_gesturing_ok": "๐Ÿ™†", + "ok_woman": "๐Ÿ™†", + "woman_gesturing_ok": "๐Ÿ™†โ€โ™€๏ธ", + "man_gesturing_ok": "๐Ÿ™†โ€โ™‚๏ธ", + "person_raising_hand": "๐Ÿ™‹", + "raising_hand": "๐Ÿ™‹", + "woman_raising_hand": "๐Ÿ™‹โ€โ™€๏ธ", + "man_raising_hand": "๐Ÿ™‹โ€โ™‚๏ธ", + "deaf_person": "๐Ÿง", + "deaf_woman": "๐Ÿงโ€โ™€๏ธ", + "deaf_man": "๐Ÿงโ€โ™‚๏ธ", + "person_facepalming": "๐Ÿคฆ", + "face_palm": "๐Ÿคฆ", + "facepalm": "๐Ÿคฆ", + "woman_facepalming": "๐Ÿคฆโ€โ™€๏ธ", + "man_facepalming": "๐Ÿคฆโ€โ™‚๏ธ", + "person_shrugging": "๐Ÿคท", + "shrug": "๐Ÿคท", + "woman_shrugging": "๐Ÿคทโ€โ™€๏ธ", + "man_shrugging": "๐Ÿคทโ€โ™‚๏ธ", + "person_pouting": "๐Ÿ™Ž", + "person_with_pouting_face": "๐Ÿ™Ž", + "woman_pouting": "๐Ÿ™Žโ€โ™€๏ธ", + "man_pouting": "๐Ÿ™Žโ€โ™‚๏ธ", + "person_frowning": "๐Ÿ™", + "woman_frowning": "๐Ÿ™โ€โ™€๏ธ", + "man_frowning": "๐Ÿ™โ€โ™‚๏ธ", + "person_getting_haircut": "๐Ÿ’‡", + "haircut": "๐Ÿ’‡", + "woman_getting_haircut": "๐Ÿ’‡โ€โ™€๏ธ", + "man_getting_haircut": "๐Ÿ’‡โ€โ™‚๏ธ", + "person_getting_massage": "๐Ÿ’†", + "massage": "๐Ÿ’†", + "woman_getting_face_massage": "๐Ÿ’†โ€โ™€๏ธ", + "man_getting_face_massage": "๐Ÿ’†โ€โ™‚๏ธ", + "person_in_steamy_room": "๐Ÿง–", + "woman_in_steamy_room": "๐Ÿง–โ€โ™€๏ธ", + "man_in_steamy_room": "๐Ÿง–โ€โ™‚๏ธ", + "nail_care": "๐Ÿ’…", + "selfie": "๐Ÿคณ", + "dancer": "๐Ÿ’ƒ", + "man_dancing": "๐Ÿ•บ", + "male_dancer": "๐Ÿ•บ", + "people_with_bunny_ears_partying": "๐Ÿ‘ฏ", + "dancers": "๐Ÿ‘ฏ", + "women_with_bunny_ears_partying": "๐Ÿ‘ฏโ€โ™€๏ธ", + "men_with_bunny_ears_partying": "๐Ÿ‘ฏโ€โ™‚๏ธ", + "levitate": "๐Ÿ•ด๏ธ", + "man_in_business_suit_levitating": "๐Ÿ•ด๏ธ", + "person_walking": "๐Ÿšถ", + "walking": "๐Ÿšถ", + "woman_walking": "๐Ÿšถโ€โ™€๏ธ", + "man_walking": "๐Ÿšถโ€โ™‚๏ธ", + "person_running": "๐Ÿƒ", + "runner": "๐Ÿƒ", + "woman_running": "๐Ÿƒโ€โ™€๏ธ", + "man_running": "๐Ÿƒโ€โ™‚๏ธ", + "person_standing": "๐Ÿง", + "woman_standing": "๐Ÿงโ€โ™€๏ธ", + "man_standing": "๐Ÿงโ€โ™‚๏ธ", + "person_kneeling": "๐ŸงŽ", + "woman_kneeling": "๐ŸงŽโ€โ™€๏ธ", + "man_kneeling": "๐ŸงŽโ€โ™‚๏ธ", + "woman_with_probing_cane": "๐Ÿ‘ฉโ€๐Ÿฆฏ", + "man_with_probing_cane": "๐Ÿ‘จโ€๐Ÿฆฏ", + "woman_in_motorized_wheelchair": "๐Ÿ‘ฉโ€๐Ÿฆผ", + "man_in_motorized_wheelchair": "๐Ÿ‘จโ€๐Ÿฆผ", + "woman_in_manual_wheelchair": "๐Ÿ‘ฉโ€๐Ÿฆฝ", + "man_in_manual_wheelchair": "๐Ÿ‘จโ€๐Ÿฆฝ", + "people_holding_hands": "๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘", + "couple": "๐Ÿ‘ซ", + "two_women_holding_hands": "๐Ÿ‘ญ", + "two_men_holding_hands": "๐Ÿ‘ฌ", + "couple_with_heart": "๐Ÿ’‘", + "couple_with_heart_woman_man": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ", + "couple_ww": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", + "couple_with_heart_ww": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", + "couple_mm": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", + "couple_with_heart_mm": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", + "couplekiss": "๐Ÿ’", + "kiss_woman_man": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + "kiss_ww": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", + "couplekiss_ww": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", + "kiss_mm": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + "couplekiss_mm": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + "family": "๐Ÿ‘ช", + "family_man_woman_boy": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "family_mwg": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + "family_mwgb": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_mwbb": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_mwgg": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "family_wwb": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "family_wwg": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + "family_wwgb": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_wwbb": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_wwgg": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "family_mmb": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ", + "family_mmg": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง", + "family_mmgb": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_mmbb": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_mmgg": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "family_woman_boy": "๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "family_woman_girl": "๐Ÿ‘ฉโ€๐Ÿ‘ง", + "family_woman_girl_boy": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_woman_boy_boy": "๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_woman_girl_girl": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "family_man_boy": "๐Ÿ‘จโ€๐Ÿ‘ฆ", + "family_man_girl": "๐Ÿ‘จโ€๐Ÿ‘ง", + "family_man_girl_boy": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_man_boy_boy": "๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_man_girl_girl": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "yarn": "๐Ÿงถ", + "thread": "๐Ÿงต", + "coat": "๐Ÿงฅ", + "lab_coat": "๐Ÿฅผ", + "safety_vest": "๐Ÿฆบ", + "womans_clothes": "๐Ÿ‘š", + "shirt": "๐Ÿ‘•", + "jeans": "๐Ÿ‘–", + "shorts": "๐Ÿฉณ", + "necktie": "๐Ÿ‘”", + "dress": "๐Ÿ‘—", + "bikini": "๐Ÿ‘™", + "one_piece_swimsuit": "๐Ÿฉฑ", + "kimono": "๐Ÿ‘˜", + "sari": "๐Ÿฅป", + "womans_flat_shoe": "๐Ÿฅฟ", + "high_heel": "๐Ÿ‘ ", + "sandal": "๐Ÿ‘ก", + "boot": "๐Ÿ‘ข", + "ballet_shoes": "๐Ÿฉฐ", + "mans_shoe": "๐Ÿ‘ž", + "athletic_shoe": "๐Ÿ‘Ÿ", + "hiking_boot": "๐Ÿฅพ", + "briefs": "๐Ÿฉฒ", + "socks": "๐Ÿงฆ", + "gloves": "๐Ÿงค", + "scarf": "๐Ÿงฃ", + "tophat": "๐ŸŽฉ", + "billed_cap": "๐Ÿงข", + "womans_hat": "๐Ÿ‘’", + "mortar_board": "๐ŸŽ“", + "helmet_with_cross": "โ›‘๏ธ", + "helmet_with_white_cross": "โ›‘๏ธ", + "crown": "๐Ÿ‘‘", + "ring": "๐Ÿ’", + "pouch": "๐Ÿ‘", + "purse": "๐Ÿ‘›", + "handbag": "๐Ÿ‘œ", + "briefcase": "๐Ÿ’ผ", + "school_satchel": "๐ŸŽ’", + "luggage": "๐Ÿงณ", + "eyeglasses": "๐Ÿ‘“", + "dark_sunglasses": "๐Ÿ•ถ๏ธ", + "goggles": "๐Ÿฅฝ", + "diving_mask": "๐Ÿคฟ", + "closed_umbrella": "๐ŸŒ‚", + "dog": "๐Ÿถ", + "cat": "๐Ÿฑ", + "mouse": "๐Ÿญ", + "hamster": "๐Ÿน", + "rabbit": "๐Ÿฐ", + "fox": "๐ŸฆŠ", + "fox_face": "๐ŸฆŠ", + "bear": "๐Ÿป", + "panda_face": "๐Ÿผ", + "koala": "๐Ÿจ", + "tiger": "๐Ÿฏ", + "lion_face": "๐Ÿฆ", + "lion": "๐Ÿฆ", + "cow": "๐Ÿฎ", + "pig": "๐Ÿท", + "pig_nose": "๐Ÿฝ", + "frog": "๐Ÿธ", + "monkey_face": "๐Ÿต", + "see_no_evil": "๐Ÿ™ˆ", + "hear_no_evil": "๐Ÿ™‰", + "speak_no_evil": "๐Ÿ™Š", + "monkey": "๐Ÿ’", + "chicken": "๐Ÿ”", + "penguin": "๐Ÿง", + "bird": "๐Ÿฆ", + "baby_chick": "๐Ÿค", + "hatching_chick": "๐Ÿฃ", + "hatched_chick": "๐Ÿฅ", + "duck": "๐Ÿฆ†", + "eagle": "๐Ÿฆ…", + "owl": "๐Ÿฆ‰", + "bat": "๐Ÿฆ‡", + "wolf": "๐Ÿบ", + "boar": "๐Ÿ—", + "horse": "๐Ÿด", + "unicorn": "๐Ÿฆ„", + "unicorn_face": "๐Ÿฆ„", + "bee": "๐Ÿ", + "bug": "๐Ÿ›", + "butterfly": "๐Ÿฆ‹", + "snail": "๐ŸŒ", + "shell": "๐Ÿš", + "beetle": "๐Ÿž", + "ant": "๐Ÿœ", + "mosquito": "๐ŸฆŸ", + "cricket": "๐Ÿฆ—", + "spider": "๐Ÿ•ท๏ธ", + "spider_web": "๐Ÿ•ธ๏ธ", + "scorpion": "๐Ÿฆ‚", + "turtle": "๐Ÿข", + "snake": "๐Ÿ", + "lizard": "๐ŸฆŽ", + "t_rex": "๐Ÿฆ–", + "sauropod": "๐Ÿฆ•", + "octopus": "๐Ÿ™", + "squid": "๐Ÿฆ‘", + "shrimp": "๐Ÿฆ", + "lobster": "๐Ÿฆž", + "oyster": "๐Ÿฆช", + "crab": "๐Ÿฆ€", + "blowfish": "๐Ÿก", + "tropical_fish": "๐Ÿ ", + "fish": "๐ŸŸ", + "dolphin": "๐Ÿฌ", + "whale": "๐Ÿณ", + "whale2": "๐Ÿ‹", + "shark": "๐Ÿฆˆ", + "crocodile": "๐ŸŠ", + "tiger2": "๐Ÿ…", + "leopard": "๐Ÿ†", + "zebra": "๐Ÿฆ“", + "gorilla": "๐Ÿฆ", + "orangutan": "๐Ÿฆง", + "elephant": "๐Ÿ˜", + "hippopotamus": "๐Ÿฆ›", + "rhino": "๐Ÿฆ", + "rhinoceros": "๐Ÿฆ", + "dromedary_camel": "๐Ÿช", + "camel": "๐Ÿซ", + "giraffe": "๐Ÿฆ’", + "kangaroo": "๐Ÿฆ˜", + "water_buffalo": "๐Ÿƒ", + "ox": "๐Ÿ‚", + "cow2": "๐Ÿ„", + "racehorse": "๐ŸŽ", + "pig2": "๐Ÿ–", + "ram": "๐Ÿ", + "llama": "๐Ÿฆ™", + "sheep": "๐Ÿ‘", + "goat": "๐Ÿ", + "deer": "๐ŸฆŒ", + "dog2": "๐Ÿ•", + "guide_dog": "๐Ÿฆฎ", + "service_dog": "๐Ÿ•โ€๐Ÿฆบ", + "poodle": "๐Ÿฉ", + "cat2": "๐Ÿˆ", + "rooster": "๐Ÿ“", + "turkey": "๐Ÿฆƒ", + "peacock": "๐Ÿฆš", + "parrot": "๐Ÿฆœ", + "swan": "๐Ÿฆข", + "flamingo": "๐Ÿฆฉ", + "dove": "๐Ÿ•Š๏ธ", + "dove_of_peace": "๐Ÿ•Š๏ธ", + "rabbit2": "๐Ÿ‡", + "sloth": "๐Ÿฆฅ", + "otter": "๐Ÿฆฆ", + "skunk": "๐Ÿฆจ", + "raccoon": "๐Ÿฆ", + "badger": "๐Ÿฆก", + "mouse2": "๐Ÿ", + "rat": "๐Ÿ€", + "chipmunk": "๐Ÿฟ๏ธ", + "hedgehog": "๐Ÿฆ”", + "feet": "๐Ÿพ", + "paw_prints": "๐Ÿพ", + "dragon": "๐Ÿ‰", + "dragon_face": "๐Ÿฒ", + "cactus": "๐ŸŒต", + "christmas_tree": "๐ŸŽ„", + "evergreen_tree": "๐ŸŒฒ", + "deciduous_tree": "๐ŸŒณ", + "palm_tree": "๐ŸŒด", + "seedling": "๐ŸŒฑ", + "herb": "๐ŸŒฟ", + "shamrock": "โ˜˜๏ธ", + "four_leaf_clover": "๐Ÿ€", + "bamboo": "๐ŸŽ", + "tanabata_tree": "๐ŸŽ‹", + "leaves": "๐Ÿƒ", + "fallen_leaf": "๐Ÿ‚", + "maple_leaf": "๐Ÿ", + "mushroom": "๐Ÿ„", + "ear_of_rice": "๐ŸŒพ", + "bouquet": "๐Ÿ’", + "tulip": "๐ŸŒท", + "rose": "๐ŸŒน", + "wilted_rose": "๐Ÿฅ€", + "wilted_flower": "๐Ÿฅ€", + "hibiscus": "๐ŸŒบ", + "cherry_blossom": "๐ŸŒธ", + "blossom": "๐ŸŒผ", + "sunflower": "๐ŸŒป", + "sun_with_face": "๐ŸŒž", + "full_moon_with_face": "๐ŸŒ", + "first_quarter_moon_with_face": "๐ŸŒ›", + "last_quarter_moon_with_face": "๐ŸŒœ", + "new_moon_with_face": "๐ŸŒš", + "full_moon": "๐ŸŒ•", + "waning_gibbous_moon": "๐ŸŒ–", + "last_quarter_moon": "๐ŸŒ—", + "waning_crescent_moon": "๐ŸŒ˜", + "new_moon": "๐ŸŒ‘", + "waxing_crescent_moon": "๐ŸŒ’", + "first_quarter_moon": "๐ŸŒ“", + "waxing_gibbous_moon": "๐ŸŒ”", + "crescent_moon": "๐ŸŒ™", + "earth_americas": "๐ŸŒŽ", + "earth_africa": "๐ŸŒ", + "earth_asia": "๐ŸŒ", + "ringed_planet": "๐Ÿช", + "dizzy": "๐Ÿ’ซ", + "star": "โญ", + "star2": "๐ŸŒŸ", + "sparkles": "โœจ", + "zap": "โšก", + "comet": "โ˜„๏ธ", + "boom": "๐Ÿ’ฅ", + "fire": "๐Ÿ”ฅ", + "flame": "๐Ÿ”ฅ", + "cloud_tornado": "๐ŸŒช๏ธ", + "cloud_with_tornado": "๐ŸŒช๏ธ", + "rainbow": "๐ŸŒˆ", + "sunny": "โ˜€๏ธ", + "white_sun_small_cloud": "๐ŸŒค๏ธ", + "white_sun_with_small_cloud": "๐ŸŒค๏ธ", + "partly_sunny": "โ›…", + "white_sun_cloud": "๐ŸŒฅ๏ธ", + "white_sun_behind_cloud": "๐ŸŒฅ๏ธ", + "cloud": "โ˜๏ธ", + "white_sun_rain_cloud": "๐ŸŒฆ๏ธ", + "white_sun_behind_cloud_with_rain": "๐ŸŒฆ๏ธ", + "cloud_rain": "๐ŸŒง๏ธ", + "cloud_with_rain": "๐ŸŒง๏ธ", + "thunder_cloud_rain": "โ›ˆ๏ธ", + "thunder_cloud_and_rain": "โ›ˆ๏ธ", + "cloud_lightning": "๐ŸŒฉ๏ธ", + "cloud_with_lightning": "๐ŸŒฉ๏ธ", + "cloud_snow": "๐ŸŒจ๏ธ", + "cloud_with_snow": "๐ŸŒจ๏ธ", + "snowflake": "โ„๏ธ", + "snowman2": "โ˜ƒ๏ธ", + "snowman": "โ›„", + "wind_blowing_face": "๐ŸŒฌ๏ธ", + "dash": "๐Ÿ’จ", + "droplet": "๐Ÿ’ง", + "sweat_drops": "๐Ÿ’ฆ", + "umbrella": "โ˜”", + "umbrella2": "โ˜‚๏ธ", + "ocean": "๐ŸŒŠ", + "fog": "๐ŸŒซ๏ธ", + "green_apple": "๐Ÿ", + "apple": "๐ŸŽ", + "pear": "๐Ÿ", + "tangerine": "๐ŸŠ", + "lemon": "๐Ÿ‹", + "banana": "๐ŸŒ", + "watermelon": "๐Ÿ‰", + "grapes": "๐Ÿ‡", + "strawberry": "๐Ÿ“", + "melon": "๐Ÿˆ", + "cherries": "๐Ÿ’", + "peach": "๐Ÿ‘", + "mango": "๐Ÿฅญ", + "pineapple": "๐Ÿ", + "coconut": "๐Ÿฅฅ", + "kiwi": "๐Ÿฅ", + "kiwifruit": "๐Ÿฅ", + "tomato": "๐Ÿ…", + "eggplant": "๐Ÿ†", + "avocado": "๐Ÿฅ‘", + "broccoli": "๐Ÿฅฆ", + "leafy_green": "๐Ÿฅฌ", + "cucumber": "๐Ÿฅ’", + "hot_pepper": "๐ŸŒถ๏ธ", + "corn": "๐ŸŒฝ", + "carrot": "๐Ÿฅ•", + "onion": "๐Ÿง…", + "garlic": "๐Ÿง„", + "potato": "๐Ÿฅ”", + "sweet_potato": "๐Ÿ ", + "croissant": "๐Ÿฅ", + "bagel": "๐Ÿฅฏ", + "bread": "๐Ÿž", + "french_bread": "๐Ÿฅ–", + "baguette_bread": "๐Ÿฅ–", + "pretzel": "๐Ÿฅจ", + "cheese": "๐Ÿง€", + "cheese_wedge": "๐Ÿง€", + "egg": "๐Ÿฅš", + "cooking": "๐Ÿณ", + "pancakes": "๐Ÿฅž", + "waffle": "๐Ÿง‡", + "bacon": "๐Ÿฅ“", + "cut_of_meat": "๐Ÿฅฉ", + "poultry_leg": "๐Ÿ—", + "meat_on_bone": "๐Ÿ–", + "hotdog": "๐ŸŒญ", + "hot_dog": "๐ŸŒญ", + "hamburger": "๐Ÿ”", + "fries": "๐ŸŸ", + "pizza": "๐Ÿ•", + "sandwich": "๐Ÿฅช", + "falafel": "๐Ÿง†", + "stuffed_flatbread": "๐Ÿฅ™", + "stuffed_pita": "๐Ÿฅ™", + "taco": "๐ŸŒฎ", + "burrito": "๐ŸŒฏ", + "salad": "๐Ÿฅ—", + "green_salad": "๐Ÿฅ—", + "shallow_pan_of_food": "๐Ÿฅ˜", + "paella": "๐Ÿฅ˜", + "canned_food": "๐Ÿฅซ", + "spaghetti": "๐Ÿ", + "ramen": "๐Ÿœ", + "stew": "๐Ÿฒ", + "curry": "๐Ÿ›", + "sushi": "๐Ÿฃ", + "bento": "๐Ÿฑ", + "dumpling": "๐ŸฅŸ", + "fried_shrimp": "๐Ÿค", + "rice_ball": "๐Ÿ™", + "rice": "๐Ÿš", + "rice_cracker": "๐Ÿ˜", + "fish_cake": "๐Ÿฅ", + "fortune_cookie": "๐Ÿฅ ", + "moon_cake": "๐Ÿฅฎ", + "oden": "๐Ÿข", + "dango": "๐Ÿก", + "shaved_ice": "๐Ÿง", + "ice_cream": "๐Ÿจ", + "icecream": "๐Ÿฆ", + "pie": "๐Ÿฅง", + "cupcake": "๐Ÿง", + "cake": "๐Ÿฐ", + "birthday": "๐ŸŽ‚", + "custard": "๐Ÿฎ", + "pudding": "๐Ÿฎ", + "flan": "๐Ÿฎ", + "lollipop": "๐Ÿญ", + "candy": "๐Ÿฌ", + "chocolate_bar": "๐Ÿซ", + "popcorn": "๐Ÿฟ", + "doughnut": "๐Ÿฉ", + "cookie": "๐Ÿช", + "chestnut": "๐ŸŒฐ", + "peanuts": "๐Ÿฅœ", + "shelled_peanut": "๐Ÿฅœ", + "honey_pot": "๐Ÿฏ", + "butter": "๐Ÿงˆ", + "milk": "๐Ÿฅ›", + "glass_of_milk": "๐Ÿฅ›", + "baby_bottle": "๐Ÿผ", + "coffee": "โ˜•", + "tea": "๐Ÿต", + "mate": "๐Ÿง‰", + "cup_with_straw": "๐Ÿฅค", + "beverage_box": "๐Ÿงƒ", + "ice_cube": "๐ŸงŠ", + "sake": "๐Ÿถ", + "beer": "๐Ÿบ", + "beers": "๐Ÿป", + "champagne_glass": "๐Ÿฅ‚", + "clinking_glass": "๐Ÿฅ‚", + "wine_glass": "๐Ÿท", + "tumbler_glass": "๐Ÿฅƒ", + "whisky": "๐Ÿฅƒ", + "cocktail": "๐Ÿธ", + "tropical_drink": "๐Ÿน", + "champagne": "๐Ÿพ", + "bottle_with_popping_cork": "๐Ÿพ", + "spoon": "๐Ÿฅ„", + "fork_and_knife": "๐Ÿด", + "fork_knife_plate": "๐Ÿฝ๏ธ", + "fork_and_knife_with_plate": "๐Ÿฝ๏ธ", + "bowl_with_spoon": "๐Ÿฅฃ", + "takeout_box": "๐Ÿฅก", + "chopsticks": "๐Ÿฅข", + "salt": "๐Ÿง‚", + "soccer": "โšฝ", + "basketball": "๐Ÿ€", + "football": "๐Ÿˆ", + "baseball": "โšพ", + "softball": "๐ŸฅŽ", + "tennis": "๐ŸŽพ", + "volleyball": "๐Ÿ", + "rugby_football": "๐Ÿ‰", + "flying_disc": "๐Ÿฅ", + "8ball": "๐ŸŽฑ", + "ping_pong": "๐Ÿ“", + "table_tennis": "๐Ÿ“", + "badminton": "๐Ÿธ", + "hockey": "๐Ÿ’", + "field_hockey": "๐Ÿ‘", + "lacrosse": "๐Ÿฅ", + "cricket_game": "๐Ÿ", + "cricket_bat_ball": "๐Ÿ", + "goal": "๐Ÿฅ…", + "goal_net": "๐Ÿฅ…", + "golf": "โ›ณ", + "bow_and_arrow": "๐Ÿน", + "archery": "๐Ÿน", + "fishing_pole_and_fish": "๐ŸŽฃ", + "boxing_glove": "๐ŸฅŠ", + "boxing_gloves": "๐ŸฅŠ", + "martial_arts_uniform": "๐Ÿฅ‹", + "karate_uniform": "๐Ÿฅ‹", + "running_shirt_with_sash": "๐ŸŽฝ", + "skateboard": "๐Ÿ›น", + "sled": "๐Ÿ›ท", + "parachute": "๐Ÿช‚", + "ice_skate": "โ›ธ๏ธ", + "curling_stone": "๐ŸฅŒ", + "ski": "๐ŸŽฟ", + "skier": "โ›ท๏ธ", + "snowboarder": "๐Ÿ‚", + "person_lifting_weights": "๐Ÿ‹๏ธ", + "lifter": "๐Ÿ‹๏ธ", + "weight_lifter": "๐Ÿ‹๏ธ", + "woman_lifting_weights": "๐Ÿ‹๏ธโ€โ™€๏ธ", + "man_lifting_weights": "๐Ÿ‹๏ธโ€โ™‚๏ธ", + "people_wrestling": "๐Ÿคผ", + "wrestlers": "๐Ÿคผ", + "wrestling": "๐Ÿคผ", + "women_wrestling": "๐Ÿคผโ€โ™€๏ธ", + "men_wrestling": "๐Ÿคผโ€โ™‚๏ธ", + "person_doing_cartwheel": "๐Ÿคธ", + "cartwheel": "๐Ÿคธ", + "woman_cartwheeling": "๐Ÿคธโ€โ™€๏ธ", + "man_cartwheeling": "๐Ÿคธโ€โ™‚๏ธ", + "person_bouncing_ball": "โ›น๏ธ", + "basketball_player": "โ›น๏ธ", + "person_with_ball": "โ›น๏ธ", + "woman_bouncing_ball": "โ›น๏ธโ€โ™€๏ธ", + "man_bouncing_ball": "โ›น๏ธโ€โ™‚๏ธ", + "person_fencing": "๐Ÿคบ", + "fencer": "๐Ÿคบ", + "fencing": "๐Ÿคบ", + "person_playing_handball": "๐Ÿคพ", + "handball": "๐Ÿคพ", + "woman_playing_handball": "๐Ÿคพโ€โ™€๏ธ", + "man_playing_handball": "๐Ÿคพโ€โ™‚๏ธ", + "person_golfing": "๐ŸŒ๏ธ", + "golfer": "๐ŸŒ๏ธ", + "woman_golfing": "๐ŸŒ๏ธโ€โ™€๏ธ", + "man_golfing": "๐ŸŒ๏ธโ€โ™‚๏ธ", + "horse_racing": "๐Ÿ‡", + "person_in_lotus_position": "๐Ÿง˜", + "woman_in_lotus_position": "๐Ÿง˜โ€โ™€๏ธ", + "man_in_lotus_position": "๐Ÿง˜โ€โ™‚๏ธ", + "person_surfing": "๐Ÿ„", + "surfer": "๐Ÿ„", + "woman_surfing": "๐Ÿ„โ€โ™€๏ธ", + "man_surfing": "๐Ÿ„โ€โ™‚๏ธ", + "person_swimming": "๐ŸŠ", + "swimmer": "๐ŸŠ", + "woman_swimming": "๐ŸŠโ€โ™€๏ธ", + "man_swimming": "๐ŸŠโ€โ™‚๏ธ", + "person_playing_water_polo": "๐Ÿคฝ", + "water_polo": "๐Ÿคฝ", + "woman_playing_water_polo": "๐Ÿคฝโ€โ™€๏ธ", + "man_playing_water_polo": "๐Ÿคฝโ€โ™‚๏ธ", + "person_rowing_boat": "๐Ÿšฃ", + "rowboat": "๐Ÿšฃ", + "woman_rowing_boat": "๐Ÿšฃโ€โ™€๏ธ", + "man_rowing_boat": "๐Ÿšฃโ€โ™‚๏ธ", + "person_climbing": "๐Ÿง—", + "woman_climbing": "๐Ÿง—โ€โ™€๏ธ", + "man_climbing": "๐Ÿง—โ€โ™‚๏ธ", + "person_mountain_biking": "๐Ÿšต", + "mountain_bicyclist": "๐Ÿšต", + "woman_mountain_biking": "๐Ÿšตโ€โ™€๏ธ", + "man_mountain_biking": "๐Ÿšตโ€โ™‚๏ธ", + "person_biking": "๐Ÿšด", + "bicyclist": "๐Ÿšด", + "woman_biking": "๐Ÿšดโ€โ™€๏ธ", + "man_biking": "๐Ÿšดโ€โ™‚๏ธ", + "trophy": "๐Ÿ†", + "first_place": "๐Ÿฅ‡", + "first_place_medal": "๐Ÿฅ‡", + "second_place": "๐Ÿฅˆ", + "second_place_medal": "๐Ÿฅˆ", + "third_place": "๐Ÿฅ‰", + "third_place_medal": "๐Ÿฅ‰", + "medal": "๐Ÿ…", + "sports_medal": "๐Ÿ…", + "military_medal": "๐ŸŽ–๏ธ", + "rosette": "๐Ÿต๏ธ", + "reminder_ribbon": "๐ŸŽ—๏ธ", + "ticket": "๐ŸŽซ", + "tickets": "๐ŸŽŸ๏ธ", + "admission_tickets": "๐ŸŽŸ๏ธ", + "circus_tent": "๐ŸŽช", + "person_juggling": "๐Ÿคน", + "juggling": "๐Ÿคน", + "juggler": "๐Ÿคน", + "woman_juggling": "๐Ÿคนโ€โ™€๏ธ", + "man_juggling": "๐Ÿคนโ€โ™‚๏ธ", + "performing_arts": "๐ŸŽญ", + "art": "๐ŸŽจ", + "clapper": "๐ŸŽฌ", + "microphone": "๐ŸŽค", + "headphones": "๐ŸŽง", + "musical_score": "๐ŸŽผ", + "musical_keyboard": "๐ŸŽน", + "drum": "๐Ÿฅ", + "drum_with_drumsticks": "๐Ÿฅ", + "saxophone": "๐ŸŽท", + "trumpet": "๐ŸŽบ", + "banjo": "๐Ÿช•", + "guitar": "๐ŸŽธ", + "violin": "๐ŸŽป", + "game_die": "๐ŸŽฒ", + "chess_pawn": "โ™Ÿ๏ธ", + "dart": "๐ŸŽฏ", + "kite": "๐Ÿช", + "yo_yo": "๐Ÿช€", + "bowling": "๐ŸŽณ", + "video_game": "๐ŸŽฎ", + "slot_machine": "๐ŸŽฐ", + "jigsaw": "๐Ÿงฉ", + "red_car": "๐Ÿš—", + "taxi": "๐Ÿš•", + "blue_car": "๐Ÿš™", + "bus": "๐ŸšŒ", + "trolleybus": "๐ŸšŽ", + "race_car": "๐ŸŽ๏ธ", + "racing_car": "๐ŸŽ๏ธ", + "police_car": "๐Ÿš“", + "ambulance": "๐Ÿš‘", + "fire_engine": "๐Ÿš’", + "minibus": "๐Ÿš", + "truck": "๐Ÿšš", + "articulated_lorry": "๐Ÿš›", + "tractor": "๐Ÿšœ", + "auto_rickshaw": "๐Ÿ›บ", + "motor_scooter": "๐Ÿ›ต", + "motorbike": "๐Ÿ›ต", + "motorcycle": "๐Ÿ๏ธ", + "racing_motorcycle": "๐Ÿ๏ธ", + "scooter": "๐Ÿ›ด", + "bike": "๐Ÿšฒ", + "motorized_wheelchair": "๐Ÿฆผ", + "manual_wheelchair": "๐Ÿฆฝ", + "rotating_light": "๐Ÿšจ", + "oncoming_police_car": "๐Ÿš”", + "oncoming_bus": "๐Ÿš", + "oncoming_automobile": "๐Ÿš˜", + "oncoming_taxi": "๐Ÿš–", + "aerial_tramway": "๐Ÿšก", + "mountain_cableway": "๐Ÿš ", + "suspension_railway": "๐ŸšŸ", + "railway_car": "๐Ÿšƒ", + "train": "๐Ÿš‹", + "mountain_railway": "๐Ÿšž", + "monorail": "๐Ÿš", + "bullettrain_side": "๐Ÿš„", + "bullettrain_front": "๐Ÿš…", + "light_rail": "๐Ÿšˆ", + "steam_locomotive": "๐Ÿš‚", + "train2": "๐Ÿš†", + "metro": "๐Ÿš‡", + "tram": "๐ŸšŠ", + "station": "๐Ÿš‰", + "airplane": "โœˆ๏ธ", + "airplane_departure": "๐Ÿ›ซ", + "airplane_arriving": "๐Ÿ›ฌ", + "airplane_small": "๐Ÿ›ฉ๏ธ", + "small_airplane": "๐Ÿ›ฉ๏ธ", + "seat": "๐Ÿ’บ", + "satellite_orbital": "๐Ÿ›ฐ๏ธ", + "rocket": "๐Ÿš€", + "flying_saucer": "๐Ÿ›ธ", + "helicopter": "๐Ÿš", + "canoe": "๐Ÿ›ถ", + "kayak": "๐Ÿ›ถ", + "sailboat": "โ›ต", + "speedboat": "๐Ÿšค", + "motorboat": "๐Ÿ›ฅ๏ธ", + "cruise_ship": "๐Ÿ›ณ๏ธ", + "passenger_ship": "๐Ÿ›ณ๏ธ", + "ferry": "โ›ด๏ธ", + "ship": "๐Ÿšข", + "anchor": "โš“", + "fuelpump": "โ›ฝ", + "construction": "๐Ÿšง", + "vertical_traffic_light": "๐Ÿšฆ", + "traffic_light": "๐Ÿšฅ", + "busstop": "๐Ÿš", + "map": "๐Ÿ—บ๏ธ", + "world_map": "๐Ÿ—บ๏ธ", + "moyai": "๐Ÿ—ฟ", + "statue_of_liberty": "๐Ÿ—ฝ", + "tokyo_tower": "๐Ÿ—ผ", + "european_castle": "๐Ÿฐ", + "japanese_castle": "๐Ÿฏ", + "stadium": "๐ŸŸ๏ธ", + "ferris_wheel": "๐ŸŽก", + "roller_coaster": "๐ŸŽข", + "carousel_horse": "๐ŸŽ ", + "fountain": "โ›ฒ", + "beach_umbrella": "โ›ฑ๏ธ", + "umbrella_on_ground": "โ›ฑ๏ธ", + "beach": "๐Ÿ–๏ธ", + "beach_with_umbrella": "๐Ÿ–๏ธ", + "island": "๐Ÿ๏ธ", + "desert_island": "๐Ÿ๏ธ", + "desert": "๐Ÿœ๏ธ", + "volcano": "๐ŸŒ‹", + "mountain": "โ›ฐ๏ธ", + "mountain_snow": "๐Ÿ”๏ธ", + "snow_capped_mountain": "๐Ÿ”๏ธ", + "mount_fuji": "๐Ÿ—ป", + "camping": "๐Ÿ•๏ธ", + "tent": "โ›บ", + "house": "๐Ÿ ", + "house_with_garden": "๐Ÿก", + "homes": "๐Ÿ˜๏ธ", + "house_buildings": "๐Ÿ˜๏ธ", + "house_abandoned": "๐Ÿš๏ธ", + "derelict_house_building": "๐Ÿš๏ธ", + "construction_site": "๐Ÿ—๏ธ", + "building_construction": "๐Ÿ—๏ธ", + "factory": "๐Ÿญ", + "office": "๐Ÿข", + "department_store": "๐Ÿฌ", + "post_office": "๐Ÿฃ", + "european_post_office": "๐Ÿค", + "hospital": "๐Ÿฅ", + "bank": "๐Ÿฆ", + "hotel": "๐Ÿจ", + "convenience_store": "๐Ÿช", + "school": "๐Ÿซ", + "love_hotel": "๐Ÿฉ", + "wedding": "๐Ÿ’’", + "classical_building": "๐Ÿ›๏ธ", + "church": "โ›ช", + "mosque": "๐Ÿ•Œ", + "hindu_temple": "๐Ÿ›•", + "synagogue": "๐Ÿ•", + "kaaba": "๐Ÿ•‹", + "shinto_shrine": "โ›ฉ๏ธ", + "railway_track": "๐Ÿ›ค๏ธ", + "railroad_track": "๐Ÿ›ค๏ธ", + "motorway": "๐Ÿ›ฃ๏ธ", + "japan": "๐Ÿ—พ", + "rice_scene": "๐ŸŽ‘", + "park": "๐Ÿž๏ธ", + "national_park": "๐Ÿž๏ธ", + "sunrise": "๐ŸŒ…", + "sunrise_over_mountains": "๐ŸŒ„", + "stars": "๐ŸŒ ", + "sparkler": "๐ŸŽ‡", + "fireworks": "๐ŸŽ†", + "city_sunset": "๐ŸŒ‡", + "city_sunrise": "๐ŸŒ‡", + "city_dusk": "๐ŸŒ†", + "cityscape": "๐Ÿ™๏ธ", + "night_with_stars": "๐ŸŒƒ", + "milky_way": "๐ŸŒŒ", + "bridge_at_night": "๐ŸŒ‰", + "foggy": "๐ŸŒ", + "watch": "โŒš", + "iphone": "๐Ÿ“ฑ", + "calling": "๐Ÿ“ฒ", + "computer": "๐Ÿ’ป", + "keyboard": "โŒจ๏ธ", + "desktop": "๐Ÿ–ฅ๏ธ", + "desktop_computer": "๐Ÿ–ฅ๏ธ", + "printer": "๐Ÿ–จ๏ธ", + "mouse_three_button": "๐Ÿ–ฑ๏ธ", + "three_button_mouse": "๐Ÿ–ฑ๏ธ", + "trackball": "๐Ÿ–ฒ๏ธ", + "joystick": "๐Ÿ•น๏ธ", + "compression": "๐Ÿ—œ๏ธ", + "minidisc": "๐Ÿ’ฝ", + "floppy_disk": "๐Ÿ’พ", + "cd": "๐Ÿ’ฟ", + "dvd": "๐Ÿ“€", + "vhs": "๐Ÿ“ผ", + "camera": "๐Ÿ“ท", + "camera_with_flash": "๐Ÿ“ธ", + "video_camera": "๐Ÿ“น", + "movie_camera": "๐ŸŽฅ", + "projector": "๐Ÿ“ฝ๏ธ", + "film_projector": "๐Ÿ“ฝ๏ธ", + "film_frames": "๐ŸŽž๏ธ", + "telephone_receiver": "๐Ÿ“ž", + "telephone": "โ˜Ž๏ธ", + "pager": "๐Ÿ“Ÿ", + "fax": "๐Ÿ“ ", + "tv": "๐Ÿ“บ", + "radio": "๐Ÿ“ป", + "microphone2": "๐ŸŽ™๏ธ", + "studio_microphone": "๐ŸŽ™๏ธ", + "level_slider": "๐ŸŽš๏ธ", + "control_knobs": "๐ŸŽ›๏ธ", + "compass": "๐Ÿงญ", + "stopwatch": "โฑ๏ธ", + "timer": "โฒ๏ธ", + "timer_clock": "โฒ๏ธ", + "alarm_clock": "โฐ", + "clock": "๐Ÿ•ฐ๏ธ", + "mantlepiece_clock": "๐Ÿ•ฐ๏ธ", + "hourglass": "โŒ›", + "hourglass_flowing_sand": "โณ", + "satellite": "๐Ÿ“ก", + "battery": "๐Ÿ”‹", + "electric_plug": "๐Ÿ”Œ", + "bulb": "๐Ÿ’ก", + "flashlight": "๐Ÿ”ฆ", + "candle": "๐Ÿ•ฏ๏ธ", + "fire_extinguisher": "๐Ÿงฏ", + "oil": "๐Ÿ›ข๏ธ", + "oil_drum": "๐Ÿ›ข๏ธ", + "money_with_wings": "๐Ÿ’ธ", + "dollar": "๐Ÿ’ต", + "yen": "๐Ÿ’ด", + "euro": "๐Ÿ’ถ", + "pound": "๐Ÿ’ท", + "moneybag": "๐Ÿ’ฐ", + "credit_card": "๐Ÿ’ณ", + "gem": "๐Ÿ’Ž", + "scales": "โš–๏ธ", + "toolbox": "๐Ÿงฐ", + "wrench": "๐Ÿ”ง", + "hammer": "๐Ÿ”จ", + "hammer_pick": "โš’๏ธ", + "hammer_and_pick": "โš’๏ธ", + "tools": "๐Ÿ› ๏ธ", + "hammer_and_wrench": "๐Ÿ› ๏ธ", + "pick": "โ›๏ธ", + "nut_and_bolt": "๐Ÿ”ฉ", + "gear": "โš™๏ธ", + "bricks": "๐Ÿงฑ", + "chains": "โ›“๏ธ", + "magnet": "๐Ÿงฒ", + "gun": "๐Ÿ”ซ", + "bomb": "๐Ÿ’ฃ", + "firecracker": "๐Ÿงจ", + "axe": "๐Ÿช“", + "razor": "๐Ÿช’", + "knife": "๐Ÿ”ช", + "dagger": "๐Ÿ—ก๏ธ", + "dagger_knife": "๐Ÿ—ก๏ธ", + "crossed_swords": "โš”๏ธ", + "shield": "๐Ÿ›ก๏ธ", + "smoking": "๐Ÿšฌ", + "coffin": "โšฐ๏ธ", + "urn": "โšฑ๏ธ", + "funeral_urn": "โšฑ๏ธ", + "amphora": "๐Ÿบ", + "diya_lamp": "๐Ÿช”", + "crystal_ball": "๐Ÿ”ฎ", + "prayer_beads": "๐Ÿ“ฟ", + "nazar_amulet": "๐Ÿงฟ", + "barber": "๐Ÿ’ˆ", + "alembic": "โš—๏ธ", + "telescope": "๐Ÿ”ญ", + "microscope": "๐Ÿ”ฌ", + "hole": "๐Ÿ•ณ๏ธ", + "probing_cane": "๐Ÿฆฏ", + "stethoscope": "๐Ÿฉบ", + "adhesive_bandage": "๐Ÿฉน", + "pill": "๐Ÿ’Š", + "syringe": "๐Ÿ’‰", + "drop_of_blood": "๐Ÿฉธ", + "dna": "๐Ÿงฌ", + "microbe": "๐Ÿฆ ", + "petri_dish": "๐Ÿงซ", + "test_tube": "๐Ÿงช", + "thermometer": "๐ŸŒก๏ธ", + "chair": "๐Ÿช‘", + "broom": "๐Ÿงน", + "basket": "๐Ÿงบ", + "roll_of_paper": "๐Ÿงป", + "toilet": "๐Ÿšฝ", + "potable_water": "๐Ÿšฐ", + "shower": "๐Ÿšฟ", + "bathtub": "๐Ÿ›", + "bath": "๐Ÿ›€", + "soap": "๐Ÿงผ", + "sponge": "๐Ÿงฝ", + "squeeze_bottle": "๐Ÿงด", + "bellhop": "๐Ÿ›Ž๏ธ", + "bellhop_bell": "๐Ÿ›Ž๏ธ", + "key": "๐Ÿ”‘", + "key2": "๐Ÿ—๏ธ", + "old_key": "๐Ÿ—๏ธ", + "door": "๐Ÿšช", + "couch": "๐Ÿ›‹๏ธ", + "couch_and_lamp": "๐Ÿ›‹๏ธ", + "bed": "๐Ÿ›๏ธ", + "sleeping_accommodation": "๐Ÿ›Œ", + "teddy_bear": "๐Ÿงธ", + "frame_photo": "๐Ÿ–ผ๏ธ", + "frame_with_picture": "๐Ÿ–ผ๏ธ", + "shopping_bags": "๐Ÿ›๏ธ", + "shopping_cart": "๐Ÿ›’", + "shopping_trolley": "๐Ÿ›’", + "gift": "๐ŸŽ", + "balloon": "๐ŸŽˆ", + "flags": "๐ŸŽ", + "ribbon": "๐ŸŽ€", + "confetti_ball": "๐ŸŽŠ", + "tada": "๐ŸŽ‰", + "dolls": "๐ŸŽŽ", + "izakaya_lantern": "๐Ÿฎ", + "wind_chime": "๐ŸŽ", + "red_envelope": "๐Ÿงง", + "envelope": "โœ‰๏ธ", + "envelope_with_arrow": "๐Ÿ“ฉ", + "incoming_envelope": "๐Ÿ“จ", + "e_mail": "๐Ÿ“ง", + "email": "๐Ÿ“ง", + "love_letter": "๐Ÿ’Œ", + "inbox_tray": "๐Ÿ“ฅ", + "outbox_tray": "๐Ÿ“ค", + "package": "๐Ÿ“ฆ", + "label": "๐Ÿท๏ธ", + "mailbox_closed": "๐Ÿ“ช", + "mailbox": "๐Ÿ“ซ", + "mailbox_with_mail": "๐Ÿ“ฌ", + "mailbox_with_no_mail": "๐Ÿ“ญ", + "postbox": "๐Ÿ“ฎ", + "postal_horn": "๐Ÿ“ฏ", + "scroll": "๐Ÿ“œ", + "page_with_curl": "๐Ÿ“ƒ", + "page_facing_up": "๐Ÿ“„", + "bookmark_tabs": "๐Ÿ“‘", + "receipt": "๐Ÿงพ", + "bar_chart": "๐Ÿ“Š", + "chart_with_upwards_trend": "๐Ÿ“ˆ", + "chart_with_downwards_trend": "๐Ÿ“‰", + "notepad_spiral": "๐Ÿ—’๏ธ", + "spiral_note_pad": "๐Ÿ—’๏ธ", + "calendar_spiral": "๐Ÿ—“๏ธ", + "spiral_calendar_pad": "๐Ÿ—“๏ธ", + "calendar": "๐Ÿ“†", + "date": "๐Ÿ“…", + "wastebasket": "๐Ÿ—‘๏ธ", + "card_index": "๐Ÿ“‡", + "card_box": "๐Ÿ—ƒ๏ธ", + "card_file_box": "๐Ÿ—ƒ๏ธ", + "ballot_box": "๐Ÿ—ณ๏ธ", + "ballot_box_with_ballot": "๐Ÿ—ณ๏ธ", + "file_cabinet": "๐Ÿ—„๏ธ", + "clipboard": "๐Ÿ“‹", + "file_folder": "๐Ÿ“", + "open_file_folder": "๐Ÿ“‚", + "dividers": "๐Ÿ—‚๏ธ", + "card_index_dividers": "๐Ÿ—‚๏ธ", + "newspaper2": "๐Ÿ—ž๏ธ", + "rolled_up_newspaper": "๐Ÿ—ž๏ธ", + "newspaper": "๐Ÿ“ฐ", + "notebook": "๐Ÿ““", + "notebook_with_decorative_cover": "๐Ÿ“”", + "ledger": "๐Ÿ“’", + "closed_book": "๐Ÿ“•", + "green_book": "๐Ÿ“—", + "blue_book": "๐Ÿ“˜", + "orange_book": "๐Ÿ“™", + "books": "๐Ÿ“š", + "book": "๐Ÿ“–", + "bookmark": "๐Ÿ”–", + "safety_pin": "๐Ÿงท", + "link": "๐Ÿ”—", + "paperclip": "๐Ÿ“Ž", + "paperclips": "๐Ÿ–‡๏ธ", + "linked_paperclips": "๐Ÿ–‡๏ธ", + "triangular_ruler": "๐Ÿ“", + "straight_ruler": "๐Ÿ“", + "abacus": "๐Ÿงฎ", + "pushpin": "๐Ÿ“Œ", + "round_pushpin": "๐Ÿ“", + "scissors": "โœ‚๏ธ", + "pen_ballpoint": "๐Ÿ–Š๏ธ", + "lower_left_ballpoint_pen": "๐Ÿ–Š๏ธ", + "pen_fountain": "๐Ÿ–‹๏ธ", + "lower_left_fountain_pen": "๐Ÿ–‹๏ธ", + "black_nib": "โœ’๏ธ", + "paintbrush": "๐Ÿ–Œ๏ธ", + "lower_left_paintbrush": "๐Ÿ–Œ๏ธ", + "crayon": "๐Ÿ–๏ธ", + "lower_left_crayon": "๐Ÿ–๏ธ", + "pencil": "๐Ÿ“", + "memo": "๐Ÿ“", + "pencil2": "โœ๏ธ", + "mag": "๐Ÿ”", + "mag_right": "๐Ÿ”Ž", + "lock_with_ink_pen": "๐Ÿ”", + "closed_lock_with_key": "๐Ÿ”", + "lock": "๐Ÿ”’", + "unlock": "๐Ÿ”“", + "heart": "โค๏ธ", + "orange_heart": "๐Ÿงก", + "yellow_heart": "๐Ÿ’›", + "green_heart": "๐Ÿ’š", + "blue_heart": "๐Ÿ’™", + "purple_heart": "๐Ÿ’œ", + "black_heart": "๐Ÿ–ค", + "brown_heart": "๐ŸคŽ", + "white_heart": "๐Ÿค", + "broken_heart": "๐Ÿ’”", + "heart_exclamation": "โฃ๏ธ", + "heavy_heart_exclamation_mark_ornament": "โฃ๏ธ", + "two_hearts": "๐Ÿ’•", + "revolving_hearts": "๐Ÿ’ž", + "heartbeat": "๐Ÿ’“", + "heartpulse": "๐Ÿ’—", + "sparkling_heart": "๐Ÿ’–", + "cupid": "๐Ÿ’˜", + "gift_heart": "๐Ÿ’", + "heart_decoration": "๐Ÿ’Ÿ", + "peace": "โ˜ฎ๏ธ", + "peace_symbol": "โ˜ฎ๏ธ", + "cross": "โœ๏ธ", + "latin_cross": "โœ๏ธ", + "star_and_crescent": "โ˜ช๏ธ", + "om_symbol": "๐Ÿ•‰๏ธ", + "wheel_of_dharma": "โ˜ธ๏ธ", + "star_of_david": "โœก๏ธ", + "six_pointed_star": "๐Ÿ”ฏ", + "menorah": "๐Ÿ•Ž", + "yin_yang": "โ˜ฏ๏ธ", + "orthodox_cross": "โ˜ฆ๏ธ", + "place_of_worship": "๐Ÿ›", + "worship_symbol": "๐Ÿ›", + "ophiuchus": "โ›Ž", + "aries": "โ™ˆ", + "taurus": "โ™‰", + "gemini": "โ™Š", + "cancer": "โ™‹", + "leo": "โ™Œ", + "virgo": "โ™", + "libra": "โ™Ž", + "scorpius": "โ™", + "sagittarius": "โ™", + "capricorn": "โ™‘", + "aquarius": "โ™’", + "pisces": "โ™“", + "id": "๐Ÿ†”", + "atom": "โš›๏ธ", + "atom_symbol": "โš›๏ธ", + "accept": "๐Ÿ‰‘", + "radioactive": "โ˜ข๏ธ", + "radioactive_sign": "โ˜ข๏ธ", + "biohazard": "โ˜ฃ๏ธ", + "biohazard_sign": "โ˜ฃ๏ธ", + "mobile_phone_off": "๐Ÿ“ด", + "vibration_mode": "๐Ÿ“ณ", + "u6709": "๐Ÿˆถ", + "u7121": "๐Ÿˆš", + "u7533": "๐Ÿˆธ", + "u55b6": "๐Ÿˆบ", + "u6708": "๐Ÿˆท๏ธ", + "eight_pointed_black_star": "โœด๏ธ", + "vs": "๐Ÿ†š", + "white_flower": "๐Ÿ’ฎ", + "ideograph_advantage": "๐Ÿ‰", + "secret": "ใŠ™๏ธ", + "congratulations": "ใŠ—๏ธ", + "u5408": "๐Ÿˆด", + "u6e80": "๐Ÿˆต", + "u5272": "๐Ÿˆน", + "u7981": "๐Ÿˆฒ", + "a": "๐Ÿ…ฐ๏ธ", + "b": "๐Ÿ…ฑ๏ธ", + "ab": "๐Ÿ†Ž", + "cl": "๐Ÿ†‘", + "o2": "๐Ÿ…พ๏ธ", + "sos": "๐Ÿ†˜", + "x": "โŒ", + "o": "โญ•", + "octagonal_sign": "๐Ÿ›‘", + "stop_sign": "๐Ÿ›‘", + "no_entry": "โ›”", + "name_badge": "๐Ÿ“›", + "no_entry_sign": "๐Ÿšซ", + "anger": "๐Ÿ’ข", + "hotsprings": "โ™จ๏ธ", + "no_pedestrians": "๐Ÿšท", + "do_not_litter": "๐Ÿšฏ", + "no_bicycles": "๐Ÿšณ", + "non_potable_water": "๐Ÿšฑ", + "underage": "๐Ÿ”ž", + "no_mobile_phones": "๐Ÿ“ต", + "no_smoking": "๐Ÿšญ", + "exclamation": "โ—", + "grey_exclamation": "โ•", + "question": "โ“", + "grey_question": "โ”", + "bangbang": "โ€ผ๏ธ", + "interrobang": "โ‰๏ธ", + "low_brightness": "๐Ÿ”…", + "high_brightness": "๐Ÿ”†", + "part_alternation_mark": "ใ€ฝ๏ธ", + "warning": "โš ๏ธ", + "children_crossing": "๐Ÿšธ", + "trident": "๐Ÿ”ฑ", + "fleur_de_lis": "โšœ๏ธ", + "beginner": "๐Ÿ”ฐ", + "recycle": "โ™ป๏ธ", + "white_check_mark": "โœ…", + "u6307": "๐Ÿˆฏ", + "chart": "๐Ÿ’น", + "sparkle": "โ‡๏ธ", + "eight_spoked_asterisk": "โœณ๏ธ", + "negative_squared_cross_mark": "โŽ", + "globe_with_meridians": "๐ŸŒ", + "diamond_shape_with_a_dot_inside": "๐Ÿ’ ", + "m": "โ“‚๏ธ", + "cyclone": "๐ŸŒ€", + "zzz": "๐Ÿ’ค", + "atm": "๐Ÿง", + "wc": "๐Ÿšพ", + "wheelchair": "โ™ฟ", + "parking": "๐Ÿ…ฟ๏ธ", + "u7a7a": "๐Ÿˆณ", + "sa": "๐Ÿˆ‚๏ธ", + "passport_control": "๐Ÿ›‚", + "customs": "๐Ÿ›ƒ", + "baggage_claim": "๐Ÿ›„", + "left_luggage": "๐Ÿ›…", + "mens": "๐Ÿšน", + "womens": "๐Ÿšบ", + "baby_symbol": "๐Ÿšผ", + "restroom": "๐Ÿšป", + "put_litter_in_its_place": "๐Ÿšฎ", + "cinema": "๐ŸŽฆ", + "signal_strength": "๐Ÿ“ถ", + "koko": "๐Ÿˆ", + "symbols": "๐Ÿ”ฃ", + "information_source": "โ„น๏ธ", + "abc": "๐Ÿ”ค", + "abcd": "๐Ÿ”ก", + "capital_abcd": "๐Ÿ” ", + "ng": "๐Ÿ†–", + "ok": "๐Ÿ†—", + "up": "๐Ÿ†™", + "cool": "๐Ÿ†’", + "new": "๐Ÿ†•", + "free": "๐Ÿ†“", + "zero": "0๏ธโƒฃ", + "one": "1๏ธโƒฃ", + "two": "2๏ธโƒฃ", + "three": "3๏ธโƒฃ", + "four": "4๏ธโƒฃ", + "five": "5๏ธโƒฃ", + "six": "6๏ธโƒฃ", + "seven": "7๏ธโƒฃ", + "eight": "8๏ธโƒฃ", + "nine": "9๏ธโƒฃ", + "keycap_ten": "๐Ÿ”Ÿ", + "hash": "#๏ธโƒฃ", + "asterisk": "*๏ธโƒฃ", + "keycap_asterisk": "*๏ธโƒฃ", + "eject": "โ๏ธ", + "eject_symbol": "โ๏ธ", + "arrow_forward": "โ–ถ๏ธ", + "pause_button": "โธ๏ธ", + "double_vertical_bar": "โธ๏ธ", + "play_pause": "โฏ๏ธ", + "stop_button": "โน๏ธ", + "record_button": "โบ๏ธ", + "track_next": "โญ๏ธ", + "next_track": "โญ๏ธ", + "track_previous": "โฎ๏ธ", + "previous_track": "โฎ๏ธ", + "fast_forward": "โฉ", + "rewind": "โช", + "arrow_double_up": "โซ", + "arrow_double_down": "โฌ", + "arrow_backward": "โ—€๏ธ", + "arrow_up_small": "๐Ÿ”ผ", + "arrow_down_small": "๐Ÿ”ฝ", + "arrow_right": "โžก๏ธ", + "arrow_left": "โฌ…๏ธ", + "arrow_up": "โฌ†๏ธ", + "arrow_down": "โฌ‡๏ธ", + "arrow_upper_right": "โ†—๏ธ", + "arrow_lower_right": "โ†˜๏ธ", + "arrow_lower_left": "โ†™๏ธ", + "arrow_upper_left": "โ†–๏ธ", + "arrow_up_down": "โ†•๏ธ", + "left_right_arrow": "โ†”๏ธ", + "arrow_right_hook": "โ†ช๏ธ", + "leftwards_arrow_with_hook": "โ†ฉ๏ธ", + "arrow_heading_up": "โคด๏ธ", + "arrow_heading_down": "โคต๏ธ", + "twisted_rightwards_arrows": "๐Ÿ”€", + "repeat": "๐Ÿ”", + "repeat_one": "๐Ÿ”‚", + "arrows_counterclockwise": "๐Ÿ”„", + "arrows_clockwise": "๐Ÿ”ƒ", + "musical_note": "๐ŸŽต", + "notes": "๐ŸŽถ", + "heavy_plus_sign": "โž•", + "heavy_minus_sign": "โž–", + "heavy_division_sign": "โž—", + "heavy_multiplication_x": "โœ–๏ธ", + "infinity": "โ™พ๏ธ", + "heavy_dollar_sign": "๐Ÿ’ฒ", + "currency_exchange": "๐Ÿ’ฑ", + "tm": "โ„ข๏ธ", + "copyright": "ยฉ๏ธ", + "registered": "ยฎ๏ธ", + "wavy_dash": "ใ€ฐ๏ธ", + "curly_loop": "โžฐ", + "loop": "โžฟ", + "end": "๐Ÿ”š", + "back": "๐Ÿ”™", + "on": "๐Ÿ”›", + "top": "๐Ÿ”", + "soon": "๐Ÿ”œ", + "heavy_check_mark": "โœ”๏ธ", + "ballot_box_with_check": "โ˜‘๏ธ", + "radio_button": "๐Ÿ”˜", + "white_circle": "โšช", + "black_circle": "โšซ", + "red_circle": "๐Ÿ”ด", + "blue_circle": "๐Ÿ”ต", + "brown_circle": "๐ŸŸค", + "purple_circle": "๐ŸŸฃ", + "green_circle": "๐ŸŸข", + "yellow_circle": "๐ŸŸก", + "orange_circle": "๐ŸŸ ", + "small_red_triangle": "๐Ÿ”บ", + "small_red_triangle_down": "๐Ÿ”ป", + "small_orange_diamond": "๐Ÿ”ธ", + "small_blue_diamond": "๐Ÿ”น", + "large_orange_diamond": "๐Ÿ”ถ", + "large_blue_diamond": "๐Ÿ”ท", + "white_square_button": "๐Ÿ”ณ", + "black_square_button": "๐Ÿ”ฒ", + "black_small_square": "โ–ช๏ธ", + "white_small_square": "โ–ซ๏ธ", + "black_medium_small_square": "โ—พ", + "white_medium_small_square": "โ—ฝ", + "black_medium_square": "โ—ผ๏ธ", + "white_medium_square": "โ—ป๏ธ", + "black_large_square": "โฌ›", + "white_large_square": "โฌœ", + "orange_square": "๐ŸŸง", + "blue_square": "๐ŸŸฆ", + "red_square": "๐ŸŸฅ", + "brown_square": "๐ŸŸซ", + "purple_square": "๐ŸŸช", + "green_square": "๐ŸŸฉ", + "yellow_square": "๐ŸŸจ", + "speaker": "๐Ÿ”ˆ", + "mute": "๐Ÿ”‡", + "sound": "๐Ÿ”‰", + "loud_sound": "๐Ÿ”Š", + "bell": "๐Ÿ””", + "no_bell": "๐Ÿ”•", + "mega": "๐Ÿ“ฃ", + "loudspeaker": "๐Ÿ“ข", + "speech_left": "๐Ÿ—จ๏ธ", + "left_speech_bubble": "๐Ÿ—จ๏ธ", + "eye_in_speech_bubble": "๐Ÿ‘โ€๐Ÿ—จ", + "speech_balloon": "๐Ÿ’ฌ", + "thought_balloon": "๐Ÿ’ญ", + "anger_right": "๐Ÿ—ฏ๏ธ", + "right_anger_bubble": "๐Ÿ—ฏ๏ธ", + "spades": "โ™ ๏ธ", + "clubs": "โ™ฃ๏ธ", + "hearts": "โ™ฅ๏ธ", + "diamonds": "โ™ฆ๏ธ", + "black_joker": "๐Ÿƒ", + "flower_playing_cards": "๐ŸŽด", + "mahjong": "๐Ÿ€„", + "clock1": "๐Ÿ•", + "clock2": "๐Ÿ•‘", + "clock3": "๐Ÿ•’", + "clock4": "๐Ÿ•“", + "clock5": "๐Ÿ•”", + "clock6": "๐Ÿ••", + "clock7": "๐Ÿ•–", + "clock8": "๐Ÿ•—", + "clock9": "๐Ÿ•˜", + "clock10": "๐Ÿ•™", + "clock11": "๐Ÿ•š", + "clock12": "๐Ÿ•›", + "clock130": "๐Ÿ•œ", + "clock230": "๐Ÿ•", + "clock330": "๐Ÿ•ž", + "clock430": "๐Ÿ•Ÿ", + "clock530": "๐Ÿ• ", + "clock630": "๐Ÿ•ก", + "clock730": "๐Ÿ•ข", + "clock830": "๐Ÿ•ฃ", + "clock930": "๐Ÿ•ค", + "clock1030": "๐Ÿ•ฅ", + "clock1130": "๐Ÿ•ฆ", + "clock1230": "๐Ÿ•ง", + "female_sign": "โ™€๏ธ", + "male_sign": "โ™‚๏ธ", + "medical_symbol": "โš•๏ธ", + "regional_indicator_z": "๐Ÿ‡ฟ", + "regional_indicator_y": "๐Ÿ‡พ", + "regional_indicator_x": "๐Ÿ‡ฝ", + "regional_indicator_w": "๐Ÿ‡ผ", + "regional_indicator_v": "๐Ÿ‡ป", + "regional_indicator_u": "๐Ÿ‡บ", + "regional_indicator_t": "๐Ÿ‡น", + "regional_indicator_s": "๐Ÿ‡ธ", + "regional_indicator_r": "๐Ÿ‡ท", + "regional_indicator_q": "๐Ÿ‡ถ", + "regional_indicator_p": "๐Ÿ‡ต", + "regional_indicator_o": "๐Ÿ‡ด", + "regional_indicator_n": "๐Ÿ‡ณ", + "regional_indicator_m": "๐Ÿ‡ฒ", + "regional_indicator_l": "๐Ÿ‡ฑ", + "regional_indicator_k": "๐Ÿ‡ฐ", + "regional_indicator_j": "๐Ÿ‡ฏ", + "regional_indicator_i": "๐Ÿ‡ฎ", + "regional_indicator_h": "๐Ÿ‡ญ", + "regional_indicator_g": "๐Ÿ‡ฌ", + "regional_indicator_f": "๐Ÿ‡ซ", + "regional_indicator_e": "๐Ÿ‡ช", + "regional_indicator_d": "๐Ÿ‡ฉ", + "regional_indicator_c": "๐Ÿ‡จ", + "regional_indicator_b": "๐Ÿ‡ง", + "regional_indicator_a": "๐Ÿ‡ฆ", + "flag_white": "๐Ÿณ๏ธ", + "flag_black": "๐Ÿด", + "checkered_flag": "๐Ÿ", + "triangular_flag_on_post": "๐Ÿšฉ", + "rainbow_flag": "๐Ÿณ๏ธโ€๐ŸŒˆ", + "gay_pride_flag": "๐Ÿณ๏ธโ€๐ŸŒˆ", + "pirate_flag": "๐Ÿดโ€โ˜ ๏ธ", + "flag_af": "๐Ÿ‡ฆ๐Ÿ‡ซ", + "flag_ax": "๐Ÿ‡ฆ๐Ÿ‡ฝ", + "flag_al": "๐Ÿ‡ฆ๐Ÿ‡ฑ", + "flag_dz": "๐Ÿ‡ฉ๐Ÿ‡ฟ", + "flag_as": "๐Ÿ‡ฆ๐Ÿ‡ธ", + "flag_ad": "๐Ÿ‡ฆ๐Ÿ‡ฉ", + "flag_ao": "๐Ÿ‡ฆ๐Ÿ‡ด", + "flag_ai": "๐Ÿ‡ฆ๐Ÿ‡ฎ", + "flag_aq": "๐Ÿ‡ฆ๐Ÿ‡ถ", + "flag_ag": "๐Ÿ‡ฆ๐Ÿ‡ฌ", + "flag_ar": "๐Ÿ‡ฆ๐Ÿ‡ท", + "flag_am": "๐Ÿ‡ฆ๐Ÿ‡ฒ", + "flag_aw": "๐Ÿ‡ฆ๐Ÿ‡ผ", + "flag_au": "๐Ÿ‡ฆ๐Ÿ‡บ", + "flag_at": "๐Ÿ‡ฆ๐Ÿ‡น", + "flag_az": "๐Ÿ‡ฆ๐Ÿ‡ฟ", + "flag_bs": "๐Ÿ‡ง๐Ÿ‡ธ", + "flag_bh": "๐Ÿ‡ง๐Ÿ‡ญ", + "flag_bd": "๐Ÿ‡ง๐Ÿ‡ฉ", + "flag_bb": "๐Ÿ‡ง๐Ÿ‡ง", + "flag_by": "๐Ÿ‡ง๐Ÿ‡พ", + "flag_be": "๐Ÿ‡ง๐Ÿ‡ช", + "flag_bz": "๐Ÿ‡ง๐Ÿ‡ฟ", + "flag_bj": "๐Ÿ‡ง๐Ÿ‡ฏ", + "flag_bm": "๐Ÿ‡ง๐Ÿ‡ฒ", + "flag_bt": "๐Ÿ‡ง๐Ÿ‡น", + "flag_bo": "๐Ÿ‡ง๐Ÿ‡ด", + "flag_ba": "๐Ÿ‡ง๐Ÿ‡ฆ", + "flag_bw": "๐Ÿ‡ง๐Ÿ‡ผ", + "flag_br": "๐Ÿ‡ง๐Ÿ‡ท", + "flag_io": "๐Ÿ‡ฎ๐Ÿ‡ด", + "flag_vg": "๐Ÿ‡ป๐Ÿ‡ฌ", + "flag_bn": "๐Ÿ‡ง๐Ÿ‡ณ", + "flag_bg": "๐Ÿ‡ง๐Ÿ‡ฌ", + "flag_bf": "๐Ÿ‡ง๐Ÿ‡ซ", + "flag_bi": "๐Ÿ‡ง๐Ÿ‡ฎ", + "flag_kh": "๐Ÿ‡ฐ๐Ÿ‡ญ", + "flag_cm": "๐Ÿ‡จ๐Ÿ‡ฒ", + "flag_ca": "๐Ÿ‡จ๐Ÿ‡ฆ", + "flag_ic": "๐Ÿ‡ฎ๐Ÿ‡จ", + "flag_cv": "๐Ÿ‡จ๐Ÿ‡ป", + "flag_bq": "๐Ÿ‡ง๐Ÿ‡ถ", + "flag_ky": "๐Ÿ‡ฐ๐Ÿ‡พ", + "flag_cf": "๐Ÿ‡จ๐Ÿ‡ซ", + "flag_td": "๐Ÿ‡น๐Ÿ‡ฉ", + "flag_cl": "๐Ÿ‡จ๐Ÿ‡ฑ", + "flag_cn": "๐Ÿ‡จ๐Ÿ‡ณ", + "flag_cx": "๐Ÿ‡จ๐Ÿ‡ฝ", + "flag_cc": "๐Ÿ‡จ๐Ÿ‡จ", + "flag_co": "๐Ÿ‡จ๐Ÿ‡ด", + "flag_km": "๐Ÿ‡ฐ๐Ÿ‡ฒ", + "flag_cg": "๐Ÿ‡จ๐Ÿ‡ฌ", + "flag_cd": "๐Ÿ‡จ๐Ÿ‡ฉ", + "flag_ck": "๐Ÿ‡จ๐Ÿ‡ฐ", + "flag_cr": "๐Ÿ‡จ๐Ÿ‡ท", + "flag_ci": "๐Ÿ‡จ๐Ÿ‡ฎ", + "flag_hr": "๐Ÿ‡ญ๐Ÿ‡ท", + "flag_cu": "๐Ÿ‡จ๐Ÿ‡บ", + "flag_cw": "๐Ÿ‡จ๐Ÿ‡ผ", + "flag_cy": "๐Ÿ‡จ๐Ÿ‡พ", + "flag_cz": "๐Ÿ‡จ๐Ÿ‡ฟ", + "flag_dk": "๐Ÿ‡ฉ๐Ÿ‡ฐ", + "flag_dj": "๐Ÿ‡ฉ๐Ÿ‡ฏ", + "flag_dm": "๐Ÿ‡ฉ๐Ÿ‡ฒ", + "flag_do": "๐Ÿ‡ฉ๐Ÿ‡ด", + "flag_ec": "๐Ÿ‡ช๐Ÿ‡จ", + "flag_eg": "๐Ÿ‡ช๐Ÿ‡ฌ", + "flag_sv": "๐Ÿ‡ธ๐Ÿ‡ป", + "flag_gq": "๐Ÿ‡ฌ๐Ÿ‡ถ", + "flag_er": "๐Ÿ‡ช๐Ÿ‡ท", + "flag_ee": "๐Ÿ‡ช๐Ÿ‡ช", + "flag_et": "๐Ÿ‡ช๐Ÿ‡น", + "flag_eu": "๐Ÿ‡ช๐Ÿ‡บ", + "flag_fk": "๐Ÿ‡ซ๐Ÿ‡ฐ", + "flag_fo": "๐Ÿ‡ซ๐Ÿ‡ด", + "flag_fj": "๐Ÿ‡ซ๐Ÿ‡ฏ", + "flag_fi": "๐Ÿ‡ซ๐Ÿ‡ฎ", + "flag_fr": "๐Ÿ‡ซ๐Ÿ‡ท", + "flag_gf": "๐Ÿ‡ฌ๐Ÿ‡ซ", + "flag_pf": "๐Ÿ‡ต๐Ÿ‡ซ", + "flag_tf": "๐Ÿ‡น๐Ÿ‡ซ", + "flag_ga": "๐Ÿ‡ฌ๐Ÿ‡ฆ", + "flag_gm": "๐Ÿ‡ฌ๐Ÿ‡ฒ", + "flag_ge": "๐Ÿ‡ฌ๐Ÿ‡ช", + "flag_de": "๐Ÿ‡ฉ๐Ÿ‡ช", + "flag_gh": "๐Ÿ‡ฌ๐Ÿ‡ญ", + "flag_gi": "๐Ÿ‡ฌ๐Ÿ‡ฎ", + "flag_gr": "๐Ÿ‡ฌ๐Ÿ‡ท", + "flag_gl": "๐Ÿ‡ฌ๐Ÿ‡ฑ", + "flag_gd": "๐Ÿ‡ฌ๐Ÿ‡ฉ", + "flag_gp": "๐Ÿ‡ฌ๐Ÿ‡ต", + "flag_gu": "๐Ÿ‡ฌ๐Ÿ‡บ", + "flag_gt": "๐Ÿ‡ฌ๐Ÿ‡น", + "flag_gg": "๐Ÿ‡ฌ๐Ÿ‡ฌ", + "flag_gn": "๐Ÿ‡ฌ๐Ÿ‡ณ", + "flag_gw": "๐Ÿ‡ฌ๐Ÿ‡ผ", + "flag_gy": "๐Ÿ‡ฌ๐Ÿ‡พ", + "flag_ht": "๐Ÿ‡ญ๐Ÿ‡น", + "flag_hn": "๐Ÿ‡ญ๐Ÿ‡ณ", + "flag_hk": "๐Ÿ‡ญ๐Ÿ‡ฐ", + "flag_hu": "๐Ÿ‡ญ๐Ÿ‡บ", + "flag_is": "๐Ÿ‡ฎ๐Ÿ‡ธ", + "flag_in": "๐Ÿ‡ฎ๐Ÿ‡ณ", + "flag_id": "๐Ÿ‡ฎ๐Ÿ‡ฉ", + "flag_ir": "๐Ÿ‡ฎ๐Ÿ‡ท", + "flag_iq": "๐Ÿ‡ฎ๐Ÿ‡ถ", + "flag_ie": "๐Ÿ‡ฎ๐Ÿ‡ช", + "flag_im": "๐Ÿ‡ฎ๐Ÿ‡ฒ", + "flag_il": "๐Ÿ‡ฎ๐Ÿ‡ฑ", + "flag_it": "๐Ÿ‡ฎ๐Ÿ‡น", + "flag_jm": "๐Ÿ‡ฏ๐Ÿ‡ฒ", + "flag_jp": "๐Ÿ‡ฏ๐Ÿ‡ต", + "crossed_flags": "๐ŸŽŒ", + "flag_je": "๐Ÿ‡ฏ๐Ÿ‡ช", + "flag_jo": "๐Ÿ‡ฏ๐Ÿ‡ด", + "flag_kz": "๐Ÿ‡ฐ๐Ÿ‡ฟ", + "flag_ke": "๐Ÿ‡ฐ๐Ÿ‡ช", + "flag_ki": "๐Ÿ‡ฐ๐Ÿ‡ฎ", + "flag_xk": "๐Ÿ‡ฝ๐Ÿ‡ฐ", + "flag_kw": "๐Ÿ‡ฐ๐Ÿ‡ผ", + "flag_kg": "๐Ÿ‡ฐ๐Ÿ‡ฌ", + "flag_la": "๐Ÿ‡ฑ๐Ÿ‡ฆ", + "flag_lv": "๐Ÿ‡ฑ๐Ÿ‡ป", + "flag_lb": "๐Ÿ‡ฑ๐Ÿ‡ง", + "flag_ls": "๐Ÿ‡ฑ๐Ÿ‡ธ", + "flag_lr": "๐Ÿ‡ฑ๐Ÿ‡ท", + "flag_ly": "๐Ÿ‡ฑ๐Ÿ‡พ", + "flag_li": "๐Ÿ‡ฑ๐Ÿ‡ฎ", + "flag_lt": "๐Ÿ‡ฑ๐Ÿ‡น", + "flag_lu": "๐Ÿ‡ฑ๐Ÿ‡บ", + "flag_mo": "๐Ÿ‡ฒ๐Ÿ‡ด", + "flag_mk": "๐Ÿ‡ฒ๐Ÿ‡ฐ", + "flag_mg": "๐Ÿ‡ฒ๐Ÿ‡ฌ", + "flag_mw": "๐Ÿ‡ฒ๐Ÿ‡ผ", + "flag_my": "๐Ÿ‡ฒ๐Ÿ‡พ", + "flag_mv": "๐Ÿ‡ฒ๐Ÿ‡ป", + "flag_ml": "๐Ÿ‡ฒ๐Ÿ‡ฑ", + "flag_mt": "๐Ÿ‡ฒ๐Ÿ‡น", + "flag_mh": "๐Ÿ‡ฒ๐Ÿ‡ญ", + "flag_mq": "๐Ÿ‡ฒ๐Ÿ‡ถ", + "flag_mr": "๐Ÿ‡ฒ๐Ÿ‡ท", + "flag_mu": "๐Ÿ‡ฒ๐Ÿ‡บ", + "flag_yt": "๐Ÿ‡พ๐Ÿ‡น", + "flag_mx": "๐Ÿ‡ฒ๐Ÿ‡ฝ", + "flag_fm": "๐Ÿ‡ซ๐Ÿ‡ฒ", + "flag_md": "๐Ÿ‡ฒ๐Ÿ‡ฉ", + "flag_mc": "๐Ÿ‡ฒ๐Ÿ‡จ", + "flag_mn": "๐Ÿ‡ฒ๐Ÿ‡ณ", + "flag_me": "๐Ÿ‡ฒ๐Ÿ‡ช", + "flag_ms": "๐Ÿ‡ฒ๐Ÿ‡ธ", + "flag_ma": "๐Ÿ‡ฒ๐Ÿ‡ฆ", + "flag_mz": "๐Ÿ‡ฒ๐Ÿ‡ฟ", + "flag_mm": "๐Ÿ‡ฒ๐Ÿ‡ฒ", + "flag_na": "๐Ÿ‡ณ๐Ÿ‡ฆ", + "flag_nr": "๐Ÿ‡ณ๐Ÿ‡ท", + "flag_np": "๐Ÿ‡ณ๐Ÿ‡ต", + "flag_nl": "๐Ÿ‡ณ๐Ÿ‡ฑ", + "flag_nc": "๐Ÿ‡ณ๐Ÿ‡จ", + "flag_nz": "๐Ÿ‡ณ๐Ÿ‡ฟ", + "flag_ni": "๐Ÿ‡ณ๐Ÿ‡ฎ", + "flag_ne": "๐Ÿ‡ณ๐Ÿ‡ช", + "flag_ng": "๐Ÿ‡ณ๐Ÿ‡ฌ", + "flag_nu": "๐Ÿ‡ณ๐Ÿ‡บ", + "flag_nf": "๐Ÿ‡ณ๐Ÿ‡ซ", + "flag_kp": "๐Ÿ‡ฐ๐Ÿ‡ต", + "flag_mp": "๐Ÿ‡ฒ๐Ÿ‡ต", + "flag_no": "๐Ÿ‡ณ๐Ÿ‡ด", + "flag_om": "๐Ÿ‡ด๐Ÿ‡ฒ", + "flag_pk": "๐Ÿ‡ต๐Ÿ‡ฐ", + "flag_pw": "๐Ÿ‡ต๐Ÿ‡ผ", + "flag_ps": "๐Ÿ‡ต๐Ÿ‡ธ", + "flag_pa": "๐Ÿ‡ต๐Ÿ‡ฆ", + "flag_pg": "๐Ÿ‡ต๐Ÿ‡ฌ", + "flag_py": "๐Ÿ‡ต๐Ÿ‡พ", + "flag_pe": "๐Ÿ‡ต๐Ÿ‡ช", + "flag_ph": "๐Ÿ‡ต๐Ÿ‡ญ", + "flag_pn": "๐Ÿ‡ต๐Ÿ‡ณ", + "flag_pl": "๐Ÿ‡ต๐Ÿ‡ฑ", + "flag_pt": "๐Ÿ‡ต๐Ÿ‡น", + "flag_pr": "๐Ÿ‡ต๐Ÿ‡ท", + "flag_qa": "๐Ÿ‡ถ๐Ÿ‡ฆ", + "flag_re": "๐Ÿ‡ท๐Ÿ‡ช", + "flag_ro": "๐Ÿ‡ท๐Ÿ‡ด", + "flag_ru": "๐Ÿ‡ท๐Ÿ‡บ", + "flag_rw": "๐Ÿ‡ท๐Ÿ‡ผ", + "flag_ws": "๐Ÿ‡ผ๐Ÿ‡ธ", + "flag_sm": "๐Ÿ‡ธ๐Ÿ‡ฒ", + "flag_st": "๐Ÿ‡ธ๐Ÿ‡น", + "flag_sa": "๐Ÿ‡ธ๐Ÿ‡ฆ", + "flag_sn": "๐Ÿ‡ธ๐Ÿ‡ณ", + "flag_rs": "๐Ÿ‡ท๐Ÿ‡ธ", + "flag_sc": "๐Ÿ‡ธ๐Ÿ‡จ", + "flag_sl": "๐Ÿ‡ธ๐Ÿ‡ฑ", + "flag_sg": "๐Ÿ‡ธ๐Ÿ‡ฌ", + "flag_sx": "๐Ÿ‡ธ๐Ÿ‡ฝ", + "flag_sk": "๐Ÿ‡ธ๐Ÿ‡ฐ", + "flag_si": "๐Ÿ‡ธ๐Ÿ‡ฎ", + "flag_gs": "๐Ÿ‡ฌ๐Ÿ‡ธ", + "flag_sb": "๐Ÿ‡ธ๐Ÿ‡ง", + "flag_so": "๐Ÿ‡ธ๐Ÿ‡ด", + "flag_za": "๐Ÿ‡ฟ๐Ÿ‡ฆ", + "flag_kr": "๐Ÿ‡ฐ๐Ÿ‡ท", + "flag_ss": "๐Ÿ‡ธ๐Ÿ‡ธ", + "flag_es": "๐Ÿ‡ช๐Ÿ‡ธ", + "flag_lk": "๐Ÿ‡ฑ๐Ÿ‡ฐ", + "flag_bl": "๐Ÿ‡ง๐Ÿ‡ฑ", + "flag_sh": "๐Ÿ‡ธ๐Ÿ‡ญ", + "flag_kn": "๐Ÿ‡ฐ๐Ÿ‡ณ", + "flag_lc": "๐Ÿ‡ฑ๐Ÿ‡จ", + "flag_pm": "๐Ÿ‡ต๐Ÿ‡ฒ", + "flag_vc": "๐Ÿ‡ป๐Ÿ‡จ", + "flag_sd": "๐Ÿ‡ธ๐Ÿ‡ฉ", + "flag_sr": "๐Ÿ‡ธ๐Ÿ‡ท", + "flag_sz": "๐Ÿ‡ธ๐Ÿ‡ฟ", + "flag_se": "๐Ÿ‡ธ๐Ÿ‡ช", + "flag_ch": "๐Ÿ‡จ๐Ÿ‡ญ", + "flag_sy": "๐Ÿ‡ธ๐Ÿ‡พ", + "flag_tw": "๐Ÿ‡น๐Ÿ‡ผ", + "flag_tj": "๐Ÿ‡น๐Ÿ‡ฏ", + "flag_tz": "๐Ÿ‡น๐Ÿ‡ฟ", + "flag_th": "๐Ÿ‡น๐Ÿ‡ญ", + "flag_tl": "๐Ÿ‡น๐Ÿ‡ฑ", + "flag_tg": "๐Ÿ‡น๐Ÿ‡ฌ", + "flag_tk": "๐Ÿ‡น๐Ÿ‡ฐ", + "flag_to": "๐Ÿ‡น๐Ÿ‡ด", + "flag_tt": "๐Ÿ‡น๐Ÿ‡น", + "flag_tn": "๐Ÿ‡น๐Ÿ‡ณ", + "flag_tr": "๐Ÿ‡น๐Ÿ‡ท", + "flag_tm": "๐Ÿ‡น๐Ÿ‡ฒ", + "flag_tc": "๐Ÿ‡น๐Ÿ‡จ", + "flag_vi": "๐Ÿ‡ป๐Ÿ‡ฎ", + "flag_tv": "๐Ÿ‡น๐Ÿ‡ป", + "flag_ug": "๐Ÿ‡บ๐Ÿ‡ฌ", + "flag_ua": "๐Ÿ‡บ๐Ÿ‡ฆ", + "flag_ae": "๐Ÿ‡ฆ๐Ÿ‡ช", + "flag_gb": "๐Ÿ‡ฌ๐Ÿ‡ง", + "england": "๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ", + "scotland": "๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ", + "wales": "๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ", + "flag_us": "๐Ÿ‡บ๐Ÿ‡ธ", + "flag_uy": "๐Ÿ‡บ๐Ÿ‡พ", + "flag_uz": "๐Ÿ‡บ๐Ÿ‡ฟ", + "flag_vu": "๐Ÿ‡ป๐Ÿ‡บ", + "flag_va": "๐Ÿ‡ป๐Ÿ‡ฆ", + "flag_ve": "๐Ÿ‡ป๐Ÿ‡ช", + "flag_vn": "๐Ÿ‡ป๐Ÿ‡ณ", + "flag_wf": "๐Ÿ‡ผ๐Ÿ‡ซ", + "flag_eh": "๐Ÿ‡ช๐Ÿ‡ญ", + "flag_ye": "๐Ÿ‡พ๐Ÿ‡ช", + "flag_zm": "๐Ÿ‡ฟ๐Ÿ‡ฒ", + "flag_zw": "๐Ÿ‡ฟ๐Ÿ‡ผ", + "flag_ac": "๐Ÿ‡ฆ๐Ÿ‡จ", + "flag_bv": "๐Ÿ‡ง๐Ÿ‡ป", + "flag_cp": "๐Ÿ‡จ๐Ÿ‡ต", + "flag_ea": "๐Ÿ‡ช๐Ÿ‡ฆ", + "flag_dg": "๐Ÿ‡ฉ๐Ÿ‡ฌ", + "flag_hm": "๐Ÿ‡ญ๐Ÿ‡ฒ", + "flag_mf": "๐Ÿ‡ฒ๐Ÿ‡ซ", + "flag_sj": "๐Ÿ‡ธ๐Ÿ‡ฏ", + "flag_ta": "๐Ÿ‡น๐Ÿ‡ฆ", + "flag_um": "๐Ÿ‡บ๐Ÿ‡ฒ", + "united_nations": "๐Ÿ‡บ๐Ÿ‡ณ" +} diff --git a/public/static/css/discordmock.css b/public/static/css/discordmock.css index c098293..f3b2e5b 100644 --- a/public/static/css/discordmock.css +++ b/public/static/css/discordmock.css @@ -4,10 +4,6 @@ @font-face{font-family:WhitneyMedium;font-style:medium;font-weight:600;src:url('https://discordapp.com/assets/be0060dafb7a0e31d2a1ca17c0708636.woff') format('woff')} @font-face{font-family:Whitney;font-style:bold;font-weight:700;src:url('https://discordapp.com/assets/8e12fb4f14d9c4592eb8ec9f22337b04.woff') format('woff')} -html { - overflow-y: hidden; -} - .discord-container { background-color: #2e3136; border-radius: 4px; diff --git a/public/templates/includes/navbar.tmpl b/public/templates/includes/navbar.tmpl index a1ed56b..2b55677 100644 --- a/public/templates/includes/navbar.tmpl +++ b/public/templates/includes/navbar.tmpl @@ -14,6 +14,9 @@ + diff --git a/public/templates/views/panels.tmpl b/public/templates/views/panels.tmpl new file mode 100644 index 0000000..e373ee7 --- /dev/null +++ b/public/templates/views/panels.tmpl @@ -0,0 +1,237 @@ +{{define "content"}} +
+
+
+
+
+
+

Panels

+
+
+

Your panel quota: {{.panelcount}} / {{if .premium}}โˆž{{else}}1{{end}}

+ + {{if not .premium}} +

Note: You can expand your panel quote by purchasing premium

+ {{end}} + + + + + + + + + + + + + {{range .panels}} + + + + + + + + {{end}} + +
ChannelPanel TitlePanel ContentTicket Channel CategoryDelete
{{.ChannelName}}{{.Title}}{{.Content}}{{.CategoryName}}Delete
+
+
+
+
+

Create A Panel

+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+
#
+
+ +
+
+ +
+ +
+
+
#
+
+ +
+
+ +
+ +
+
+
#
+
+ +
+
+ +
+
+ + +
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+ {{if not .validTitle}} + + {{end}} + {{if not .validContent}} + + {{end}} + {{if not .validColour}} + + {{end}} + {{if not .validChannel}} + + {{end}} + {{if not .validCategory}} + + {{end}} + {{if not .validReaction}} + + {{end}} + {{if .created}} + + {{end}} + {{if .metQuota}} + + {{end}} +
+
+ + +
+{{end}} \ No newline at end of file diff --git a/public/templates/views/settings.tmpl b/public/templates/views/settings.tmpl index 15ea5f4..4f26442 100644 --- a/public/templates/views/settings.tmpl +++ b/public/templates/views/settings.tmpl @@ -79,6 +79,11 @@
+

Default Panel Settings

+
+ +
+
diff --git a/utils/emojiutil.go b/utils/emojiutil.go new file mode 100644 index 0000000..82377d6 --- /dev/null +++ b/utils/emojiutil.go @@ -0,0 +1,30 @@ +package utils + +import ( + "encoding/json" + "github.com/apex/log" + "io/ioutil" +) + +var emojis map[string]interface{} + +func LoadEmoji() { + bytes, err := ioutil.ReadFile("emojis.json"); if err != nil { + log.Error("Couldn't load emoji: " + err.Error()) + return + } + + if err := json.Unmarshal(bytes, &emojis); err != nil { + log.Error("Couldn't load emoji: " + err.Error()) + return + } +} + +func GetEmojiByName(name string) string { + emoji, ok := emojis[name]; if !ok { + return "" + } + + str, _ := emoji.(string) + return str +}