From 3bab2047e996db98c9b8ce3e3bbc11bb4e181aef Mon Sep 17 00:00:00 2001 From: "ha4ska@" Date: Sat, 29 Aug 2026 21:22:42 +0500 Subject: [PATCH] vault backup: 2026-08-29 21:22:42 --- .obsidian/community-plugins.json | 3 +- .obsidian/graph.json | 2 +- .../zoottelkeeper-obsidian-plugin/main.js | 5505 +++++++++++++++++ .../manifest.json | 10 + .../zoottelkeeper-obsidian-plugin/styles.css | 3 + .obsidian/workspace.json | 9 +- cybersec/OS/Powershell commands.md | 1 + 7 files changed, 5528 insertions(+), 5 deletions(-) create mode 100644 .obsidian/plugins/zoottelkeeper-obsidian-plugin/main.js create mode 100644 .obsidian/plugins/zoottelkeeper-obsidian-plugin/manifest.json create mode 100644 .obsidian/plugins/zoottelkeeper-obsidian-plugin/styles.css diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index f356f0b..37235b1 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -1,4 +1,5 @@ [ "obsidian-excalidraw-plugin", - "obsidian-git" + "obsidian-git", + "zoottelkeeper-obsidian-plugin" ] \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json index d009fdc..8d02206 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -88,6 +88,6 @@ "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, - "scale": 0.7132754626224396, + "scale": 0.47551697508162627, "close": true } \ No newline at end of file diff --git a/.obsidian/plugins/zoottelkeeper-obsidian-plugin/main.js b/.obsidian/plugins/zoottelkeeper-obsidian-plugin/main.js new file mode 100644 index 0000000..fbca71e --- /dev/null +++ b/.obsidian/plugins/zoottelkeeper-obsidian-plugin/main.js @@ -0,0 +1,5505 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ + +'use strict'; + +var obsidian = require('obsidian'); + +var IndexItemStyle; +(function (IndexItemStyle) { + IndexItemStyle["List"] = "list"; + IndexItemStyle["Checkbox"] = "checkbox"; + IndexItemStyle["PureLink"] = "pureLink"; +})(IndexItemStyle || (IndexItemStyle = {})); + +const hasFrontmatter = (content, separator) => { + return (content.trim().startsWith(separator) && content.split(separator).length > 1); +}; + +const getFrontmatter = (content, separator) => { + return hasFrontmatter(content, separator) + ? `${separator}${content.split(separator)[1]}${separator}` + : ''; +}; + +const updateFrontmatter = (settings, currentContent) => { + if (!settings.indexTagBoolean) + return getFrontmatter(currentContent, settings.frontMatterSeparator); + let currentFrontmatterWithoutSep = `${currentContent.split(settings.frontMatterSeparator)[1]}`; + if (currentFrontmatterWithoutSep === '') + return ''; + else { + let tagLine = currentFrontmatterWithoutSep.split('\n').find(elem => elem.split(':')[0] === settings.indexTagLabel); + if (!tagLine && settings.indexTagValue && settings.indexTagBoolean) { + tagLine = 'tags:'; + currentFrontmatterWithoutSep = `${currentFrontmatterWithoutSep}${tagLine}\n`; + } + const taglist = tagLine.split(':')[1].trim(); + const indexTags = settings.indexTagSeparator + ? settings.indexTagValue.split(settings.indexTagSeparator) + : [settings.indexTagValue]; + let updatedTaglist = taglist.replace(/\[|\]/g, ''); + for (const indexTag of indexTags) { + if (!taglist.includes(indexTag)) { + updatedTaglist = !settings.indexTagSeparator + || (updatedTaglist.split(settings.indexTagSeparator).length >= 1 + && updatedTaglist.split(settings.indexTagSeparator)[0] !== '') + ? `${updatedTaglist}${settings.indexTagSeparator}${indexTag}` + : indexTag; + } + } + if (settings.addSquareBrackets) + updatedTaglist = `[${updatedTaglist}]`; + const updatedTagLine = `tags: ${updatedTaglist}`; + const regex = new RegExp(tagLine.replace(/\[/g, '\\[').replace(/\]/g, '\\]'), 'g'); + return settings.indexTagBoolean + ? `${settings.frontMatterSeparator}${currentFrontmatterWithoutSep.replace(regex, updatedTagLine)}${settings.frontMatterSeparator}` + : `${settings.frontMatterSeparator}${currentFrontmatterWithoutSep}${settings.frontMatterSeparator}`; + } +}; + +var SortOrder; +(function (SortOrder) { + SortOrder["ASC"] = "asc"; + SortOrder["DESC"] = "desc"; +})(SortOrder || (SortOrder = {})); + +const ZOOTTELKEEPER_INDEX_LIST_BEGINNING_TEXT = '%% Zoottelkeeper: Beginning of the autogenerated index file list %%'; +const ZOOTTELKEEPER_INDEX_LIST_END_TEXT = '%% Zoottelkeeper: End of the autogenerated index file list %%'; + +const updateIndexContent = (sortOrder, currentContent, indexContent) => { + const intro = currentContent.split(ZOOTTELKEEPER_INDEX_LIST_BEGINNING_TEXT)[0]; + const outro = currentContent.split(ZOOTTELKEEPER_INDEX_LIST_END_TEXT); + indexContent = indexContent.sort(function (a, b) { + return a.localeCompare(b, undefined, { numeric: true }); + }); + if (sortOrder === SortOrder.DESC) + indexContent.reverse(); + const content = (currentContent === intro || currentContent === outro[0]) + ? `${ZOOTTELKEEPER_INDEX_LIST_BEGINNING_TEXT}\n${indexContent.join('\n')}\n${ZOOTTELKEEPER_INDEX_LIST_END_TEXT}\n` + : `${intro}${ZOOTTELKEEPER_INDEX_LIST_BEGINNING_TEXT}\n${indexContent.join('\n')}\n${ZOOTTELKEEPER_INDEX_LIST_END_TEXT}${outro[1]}`; + return content; +}; + +const removeFrontmatter = (content, separator) => { + return (content.startsWith(separator) && content.split(separator).length > 1) + ? content.split(separator).slice(2).join(separator) + : content; +}; + +const isInAllowedFolder = (settings, indexFilePath) => { + return settings.foldersIncluded === '' || isInSpecificFolder(settings, indexFilePath, 'foldersIncluded'); +}; +const isInDisAllowedFolder = (settings, indexFilePath) => { + return isInSpecificFolder(settings, indexFilePath, 'foldersExcluded'); +}; +const isInSpecificFolder = (settings, indexFilePath, folderType) => { + return !!settings[folderType].replace(/,/g, '\n').split('\n').find((folder) => { + return folder.endsWith('*') + ? indexFilePath.startsWith(folder.slice(0, -1).trim()) + : indexFilePath.split(folder).length > 1 && !indexFilePath.split(folder)[1].includes('/'); + }); +}; + +const DEFAULT_SETTINGS = { + indexPrefix: '_Index_of_', + indexItemStyle: IndexItemStyle.PureLink, + indexTagValue: 'MOC', + indexTagBoolean: true, + indexTagSeparator: ', ', + indexTagLabel: 'tags', + cleanPathBoolean: true, + folderEmoji: ':card_index_dividers:', + fileEmoji: ':page_facing_up:', + enableEmojis: false, + foldersExcluded: '', + foldersIncluded: '', + sortOrder: SortOrder.ASC, + addSquareBrackets: true, + embedSubIndex: false, + templateFile: '', + frontMatterSeparator: '---', +}; + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function createCommonjsModule(fn) { + var module = { exports: {} }; + return fn(module, module.exports), module.exports; +} + +/** Detect free variable `global` from Node.js. */ + +var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + +var _freeGlobal = freeGlobal; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = _freeGlobal || freeSelf || Function('return this')(); + +var _root = root; + +/** Built-in value references. */ +var Symbol = _root.Symbol; + +var _Symbol = Symbol; + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +var _copyArray = copyArray; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +var _getRawTag = getRawTag; + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$1.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString$1.call(value); +} + +var _objectToString = objectToString; + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag$1 && symToStringTag$1 in Object(value)) + ? _getRawTag(value) + : _objectToString(value); +} + +var _baseGetTag = baseGetTag; + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +var isObject_1 = isObject; + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject_1(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = _baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +var isFunction_1 = isFunction; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = _root['__core-js_shared__']; + +var _coreJsData = coreJsData; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +var _isMasked = isMasked; + +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +var _toSource = toSource; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto$1 = Function.prototype, + objectProto$2 = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString$1 = funcProto$1.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString$1.call(hasOwnProperty$1).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject_1(value) || _isMasked(value)) { + return false; + } + var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); +} + +var _baseIsNative = baseIsNative; + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +var _getValue = getValue; + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = _getValue(object, key); + return _baseIsNative(value) ? value : undefined; +} + +var _getNative = getNative; + +/* Built-in method references that are verified to be native. */ +var DataView = _getNative(_root, 'DataView'); + +var _DataView = DataView; + +/* Built-in method references that are verified to be native. */ +var Map = _getNative(_root, 'Map'); + +var _Map = Map; + +/* Built-in method references that are verified to be native. */ +var Promise = _getNative(_root, 'Promise'); + +var _Promise = Promise; + +/* Built-in method references that are verified to be native. */ +var Set$1 = _getNative(_root, 'Set'); + +var _Set = Set$1; + +/* Built-in method references that are verified to be native. */ +var WeakMap = _getNative(_root, 'WeakMap'); + +var _WeakMap = WeakMap; + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +var dataViewTag = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = _toSource(_DataView), + mapCtorString = _toSource(_Map), + promiseCtorString = _toSource(_Promise), + setCtorString = _toSource(_Set), + weakMapCtorString = _toSource(_WeakMap); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = _baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != dataViewTag) || + (_Map && getTag(new _Map) != mapTag) || + (_Promise && getTag(_Promise.resolve()) != promiseTag) || + (_Set && getTag(new _Set) != setTag) || + (_WeakMap && getTag(new _WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = _baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? _toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +var _getTag = getTag; + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +var isLength_1 = isLength; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength_1(value.length) && !isFunction_1(value); +} + +var isArrayLike_1 = isArrayLike; + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +var isArray_1 = isArray; + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +var isObjectLike_1 = isObjectLike; + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray_1(value) && isObjectLike_1(value) && _baseGetTag(value) == stringTag); +} + +var isString_1 = isString; + +/** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ +function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; +} + +var _iteratorToArray = iteratorToArray; + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +var _mapToArray = mapToArray; + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +var _setToArray = setToArray; + +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +var _asciiToArray = asciiToArray; + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +var _hasUnicode = hasUnicode; + +/** Used to compose unicode character classes. */ +var rsAstralRange$1 = '\\ud800-\\udfff', + rsComboMarksRange$1 = '\\u0300-\\u036f', + reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', + rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', + rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, + rsVarRange$1 = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange$1 + ']', + rsCombo = '[' + rsComboRange$1 + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange$1 + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ$1 = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange$1 + ']?', + rsOptJoin = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +var _unicodeToArray = unicodeToArray; + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return _hasUnicode(string) + ? _unicodeToArray(string) + : _asciiToArray(string); +} + +var _stringToArray = stringToArray; + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +var _arrayMap = arrayMap; + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return _arrayMap(props, function(key) { + return object[key]; + }); +} + +var _baseValues = baseValues; + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +var _baseTimes = baseTimes; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike_1(value) && _baseGetTag(value) == argsTag; +} + +var _baseIsArguments = baseIsArguments; + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) { + return isObjectLike_1(value) && hasOwnProperty$2.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +var isArguments_1 = isArguments; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +var stubFalse_1 = stubFalse; + +var isBuffer_1 = createCommonjsModule(function (module, exports) { +/** Detect free variable `exports`. */ +var freeExports = exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse_1; + +module.exports = isBuffer; +}); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +var _isIndex = isIndex; + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag$1 = '[object Function]', + mapTag$1 = '[object Map]', + numberTag = '[object Number]', + objectTag$1 = '[object Object]', + regexpTag = '[object RegExp]', + setTag$1 = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag$1 = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag$1 = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = +typedArrayTags[mapTag$1] = typedArrayTags[numberTag] = +typedArrayTags[objectTag$1] = typedArrayTags[regexpTag] = +typedArrayTags[setTag$1] = typedArrayTags[stringTag$1] = +typedArrayTags[weakMapTag$1] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike_1(value) && + isLength_1(value.length) && !!typedArrayTags[_baseGetTag(value)]; +} + +var _baseIsTypedArray = baseIsTypedArray; + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +var _baseUnary = baseUnary; + +var _nodeUtil = createCommonjsModule(function (module, exports) { +/** Detect free variable `exports`. */ +var freeExports = exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && _freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +module.exports = nodeUtil; +}); + +/* Node.js helper references. */ +var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray; + +var isTypedArray_1 = isTypedArray; + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$4.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray_1(value), + isArg = !isArr && isArguments_1(value), + isBuff = !isArr && !isArg && isBuffer_1(value), + isType = !isArr && !isArg && !isBuff && isTypedArray_1(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$3.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + _isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +var _arrayLikeKeys = arrayLikeKeys; + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$5; + + return value === proto; +} + +var _isPrototype = isPrototype; + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +var _overArg = overArg; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = _overArg(Object.keys, Object); + +var _nativeKeys = nativeKeys; + +/** Used for built-in method references. */ +var objectProto$6 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$4 = objectProto$6.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!_isPrototype(object)) { + return _nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$4.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +var _baseKeys = baseKeys; + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike_1(object) ? _arrayLikeKeys(object) : _baseKeys(object); +} + +var keys_1 = keys; + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, keys_1(object)); +} + +var values_1 = values; + +/** `Object#toString` result references. */ +var mapTag$2 = '[object Map]', + setTag$2 = '[object Set]'; + +/** Built-in value references. */ +var symIterator = _Symbol ? _Symbol.iterator : undefined; + +/** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ +function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike_1(value)) { + return isString_1(value) ? _stringToArray(value) : _copyArray(value); + } + if (symIterator && value[symIterator]) { + return _iteratorToArray(value[symIterator]()); + } + var tag = _getTag(value), + func = tag == mapTag$2 ? _mapToArray : (tag == setTag$2 ? _setToArray : values_1); + + return func(value); +} + +var toArray_1 = toArray; + +var umbrella_with_rain_drops = "☔"; +var coffee = "☕"; +var aries = "♈"; +var taurus = "♉"; +var sagittarius = "♐"; +var capricorn = "♑"; +var aquarius = "♒"; +var pisces = "♓"; +var anchor = "⚓"; +var white_check_mark = "✅"; +var sparkles = "✨"; +var question = "❓"; +var grey_question = "❔"; +var grey_exclamation = "❕"; +var exclamation = "❗"; +var heavy_exclamation_mark = "❗"; +var heavy_plus_sign = "➕"; +var heavy_minus_sign = "➖"; +var heavy_division_sign = "➗"; +var hash = "#️⃣"; +var keycap_star = "*️⃣"; +var zero = "0️⃣"; +var one = "1️⃣"; +var two = "2️⃣"; +var three = "3️⃣"; +var four = "4️⃣"; +var five = "5️⃣"; +var six = "6️⃣"; +var seven = "7️⃣"; +var eight = "8️⃣"; +var nine = "9️⃣"; +var copyright = "©️"; +var registered = "®️"; +var mahjong = "🀄"; +var black_joker = "🃏"; +var a = "🅰️"; +var b = "🅱️"; +var o2 = "🅾️"; +var parking = "🅿️"; +var ab = "🆎"; +var cl = "🆑"; +var cool = "🆒"; +var free = "🆓"; +var id = "🆔"; +var ng = "🆖"; +var ok = "🆗"; +var sos = "🆘"; +var up = "🆙"; +var vs = "🆚"; +var cn = "🇨🇳"; +var de = "🇩🇪"; +var es = "🇪🇸"; +var fr = "🇫🇷"; +var gb = "🇬🇧"; +var uk = "🇬🇧"; +var it = "🇮🇹"; +var jp = "🇯🇵"; +var kr = "🇰🇷"; +var ru = "🇷🇺"; +var us = "🇺🇸"; +var koko = "🈁"; +var sa = "🈂️"; +var u7121 = "🈚"; +var u6307 = "🈯"; +var u7981 = "🈲"; +var u7a7a = "🈳"; +var u5408 = "🈴"; +var u6e80 = "🈵"; +var u6709 = "🈶"; +var u6708 = "🈷️"; +var u7533 = "🈸"; +var u5272 = "🈹"; +var u55b6 = "🈺"; +var ideograph_advantage = "🉐"; +var accept = "🉑"; +var cyclone = "🌀"; +var foggy = "🌁"; +var closed_umbrella = "🌂"; +var night_with_stars = "🌃"; +var sunrise_over_mountains = "🌄"; +var sunrise = "🌅"; +var city_sunset = "🌆"; +var city_sunrise = "🌇"; +var rainbow = "🌈"; +var bridge_at_night = "🌉"; +var ocean = "🌊"; +var volcano = "🌋"; +var milky_way = "🌌"; +var earth_africa = "🌍"; +var earth_americas = "🌎"; +var earth_asia = "🌏"; +var globe_with_meridians = "🌐"; +var new_moon = "🌑"; +var waxing_crescent_moon = "🌒"; +var first_quarter_moon = "🌓"; +var moon = "🌔"; +var waxing_gibbous_moon = "🌔"; +var full_moon = "🌕"; +var waning_gibbous_moon = "🌖"; +var last_quarter_moon = "🌗"; +var waning_crescent_moon = "🌘"; +var crescent_moon = "🌙"; +var new_moon_with_face = "🌚"; +var first_quarter_moon_with_face = "🌛"; +var last_quarter_moon_with_face = "🌜"; +var full_moon_with_face = "🌝"; +var sun_with_face = "🌞"; +var star2 = "🌟"; +var stars = "🌠"; +var thermometer = "🌡️"; +var mostly_sunny = "🌤️"; +var sun_small_cloud = "🌤️"; +var barely_sunny = "🌥️"; +var sun_behind_cloud = "🌥️"; +var partly_sunny_rain = "🌦️"; +var sun_behind_rain_cloud = "🌦️"; +var rain_cloud = "🌧️"; +var snow_cloud = "🌨️"; +var lightning = "🌩️"; +var lightning_cloud = "🌩️"; +var tornado = "🌪️"; +var tornado_cloud = "🌪️"; +var fog = "🌫️"; +var wind_blowing_face = "🌬️"; +var hotdog = "🌭"; +var taco = "🌮"; +var burrito = "🌯"; +var chestnut = "🌰"; +var seedling = "🌱"; +var evergreen_tree = "🌲"; +var deciduous_tree = "🌳"; +var palm_tree = "🌴"; +var cactus = "🌵"; +var hot_pepper = "🌶️"; +var tulip = "🌷"; +var cherry_blossom = "🌸"; +var rose = "🌹"; +var hibiscus = "🌺"; +var sunflower = "🌻"; +var blossom = "🌼"; +var corn = "🌽"; +var ear_of_rice = "🌾"; +var herb = "🌿"; +var four_leaf_clover = "🍀"; +var maple_leaf = "🍁"; +var fallen_leaf = "🍂"; +var leaves = "🍃"; +var mushroom = "🍄"; +var tomato = "🍅"; +var eggplant = "🍆"; +var grapes = "🍇"; +var melon = "🍈"; +var watermelon = "🍉"; +var tangerine = "🍊"; +var lemon = "🍋"; +var banana = "🍌"; +var pineapple = "🍍"; +var apple = "🍎"; +var green_apple = "🍏"; +var pear = "🍐"; +var peach = "🍑"; +var cherries = "🍒"; +var strawberry = "🍓"; +var hamburger = "🍔"; +var pizza = "🍕"; +var meat_on_bone = "🍖"; +var poultry_leg = "🍗"; +var rice_cracker = "🍘"; +var rice_ball = "🍙"; +var rice = "🍚"; +var curry = "🍛"; +var ramen = "🍜"; +var spaghetti = "🍝"; +var bread = "🍞"; +var fries = "🍟"; +var sweet_potato = "🍠"; +var dango = "🍡"; +var oden = "🍢"; +var sushi = "🍣"; +var fried_shrimp = "🍤"; +var fish_cake = "🍥"; +var icecream = "🍦"; +var shaved_ice = "🍧"; +var ice_cream = "🍨"; +var doughnut = "🍩"; +var cookie = "🍪"; +var chocolate_bar = "🍫"; +var candy = "🍬"; +var lollipop = "🍭"; +var custard = "🍮"; +var honey_pot = "🍯"; +var cake = "🍰"; +var bento = "🍱"; +var stew = "🍲"; +var fried_egg = "🍳"; +var cooking = "🍳"; +var fork_and_knife = "🍴"; +var tea = "🍵"; +var sake = "🍶"; +var wine_glass = "🍷"; +var cocktail = "🍸"; +var tropical_drink = "🍹"; +var beer = "🍺"; +var beers = "🍻"; +var baby_bottle = "🍼"; +var knife_fork_plate = "🍽️"; +var champagne = "🍾"; +var popcorn = "🍿"; +var ribbon = "🎀"; +var gift = "🎁"; +var birthday = "🎂"; +var jack_o_lantern = "🎃"; +var christmas_tree = "🎄"; +var santa = "🎅"; +var fireworks = "🎆"; +var sparkler = "🎇"; +var balloon = "🎈"; +var tada = "🎉"; +var confetti_ball = "🎊"; +var tanabata_tree = "🎋"; +var crossed_flags = "🎌"; +var bamboo = "🎍"; +var dolls = "🎎"; +var flags = "🎏"; +var wind_chime = "🎐"; +var rice_scene = "🎑"; +var school_satchel = "🎒"; +var mortar_board = "🎓"; +var medal = "🎖️"; +var reminder_ribbon = "🎗️"; +var studio_microphone = "🎙️"; +var level_slider = "🎚️"; +var control_knobs = "🎛️"; +var film_frames = "🎞️"; +var admission_tickets = "🎟️"; +var carousel_horse = "🎠"; +var ferris_wheel = "🎡"; +var roller_coaster = "🎢"; +var fishing_pole_and_fish = "🎣"; +var microphone = "🎤"; +var movie_camera = "🎥"; +var cinema = "🎦"; +var headphones = "🎧"; +var art = "🎨"; +var tophat = "🎩"; +var circus_tent = "🎪"; +var ticket = "🎫"; +var clapper = "🎬"; +var performing_arts = "🎭"; +var video_game = "🎮"; +var dart = "🎯"; +var slot_machine = "🎰"; +var game_die = "🎲"; +var bowling = "🎳"; +var flower_playing_cards = "🎴"; +var musical_note = "🎵"; +var notes = "🎶"; +var saxophone = "🎷"; +var guitar = "🎸"; +var musical_keyboard = "🎹"; +var trumpet = "🎺"; +var violin = "🎻"; +var musical_score = "🎼"; +var running_shirt_with_sash = "🎽"; +var tennis = "🎾"; +var ski = "🎿"; +var basketball = "🏀"; +var checkered_flag = "🏁"; +var snowboarder = "🏂"; +var runner = "🏃‍♂️"; +var running = "🏃‍♂️"; +var surfer = "🏄‍♂️"; +var sports_medal = "🏅"; +var trophy = "🏆"; +var horse_racing = "🏇"; +var football = "🏈"; +var rugby_football = "🏉"; +var swimmer = "🏊‍♂️"; +var weight_lifter = "🏋️‍♂️"; +var golfer = "🏌️‍♂️"; +var racing_motorcycle = "🏍️"; +var racing_car = "🏎️"; +var cricket_bat_and_ball = "🏏"; +var volleyball = "🏐"; +var field_hockey_stick_and_ball = "🏑"; +var ice_hockey_stick_and_puck = "🏒"; +var table_tennis_paddle_and_ball = "🏓"; +var snow_capped_mountain = "🏔️"; +var camping = "🏕️"; +var beach_with_umbrella = "🏖️"; +var building_construction = "🏗️"; +var house_buildings = "🏘️"; +var cityscape = "🏙️"; +var derelict_house_building = "🏚️"; +var classical_building = "🏛️"; +var desert = "🏜️"; +var desert_island = "🏝️"; +var national_park = "🏞️"; +var stadium = "🏟️"; +var house = "🏠"; +var house_with_garden = "🏡"; +var office = "🏢"; +var post_office = "🏣"; +var european_post_office = "🏤"; +var hospital = "🏥"; +var bank = "🏦"; +var atm = "🏧"; +var hotel = "🏨"; +var love_hotel = "🏩"; +var convenience_store = "🏪"; +var school = "🏫"; +var department_store = "🏬"; +var factory = "🏭"; +var izakaya_lantern = "🏮"; +var lantern = "🏮"; +var japanese_castle = "🏯"; +var european_castle = "🏰"; +var transgender_flag = "🏳️‍⚧️"; +var waving_white_flag = "🏳️"; +var pirate_flag = "🏴‍☠️"; +var waving_black_flag = "🏴"; +var rosette = "🏵️"; +var label = "🏷️"; +var badminton_racquet_and_shuttlecock = "🏸"; +var bow_and_arrow = "🏹"; +var amphora = "🏺"; +var rat = "🐀"; +var mouse2 = "🐁"; +var ox = "🐂"; +var water_buffalo = "🐃"; +var cow2 = "🐄"; +var tiger2 = "🐅"; +var leopard = "🐆"; +var rabbit2 = "🐇"; +var black_cat = "🐈‍⬛"; +var cat2 = "🐈"; +var dragon = "🐉"; +var crocodile = "🐊"; +var whale2 = "🐋"; +var snail = "🐌"; +var snake = "🐍"; +var racehorse = "🐎"; +var ram = "🐏"; +var goat = "🐐"; +var sheep = "🐑"; +var monkey = "🐒"; +var rooster = "🐓"; +var chicken = "🐔"; +var service_dog = "🐕‍🦺"; +var dog2 = "🐕"; +var pig2 = "🐖"; +var boar = "🐗"; +var elephant = "🐘"; +var octopus = "🐙"; +var shell = "🐚"; +var bug = "🐛"; +var ant = "🐜"; +var bee = "🐝"; +var honeybee = "🐝"; +var ladybug = "🐞"; +var lady_beetle = "🐞"; +var fish = "🐟"; +var tropical_fish = "🐠"; +var blowfish = "🐡"; +var turtle = "🐢"; +var hatching_chick = "🐣"; +var baby_chick = "🐤"; +var hatched_chick = "🐥"; +var bird = "🐦"; +var penguin = "🐧"; +var koala = "🐨"; +var poodle = "🐩"; +var dromedary_camel = "🐪"; +var camel = "🐫"; +var dolphin = "🐬"; +var flipper = "🐬"; +var mouse = "🐭"; +var cow = "🐮"; +var tiger = "🐯"; +var rabbit = "🐰"; +var cat = "🐱"; +var dragon_face = "🐲"; +var whale = "🐳"; +var horse = "🐴"; +var monkey_face = "🐵"; +var dog = "🐶"; +var pig = "🐷"; +var frog = "🐸"; +var hamster = "🐹"; +var wolf = "🐺"; +var polar_bear = "🐻‍❄️"; +var bear = "🐻"; +var panda_face = "🐼"; +var pig_nose = "🐽"; +var feet = "🐾"; +var paw_prints = "🐾"; +var chipmunk = "🐿️"; +var eyes = "👀"; +var eye = "👁️"; +var ear = "👂"; +var nose = "👃"; +var lips = "👄"; +var tongue = "👅"; +var point_up_2 = "👆"; +var point_down = "👇"; +var point_left = "👈"; +var point_right = "👉"; +var facepunch = "👊"; +var punch = "👊"; +var wave = "👋"; +var ok_hand = "👌"; +var thumbsup = "👍"; +var thumbsdown = "👎"; +var clap = "👏"; +var open_hands = "👐"; +var crown = "👑"; +var womans_hat = "👒"; +var eyeglasses = "👓"; +var necktie = "👔"; +var shirt = "👕"; +var tshirt = "👕"; +var jeans = "👖"; +var dress = "👗"; +var kimono = "👘"; +var bikini = "👙"; +var womans_clothes = "👚"; +var purse = "👛"; +var handbag = "👜"; +var pouch = "👝"; +var mans_shoe = "👞"; +var shoe = "👞"; +var athletic_shoe = "👟"; +var high_heel = "👠"; +var sandal = "👡"; +var boot = "👢"; +var footprints = "👣"; +var bust_in_silhouette = "👤"; +var busts_in_silhouette = "👥"; +var boy = "👦"; +var girl = "👧"; +var man_feeding_baby = "👨‍🍼"; +var family = "👨‍👩‍👦"; +var man_with_probing_cane = "👨‍🦯"; +var red_haired_man = "👨‍🦰"; +var curly_haired_man = "👨‍🦱"; +var bald_man = "👨‍🦲"; +var white_haired_man = "👨‍🦳"; +var man_in_motorized_wheelchair = "👨‍🦼"; +var man_in_manual_wheelchair = "👨‍🦽"; +var man = "👨"; +var woman_feeding_baby = "👩‍🍼"; +var woman_with_probing_cane = "👩‍🦯"; +var red_haired_woman = "👩‍🦰"; +var curly_haired_woman = "👩‍🦱"; +var bald_woman = "👩‍🦲"; +var white_haired_woman = "👩‍🦳"; +var woman_in_motorized_wheelchair = "👩‍🦼"; +var woman_in_manual_wheelchair = "👩‍🦽"; +var woman = "👩"; +var man_and_woman_holding_hands = "👫"; +var woman_and_man_holding_hands = "👫"; +var couple = "👫"; +var two_men_holding_hands = "👬"; +var men_holding_hands = "👬"; +var two_women_holding_hands = "👭"; +var women_holding_hands = "👭"; +var cop = "👮‍♂️"; +var dancers = "👯‍♀️"; +var woman_with_veil = "👰‍♀️"; +var man_with_veil = "👰‍♂️"; +var bride_with_veil = "👰"; +var person_with_blond_hair = "👱‍♂️"; +var man_with_gua_pi_mao = "👲"; +var man_with_turban = "👳‍♂️"; +var older_man = "👴"; +var older_woman = "👵"; +var baby = "👶"; +var construction_worker = "👷‍♂️"; +var princess = "👸"; +var japanese_ogre = "👹"; +var japanese_goblin = "👺"; +var ghost = "👻"; +var angel = "👼"; +var alien = "👽"; +var space_invader = "👾"; +var imp = "👿"; +var skull = "💀"; +var information_desk_person = "💁‍♀️"; +var guardsman = "💂‍♂️"; +var dancer = "💃"; +var lipstick = "💄"; +var nail_care = "💅"; +var massage = "💆‍♀️"; +var haircut = "💇‍♀️"; +var barber = "💈"; +var syringe = "💉"; +var pill = "💊"; +var kiss = "💋"; +var love_letter = "💌"; +var ring = "💍"; +var gem = "💎"; +var couplekiss = "💏"; +var bouquet = "💐"; +var couple_with_heart = "💑"; +var wedding = "💒"; +var heartbeat = "💓"; +var broken_heart = "💔"; +var two_hearts = "💕"; +var sparkling_heart = "💖"; +var heartpulse = "💗"; +var cupid = "💘"; +var blue_heart = "💙"; +var green_heart = "💚"; +var yellow_heart = "💛"; +var purple_heart = "💜"; +var gift_heart = "💝"; +var revolving_hearts = "💞"; +var heart_decoration = "💟"; +var diamond_shape_with_a_dot_inside = "💠"; +var bulb = "💡"; +var anger = "💢"; +var bomb = "💣"; +var zzz = "💤"; +var boom = "💥"; +var collision = "💥"; +var sweat_drops = "💦"; +var droplet = "💧"; +var dash = "💨"; +var hankey = "💩"; +var poop = "💩"; +var shit = "💩"; +var muscle = "💪"; +var dizzy = "💫"; +var speech_balloon = "💬"; +var thought_balloon = "💭"; +var white_flower = "💮"; +var moneybag = "💰"; +var currency_exchange = "💱"; +var heavy_dollar_sign = "💲"; +var credit_card = "💳"; +var yen = "💴"; +var dollar = "💵"; +var euro = "💶"; +var pound = "💷"; +var money_with_wings = "💸"; +var chart = "💹"; +var seat = "💺"; +var computer = "💻"; +var briefcase = "💼"; +var minidisc = "💽"; +var floppy_disk = "💾"; +var cd = "💿"; +var dvd = "📀"; +var file_folder = "📁"; +var open_file_folder = "📂"; +var page_with_curl = "📃"; +var page_facing_up = "📄"; +var date = "📅"; +var calendar = "📆"; +var card_index = "📇"; +var chart_with_upwards_trend = "📈"; +var chart_with_downwards_trend = "📉"; +var bar_chart = "📊"; +var clipboard = "📋"; +var pushpin = "📌"; +var round_pushpin = "📍"; +var paperclip = "📎"; +var straight_ruler = "📏"; +var triangular_ruler = "📐"; +var bookmark_tabs = "📑"; +var ledger = "📒"; +var notebook = "📓"; +var notebook_with_decorative_cover = "📔"; +var closed_book = "📕"; +var book = "📖"; +var open_book = "📖"; +var green_book = "📗"; +var blue_book = "📘"; +var orange_book = "📙"; +var books = "📚"; +var name_badge = "📛"; +var scroll = "📜"; +var memo = "📝"; +var pencil = "📝"; +var telephone_receiver = "📞"; +var pager = "📟"; +var fax = "📠"; +var satellite_antenna = "📡"; +var loudspeaker = "📢"; +var mega = "📣"; +var outbox_tray = "📤"; +var inbox_tray = "📥"; +var incoming_envelope = "📨"; +var envelope_with_arrow = "📩"; +var mailbox_closed = "📪"; +var mailbox = "📫"; +var mailbox_with_mail = "📬"; +var mailbox_with_no_mail = "📭"; +var postbox = "📮"; +var postal_horn = "📯"; +var newspaper = "📰"; +var iphone = "📱"; +var calling = "📲"; +var vibration_mode = "📳"; +var mobile_phone_off = "📴"; +var no_mobile_phones = "📵"; +var signal_strength = "📶"; +var camera = "📷"; +var camera_with_flash = "📸"; +var video_camera = "📹"; +var tv = "📺"; +var radio = "📻"; +var vhs = "📼"; +var film_projector = "📽️"; +var prayer_beads = "📿"; +var twisted_rightwards_arrows = "🔀"; +var repeat = "🔁"; +var repeat_one = "🔂"; +var arrows_clockwise = "🔃"; +var arrows_counterclockwise = "🔄"; +var low_brightness = "🔅"; +var high_brightness = "🔆"; +var mute = "🔇"; +var speaker = "🔈"; +var sound = "🔉"; +var loud_sound = "🔊"; +var battery = "🔋"; +var electric_plug = "🔌"; +var mag = "🔍"; +var mag_right = "🔎"; +var lock_with_ink_pen = "🔏"; +var closed_lock_with_key = "🔐"; +var key = "🔑"; +var lock = "🔒"; +var unlock = "🔓"; +var bell = "🔔"; +var no_bell = "🔕"; +var bookmark = "🔖"; +var link = "🔗"; +var radio_button = "🔘"; +var back = "🔙"; +var end = "🔚"; +var on = "🔛"; +var soon = "🔜"; +var top = "🔝"; +var underage = "🔞"; +var keycap_ten = "🔟"; +var capital_abcd = "🔠"; +var abcd = "🔡"; +var symbols = "🔣"; +var abc = "🔤"; +var fire = "🔥"; +var flashlight = "🔦"; +var wrench = "🔧"; +var hammer = "🔨"; +var nut_and_bolt = "🔩"; +var hocho = "🔪"; +var knife = "🔪"; +var gun = "🔫"; +var microscope = "🔬"; +var telescope = "🔭"; +var crystal_ball = "🔮"; +var six_pointed_star = "🔯"; +var beginner = "🔰"; +var trident = "🔱"; +var black_square_button = "🔲"; +var white_square_button = "🔳"; +var red_circle = "🔴"; +var large_blue_circle = "🔵"; +var large_orange_diamond = "🔶"; +var large_blue_diamond = "🔷"; +var small_orange_diamond = "🔸"; +var small_blue_diamond = "🔹"; +var small_red_triangle = "🔺"; +var small_red_triangle_down = "🔻"; +var arrow_up_small = "🔼"; +var arrow_down_small = "🔽"; +var om_symbol = "🕉️"; +var dove_of_peace = "🕊️"; +var kaaba = "🕋"; +var mosque = "🕌"; +var synagogue = "🕍"; +var menorah_with_nine_branches = "🕎"; +var clock1 = "🕐"; +var clock2 = "🕑"; +var clock3 = "🕒"; +var clock4 = "🕓"; +var clock5 = "🕔"; +var clock6 = "🕕"; +var clock7 = "🕖"; +var clock8 = "🕗"; +var clock9 = "🕘"; +var clock10 = "🕙"; +var clock11 = "🕚"; +var clock12 = "🕛"; +var clock130 = "🕜"; +var clock230 = "🕝"; +var clock330 = "🕞"; +var clock430 = "🕟"; +var clock530 = "🕠"; +var clock630 = "🕡"; +var clock730 = "🕢"; +var clock830 = "🕣"; +var clock930 = "🕤"; +var clock1030 = "🕥"; +var clock1130 = "🕦"; +var clock1230 = "🕧"; +var candle = "🕯️"; +var mantelpiece_clock = "🕰️"; +var hole = "🕳️"; +var man_in_business_suit_levitating = "🕴️"; +var sleuth_or_spy = "🕵️‍♂️"; +var dark_sunglasses = "🕶️"; +var spider = "🕷️"; +var spider_web = "🕸️"; +var joystick = "🕹️"; +var man_dancing = "🕺"; +var linked_paperclips = "🖇️"; +var lower_left_ballpoint_pen = "🖊️"; +var lower_left_fountain_pen = "🖋️"; +var lower_left_paintbrush = "🖌️"; +var lower_left_crayon = "🖍️"; +var raised_hand_with_fingers_splayed = "🖐️"; +var middle_finger = "🖕"; +var reversed_hand_with_middle_finger_extended = "🖕"; +var black_heart = "🖤"; +var desktop_computer = "🖥️"; +var printer = "🖨️"; +var three_button_mouse = "🖱️"; +var trackball = "🖲️"; +var frame_with_picture = "🖼️"; +var card_index_dividers = "🗂️"; +var card_file_box = "🗃️"; +var file_cabinet = "🗄️"; +var wastebasket = "🗑️"; +var spiral_note_pad = "🗒️"; +var spiral_calendar_pad = "🗓️"; +var compression = "🗜️"; +var old_key = "🗝️"; +var rolled_up_newspaper = "🗞️"; +var dagger_knife = "🗡️"; +var speaking_head_in_silhouette = "🗣️"; +var left_speech_bubble = "🗨️"; +var right_anger_bubble = "🗯️"; +var ballot_box_with_ballot = "🗳️"; +var world_map = "🗺️"; +var mount_fuji = "🗻"; +var tokyo_tower = "🗼"; +var statue_of_liberty = "🗽"; +var japan = "🗾"; +var moyai = "🗿"; +var grinning = "😀"; +var grin = "😁"; +var joy = "😂"; +var smiley = "😃"; +var smile = "😄"; +var sweat_smile = "😅"; +var laughing = "😆"; +var satisfied = "😆"; +var innocent = "😇"; +var smiling_imp = "😈"; +var wink = "😉"; +var blush = "😊"; +var yum = "😋"; +var relieved = "😌"; +var heart_eyes = "😍"; +var sunglasses = "😎"; +var smirk = "😏"; +var neutral_face = "😐"; +var expressionless = "😑"; +var unamused = "😒"; +var sweat = "😓"; +var pensive = "😔"; +var confused = "😕"; +var confounded = "😖"; +var kissing = "😗"; +var kissing_heart = "😘"; +var kissing_smiling_eyes = "😙"; +var kissing_closed_eyes = "😚"; +var stuck_out_tongue = "😛"; +var stuck_out_tongue_winking_eye = "😜"; +var stuck_out_tongue_closed_eyes = "😝"; +var disappointed = "😞"; +var worried = "😟"; +var angry = "😠"; +var rage = "😡"; +var cry = "😢"; +var persevere = "😣"; +var triumph = "😤"; +var disappointed_relieved = "😥"; +var frowning = "😦"; +var anguished = "😧"; +var fearful = "😨"; +var weary = "😩"; +var sleepy = "😪"; +var tired_face = "😫"; +var grimacing = "😬"; +var sob = "😭"; +var face_exhaling = "😮‍💨"; +var open_mouth = "😮"; +var hushed = "😯"; +var cold_sweat = "😰"; +var scream = "😱"; +var astonished = "😲"; +var flushed = "😳"; +var sleeping = "😴"; +var face_with_spiral_eyes = "😵‍💫"; +var dizzy_face = "😵"; +var face_in_clouds = "😶‍🌫️"; +var no_mouth = "😶"; +var mask = "😷"; +var smile_cat = "😸"; +var joy_cat = "😹"; +var smiley_cat = "😺"; +var heart_eyes_cat = "😻"; +var smirk_cat = "😼"; +var kissing_cat = "😽"; +var pouting_cat = "😾"; +var crying_cat_face = "😿"; +var scream_cat = "🙀"; +var slightly_frowning_face = "🙁"; +var slightly_smiling_face = "🙂"; +var upside_down_face = "🙃"; +var face_with_rolling_eyes = "🙄"; +var no_good = "🙅‍♀️"; +var ok_woman = "🙆‍♀️"; +var bow = "🙇‍♂️"; +var see_no_evil = "🙈"; +var hear_no_evil = "🙉"; +var speak_no_evil = "🙊"; +var raising_hand = "🙋‍♀️"; +var raised_hands = "🙌"; +var person_frowning = "🙍‍♀️"; +var person_with_pouting_face = "🙎‍♀️"; +var pray = "🙏"; +var rocket = "🚀"; +var helicopter = "🚁"; +var steam_locomotive = "🚂"; +var railway_car = "🚃"; +var bullettrain_side = "🚄"; +var bullettrain_front = "🚅"; +var train2 = "🚆"; +var metro = "🚇"; +var light_rail = "🚈"; +var station = "🚉"; +var tram = "🚊"; +var train = "🚋"; +var bus = "🚌"; +var oncoming_bus = "🚍"; +var trolleybus = "🚎"; +var busstop = "🚏"; +var minibus = "🚐"; +var ambulance = "🚑"; +var fire_engine = "🚒"; +var police_car = "🚓"; +var oncoming_police_car = "🚔"; +var taxi = "🚕"; +var oncoming_taxi = "🚖"; +var car = "🚗"; +var red_car = "🚗"; +var oncoming_automobile = "🚘"; +var blue_car = "🚙"; +var truck = "🚚"; +var articulated_lorry = "🚛"; +var tractor = "🚜"; +var monorail = "🚝"; +var mountain_railway = "🚞"; +var suspension_railway = "🚟"; +var mountain_cableway = "🚠"; +var aerial_tramway = "🚡"; +var ship = "🚢"; +var rowboat = "🚣‍♂️"; +var speedboat = "🚤"; +var traffic_light = "🚥"; +var vertical_traffic_light = "🚦"; +var construction = "🚧"; +var rotating_light = "🚨"; +var triangular_flag_on_post = "🚩"; +var door = "🚪"; +var no_entry_sign = "🚫"; +var smoking = "🚬"; +var no_smoking = "🚭"; +var put_litter_in_its_place = "🚮"; +var do_not_litter = "🚯"; +var potable_water = "🚰"; +var bike = "🚲"; +var no_bicycles = "🚳"; +var bicyclist = "🚴‍♂️"; +var mountain_bicyclist = "🚵‍♂️"; +var walking = "🚶‍♂️"; +var no_pedestrians = "🚷"; +var children_crossing = "🚸"; +var mens = "🚹"; +var womens = "🚺"; +var restroom = "🚻"; +var baby_symbol = "🚼"; +var toilet = "🚽"; +var wc = "🚾"; +var shower = "🚿"; +var bath = "🛀"; +var bathtub = "🛁"; +var passport_control = "🛂"; +var customs = "🛃"; +var baggage_claim = "🛄"; +var left_luggage = "🛅"; +var couch_and_lamp = "🛋️"; +var sleeping_accommodation = "🛌"; +var shopping_bags = "🛍️"; +var bellhop_bell = "🛎️"; +var bed = "🛏️"; +var place_of_worship = "🛐"; +var octagonal_sign = "🛑"; +var shopping_trolley = "🛒"; +var hindu_temple = "🛕"; +var hut = "🛖"; +var elevator = "🛗"; +var hammer_and_wrench = "🛠️"; +var shield = "🛡️"; +var oil_drum = "🛢️"; +var motorway = "🛣️"; +var railway_track = "🛤️"; +var motor_boat = "🛥️"; +var small_airplane = "🛩️"; +var airplane_departure = "🛫"; +var airplane_arriving = "🛬"; +var satellite = "🛰️"; +var passenger_ship = "🛳️"; +var scooter = "🛴"; +var motor_scooter = "🛵"; +var canoe = "🛶"; +var sled = "🛷"; +var flying_saucer = "🛸"; +var skateboard = "🛹"; +var auto_rickshaw = "🛺"; +var pickup_truck = "🛻"; +var roller_skate = "🛼"; +var large_orange_circle = "🟠"; +var large_yellow_circle = "🟡"; +var large_green_circle = "🟢"; +var large_purple_circle = "🟣"; +var large_brown_circle = "🟤"; +var large_red_square = "🟥"; +var large_blue_square = "🟦"; +var large_orange_square = "🟧"; +var large_yellow_square = "🟨"; +var large_green_square = "🟩"; +var large_purple_square = "🟪"; +var large_brown_square = "🟫"; +var pinched_fingers = "🤌"; +var white_heart = "🤍"; +var brown_heart = "🤎"; +var pinching_hand = "🤏"; +var zipper_mouth_face = "🤐"; +var money_mouth_face = "🤑"; +var face_with_thermometer = "🤒"; +var nerd_face = "🤓"; +var thinking_face = "🤔"; +var face_with_head_bandage = "🤕"; +var robot_face = "🤖"; +var hugging_face = "🤗"; +var the_horns = "🤘"; +var sign_of_the_horns = "🤘"; +var call_me_hand = "🤙"; +var raised_back_of_hand = "🤚"; +var handshake = "🤝"; +var crossed_fingers = "🤞"; +var hand_with_index_and_middle_fingers_crossed = "🤞"; +var i_love_you_hand_sign = "🤟"; +var face_with_cowboy_hat = "🤠"; +var clown_face = "🤡"; +var nauseated_face = "🤢"; +var rolling_on_the_floor_laughing = "🤣"; +var drooling_face = "🤤"; +var lying_face = "🤥"; +var face_palm = "🤦"; +var sneezing_face = "🤧"; +var face_with_raised_eyebrow = "🤨"; +var face_with_one_eyebrow_raised = "🤨"; +var grinning_face_with_star_eyes = "🤩"; +var zany_face = "🤪"; +var grinning_face_with_one_large_and_one_small_eye = "🤪"; +var shushing_face = "🤫"; +var face_with_finger_covering_closed_lips = "🤫"; +var face_with_symbols_on_mouth = "🤬"; +var serious_face_with_symbols_covering_mouth = "🤬"; +var face_with_hand_over_mouth = "🤭"; +var smiling_face_with_smiling_eyes_and_hand_covering_mouth = "🤭"; +var face_vomiting = "🤮"; +var face_with_open_mouth_vomiting = "🤮"; +var exploding_head = "🤯"; +var shocked_face_with_exploding_head = "🤯"; +var pregnant_woman = "🤰"; +var palms_up_together = "🤲"; +var selfie = "🤳"; +var prince = "🤴"; +var woman_in_tuxedo = "🤵‍♀️"; +var man_in_tuxedo = "🤵‍♂️"; +var person_in_tuxedo = "🤵"; +var mrs_claus = "🤶"; +var mother_christmas = "🤶"; +var shrug = "🤷"; +var person_doing_cartwheel = "🤸"; +var juggling = "🤹"; +var fencer = "🤺"; +var wrestlers = "🤼"; +var water_polo = "🤽"; +var handball = "🤾"; +var diving_mask = "🤿"; +var wilted_flower = "🥀"; +var drum_with_drumsticks = "🥁"; +var clinking_glasses = "🥂"; +var tumbler_glass = "🥃"; +var spoon = "🥄"; +var goal_net = "🥅"; +var first_place_medal = "🥇"; +var second_place_medal = "🥈"; +var third_place_medal = "🥉"; +var boxing_glove = "🥊"; +var martial_arts_uniform = "🥋"; +var curling_stone = "🥌"; +var lacrosse = "🥍"; +var softball = "🥎"; +var flying_disc = "🥏"; +var croissant = "🥐"; +var avocado = "🥑"; +var cucumber = "🥒"; +var bacon = "🥓"; +var potato = "🥔"; +var carrot = "🥕"; +var baguette_bread = "🥖"; +var green_salad = "🥗"; +var shallow_pan_of_food = "🥘"; +var stuffed_flatbread = "🥙"; +var egg = "🥚"; +var glass_of_milk = "🥛"; +var peanuts = "🥜"; +var kiwifruit = "🥝"; +var pancakes = "🥞"; +var dumpling = "🥟"; +var fortune_cookie = "🥠"; +var takeout_box = "🥡"; +var chopsticks = "🥢"; +var bowl_with_spoon = "🥣"; +var cup_with_straw = "🥤"; +var coconut = "🥥"; +var broccoli = "🥦"; +var pie = "🥧"; +var pretzel = "🥨"; +var cut_of_meat = "🥩"; +var sandwich = "🥪"; +var canned_food = "🥫"; +var leafy_green = "🥬"; +var mango = "🥭"; +var moon_cake = "🥮"; +var bagel = "🥯"; +var smiling_face_with_3_hearts = "🥰"; +var yawning_face = "🥱"; +var smiling_face_with_tear = "🥲"; +var partying_face = "🥳"; +var woozy_face = "🥴"; +var hot_face = "🥵"; +var cold_face = "🥶"; +var ninja = "🥷"; +var disguised_face = "🥸"; +var pleading_face = "🥺"; +var sari = "🥻"; +var lab_coat = "🥼"; +var goggles = "🥽"; +var hiking_boot = "🥾"; +var womans_flat_shoe = "🥿"; +var crab = "🦀"; +var lion_face = "🦁"; +var scorpion = "🦂"; +var turkey = "🦃"; +var unicorn_face = "🦄"; +var eagle = "🦅"; +var duck = "🦆"; +var bat = "🦇"; +var shark = "🦈"; +var owl = "🦉"; +var fox_face = "🦊"; +var butterfly = "🦋"; +var deer = "🦌"; +var gorilla = "🦍"; +var lizard = "🦎"; +var rhinoceros = "🦏"; +var shrimp = "🦐"; +var squid = "🦑"; +var giraffe_face = "🦒"; +var zebra_face = "🦓"; +var hedgehog = "🦔"; +var sauropod = "🦕"; +var cricket = "🦗"; +var kangaroo = "🦘"; +var llama = "🦙"; +var peacock = "🦚"; +var hippopotamus = "🦛"; +var parrot = "🦜"; +var raccoon = "🦝"; +var lobster = "🦞"; +var mosquito = "🦟"; +var microbe = "🦠"; +var badger = "🦡"; +var swan = "🦢"; +var mammoth = "🦣"; +var dodo = "🦤"; +var sloth = "🦥"; +var otter = "🦦"; +var orangutan = "🦧"; +var skunk = "🦨"; +var flamingo = "🦩"; +var oyster = "🦪"; +var beaver = "🦫"; +var bison = "🦬"; +var seal = "🦭"; +var guide_dog = "🦮"; +var probing_cane = "🦯"; +var bone = "🦴"; +var leg = "🦵"; +var foot = "🦶"; +var tooth = "🦷"; +var female_superhero = "🦸‍♀️"; +var male_superhero = "🦸‍♂️"; +var superhero = "🦸"; +var female_supervillain = "🦹‍♀️"; +var male_supervillain = "🦹‍♂️"; +var supervillain = "🦹"; +var safety_vest = "🦺"; +var ear_with_hearing_aid = "🦻"; +var motorized_wheelchair = "🦼"; +var manual_wheelchair = "🦽"; +var mechanical_arm = "🦾"; +var mechanical_leg = "🦿"; +var cheese_wedge = "🧀"; +var cupcake = "🧁"; +var salt = "🧂"; +var beverage_box = "🧃"; +var garlic = "🧄"; +var onion = "🧅"; +var falafel = "🧆"; +var waffle = "🧇"; +var butter = "🧈"; +var mate_drink = "🧉"; +var ice_cube = "🧊"; +var bubble_tea = "🧋"; +var woman_standing = "🧍‍♀️"; +var man_standing = "🧍‍♂️"; +var standing_person = "🧍"; +var woman_kneeling = "🧎‍♀️"; +var man_kneeling = "🧎‍♂️"; +var kneeling_person = "🧎"; +var deaf_woman = "🧏‍♀️"; +var deaf_man = "🧏‍♂️"; +var deaf_person = "🧏"; +var face_with_monocle = "🧐"; +var farmer = "🧑‍🌾"; +var cook = "🧑‍🍳"; +var person_feeding_baby = "🧑‍🍼"; +var mx_claus = "🧑‍🎄"; +var student = "🧑‍🎓"; +var singer = "🧑‍🎤"; +var artist = "🧑‍🎨"; +var teacher = "🧑‍🏫"; +var factory_worker = "🧑‍🏭"; +var technologist = "🧑‍💻"; +var office_worker = "🧑‍💼"; +var mechanic = "🧑‍🔧"; +var scientist = "🧑‍🔬"; +var astronaut = "🧑‍🚀"; +var firefighter = "🧑‍🚒"; +var people_holding_hands = "🧑‍🤝‍🧑"; +var person_with_probing_cane = "🧑‍🦯"; +var red_haired_person = "🧑‍🦰"; +var curly_haired_person = "🧑‍🦱"; +var bald_person = "🧑‍🦲"; +var white_haired_person = "🧑‍🦳"; +var person_in_motorized_wheelchair = "🧑‍🦼"; +var person_in_manual_wheelchair = "🧑‍🦽"; +var health_worker = "🧑‍⚕️"; +var judge = "🧑‍⚖️"; +var pilot = "🧑‍✈️"; +var adult = "🧑"; +var child = "🧒"; +var older_adult = "🧓"; +var woman_with_beard = "🧔‍♀️"; +var man_with_beard = "🧔‍♂️"; +var bearded_person = "🧔"; +var person_with_headscarf = "🧕"; +var woman_in_steamy_room = "🧖‍♀️"; +var man_in_steamy_room = "🧖‍♂️"; +var person_in_steamy_room = "🧖‍♂️"; +var woman_climbing = "🧗‍♀️"; +var person_climbing = "🧗‍♀️"; +var man_climbing = "🧗‍♂️"; +var woman_in_lotus_position = "🧘‍♀️"; +var person_in_lotus_position = "🧘‍♀️"; +var man_in_lotus_position = "🧘‍♂️"; +var female_mage = "🧙‍♀️"; +var mage = "🧙‍♀️"; +var male_mage = "🧙‍♂️"; +var female_fairy = "🧚‍♀️"; +var fairy = "🧚‍♀️"; +var male_fairy = "🧚‍♂️"; +var female_vampire = "🧛‍♀️"; +var vampire = "🧛‍♀️"; +var male_vampire = "🧛‍♂️"; +var mermaid = "🧜‍♀️"; +var merman = "🧜‍♂️"; +var merperson = "🧜‍♂️"; +var female_elf = "🧝‍♀️"; +var male_elf = "🧝‍♂️"; +var elf = "🧝‍♂️"; +var female_genie = "🧞‍♀️"; +var male_genie = "🧞‍♂️"; +var genie = "🧞‍♂️"; +var female_zombie = "🧟‍♀️"; +var male_zombie = "🧟‍♂️"; +var zombie = "🧟‍♂️"; +var brain = "🧠"; +var orange_heart = "🧡"; +var billed_cap = "🧢"; +var scarf = "🧣"; +var gloves = "🧤"; +var coat = "🧥"; +var socks = "🧦"; +var red_envelope = "🧧"; +var firecracker = "🧨"; +var jigsaw = "🧩"; +var test_tube = "🧪"; +var petri_dish = "🧫"; +var dna = "🧬"; +var compass = "🧭"; +var abacus = "🧮"; +var fire_extinguisher = "🧯"; +var toolbox = "🧰"; +var bricks = "🧱"; +var magnet = "🧲"; +var luggage = "🧳"; +var lotion_bottle = "🧴"; +var thread = "🧵"; +var yarn = "🧶"; +var safety_pin = "🧷"; +var teddy_bear = "🧸"; +var broom = "🧹"; +var basket = "🧺"; +var roll_of_paper = "🧻"; +var soap = "🧼"; +var sponge = "🧽"; +var receipt = "🧾"; +var nazar_amulet = "🧿"; +var ballet_shoes = "🩰"; +var briefs = "🩲"; +var shorts = "🩳"; +var thong_sandal = "🩴"; +var drop_of_blood = "🩸"; +var adhesive_bandage = "🩹"; +var stethoscope = "🩺"; +var kite = "🪁"; +var parachute = "🪂"; +var boomerang = "🪃"; +var magic_wand = "🪄"; +var pinata = "🪅"; +var nesting_dolls = "🪆"; +var ringed_planet = "🪐"; +var chair = "🪑"; +var razor = "🪒"; +var axe = "🪓"; +var diya_lamp = "🪔"; +var banjo = "🪕"; +var military_helmet = "🪖"; +var accordion = "🪗"; +var long_drum = "🪘"; +var coin = "🪙"; +var carpentry_saw = "🪚"; +var screwdriver = "🪛"; +var ladder = "🪜"; +var hook = "🪝"; +var mirror = "🪞"; +var window$1 = "🪟"; +var plunger = "🪠"; +var sewing_needle = "🪡"; +var knot = "🪢"; +var bucket = "🪣"; +var mouse_trap = "🪤"; +var toothbrush = "🪥"; +var headstone = "🪦"; +var placard = "🪧"; +var rock = "🪨"; +var fly = "🪰"; +var worm = "🪱"; +var beetle = "🪲"; +var cockroach = "🪳"; +var potted_plant = "🪴"; +var wood = "🪵"; +var feather = "🪶"; +var anatomical_heart = "🫀"; +var lungs = "🫁"; +var people_hugging = "🫂"; +var blueberries = "🫐"; +var bell_pepper = "🫑"; +var olive = "🫒"; +var flatbread = "🫓"; +var tamale = "🫔"; +var fondue = "🫕"; +var teapot = "🫖"; +var bangbang = "‼️"; +var interrobang = "⁉️"; +var tm = "™️"; +var information_source = "ℹ️"; +var left_right_arrow = "↔️"; +var arrow_up_down = "↕️"; +var arrow_upper_left = "↖️"; +var arrow_upper_right = "↗️"; +var arrow_lower_right = "↘️"; +var arrow_lower_left = "↙️"; +var leftwards_arrow_with_hook = "↩️"; +var arrow_right_hook = "↪️"; +var watch = "⌚"; +var hourglass = "⌛"; +var keyboard = "⌨️"; +var eject = "⏏️"; +var fast_forward = "⏩"; +var rewind = "⏪"; +var arrow_double_up = "⏫"; +var arrow_double_down = "⏬"; +var black_right_pointing_double_triangle_with_vertical_bar = "⏭️"; +var black_left_pointing_double_triangle_with_vertical_bar = "⏮️"; +var black_right_pointing_triangle_with_double_vertical_bar = "⏯️"; +var alarm_clock = "⏰"; +var stopwatch = "⏱️"; +var timer_clock = "⏲️"; +var hourglass_flowing_sand = "⏳"; +var double_vertical_bar = "⏸️"; +var black_square_for_stop = "⏹️"; +var black_circle_for_record = "⏺️"; +var m = "Ⓜ️"; +var black_small_square = "▪️"; +var white_small_square = "▫️"; +var arrow_forward = "▶️"; +var arrow_backward = "◀️"; +var white_medium_square = "◻️"; +var black_medium_square = "◼️"; +var white_medium_small_square = "◽"; +var black_medium_small_square = "◾"; +var sunny = "☀️"; +var cloud = "☁️"; +var umbrella = "☂️"; +var snowman = "☃️"; +var comet = "☄️"; +var phone = "☎️"; +var telephone = "☎️"; +var ballot_box_with_check = "☑️"; +var shamrock = "☘️"; +var point_up = "☝️"; +var skull_and_crossbones = "☠️"; +var radioactive_sign = "☢️"; +var biohazard_sign = "☣️"; +var orthodox_cross = "☦️"; +var star_and_crescent = "☪️"; +var peace_symbol = "☮️"; +var yin_yang = "☯️"; +var wheel_of_dharma = "☸️"; +var white_frowning_face = "☹️"; +var relaxed = "☺️"; +var female_sign = "♀️"; +var male_sign = "♂️"; +var gemini = "♊"; +var cancer = "♋"; +var leo = "♌"; +var virgo = "♍"; +var libra = "♎"; +var scorpius = "♏"; +var chess_pawn = "♟️"; +var spades = "♠️"; +var clubs = "♣️"; +var hearts = "♥️"; +var diamonds = "♦️"; +var hotsprings = "♨️"; +var recycle = "♻️"; +var infinity = "♾️"; +var wheelchair = "♿"; +var hammer_and_pick = "⚒️"; +var crossed_swords = "⚔️"; +var medical_symbol = "⚕️"; +var staff_of_aesculapius = "⚕️"; +var scales = "⚖️"; +var alembic = "⚗️"; +var gear = "⚙️"; +var atom_symbol = "⚛️"; +var fleur_de_lis = "⚜️"; +var warning = "⚠️"; +var zap = "⚡"; +var transgender_symbol = "⚧️"; +var white_circle = "⚪"; +var black_circle = "⚫"; +var coffin = "⚰️"; +var funeral_urn = "⚱️"; +var soccer = "⚽"; +var baseball = "⚾"; +var snowman_without_snow = "⛄"; +var partly_sunny = "⛅"; +var thunder_cloud_and_rain = "⛈️"; +var ophiuchus = "⛎"; +var pick = "⛏️"; +var helmet_with_white_cross = "⛑️"; +var chains = "⛓️"; +var no_entry = "⛔"; +var shinto_shrine = "⛩️"; +var church = "⛪"; +var mountain = "⛰️"; +var umbrella_on_ground = "⛱️"; +var fountain = "⛲"; +var golf = "⛳"; +var ferry = "⛴️"; +var boat = "⛵"; +var sailboat = "⛵"; +var skier = "⛷️"; +var ice_skate = "⛸️"; +var person_with_ball = "⛹️‍♂️"; +var tent = "⛺"; +var fuelpump = "⛽"; +var scissors = "✂️"; +var airplane = "✈️"; +var email = "✉️"; +var envelope = "✉️"; +var fist = "✊"; +var hand = "✋"; +var raised_hand = "✋"; +var v = "✌️"; +var writing_hand = "✍️"; +var pencil2 = "✏️"; +var black_nib = "✒️"; +var heavy_check_mark = "✔️"; +var heavy_multiplication_x = "✖️"; +var latin_cross = "✝️"; +var star_of_david = "✡️"; +var eight_spoked_asterisk = "✳️"; +var eight_pointed_black_star = "✴️"; +var snowflake = "❄️"; +var sparkle = "❇️"; +var x = "❌"; +var negative_squared_cross_mark = "❎"; +var heavy_heart_exclamation_mark_ornament = "❣️"; +var heart_on_fire = "❤️‍🔥"; +var mending_heart = "❤️‍🩹"; +var heart = "❤️"; +var arrow_right = "➡️"; +var curly_loop = "➰"; +var loop = "➿"; +var arrow_heading_up = "⤴️"; +var arrow_heading_down = "⤵️"; +var arrow_left = "⬅️"; +var arrow_up = "⬆️"; +var arrow_down = "⬇️"; +var black_large_square = "⬛"; +var white_large_square = "⬜"; +var star = "⭐"; +var o = "⭕"; +var wavy_dash = "〰️"; +var part_alternation_mark = "〽️"; +var congratulations = "㊗️"; +var secret = "㊙️"; +var emojiByName = { + "100": "💯", + "1234": "🔢", + umbrella_with_rain_drops: umbrella_with_rain_drops, + coffee: coffee, + aries: aries, + taurus: taurus, + sagittarius: sagittarius, + capricorn: capricorn, + aquarius: aquarius, + pisces: pisces, + anchor: anchor, + white_check_mark: white_check_mark, + sparkles: sparkles, + question: question, + grey_question: grey_question, + grey_exclamation: grey_exclamation, + exclamation: exclamation, + heavy_exclamation_mark: heavy_exclamation_mark, + heavy_plus_sign: heavy_plus_sign, + heavy_minus_sign: heavy_minus_sign, + heavy_division_sign: heavy_division_sign, + hash: hash, + keycap_star: keycap_star, + zero: zero, + one: one, + two: two, + three: three, + four: four, + five: five, + six: six, + seven: seven, + eight: eight, + nine: nine, + copyright: copyright, + registered: registered, + mahjong: mahjong, + black_joker: black_joker, + a: a, + b: b, + o2: o2, + parking: parking, + ab: ab, + cl: cl, + cool: cool, + free: free, + id: id, + "new": "🆕", + ng: ng, + ok: ok, + sos: sos, + up: up, + vs: vs, + "flag-ac": "🇦🇨", + "flag-ad": "🇦🇩", + "flag-ae": "🇦🇪", + "flag-af": "🇦🇫", + "flag-ag": "🇦🇬", + "flag-ai": "🇦🇮", + "flag-al": "🇦🇱", + "flag-am": "🇦🇲", + "flag-ao": "🇦🇴", + "flag-aq": "🇦🇶", + "flag-ar": "🇦🇷", + "flag-as": "🇦🇸", + "flag-at": "🇦🇹", + "flag-au": "🇦🇺", + "flag-aw": "🇦🇼", + "flag-ax": "🇦🇽", + "flag-az": "🇦🇿", + "flag-ba": "🇧🇦", + "flag-bb": "🇧🇧", + "flag-bd": "🇧🇩", + "flag-be": "🇧🇪", + "flag-bf": "🇧🇫", + "flag-bg": "🇧🇬", + "flag-bh": "🇧🇭", + "flag-bi": "🇧🇮", + "flag-bj": "🇧🇯", + "flag-bl": "🇧🇱", + "flag-bm": "🇧🇲", + "flag-bn": "🇧🇳", + "flag-bo": "🇧🇴", + "flag-bq": "🇧🇶", + "flag-br": "🇧🇷", + "flag-bs": "🇧🇸", + "flag-bt": "🇧🇹", + "flag-bv": "🇧🇻", + "flag-bw": "🇧🇼", + "flag-by": "🇧🇾", + "flag-bz": "🇧🇿", + "flag-ca": "🇨🇦", + "flag-cc": "🇨🇨", + "flag-cd": "🇨🇩", + "flag-cf": "🇨🇫", + "flag-cg": "🇨🇬", + "flag-ch": "🇨🇭", + "flag-ci": "🇨🇮", + "flag-ck": "🇨🇰", + "flag-cl": "🇨🇱", + "flag-cm": "🇨🇲", + cn: cn, + "flag-cn": "🇨🇳", + "flag-co": "🇨🇴", + "flag-cp": "🇨🇵", + "flag-cr": "🇨🇷", + "flag-cu": "🇨🇺", + "flag-cv": "🇨🇻", + "flag-cw": "🇨🇼", + "flag-cx": "🇨🇽", + "flag-cy": "🇨🇾", + "flag-cz": "🇨🇿", + de: de, + "flag-de": "🇩🇪", + "flag-dg": "🇩🇬", + "flag-dj": "🇩🇯", + "flag-dk": "🇩🇰", + "flag-dm": "🇩🇲", + "flag-do": "🇩🇴", + "flag-dz": "🇩🇿", + "flag-ea": "🇪🇦", + "flag-ec": "🇪🇨", + "flag-ee": "🇪🇪", + "flag-eg": "🇪🇬", + "flag-eh": "🇪🇭", + "flag-er": "🇪🇷", + es: es, + "flag-es": "🇪🇸", + "flag-et": "🇪🇹", + "flag-eu": "🇪🇺", + "flag-fi": "🇫🇮", + "flag-fj": "🇫🇯", + "flag-fk": "🇫🇰", + "flag-fm": "🇫🇲", + "flag-fo": "🇫🇴", + fr: fr, + "flag-fr": "🇫🇷", + "flag-ga": "🇬🇦", + gb: gb, + uk: uk, + "flag-gb": "🇬🇧", + "flag-gd": "🇬🇩", + "flag-ge": "🇬🇪", + "flag-gf": "🇬🇫", + "flag-gg": "🇬🇬", + "flag-gh": "🇬🇭", + "flag-gi": "🇬🇮", + "flag-gl": "🇬🇱", + "flag-gm": "🇬🇲", + "flag-gn": "🇬🇳", + "flag-gp": "🇬🇵", + "flag-gq": "🇬🇶", + "flag-gr": "🇬🇷", + "flag-gs": "🇬🇸", + "flag-gt": "🇬🇹", + "flag-gu": "🇬🇺", + "flag-gw": "🇬🇼", + "flag-gy": "🇬🇾", + "flag-hk": "🇭🇰", + "flag-hm": "🇭🇲", + "flag-hn": "🇭🇳", + "flag-hr": "🇭🇷", + "flag-ht": "🇭🇹", + "flag-hu": "🇭🇺", + "flag-ic": "🇮🇨", + "flag-id": "🇮🇩", + "flag-ie": "🇮🇪", + "flag-il": "🇮🇱", + "flag-im": "🇮🇲", + "flag-in": "🇮🇳", + "flag-io": "🇮🇴", + "flag-iq": "🇮🇶", + "flag-ir": "🇮🇷", + "flag-is": "🇮🇸", + it: it, + "flag-it": "🇮🇹", + "flag-je": "🇯🇪", + "flag-jm": "🇯🇲", + "flag-jo": "🇯🇴", + jp: jp, + "flag-jp": "🇯🇵", + "flag-ke": "🇰🇪", + "flag-kg": "🇰🇬", + "flag-kh": "🇰🇭", + "flag-ki": "🇰🇮", + "flag-km": "🇰🇲", + "flag-kn": "🇰🇳", + "flag-kp": "🇰🇵", + kr: kr, + "flag-kr": "🇰🇷", + "flag-kw": "🇰🇼", + "flag-ky": "🇰🇾", + "flag-kz": "🇰🇿", + "flag-la": "🇱🇦", + "flag-lb": "🇱🇧", + "flag-lc": "🇱🇨", + "flag-li": "🇱🇮", + "flag-lk": "🇱🇰", + "flag-lr": "🇱🇷", + "flag-ls": "🇱🇸", + "flag-lt": "🇱🇹", + "flag-lu": "🇱🇺", + "flag-lv": "🇱🇻", + "flag-ly": "🇱🇾", + "flag-ma": "🇲🇦", + "flag-mc": "🇲🇨", + "flag-md": "🇲🇩", + "flag-me": "🇲🇪", + "flag-mf": "🇲🇫", + "flag-mg": "🇲🇬", + "flag-mh": "🇲🇭", + "flag-mk": "🇲🇰", + "flag-ml": "🇲🇱", + "flag-mm": "🇲🇲", + "flag-mn": "🇲🇳", + "flag-mo": "🇲🇴", + "flag-mp": "🇲🇵", + "flag-mq": "🇲🇶", + "flag-mr": "🇲🇷", + "flag-ms": "🇲🇸", + "flag-mt": "🇲🇹", + "flag-mu": "🇲🇺", + "flag-mv": "🇲🇻", + "flag-mw": "🇲🇼", + "flag-mx": "🇲🇽", + "flag-my": "🇲🇾", + "flag-mz": "🇲🇿", + "flag-na": "🇳🇦", + "flag-nc": "🇳🇨", + "flag-ne": "🇳🇪", + "flag-nf": "🇳🇫", + "flag-ng": "🇳🇬", + "flag-ni": "🇳🇮", + "flag-nl": "🇳🇱", + "flag-no": "🇳🇴", + "flag-np": "🇳🇵", + "flag-nr": "🇳🇷", + "flag-nu": "🇳🇺", + "flag-nz": "🇳🇿", + "flag-om": "🇴🇲", + "flag-pa": "🇵🇦", + "flag-pe": "🇵🇪", + "flag-pf": "🇵🇫", + "flag-pg": "🇵🇬", + "flag-ph": "🇵🇭", + "flag-pk": "🇵🇰", + "flag-pl": "🇵🇱", + "flag-pm": "🇵🇲", + "flag-pn": "🇵🇳", + "flag-pr": "🇵🇷", + "flag-ps": "🇵🇸", + "flag-pt": "🇵🇹", + "flag-pw": "🇵🇼", + "flag-py": "🇵🇾", + "flag-qa": "🇶🇦", + "flag-re": "🇷🇪", + "flag-ro": "🇷🇴", + "flag-rs": "🇷🇸", + ru: ru, + "flag-ru": "🇷🇺", + "flag-rw": "🇷🇼", + "flag-sa": "🇸🇦", + "flag-sb": "🇸🇧", + "flag-sc": "🇸🇨", + "flag-sd": "🇸🇩", + "flag-se": "🇸🇪", + "flag-sg": "🇸🇬", + "flag-sh": "🇸🇭", + "flag-si": "🇸🇮", + "flag-sj": "🇸🇯", + "flag-sk": "🇸🇰", + "flag-sl": "🇸🇱", + "flag-sm": "🇸🇲", + "flag-sn": "🇸🇳", + "flag-so": "🇸🇴", + "flag-sr": "🇸🇷", + "flag-ss": "🇸🇸", + "flag-st": "🇸🇹", + "flag-sv": "🇸🇻", + "flag-sx": "🇸🇽", + "flag-sy": "🇸🇾", + "flag-sz": "🇸🇿", + "flag-ta": "🇹🇦", + "flag-tc": "🇹🇨", + "flag-td": "🇹🇩", + "flag-tf": "🇹🇫", + "flag-tg": "🇹🇬", + "flag-th": "🇹🇭", + "flag-tj": "🇹🇯", + "flag-tk": "🇹🇰", + "flag-tl": "🇹🇱", + "flag-tm": "🇹🇲", + "flag-tn": "🇹🇳", + "flag-to": "🇹🇴", + "flag-tr": "🇹🇷", + "flag-tt": "🇹🇹", + "flag-tv": "🇹🇻", + "flag-tw": "🇹🇼", + "flag-tz": "🇹🇿", + "flag-ua": "🇺🇦", + "flag-ug": "🇺🇬", + "flag-um": "🇺🇲", + "flag-un": "🇺🇳", + us: us, + "flag-us": "🇺🇸", + "flag-uy": "🇺🇾", + "flag-uz": "🇺🇿", + "flag-va": "🇻🇦", + "flag-vc": "🇻🇨", + "flag-ve": "🇻🇪", + "flag-vg": "🇻🇬", + "flag-vi": "🇻🇮", + "flag-vn": "🇻🇳", + "flag-vu": "🇻🇺", + "flag-wf": "🇼🇫", + "flag-ws": "🇼🇸", + "flag-xk": "🇽🇰", + "flag-ye": "🇾🇪", + "flag-yt": "🇾🇹", + "flag-za": "🇿🇦", + "flag-zm": "🇿🇲", + "flag-zw": "🇿🇼", + koko: koko, + sa: sa, + u7121: u7121, + u6307: u6307, + u7981: u7981, + u7a7a: u7a7a, + u5408: u5408, + u6e80: u6e80, + u6709: u6709, + u6708: u6708, + u7533: u7533, + u5272: u5272, + u55b6: u55b6, + ideograph_advantage: ideograph_advantage, + accept: accept, + cyclone: cyclone, + foggy: foggy, + closed_umbrella: closed_umbrella, + night_with_stars: night_with_stars, + sunrise_over_mountains: sunrise_over_mountains, + sunrise: sunrise, + city_sunset: city_sunset, + city_sunrise: city_sunrise, + rainbow: rainbow, + bridge_at_night: bridge_at_night, + ocean: ocean, + volcano: volcano, + milky_way: milky_way, + earth_africa: earth_africa, + earth_americas: earth_americas, + earth_asia: earth_asia, + globe_with_meridians: globe_with_meridians, + new_moon: new_moon, + waxing_crescent_moon: waxing_crescent_moon, + first_quarter_moon: first_quarter_moon, + moon: moon, + waxing_gibbous_moon: waxing_gibbous_moon, + full_moon: full_moon, + waning_gibbous_moon: waning_gibbous_moon, + last_quarter_moon: last_quarter_moon, + waning_crescent_moon: waning_crescent_moon, + crescent_moon: crescent_moon, + new_moon_with_face: new_moon_with_face, + first_quarter_moon_with_face: first_quarter_moon_with_face, + last_quarter_moon_with_face: last_quarter_moon_with_face, + full_moon_with_face: full_moon_with_face, + sun_with_face: sun_with_face, + star2: star2, + stars: stars, + thermometer: thermometer, + mostly_sunny: mostly_sunny, + sun_small_cloud: sun_small_cloud, + barely_sunny: barely_sunny, + sun_behind_cloud: sun_behind_cloud, + partly_sunny_rain: partly_sunny_rain, + sun_behind_rain_cloud: sun_behind_rain_cloud, + rain_cloud: rain_cloud, + snow_cloud: snow_cloud, + lightning: lightning, + lightning_cloud: lightning_cloud, + tornado: tornado, + tornado_cloud: tornado_cloud, + fog: fog, + wind_blowing_face: wind_blowing_face, + hotdog: hotdog, + taco: taco, + burrito: burrito, + chestnut: chestnut, + seedling: seedling, + evergreen_tree: evergreen_tree, + deciduous_tree: deciduous_tree, + palm_tree: palm_tree, + cactus: cactus, + hot_pepper: hot_pepper, + tulip: tulip, + cherry_blossom: cherry_blossom, + rose: rose, + hibiscus: hibiscus, + sunflower: sunflower, + blossom: blossom, + corn: corn, + ear_of_rice: ear_of_rice, + herb: herb, + four_leaf_clover: four_leaf_clover, + maple_leaf: maple_leaf, + fallen_leaf: fallen_leaf, + leaves: leaves, + mushroom: mushroom, + tomato: tomato, + eggplant: eggplant, + grapes: grapes, + melon: melon, + watermelon: watermelon, + tangerine: tangerine, + lemon: lemon, + banana: banana, + pineapple: pineapple, + apple: apple, + green_apple: green_apple, + pear: pear, + peach: peach, + cherries: cherries, + strawberry: strawberry, + hamburger: hamburger, + pizza: pizza, + meat_on_bone: meat_on_bone, + poultry_leg: poultry_leg, + rice_cracker: rice_cracker, + rice_ball: rice_ball, + rice: rice, + curry: curry, + ramen: ramen, + spaghetti: spaghetti, + bread: bread, + fries: fries, + sweet_potato: sweet_potato, + dango: dango, + oden: oden, + sushi: sushi, + fried_shrimp: fried_shrimp, + fish_cake: fish_cake, + icecream: icecream, + shaved_ice: shaved_ice, + ice_cream: ice_cream, + doughnut: doughnut, + cookie: cookie, + chocolate_bar: chocolate_bar, + candy: candy, + lollipop: lollipop, + custard: custard, + honey_pot: honey_pot, + cake: cake, + bento: bento, + stew: stew, + fried_egg: fried_egg, + cooking: cooking, + fork_and_knife: fork_and_knife, + tea: tea, + sake: sake, + wine_glass: wine_glass, + cocktail: cocktail, + tropical_drink: tropical_drink, + beer: beer, + beers: beers, + baby_bottle: baby_bottle, + knife_fork_plate: knife_fork_plate, + champagne: champagne, + popcorn: popcorn, + ribbon: ribbon, + gift: gift, + birthday: birthday, + jack_o_lantern: jack_o_lantern, + christmas_tree: christmas_tree, + santa: santa, + fireworks: fireworks, + sparkler: sparkler, + balloon: balloon, + tada: tada, + confetti_ball: confetti_ball, + tanabata_tree: tanabata_tree, + crossed_flags: crossed_flags, + bamboo: bamboo, + dolls: dolls, + flags: flags, + wind_chime: wind_chime, + rice_scene: rice_scene, + school_satchel: school_satchel, + mortar_board: mortar_board, + medal: medal, + reminder_ribbon: reminder_ribbon, + studio_microphone: studio_microphone, + level_slider: level_slider, + control_knobs: control_knobs, + film_frames: film_frames, + admission_tickets: admission_tickets, + carousel_horse: carousel_horse, + ferris_wheel: ferris_wheel, + roller_coaster: roller_coaster, + fishing_pole_and_fish: fishing_pole_and_fish, + microphone: microphone, + movie_camera: movie_camera, + cinema: cinema, + headphones: headphones, + art: art, + tophat: tophat, + circus_tent: circus_tent, + ticket: ticket, + clapper: clapper, + performing_arts: performing_arts, + video_game: video_game, + dart: dart, + slot_machine: slot_machine, + "8ball": "🎱", + game_die: game_die, + bowling: bowling, + flower_playing_cards: flower_playing_cards, + musical_note: musical_note, + notes: notes, + saxophone: saxophone, + guitar: guitar, + musical_keyboard: musical_keyboard, + trumpet: trumpet, + violin: violin, + musical_score: musical_score, + running_shirt_with_sash: running_shirt_with_sash, + tennis: tennis, + ski: ski, + basketball: basketball, + checkered_flag: checkered_flag, + snowboarder: snowboarder, + "woman-running": "🏃‍♀️", + "man-running": "🏃‍♂️", + runner: runner, + running: running, + "woman-surfing": "🏄‍♀️", + "man-surfing": "🏄‍♂️", + surfer: surfer, + sports_medal: sports_medal, + trophy: trophy, + horse_racing: horse_racing, + football: football, + rugby_football: rugby_football, + "woman-swimming": "🏊‍♀️", + "man-swimming": "🏊‍♂️", + swimmer: swimmer, + "woman-lifting-weights": "🏋️‍♀️", + "man-lifting-weights": "🏋️‍♂️", + weight_lifter: weight_lifter, + "woman-golfing": "🏌️‍♀️", + "man-golfing": "🏌️‍♂️", + golfer: golfer, + racing_motorcycle: racing_motorcycle, + racing_car: racing_car, + cricket_bat_and_ball: cricket_bat_and_ball, + volleyball: volleyball, + field_hockey_stick_and_ball: field_hockey_stick_and_ball, + ice_hockey_stick_and_puck: ice_hockey_stick_and_puck, + table_tennis_paddle_and_ball: table_tennis_paddle_and_ball, + snow_capped_mountain: snow_capped_mountain, + camping: camping, + beach_with_umbrella: beach_with_umbrella, + building_construction: building_construction, + house_buildings: house_buildings, + cityscape: cityscape, + derelict_house_building: derelict_house_building, + classical_building: classical_building, + desert: desert, + desert_island: desert_island, + national_park: national_park, + stadium: stadium, + house: house, + house_with_garden: house_with_garden, + office: office, + post_office: post_office, + european_post_office: european_post_office, + hospital: hospital, + bank: bank, + atm: atm, + hotel: hotel, + love_hotel: love_hotel, + convenience_store: convenience_store, + school: school, + department_store: department_store, + factory: factory, + izakaya_lantern: izakaya_lantern, + lantern: lantern, + japanese_castle: japanese_castle, + european_castle: european_castle, + "rainbow-flag": "🏳️‍🌈", + transgender_flag: transgender_flag, + waving_white_flag: waving_white_flag, + pirate_flag: pirate_flag, + "flag-england": "🏴󠁧󠁢󠁥󠁮󠁧󠁿", + "flag-scotland": "🏴󠁧󠁢󠁳󠁣󠁴󠁿", + "flag-wales": "🏴󠁧󠁢󠁷󠁬󠁳󠁿", + waving_black_flag: waving_black_flag, + rosette: rosette, + label: label, + badminton_racquet_and_shuttlecock: badminton_racquet_and_shuttlecock, + bow_and_arrow: bow_and_arrow, + amphora: amphora, + "skin-tone-2": "🏻", + "skin-tone-3": "🏼", + "skin-tone-4": "🏽", + "skin-tone-5": "🏾", + "skin-tone-6": "🏿", + rat: rat, + mouse2: mouse2, + ox: ox, + water_buffalo: water_buffalo, + cow2: cow2, + tiger2: tiger2, + leopard: leopard, + rabbit2: rabbit2, + black_cat: black_cat, + cat2: cat2, + dragon: dragon, + crocodile: crocodile, + whale2: whale2, + snail: snail, + snake: snake, + racehorse: racehorse, + ram: ram, + goat: goat, + sheep: sheep, + monkey: monkey, + rooster: rooster, + chicken: chicken, + service_dog: service_dog, + dog2: dog2, + pig2: pig2, + boar: boar, + elephant: elephant, + octopus: octopus, + shell: shell, + bug: bug, + ant: ant, + bee: bee, + honeybee: honeybee, + ladybug: ladybug, + lady_beetle: lady_beetle, + fish: fish, + tropical_fish: tropical_fish, + blowfish: blowfish, + turtle: turtle, + hatching_chick: hatching_chick, + baby_chick: baby_chick, + hatched_chick: hatched_chick, + bird: bird, + penguin: penguin, + koala: koala, + poodle: poodle, + dromedary_camel: dromedary_camel, + camel: camel, + dolphin: dolphin, + flipper: flipper, + mouse: mouse, + cow: cow, + tiger: tiger, + rabbit: rabbit, + cat: cat, + dragon_face: dragon_face, + whale: whale, + horse: horse, + monkey_face: monkey_face, + dog: dog, + pig: pig, + frog: frog, + hamster: hamster, + wolf: wolf, + polar_bear: polar_bear, + bear: bear, + panda_face: panda_face, + pig_nose: pig_nose, + feet: feet, + paw_prints: paw_prints, + chipmunk: chipmunk, + eyes: eyes, + "eye-in-speech-bubble": "👁️‍🗨️", + eye: eye, + ear: ear, + nose: nose, + lips: lips, + tongue: tongue, + point_up_2: point_up_2, + point_down: point_down, + point_left: point_left, + point_right: point_right, + facepunch: facepunch, + punch: punch, + wave: wave, + ok_hand: ok_hand, + "+1": "👍", + thumbsup: thumbsup, + "-1": "👎", + thumbsdown: thumbsdown, + clap: clap, + open_hands: open_hands, + crown: crown, + womans_hat: womans_hat, + eyeglasses: eyeglasses, + necktie: necktie, + shirt: shirt, + tshirt: tshirt, + jeans: jeans, + dress: dress, + kimono: kimono, + bikini: bikini, + womans_clothes: womans_clothes, + purse: purse, + handbag: handbag, + pouch: pouch, + mans_shoe: mans_shoe, + shoe: shoe, + athletic_shoe: athletic_shoe, + high_heel: high_heel, + sandal: sandal, + boot: boot, + footprints: footprints, + bust_in_silhouette: bust_in_silhouette, + busts_in_silhouette: busts_in_silhouette, + boy: boy, + girl: girl, + "male-farmer": "👨‍🌾", + "male-cook": "👨‍🍳", + man_feeding_baby: man_feeding_baby, + "male-student": "👨‍🎓", + "male-singer": "👨‍🎤", + "male-artist": "👨‍🎨", + "male-teacher": "👨‍🏫", + "male-factory-worker": "👨‍🏭", + "man-boy-boy": "👨‍👦‍👦", + "man-boy": "👨‍👦", + "man-girl-boy": "👨‍👧‍👦", + "man-girl-girl": "👨‍👧‍👧", + "man-girl": "👨‍👧", + "man-man-boy": "👨‍👨‍👦", + "man-man-boy-boy": "👨‍👨‍👦‍👦", + "man-man-girl": "👨‍👨‍👧", + "man-man-girl-boy": "👨‍👨‍👧‍👦", + "man-man-girl-girl": "👨‍👨‍👧‍👧", + "man-woman-boy": "👨‍👩‍👦", + family: family, + "man-woman-boy-boy": "👨‍👩‍👦‍👦", + "man-woman-girl": "👨‍👩‍👧", + "man-woman-girl-boy": "👨‍👩‍👧‍👦", + "man-woman-girl-girl": "👨‍👩‍👧‍👧", + "male-technologist": "👨‍💻", + "male-office-worker": "👨‍💼", + "male-mechanic": "👨‍🔧", + "male-scientist": "👨‍🔬", + "male-astronaut": "👨‍🚀", + "male-firefighter": "👨‍🚒", + man_with_probing_cane: man_with_probing_cane, + red_haired_man: red_haired_man, + curly_haired_man: curly_haired_man, + bald_man: bald_man, + white_haired_man: white_haired_man, + man_in_motorized_wheelchair: man_in_motorized_wheelchair, + man_in_manual_wheelchair: man_in_manual_wheelchair, + "male-doctor": "👨‍⚕️", + "male-judge": "👨‍⚖️", + "male-pilot": "👨‍✈️", + "man-heart-man": "👨‍❤️‍👨", + "man-kiss-man": "👨‍❤️‍💋‍👨", + man: man, + "female-farmer": "👩‍🌾", + "female-cook": "👩‍🍳", + woman_feeding_baby: woman_feeding_baby, + "female-student": "👩‍🎓", + "female-singer": "👩‍🎤", + "female-artist": "👩‍🎨", + "female-teacher": "👩‍🏫", + "female-factory-worker": "👩‍🏭", + "woman-boy-boy": "👩‍👦‍👦", + "woman-boy": "👩‍👦", + "woman-girl-boy": "👩‍👧‍👦", + "woman-girl-girl": "👩‍👧‍👧", + "woman-girl": "👩‍👧", + "woman-woman-boy": "👩‍👩‍👦", + "woman-woman-boy-boy": "👩‍👩‍👦‍👦", + "woman-woman-girl": "👩‍👩‍👧", + "woman-woman-girl-boy": "👩‍👩‍👧‍👦", + "woman-woman-girl-girl": "👩‍👩‍👧‍👧", + "female-technologist": "👩‍💻", + "female-office-worker": "👩‍💼", + "female-mechanic": "👩‍🔧", + "female-scientist": "👩‍🔬", + "female-astronaut": "👩‍🚀", + "female-firefighter": "👩‍🚒", + woman_with_probing_cane: woman_with_probing_cane, + red_haired_woman: red_haired_woman, + curly_haired_woman: curly_haired_woman, + bald_woman: bald_woman, + white_haired_woman: white_haired_woman, + woman_in_motorized_wheelchair: woman_in_motorized_wheelchair, + woman_in_manual_wheelchair: woman_in_manual_wheelchair, + "female-doctor": "👩‍⚕️", + "female-judge": "👩‍⚖️", + "female-pilot": "👩‍✈️", + "woman-heart-man": "👩‍❤️‍👨", + "woman-heart-woman": "👩‍❤️‍👩", + "woman-kiss-man": "👩‍❤️‍💋‍👨", + "woman-kiss-woman": "👩‍❤️‍💋‍👩", + woman: woman, + man_and_woman_holding_hands: man_and_woman_holding_hands, + woman_and_man_holding_hands: woman_and_man_holding_hands, + couple: couple, + two_men_holding_hands: two_men_holding_hands, + men_holding_hands: men_holding_hands, + two_women_holding_hands: two_women_holding_hands, + women_holding_hands: women_holding_hands, + "female-police-officer": "👮‍♀️", + "male-police-officer": "👮‍♂️", + cop: cop, + "women-with-bunny-ears-partying": "👯‍♀️", + "woman-with-bunny-ears-partying": "👯‍♀️", + dancers: dancers, + "men-with-bunny-ears-partying": "👯‍♂️", + "man-with-bunny-ears-partying": "👯‍♂️", + woman_with_veil: woman_with_veil, + man_with_veil: man_with_veil, + bride_with_veil: bride_with_veil, + "blond-haired-woman": "👱‍♀️", + "blond-haired-man": "👱‍♂️", + person_with_blond_hair: person_with_blond_hair, + man_with_gua_pi_mao: man_with_gua_pi_mao, + "woman-wearing-turban": "👳‍♀️", + "man-wearing-turban": "👳‍♂️", + man_with_turban: man_with_turban, + older_man: older_man, + older_woman: older_woman, + baby: baby, + "female-construction-worker": "👷‍♀️", + "male-construction-worker": "👷‍♂️", + construction_worker: construction_worker, + princess: princess, + japanese_ogre: japanese_ogre, + japanese_goblin: japanese_goblin, + ghost: ghost, + angel: angel, + alien: alien, + space_invader: space_invader, + imp: imp, + skull: skull, + "woman-tipping-hand": "💁‍♀️", + information_desk_person: information_desk_person, + "man-tipping-hand": "💁‍♂️", + "female-guard": "💂‍♀️", + "male-guard": "💂‍♂️", + guardsman: guardsman, + dancer: dancer, + lipstick: lipstick, + nail_care: nail_care, + "woman-getting-massage": "💆‍♀️", + massage: massage, + "man-getting-massage": "💆‍♂️", + "woman-getting-haircut": "💇‍♀️", + haircut: haircut, + "man-getting-haircut": "💇‍♂️", + barber: barber, + syringe: syringe, + pill: pill, + kiss: kiss, + love_letter: love_letter, + ring: ring, + gem: gem, + couplekiss: couplekiss, + bouquet: bouquet, + couple_with_heart: couple_with_heart, + wedding: wedding, + heartbeat: heartbeat, + broken_heart: broken_heart, + two_hearts: two_hearts, + sparkling_heart: sparkling_heart, + heartpulse: heartpulse, + cupid: cupid, + blue_heart: blue_heart, + green_heart: green_heart, + yellow_heart: yellow_heart, + purple_heart: purple_heart, + gift_heart: gift_heart, + revolving_hearts: revolving_hearts, + heart_decoration: heart_decoration, + diamond_shape_with_a_dot_inside: diamond_shape_with_a_dot_inside, + bulb: bulb, + anger: anger, + bomb: bomb, + zzz: zzz, + boom: boom, + collision: collision, + sweat_drops: sweat_drops, + droplet: droplet, + dash: dash, + hankey: hankey, + poop: poop, + shit: shit, + muscle: muscle, + dizzy: dizzy, + speech_balloon: speech_balloon, + thought_balloon: thought_balloon, + white_flower: white_flower, + moneybag: moneybag, + currency_exchange: currency_exchange, + heavy_dollar_sign: heavy_dollar_sign, + credit_card: credit_card, + yen: yen, + dollar: dollar, + euro: euro, + pound: pound, + money_with_wings: money_with_wings, + chart: chart, + seat: seat, + computer: computer, + briefcase: briefcase, + minidisc: minidisc, + floppy_disk: floppy_disk, + cd: cd, + dvd: dvd, + file_folder: file_folder, + open_file_folder: open_file_folder, + page_with_curl: page_with_curl, + page_facing_up: page_facing_up, + date: date, + calendar: calendar, + card_index: card_index, + chart_with_upwards_trend: chart_with_upwards_trend, + chart_with_downwards_trend: chart_with_downwards_trend, + bar_chart: bar_chart, + clipboard: clipboard, + pushpin: pushpin, + round_pushpin: round_pushpin, + paperclip: paperclip, + straight_ruler: straight_ruler, + triangular_ruler: triangular_ruler, + bookmark_tabs: bookmark_tabs, + ledger: ledger, + notebook: notebook, + notebook_with_decorative_cover: notebook_with_decorative_cover, + closed_book: closed_book, + book: book, + open_book: open_book, + green_book: green_book, + blue_book: blue_book, + orange_book: orange_book, + books: books, + name_badge: name_badge, + scroll: scroll, + memo: memo, + pencil: pencil, + telephone_receiver: telephone_receiver, + pager: pager, + fax: fax, + satellite_antenna: satellite_antenna, + loudspeaker: loudspeaker, + mega: mega, + outbox_tray: outbox_tray, + inbox_tray: inbox_tray, + "package": "📦", + "e-mail": "📧", + incoming_envelope: incoming_envelope, + envelope_with_arrow: envelope_with_arrow, + mailbox_closed: mailbox_closed, + mailbox: mailbox, + mailbox_with_mail: mailbox_with_mail, + mailbox_with_no_mail: mailbox_with_no_mail, + postbox: postbox, + postal_horn: postal_horn, + newspaper: newspaper, + iphone: iphone, + calling: calling, + vibration_mode: vibration_mode, + mobile_phone_off: mobile_phone_off, + no_mobile_phones: no_mobile_phones, + signal_strength: signal_strength, + camera: camera, + camera_with_flash: camera_with_flash, + video_camera: video_camera, + tv: tv, + radio: radio, + vhs: vhs, + film_projector: film_projector, + prayer_beads: prayer_beads, + twisted_rightwards_arrows: twisted_rightwards_arrows, + repeat: repeat, + repeat_one: repeat_one, + arrows_clockwise: arrows_clockwise, + arrows_counterclockwise: arrows_counterclockwise, + low_brightness: low_brightness, + high_brightness: high_brightness, + mute: mute, + speaker: speaker, + sound: sound, + loud_sound: loud_sound, + battery: battery, + electric_plug: electric_plug, + mag: mag, + mag_right: mag_right, + lock_with_ink_pen: lock_with_ink_pen, + closed_lock_with_key: closed_lock_with_key, + key: key, + lock: lock, + unlock: unlock, + bell: bell, + no_bell: no_bell, + bookmark: bookmark, + link: link, + radio_button: radio_button, + back: back, + end: end, + on: on, + soon: soon, + top: top, + underage: underage, + keycap_ten: keycap_ten, + capital_abcd: capital_abcd, + abcd: abcd, + symbols: symbols, + abc: abc, + fire: fire, + flashlight: flashlight, + wrench: wrench, + hammer: hammer, + nut_and_bolt: nut_and_bolt, + hocho: hocho, + knife: knife, + gun: gun, + microscope: microscope, + telescope: telescope, + crystal_ball: crystal_ball, + six_pointed_star: six_pointed_star, + beginner: beginner, + trident: trident, + black_square_button: black_square_button, + white_square_button: white_square_button, + red_circle: red_circle, + large_blue_circle: large_blue_circle, + large_orange_diamond: large_orange_diamond, + large_blue_diamond: large_blue_diamond, + small_orange_diamond: small_orange_diamond, + small_blue_diamond: small_blue_diamond, + small_red_triangle: small_red_triangle, + small_red_triangle_down: small_red_triangle_down, + arrow_up_small: arrow_up_small, + arrow_down_small: arrow_down_small, + om_symbol: om_symbol, + dove_of_peace: dove_of_peace, + kaaba: kaaba, + mosque: mosque, + synagogue: synagogue, + menorah_with_nine_branches: menorah_with_nine_branches, + clock1: clock1, + clock2: clock2, + clock3: clock3, + clock4: clock4, + clock5: clock5, + clock6: clock6, + clock7: clock7, + clock8: clock8, + clock9: clock9, + clock10: clock10, + clock11: clock11, + clock12: clock12, + clock130: clock130, + clock230: clock230, + clock330: clock330, + clock430: clock430, + clock530: clock530, + clock630: clock630, + clock730: clock730, + clock830: clock830, + clock930: clock930, + clock1030: clock1030, + clock1130: clock1130, + clock1230: clock1230, + candle: candle, + mantelpiece_clock: mantelpiece_clock, + hole: hole, + man_in_business_suit_levitating: man_in_business_suit_levitating, + "female-detective": "🕵️‍♀️", + "male-detective": "🕵️‍♂️", + sleuth_or_spy: sleuth_or_spy, + dark_sunglasses: dark_sunglasses, + spider: spider, + spider_web: spider_web, + joystick: joystick, + man_dancing: man_dancing, + linked_paperclips: linked_paperclips, + lower_left_ballpoint_pen: lower_left_ballpoint_pen, + lower_left_fountain_pen: lower_left_fountain_pen, + lower_left_paintbrush: lower_left_paintbrush, + lower_left_crayon: lower_left_crayon, + raised_hand_with_fingers_splayed: raised_hand_with_fingers_splayed, + middle_finger: middle_finger, + reversed_hand_with_middle_finger_extended: reversed_hand_with_middle_finger_extended, + "spock-hand": "🖖", + black_heart: black_heart, + desktop_computer: desktop_computer, + printer: printer, + three_button_mouse: three_button_mouse, + trackball: trackball, + frame_with_picture: frame_with_picture, + card_index_dividers: card_index_dividers, + card_file_box: card_file_box, + file_cabinet: file_cabinet, + wastebasket: wastebasket, + spiral_note_pad: spiral_note_pad, + spiral_calendar_pad: spiral_calendar_pad, + compression: compression, + old_key: old_key, + rolled_up_newspaper: rolled_up_newspaper, + dagger_knife: dagger_knife, + speaking_head_in_silhouette: speaking_head_in_silhouette, + left_speech_bubble: left_speech_bubble, + right_anger_bubble: right_anger_bubble, + ballot_box_with_ballot: ballot_box_with_ballot, + world_map: world_map, + mount_fuji: mount_fuji, + tokyo_tower: tokyo_tower, + statue_of_liberty: statue_of_liberty, + japan: japan, + moyai: moyai, + grinning: grinning, + grin: grin, + joy: joy, + smiley: smiley, + smile: smile, + sweat_smile: sweat_smile, + laughing: laughing, + satisfied: satisfied, + innocent: innocent, + smiling_imp: smiling_imp, + wink: wink, + blush: blush, + yum: yum, + relieved: relieved, + heart_eyes: heart_eyes, + sunglasses: sunglasses, + smirk: smirk, + neutral_face: neutral_face, + expressionless: expressionless, + unamused: unamused, + sweat: sweat, + pensive: pensive, + confused: confused, + confounded: confounded, + kissing: kissing, + kissing_heart: kissing_heart, + kissing_smiling_eyes: kissing_smiling_eyes, + kissing_closed_eyes: kissing_closed_eyes, + stuck_out_tongue: stuck_out_tongue, + stuck_out_tongue_winking_eye: stuck_out_tongue_winking_eye, + stuck_out_tongue_closed_eyes: stuck_out_tongue_closed_eyes, + disappointed: disappointed, + worried: worried, + angry: angry, + rage: rage, + cry: cry, + persevere: persevere, + triumph: triumph, + disappointed_relieved: disappointed_relieved, + frowning: frowning, + anguished: anguished, + fearful: fearful, + weary: weary, + sleepy: sleepy, + tired_face: tired_face, + grimacing: grimacing, + sob: sob, + face_exhaling: face_exhaling, + open_mouth: open_mouth, + hushed: hushed, + cold_sweat: cold_sweat, + scream: scream, + astonished: astonished, + flushed: flushed, + sleeping: sleeping, + face_with_spiral_eyes: face_with_spiral_eyes, + dizzy_face: dizzy_face, + face_in_clouds: face_in_clouds, + no_mouth: no_mouth, + mask: mask, + smile_cat: smile_cat, + joy_cat: joy_cat, + smiley_cat: smiley_cat, + heart_eyes_cat: heart_eyes_cat, + smirk_cat: smirk_cat, + kissing_cat: kissing_cat, + pouting_cat: pouting_cat, + crying_cat_face: crying_cat_face, + scream_cat: scream_cat, + slightly_frowning_face: slightly_frowning_face, + slightly_smiling_face: slightly_smiling_face, + upside_down_face: upside_down_face, + face_with_rolling_eyes: face_with_rolling_eyes, + "woman-gesturing-no": "🙅‍♀️", + no_good: no_good, + "man-gesturing-no": "🙅‍♂️", + "woman-gesturing-ok": "🙆‍♀️", + ok_woman: ok_woman, + "man-gesturing-ok": "🙆‍♂️", + "woman-bowing": "🙇‍♀️", + "man-bowing": "🙇‍♂️", + bow: bow, + see_no_evil: see_no_evil, + hear_no_evil: hear_no_evil, + speak_no_evil: speak_no_evil, + "woman-raising-hand": "🙋‍♀️", + raising_hand: raising_hand, + "man-raising-hand": "🙋‍♂️", + raised_hands: raised_hands, + "woman-frowning": "🙍‍♀️", + person_frowning: person_frowning, + "man-frowning": "🙍‍♂️", + "woman-pouting": "🙎‍♀️", + person_with_pouting_face: person_with_pouting_face, + "man-pouting": "🙎‍♂️", + pray: pray, + rocket: rocket, + helicopter: helicopter, + steam_locomotive: steam_locomotive, + railway_car: railway_car, + bullettrain_side: bullettrain_side, + bullettrain_front: bullettrain_front, + train2: train2, + metro: metro, + light_rail: light_rail, + station: station, + tram: tram, + train: train, + bus: bus, + oncoming_bus: oncoming_bus, + trolleybus: trolleybus, + busstop: busstop, + minibus: minibus, + ambulance: ambulance, + fire_engine: fire_engine, + police_car: police_car, + oncoming_police_car: oncoming_police_car, + taxi: taxi, + oncoming_taxi: oncoming_taxi, + car: car, + red_car: red_car, + oncoming_automobile: oncoming_automobile, + blue_car: blue_car, + truck: truck, + articulated_lorry: articulated_lorry, + tractor: tractor, + monorail: monorail, + mountain_railway: mountain_railway, + suspension_railway: suspension_railway, + mountain_cableway: mountain_cableway, + aerial_tramway: aerial_tramway, + ship: ship, + "woman-rowing-boat": "🚣‍♀️", + "man-rowing-boat": "🚣‍♂️", + rowboat: rowboat, + speedboat: speedboat, + traffic_light: traffic_light, + vertical_traffic_light: vertical_traffic_light, + construction: construction, + rotating_light: rotating_light, + triangular_flag_on_post: triangular_flag_on_post, + door: door, + no_entry_sign: no_entry_sign, + smoking: smoking, + no_smoking: no_smoking, + put_litter_in_its_place: put_litter_in_its_place, + do_not_litter: do_not_litter, + potable_water: potable_water, + "non-potable_water": "🚱", + bike: bike, + no_bicycles: no_bicycles, + "woman-biking": "🚴‍♀️", + "man-biking": "🚴‍♂️", + bicyclist: bicyclist, + "woman-mountain-biking": "🚵‍♀️", + "man-mountain-biking": "🚵‍♂️", + mountain_bicyclist: mountain_bicyclist, + "woman-walking": "🚶‍♀️", + "man-walking": "🚶‍♂️", + walking: walking, + no_pedestrians: no_pedestrians, + children_crossing: children_crossing, + mens: mens, + womens: womens, + restroom: restroom, + baby_symbol: baby_symbol, + toilet: toilet, + wc: wc, + shower: shower, + bath: bath, + bathtub: bathtub, + passport_control: passport_control, + customs: customs, + baggage_claim: baggage_claim, + left_luggage: left_luggage, + couch_and_lamp: couch_and_lamp, + sleeping_accommodation: sleeping_accommodation, + shopping_bags: shopping_bags, + bellhop_bell: bellhop_bell, + bed: bed, + place_of_worship: place_of_worship, + octagonal_sign: octagonal_sign, + shopping_trolley: shopping_trolley, + hindu_temple: hindu_temple, + hut: hut, + elevator: elevator, + hammer_and_wrench: hammer_and_wrench, + shield: shield, + oil_drum: oil_drum, + motorway: motorway, + railway_track: railway_track, + motor_boat: motor_boat, + small_airplane: small_airplane, + airplane_departure: airplane_departure, + airplane_arriving: airplane_arriving, + satellite: satellite, + passenger_ship: passenger_ship, + scooter: scooter, + motor_scooter: motor_scooter, + canoe: canoe, + sled: sled, + flying_saucer: flying_saucer, + skateboard: skateboard, + auto_rickshaw: auto_rickshaw, + pickup_truck: pickup_truck, + roller_skate: roller_skate, + large_orange_circle: large_orange_circle, + large_yellow_circle: large_yellow_circle, + large_green_circle: large_green_circle, + large_purple_circle: large_purple_circle, + large_brown_circle: large_brown_circle, + large_red_square: large_red_square, + large_blue_square: large_blue_square, + large_orange_square: large_orange_square, + large_yellow_square: large_yellow_square, + large_green_square: large_green_square, + large_purple_square: large_purple_square, + large_brown_square: large_brown_square, + pinched_fingers: pinched_fingers, + white_heart: white_heart, + brown_heart: brown_heart, + pinching_hand: pinching_hand, + zipper_mouth_face: zipper_mouth_face, + money_mouth_face: money_mouth_face, + face_with_thermometer: face_with_thermometer, + nerd_face: nerd_face, + thinking_face: thinking_face, + face_with_head_bandage: face_with_head_bandage, + robot_face: robot_face, + hugging_face: hugging_face, + the_horns: the_horns, + sign_of_the_horns: sign_of_the_horns, + call_me_hand: call_me_hand, + raised_back_of_hand: raised_back_of_hand, + "left-facing_fist": "🤛", + "right-facing_fist": "🤜", + handshake: handshake, + crossed_fingers: crossed_fingers, + hand_with_index_and_middle_fingers_crossed: hand_with_index_and_middle_fingers_crossed, + i_love_you_hand_sign: i_love_you_hand_sign, + face_with_cowboy_hat: face_with_cowboy_hat, + clown_face: clown_face, + nauseated_face: nauseated_face, + rolling_on_the_floor_laughing: rolling_on_the_floor_laughing, + drooling_face: drooling_face, + lying_face: lying_face, + "woman-facepalming": "🤦‍♀️", + "man-facepalming": "🤦‍♂️", + face_palm: face_palm, + sneezing_face: sneezing_face, + face_with_raised_eyebrow: face_with_raised_eyebrow, + face_with_one_eyebrow_raised: face_with_one_eyebrow_raised, + "star-struck": "🤩", + grinning_face_with_star_eyes: grinning_face_with_star_eyes, + zany_face: zany_face, + grinning_face_with_one_large_and_one_small_eye: grinning_face_with_one_large_and_one_small_eye, + shushing_face: shushing_face, + face_with_finger_covering_closed_lips: face_with_finger_covering_closed_lips, + face_with_symbols_on_mouth: face_with_symbols_on_mouth, + serious_face_with_symbols_covering_mouth: serious_face_with_symbols_covering_mouth, + face_with_hand_over_mouth: face_with_hand_over_mouth, + smiling_face_with_smiling_eyes_and_hand_covering_mouth: smiling_face_with_smiling_eyes_and_hand_covering_mouth, + face_vomiting: face_vomiting, + face_with_open_mouth_vomiting: face_with_open_mouth_vomiting, + exploding_head: exploding_head, + shocked_face_with_exploding_head: shocked_face_with_exploding_head, + pregnant_woman: pregnant_woman, + "breast-feeding": "🤱", + palms_up_together: palms_up_together, + selfie: selfie, + prince: prince, + woman_in_tuxedo: woman_in_tuxedo, + man_in_tuxedo: man_in_tuxedo, + person_in_tuxedo: person_in_tuxedo, + mrs_claus: mrs_claus, + mother_christmas: mother_christmas, + "woman-shrugging": "🤷‍♀️", + "man-shrugging": "🤷‍♂️", + shrug: shrug, + "woman-cartwheeling": "🤸‍♀️", + "man-cartwheeling": "🤸‍♂️", + person_doing_cartwheel: person_doing_cartwheel, + "woman-juggling": "🤹‍♀️", + "man-juggling": "🤹‍♂️", + juggling: juggling, + fencer: fencer, + "woman-wrestling": "🤼‍♀️", + "man-wrestling": "🤼‍♂️", + wrestlers: wrestlers, + "woman-playing-water-polo": "🤽‍♀️", + "man-playing-water-polo": "🤽‍♂️", + water_polo: water_polo, + "woman-playing-handball": "🤾‍♀️", + "man-playing-handball": "🤾‍♂️", + handball: handball, + diving_mask: diving_mask, + wilted_flower: wilted_flower, + drum_with_drumsticks: drum_with_drumsticks, + clinking_glasses: clinking_glasses, + tumbler_glass: tumbler_glass, + spoon: spoon, + goal_net: goal_net, + first_place_medal: first_place_medal, + second_place_medal: second_place_medal, + third_place_medal: third_place_medal, + boxing_glove: boxing_glove, + martial_arts_uniform: martial_arts_uniform, + curling_stone: curling_stone, + lacrosse: lacrosse, + softball: softball, + flying_disc: flying_disc, + croissant: croissant, + avocado: avocado, + cucumber: cucumber, + bacon: bacon, + potato: potato, + carrot: carrot, + baguette_bread: baguette_bread, + green_salad: green_salad, + shallow_pan_of_food: shallow_pan_of_food, + stuffed_flatbread: stuffed_flatbread, + egg: egg, + glass_of_milk: glass_of_milk, + peanuts: peanuts, + kiwifruit: kiwifruit, + pancakes: pancakes, + dumpling: dumpling, + fortune_cookie: fortune_cookie, + takeout_box: takeout_box, + chopsticks: chopsticks, + bowl_with_spoon: bowl_with_spoon, + cup_with_straw: cup_with_straw, + coconut: coconut, + broccoli: broccoli, + pie: pie, + pretzel: pretzel, + cut_of_meat: cut_of_meat, + sandwich: sandwich, + canned_food: canned_food, + leafy_green: leafy_green, + mango: mango, + moon_cake: moon_cake, + bagel: bagel, + smiling_face_with_3_hearts: smiling_face_with_3_hearts, + yawning_face: yawning_face, + smiling_face_with_tear: smiling_face_with_tear, + partying_face: partying_face, + woozy_face: woozy_face, + hot_face: hot_face, + cold_face: cold_face, + ninja: ninja, + disguised_face: disguised_face, + pleading_face: pleading_face, + sari: sari, + lab_coat: lab_coat, + goggles: goggles, + hiking_boot: hiking_boot, + womans_flat_shoe: womans_flat_shoe, + crab: crab, + lion_face: lion_face, + scorpion: scorpion, + turkey: turkey, + unicorn_face: unicorn_face, + eagle: eagle, + duck: duck, + bat: bat, + shark: shark, + owl: owl, + fox_face: fox_face, + butterfly: butterfly, + deer: deer, + gorilla: gorilla, + lizard: lizard, + rhinoceros: rhinoceros, + shrimp: shrimp, + squid: squid, + giraffe_face: giraffe_face, + zebra_face: zebra_face, + hedgehog: hedgehog, + sauropod: sauropod, + "t-rex": "🦖", + cricket: cricket, + kangaroo: kangaroo, + llama: llama, + peacock: peacock, + hippopotamus: hippopotamus, + parrot: parrot, + raccoon: raccoon, + lobster: lobster, + mosquito: mosquito, + microbe: microbe, + badger: badger, + swan: swan, + mammoth: mammoth, + dodo: dodo, + sloth: sloth, + otter: otter, + orangutan: orangutan, + skunk: skunk, + flamingo: flamingo, + oyster: oyster, + beaver: beaver, + bison: bison, + seal: seal, + guide_dog: guide_dog, + probing_cane: probing_cane, + bone: bone, + leg: leg, + foot: foot, + tooth: tooth, + female_superhero: female_superhero, + male_superhero: male_superhero, + superhero: superhero, + female_supervillain: female_supervillain, + male_supervillain: male_supervillain, + supervillain: supervillain, + safety_vest: safety_vest, + ear_with_hearing_aid: ear_with_hearing_aid, + motorized_wheelchair: motorized_wheelchair, + manual_wheelchair: manual_wheelchair, + mechanical_arm: mechanical_arm, + mechanical_leg: mechanical_leg, + cheese_wedge: cheese_wedge, + cupcake: cupcake, + salt: salt, + beverage_box: beverage_box, + garlic: garlic, + onion: onion, + falafel: falafel, + waffle: waffle, + butter: butter, + mate_drink: mate_drink, + ice_cube: ice_cube, + bubble_tea: bubble_tea, + woman_standing: woman_standing, + man_standing: man_standing, + standing_person: standing_person, + woman_kneeling: woman_kneeling, + man_kneeling: man_kneeling, + kneeling_person: kneeling_person, + deaf_woman: deaf_woman, + deaf_man: deaf_man, + deaf_person: deaf_person, + face_with_monocle: face_with_monocle, + farmer: farmer, + cook: cook, + person_feeding_baby: person_feeding_baby, + mx_claus: mx_claus, + student: student, + singer: singer, + artist: artist, + teacher: teacher, + factory_worker: factory_worker, + technologist: technologist, + office_worker: office_worker, + mechanic: mechanic, + scientist: scientist, + astronaut: astronaut, + firefighter: firefighter, + people_holding_hands: people_holding_hands, + person_with_probing_cane: person_with_probing_cane, + red_haired_person: red_haired_person, + curly_haired_person: curly_haired_person, + bald_person: bald_person, + white_haired_person: white_haired_person, + person_in_motorized_wheelchair: person_in_motorized_wheelchair, + person_in_manual_wheelchair: person_in_manual_wheelchair, + health_worker: health_worker, + judge: judge, + pilot: pilot, + adult: adult, + child: child, + older_adult: older_adult, + woman_with_beard: woman_with_beard, + man_with_beard: man_with_beard, + bearded_person: bearded_person, + person_with_headscarf: person_with_headscarf, + woman_in_steamy_room: woman_in_steamy_room, + man_in_steamy_room: man_in_steamy_room, + person_in_steamy_room: person_in_steamy_room, + woman_climbing: woman_climbing, + person_climbing: person_climbing, + man_climbing: man_climbing, + woman_in_lotus_position: woman_in_lotus_position, + person_in_lotus_position: person_in_lotus_position, + man_in_lotus_position: man_in_lotus_position, + female_mage: female_mage, + mage: mage, + male_mage: male_mage, + female_fairy: female_fairy, + fairy: fairy, + male_fairy: male_fairy, + female_vampire: female_vampire, + vampire: vampire, + male_vampire: male_vampire, + mermaid: mermaid, + merman: merman, + merperson: merperson, + female_elf: female_elf, + male_elf: male_elf, + elf: elf, + female_genie: female_genie, + male_genie: male_genie, + genie: genie, + female_zombie: female_zombie, + male_zombie: male_zombie, + zombie: zombie, + brain: brain, + orange_heart: orange_heart, + billed_cap: billed_cap, + scarf: scarf, + gloves: gloves, + coat: coat, + socks: socks, + red_envelope: red_envelope, + firecracker: firecracker, + jigsaw: jigsaw, + test_tube: test_tube, + petri_dish: petri_dish, + dna: dna, + compass: compass, + abacus: abacus, + fire_extinguisher: fire_extinguisher, + toolbox: toolbox, + bricks: bricks, + magnet: magnet, + luggage: luggage, + lotion_bottle: lotion_bottle, + thread: thread, + yarn: yarn, + safety_pin: safety_pin, + teddy_bear: teddy_bear, + broom: broom, + basket: basket, + roll_of_paper: roll_of_paper, + soap: soap, + sponge: sponge, + receipt: receipt, + nazar_amulet: nazar_amulet, + ballet_shoes: ballet_shoes, + "one-piece_swimsuit": "🩱", + briefs: briefs, + shorts: shorts, + thong_sandal: thong_sandal, + drop_of_blood: drop_of_blood, + adhesive_bandage: adhesive_bandage, + stethoscope: stethoscope, + "yo-yo": "🪀", + kite: kite, + parachute: parachute, + boomerang: boomerang, + magic_wand: magic_wand, + pinata: pinata, + nesting_dolls: nesting_dolls, + ringed_planet: ringed_planet, + chair: chair, + razor: razor, + axe: axe, + diya_lamp: diya_lamp, + banjo: banjo, + military_helmet: military_helmet, + accordion: accordion, + long_drum: long_drum, + coin: coin, + carpentry_saw: carpentry_saw, + screwdriver: screwdriver, + ladder: ladder, + hook: hook, + mirror: mirror, + window: window$1, + plunger: plunger, + sewing_needle: sewing_needle, + knot: knot, + bucket: bucket, + mouse_trap: mouse_trap, + toothbrush: toothbrush, + headstone: headstone, + placard: placard, + rock: rock, + fly: fly, + worm: worm, + beetle: beetle, + cockroach: cockroach, + potted_plant: potted_plant, + wood: wood, + feather: feather, + anatomical_heart: anatomical_heart, + lungs: lungs, + people_hugging: people_hugging, + blueberries: blueberries, + bell_pepper: bell_pepper, + olive: olive, + flatbread: flatbread, + tamale: tamale, + fondue: fondue, + teapot: teapot, + bangbang: bangbang, + interrobang: interrobang, + tm: tm, + information_source: information_source, + left_right_arrow: left_right_arrow, + arrow_up_down: arrow_up_down, + arrow_upper_left: arrow_upper_left, + arrow_upper_right: arrow_upper_right, + arrow_lower_right: arrow_lower_right, + arrow_lower_left: arrow_lower_left, + leftwards_arrow_with_hook: leftwards_arrow_with_hook, + arrow_right_hook: arrow_right_hook, + watch: watch, + hourglass: hourglass, + keyboard: keyboard, + eject: eject, + fast_forward: fast_forward, + rewind: rewind, + arrow_double_up: arrow_double_up, + arrow_double_down: arrow_double_down, + black_right_pointing_double_triangle_with_vertical_bar: black_right_pointing_double_triangle_with_vertical_bar, + black_left_pointing_double_triangle_with_vertical_bar: black_left_pointing_double_triangle_with_vertical_bar, + black_right_pointing_triangle_with_double_vertical_bar: black_right_pointing_triangle_with_double_vertical_bar, + alarm_clock: alarm_clock, + stopwatch: stopwatch, + timer_clock: timer_clock, + hourglass_flowing_sand: hourglass_flowing_sand, + double_vertical_bar: double_vertical_bar, + black_square_for_stop: black_square_for_stop, + black_circle_for_record: black_circle_for_record, + m: m, + black_small_square: black_small_square, + white_small_square: white_small_square, + arrow_forward: arrow_forward, + arrow_backward: arrow_backward, + white_medium_square: white_medium_square, + black_medium_square: black_medium_square, + white_medium_small_square: white_medium_small_square, + black_medium_small_square: black_medium_small_square, + sunny: sunny, + cloud: cloud, + umbrella: umbrella, + snowman: snowman, + comet: comet, + phone: phone, + telephone: telephone, + ballot_box_with_check: ballot_box_with_check, + shamrock: shamrock, + point_up: point_up, + skull_and_crossbones: skull_and_crossbones, + radioactive_sign: radioactive_sign, + biohazard_sign: biohazard_sign, + orthodox_cross: orthodox_cross, + star_and_crescent: star_and_crescent, + peace_symbol: peace_symbol, + yin_yang: yin_yang, + wheel_of_dharma: wheel_of_dharma, + white_frowning_face: white_frowning_face, + relaxed: relaxed, + female_sign: female_sign, + male_sign: male_sign, + gemini: gemini, + cancer: cancer, + leo: leo, + virgo: virgo, + libra: libra, + scorpius: scorpius, + chess_pawn: chess_pawn, + spades: spades, + clubs: clubs, + hearts: hearts, + diamonds: diamonds, + hotsprings: hotsprings, + recycle: recycle, + infinity: infinity, + wheelchair: wheelchair, + hammer_and_pick: hammer_and_pick, + crossed_swords: crossed_swords, + medical_symbol: medical_symbol, + staff_of_aesculapius: staff_of_aesculapius, + scales: scales, + alembic: alembic, + gear: gear, + atom_symbol: atom_symbol, + fleur_de_lis: fleur_de_lis, + warning: warning, + zap: zap, + transgender_symbol: transgender_symbol, + white_circle: white_circle, + black_circle: black_circle, + coffin: coffin, + funeral_urn: funeral_urn, + soccer: soccer, + baseball: baseball, + snowman_without_snow: snowman_without_snow, + partly_sunny: partly_sunny, + thunder_cloud_and_rain: thunder_cloud_and_rain, + ophiuchus: ophiuchus, + pick: pick, + helmet_with_white_cross: helmet_with_white_cross, + chains: chains, + no_entry: no_entry, + shinto_shrine: shinto_shrine, + church: church, + mountain: mountain, + umbrella_on_ground: umbrella_on_ground, + fountain: fountain, + golf: golf, + ferry: ferry, + boat: boat, + sailboat: sailboat, + skier: skier, + ice_skate: ice_skate, + "woman-bouncing-ball": "⛹️‍♀️", + "man-bouncing-ball": "⛹️‍♂️", + person_with_ball: person_with_ball, + tent: tent, + fuelpump: fuelpump, + scissors: scissors, + airplane: airplane, + email: email, + envelope: envelope, + fist: fist, + hand: hand, + raised_hand: raised_hand, + v: v, + writing_hand: writing_hand, + pencil2: pencil2, + black_nib: black_nib, + heavy_check_mark: heavy_check_mark, + heavy_multiplication_x: heavy_multiplication_x, + latin_cross: latin_cross, + star_of_david: star_of_david, + eight_spoked_asterisk: eight_spoked_asterisk, + eight_pointed_black_star: eight_pointed_black_star, + snowflake: snowflake, + sparkle: sparkle, + x: x, + negative_squared_cross_mark: negative_squared_cross_mark, + heavy_heart_exclamation_mark_ornament: heavy_heart_exclamation_mark_ornament, + heart_on_fire: heart_on_fire, + mending_heart: mending_heart, + heart: heart, + arrow_right: arrow_right, + curly_loop: curly_loop, + loop: loop, + arrow_heading_up: arrow_heading_up, + arrow_heading_down: arrow_heading_down, + arrow_left: arrow_left, + arrow_up: arrow_up, + arrow_down: arrow_down, + black_large_square: black_large_square, + white_large_square: white_large_square, + star: star, + o: o, + wavy_dash: wavy_dash, + part_alternation_mark: part_alternation_mark, + congratulations: congratulations, + secret: secret +}; + +/*jslint node: true*/ + +/** + * regex to parse emoji in a string - finds emoji, e.g. :coffee: + */ +var emojiNameRegex = /:([a-zA-Z0-9_\-\+]+):/g; + +/** + * regex to trim whitespace + * use instead of String.prototype.trim() for IE8 support + */ +var trimSpaceRegex = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +/** + * Removes colons on either side + * of the string if present + * @param {string} str + * @return {string} + */ +function stripColons (str) { + var colonIndex = str.indexOf(':'); + if (colonIndex > -1) { + // :emoji: (http://www.emoji-cheat-sheet.com/) + if (colonIndex === str.length - 1) { + str = str.substring(0, colonIndex); + return stripColons(str); + } else { + str = str.substr(colonIndex + 1); + return stripColons(str); + } + } + + return str; +} + +/** + * Adds colons to either side + * of the string + * @param {string} str + * @return {string} + */ +function wrapColons (str) { + return (typeof str === 'string' && str.length > 0) ? ':' + str + ':' : str; +} + +/** + * Ensure that the word is wrapped in colons + * by only adding them, if they are not there. + * @param {string} str + * @return {string} + */ +function ensureColons (str) { + return (typeof str === 'string' && str[0] !== ':') ? wrapColons(str) : str; +} + +// Non spacing mark, some emoticons have them. It's the 'Variant Form', +// which provides more information so that emoticons can be rendered as +// more colorful graphics. FE0E is a unicode text version, where as FE0F +// should be rendered as a graphical version. The code gracefully degrades. +var NON_SPACING_MARK = String.fromCharCode(65039); // 65039 - '️' - 0xFE0F; +var nonSpacingRegex = new RegExp(NON_SPACING_MARK, 'g'); + +// Remove the non-spacing-mark from the code, never send a stripped version +// to the client, as it kills graphical emoticons. +function stripNSB (code) { + return code.replace(nonSpacingRegex, ''); +} +// Reversed hash table, where as emojiByName contains a { heart: '❤' } +// dictionary emojiByCode contains { ❤: 'heart' }. The codes are normalized +// to the text version. +var emojiByCode = Object.keys(emojiByName).reduce(function(h,k) { + h[stripNSB(emojiByName[k])] = k; + return h; +}, {}); + +/** + * Emoji namespace + */ +var Emoji = { + emoji: emojiByName, +}; + +/** + * get emoji code from name. return emoji code back if code is passed in. + * @param {string} emoji + * @return {string} + */ +Emoji._get = function _get (emoji) { + if (emojiByCode[stripNSB(emoji)]) { + return emoji; + } else if (emojiByName.hasOwnProperty(emoji)) { + return emojiByName[emoji]; + } + + return ensureColons(emoji); +}; + +/** + * get emoji code from :emoji: string or name + * @param {string} emoji + * @return {string} + */ +Emoji.get = function get (emoji) { + emoji = stripColons(emoji); + + return Emoji._get(emoji); +}; + +/** + * find the emoji by either code or name + * @param {string} nameOrCode The emoji to find, either `coffee`, `:coffee:` or `☕`; + * @return {object} + */ +Emoji.find = function find (nameOrCode) { + return Emoji.findByName(nameOrCode) || Emoji.findByCode(nameOrCode); +}; + +/** + * find the emoji by name + * @param {string} name The emoji to find either `coffee` or `:coffee:`; + * @return {object} + */ +Emoji.findByName = function findByName (name) { + var stripped = stripColons(name); + var emoji = emojiByName[stripped]; + + return emoji ? ({ emoji: emoji, key: stripped }) : undefined; +}; + +/** + * find the emoji by code (emoji) + * @param {string} code The emoji to find; for example `☕` or `☔` + * @return {object} + */ +Emoji.findByCode = function findByCode (code) { + var stripped = stripNSB(code); + var name = emojiByCode[stripped]; + + // lookup emoji to ensure the Variant Form is returned + return name ? ({ emoji: emojiByName[name], key: name }) : undefined; +}; + + +/** + * Check if an emoji is known by this library + * @param {string} nameOrCode The emoji to validate, either `coffee`, `:coffee:` or `☕`; + * @return {object} + */ +Emoji.hasEmoji = function hasEmoji (nameOrCode) { + return Emoji.hasEmojiByName(nameOrCode) || Emoji.hasEmojiByCode(nameOrCode); +}; + +/** + * Check if an emoji with given name is known by this library + * @param {string} name The emoji to validate either `coffee` or `:coffee:`; + * @return {object} + */ +Emoji.hasEmojiByName = function hasEmojiByName (name) { + var result = Emoji.findByName(name); + return !!result && result.key === stripColons(name); +}; + +/** + * Check if a given emoji is known by this library + * @param {string} code The emoji to validate; for example `☕` or `☔` + * @return {object} + */ +Emoji.hasEmojiByCode = function hasEmojiByCode (code) { + var result = Emoji.findByCode(code); + return !!result && stripNSB(result.emoji) === stripNSB(code); +}; + +/** + * get emoji name from code + * @param {string} emoji + * @param {boolean} includeColons should the result include the :: + * @return {string} + */ +Emoji.which = function which (emoji_code, includeColons) { + var code = stripNSB(emoji_code); + var word = emojiByCode[code]; + + return includeColons ? wrapColons(word) : word; +}; + +/** + * emojify a string (replace :emoji: with an emoji) + * @param {string} str + * @param {function} on_missing (gets emoji name without :: and returns a proper emoji if no emoji was found) + * @param {function} format (wrap the returned emoji in a custom element) + * @return {string} + */ +Emoji.emojify = function emojify (str, on_missing, format) { + if (!str) return ''; + + return str.split(emojiNameRegex) // parse emoji via regex + .map(function parseEmoji(s, i) { + // every second element is an emoji, e.g. "test :fast_forward:" -> [ "test ", "fast_forward" ] + if (i % 2 === 0) return s; + var emoji = Emoji._get(s); + var isMissing = emoji.indexOf(':') > -1; + + if (isMissing && typeof on_missing === 'function') { + return on_missing(s); + } + + if (!isMissing && typeof format === 'function') { + return format(emoji, s); + } + + return emoji; + }) + .join('') // convert back to string + ; +}; + +/** + * return a random emoji + * @return {string} + */ +Emoji.random = function random () { + var emojiKeys = Object.keys(emojiByName); + var randomIndex = Math.floor(Math.random() * emojiKeys.length); + var key = emojiKeys[randomIndex]; + var emoji = Emoji._get(key); + return { key: key, emoji: emoji }; +}; + +/** + * return an collection of potential emoji matches + * @param {string} str + * @return {Array.} + */ +Emoji.search = function search (str) { + var emojiKeys = Object.keys(emojiByName); + var matcher = stripColons(str); + var matchingKeys = emojiKeys.filter(function(key) { + return key.toString().indexOf(matcher) === 0; + }); + return matchingKeys.map(function(key) { + return { + key: key, + emoji: Emoji._get(key), + }; + }); +}; + +/** + * unemojify a string (replace emoji with :emoji:) + * @param {string} str + * @return {string} + */ +Emoji.unemojify = function unemojify (str) { + if (!str) return ''; + var words = toArray_1(str); + + return words.map(function(word) { + return Emoji.which(word, true) || word; + }).join(''); +}; + +/** + * replace emojis with replacement value + * @param {string} str + * @param {function|string} the string or callback function to replace the emoji with + * @param {boolean} should trailing whitespaces be cleaned? Defaults false + * @return {string} + */ +Emoji.replace = function replace (str, replacement, cleanSpaces) { + if (!str) return ''; + + var replace = typeof replacement === 'function' ? replacement : function() { return replacement; }; + var words = toArray_1(str); + + var replaced = words.map(function(word, idx) { + var emoji = Emoji.findByCode(word); + + if (emoji && cleanSpaces && words[idx + 1] === ' ') { + words[idx + 1] = ''; + } + + return emoji ? replace(emoji) : word; + }).join(''); + + return cleanSpaces ? replaced.replace(trimSpaceRegex, '') : replaced; +}; + + +/** + * remove all emojis from a string + * @param {string} str + * @return {string} + */ +Emoji.strip = function strip (str) { + return Emoji.replace(str, '', true); +}; + +var emoji = Emoji; + +var nodeEmoji = emoji; + +class ZoottelkeeperPlugin extends obsidian.Plugin { + constructor() { + super(...arguments); + this.triggerUpdateIndexFile = obsidian.debounce(this.keepTheZooClean.bind(this, false), 3000, true); + this.generateIndexContents = async (indexFile) => { + const templateFile = this.app.vault.getAbstractFileByPath(this.settings.templateFile); + let currentTemplateContent = ''; + if (templateFile instanceof obsidian.TFile) { + currentTemplateContent = await this.app.vault.cachedRead(templateFile); + } + let indexTFile = this.app.vault.getAbstractFileByPath(indexFile) || + (await this.app.vault.create(indexFile, currentTemplateContent)); + if (indexTFile && indexTFile instanceof obsidian.TFile) + return this.generateIndexContent(indexTFile); + }; + this.generateGeneralIndexContent = (options) => { + return options.items + .reduce((acc, curr) => { + acc.push(options.func(curr.path, this.isFile(curr))); + return acc; + }, options.initValue); + }; + this.generateIndexContent = async (indexTFile) => { + let indexContent; + // get subFolders + //const subFolders = indexTFile.parent.children.filter(item => !this.isFile(item)); + //const files = indexTFile.parent.children.filter(item => this.isFile(item)); + const splitItems = indexTFile.parent.children.reduce((acc, curr) => { + if (this.isFile(curr)) + acc['files'].push(curr); + else + acc['subFolders'].push(curr); + return acc; + }, { subFolders: [], files: [] }); + indexContent = this.generateGeneralIndexContent({ + items: splitItems.subFolders, + func: this.generateIndexFolderItem, + initValue: [], + }); + indexContent = this.generateGeneralIndexContent({ + items: splitItems.files.filter(file => file.name !== indexTFile.name), + func: this.generateIndexItem, + initValue: indexContent, + }); + try { + if (indexTFile instanceof obsidian.TFile) { + let currentContent = await this.app.vault.cachedRead(indexTFile); + if (currentContent === '') { + const templateFile = this.app.vault.getAbstractFileByPath(this.settings.templateFile); + if (templateFile instanceof obsidian.TFile) { + currentContent = await this.app.vault.cachedRead(templateFile); + } + } + const updatedFrontmatter = hasFrontmatter(currentContent, this.settings.frontMatterSeparator) + ? updateFrontmatter(this.settings, currentContent) + : ''; + currentContent = removeFrontmatter(currentContent, this.settings.frontMatterSeparator); + const updatedIndexContent = updateIndexContent(this.settings.sortOrder, currentContent, indexContent); + await this.app.vault.modify(indexTFile, `${updatedFrontmatter}${updatedIndexContent}`); + } + else { + throw new Error('Creation index as folder is not supported'); + } + } + catch (e) { + console.warn('Error during deletion/creation of index files', e); + } + }; + this.setEmojiPrefix = (isFile) => { + return this.settings.enableEmojis + ? isFile + ? nodeEmoji.get(this.settings.fileEmoji) + : nodeEmoji.get(this.settings.folderEmoji) + : ''; + }; + this.generateFormattedIndexItem = (path, isFile) => { + const realFileName = `${path.split('|')[0]}.md`; + const fileAbstrPath = this.app.vault.getAbstractFileByPath(realFileName); + const embedSubIndexCharacter = this.settings.embedSubIndex && this.isIndexFile(fileAbstrPath) ? '!' : ''; + switch (this.settings.indexItemStyle) { + case IndexItemStyle.PureLink: + return `${this.setEmojiPrefix(isFile)} ${embedSubIndexCharacter}[[${path}]]`; + case IndexItemStyle.List: + return `- ${this.setEmojiPrefix(isFile)} ${embedSubIndexCharacter}[[${path}]]`; + case IndexItemStyle.Checkbox: + return `- [ ] ${this.setEmojiPrefix(isFile)} ${embedSubIndexCharacter}[[${path}]]`; + } + }; + this.generateIndexItem = (path, isFile) => { + let internalFormattedIndex; + if (this.settings.cleanPathBoolean) { + const cleanPath = (path.endsWith(".md")) + ? path.replace(/\.md$/, '') + : path; + const fileName = cleanPath.split("/").pop(); + internalFormattedIndex = `${cleanPath}|${fileName}`; + } + else { + internalFormattedIndex = path; + } + return this.generateFormattedIndexItem(internalFormattedIndex, isFile); + }; + this.generateIndexFolderItem = (path, isFile) => { + return this.generateIndexItem(this.getInnerIndexFilePath(path), isFile); + }; + this.getInnerIndexFilePath = (folderPath) => { + const folderName = this.getFolderName(folderPath); + return `${folderPath}/${this.settings.indexPrefix}${folderName}.md`; + }; + this.getIndexFilePath = (filePath) => { + const fileAbstrPath = this.app.vault.getAbstractFileByPath(filePath); + if (this.isIndexFile(fileAbstrPath)) + return null; + let parentPath = this.getParentFolder(filePath); + // if its parent does not exits, then its a moved subfolder, so it should not be updated + const parentTFolder = this.app.vault.getAbstractFileByPath(parentPath); + if (parentPath && parentPath !== '') { + if (!parentTFolder) + return undefined; + parentPath = `${parentPath}/`; + } + const parentName = this.getParentFolderName(filePath); + return `${parentPath}${this.settings.indexPrefix}${parentName}.md`; + }; + this.removeDisallowedFoldersIndexes = async (indexFiles) => { + for (const folder of this.settings.foldersExcluded.split('\n').map(f => f.trim())) { + const innerIndex = this.getInnerIndexFilePath(folder); + indexFiles.delete(innerIndex); + } + }; + this.cleanDisallowedFolders = async () => { + for (const folder of this.settings.foldersExcluded.split('\n').map(f => f.trim())) { + const innerIndex = this.getInnerIndexFilePath(folder); + const indexTFile = this.app.vault.getAbstractFileByPath(innerIndex); + await this.app.vault.delete(indexTFile); + } + }; + this.getParentFolder = (filePath) => { + const fileFolderArray = filePath.split('/'); + fileFolderArray.pop(); + return fileFolderArray.join('/'); + }; + this.getParentFolderName = (filePath) => { + const parentFolder = this.getParentFolder(filePath); + const fileFolderArray = parentFolder.split('/'); + return fileFolderArray[0] !== '' + ? fileFolderArray[fileFolderArray.length - 1] + : this.app.vault.getName(); + }; + this.getFolderName = (folderPath) => { + const folderArray = folderPath.split('/'); + return (folderArray[0] !== '') ? folderArray[folderArray.length - 1] : this.app.vault.getName(); + }; + this.isIndexFile = (item) => { + return this.isFile(item) + && (this.settings.indexPrefix === '' + ? item.name === item.parent.name + : item.name.startsWith(this.settings.indexPrefix)); + }; + this.isFile = (item) => { + return item instanceof obsidian.TFile; + }; + } + async onload() { + await this.loadSettings(); + this.app.workspace.onLayoutReady(async () => { + this.loadVault(); + console.debug(`Vault in files: ${JSON.stringify(this.app.vault.getMarkdownFiles().map((f) => f.path))}`); + }); + this.registerEvent(this.app.vault.on('create', this.triggerUpdateIndexFile)); + this.registerEvent(this.app.vault.on('delete', this.triggerUpdateIndexFile)); + this.registerEvent(this.app.vault.on('rename', this.triggerUpdateIndexFile)); + this.addSettingTab(new ZoottelkeeperPluginSettingTab(this.app, this)); + } + loadVault() { + this.lastVault = new Set(this.app.vault.getMarkdownFiles().map((file) => file.path)); + } + async keepTheZooClean(triggeredManually) { + console.debug('keeping the zoo clean...'); + if (this.lastVault || triggeredManually) { + const vaultFilePathsSet = new Set(this.app.vault.getMarkdownFiles().map((file) => file.path)); + try { + // getting the changed files using symmetric diff + let changedFiles = new Set([ + ...Array.from(vaultFilePathsSet).filter((currentFile) => !this.lastVault.has(currentFile)), + ...Array.from(this.lastVault).filter((currentVaultFile) => !vaultFilePathsSet.has(currentVaultFile)), + ]); + console.debug(`changedFiles: ${JSON.stringify(Array.from(changedFiles))}`); + // getting index files to be updated + const indexFiles2BUpdated = new Set(); + for (const changedFile of Array.from(changedFiles)) { + const indexFilePath = this.getIndexFilePath(changedFile); + if (indexFilePath + && isInAllowedFolder(this.settings, indexFilePath) + && !isInDisAllowedFolder(this.settings, indexFilePath)) { + indexFiles2BUpdated.add(indexFilePath); + } + // getting the parents' index notes of each changed file in order to update their links as well (hierarhical backlinks) + const parentIndexFilePath = this.getIndexFilePath(this.getParentFolder(changedFile)); + if (parentIndexFilePath) + indexFiles2BUpdated.add(parentIndexFilePath); + } + console.debug(`Index files to be updated: ${JSON.stringify(Array.from(indexFiles2BUpdated))}`); + await this.removeDisallowedFoldersIndexes(indexFiles2BUpdated); + // update index files + for (const indexFile of Array.from(indexFiles2BUpdated)) { + await this.generateIndexContents(indexFile); + } + await this.cleanDisallowedFolders(); + } + catch (e) { } + } + this.lastVault = new Set(this.app.vault.getMarkdownFiles().map((file) => file.path)); + } + onunload() { + console.debug('unloading plugin'); + } + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + async saveSettings() { + await this.saveData(this.settings); + } +} +class ZoottelkeeperPluginSettingTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + containerEl.createEl('h2', { text: 'Zoottelkeeper Settings' }); + containerEl.createEl('h3', { text: 'Folder Settings' }); + new obsidian.Setting(containerEl) + .setName('Folders included') + .setDesc('Specify the folders to be handled by Zoottelkeeper. They must be absolute paths starting from the root vault, one per line, example: Notes/ Articles/, which will include Notes and Articles folder in the root folder. Empty list means all of the vault will be handled except the excluded folders. \'*\' can be added to the end, to include the folder\'s subdirectories recursively, e.g. Notes/* Articles/') + .addTextArea((text) => text + .setPlaceholder('') + .setValue(this.plugin.settings.foldersIncluded) + .onChange(async (value) => { + this.plugin.settings.foldersIncluded = value + .replace(/,/g, '\n') + .split('\n') + .map(folder => { + const f = folder.trim(); + return f.startsWith('/') + ? f.substring(1) + : f; + }) + .join('\n'); + await this.plugin.saveSettings(); + })); + new obsidian.Setting(containerEl) + .setName('Folders excluded') + .setDesc('Specify the folders NOT to be handled by Zoottelkeeper. They must be absolute paths starting from the root vault, one per line. Example: "Notes/ Articles/ ", it will exclude Notes and Articles folder in the root folder. * can be added to the end, to exclude the folder\'s subdirectories recursively.') + .addTextArea((text) => text + .setPlaceholder('') + .setValue(this.plugin.settings.foldersExcluded) + .onChange(async (value) => { + this.plugin.settings.foldersExcluded = value + .replace(/,/g, '\n') + .split('\n') + .map(folder => { + const f = folder.trim(); + return f.startsWith('/') + ? f.substring(1) + : f; + }) + .join('\n'); + await this.plugin.saveSettings(); + })); + new obsidian.Setting(containerEl) + .setName('Trigger indexing') + .setDesc('By pushing this button you can trigger the indexing on folders match your include/exclude criterias currently set.') + .addButton((btn) => { + btn.setButtonText('Generate index now'); + btn.onClick(async () => { + this.plugin.lastVault = new Set(); + await this.plugin.keepTheZooClean(true); + }); + }); + containerEl.createEl('h3', { text: 'General Settings' }); + new obsidian.Setting(containerEl) + .setName("Clean Files") + .setDesc("This enables you to only show the files without path and '.md' ending in preview mode.") + .addToggle((t) => { + t.setValue(this.plugin.settings.cleanPathBoolean); + t.onChange(async (v) => { + this.plugin.settings.cleanPathBoolean = v; + await this.plugin.saveSettings(); + }); + }); + new obsidian.Setting(containerEl) + .setName('Index links Order') + .setDesc('Select the order of the links to be sorted in the index files.') + .addDropdown(async (dropdown) => { + dropdown.addOption(SortOrder.ASC, 'Ascending'); + dropdown.addOption(SortOrder.DESC, 'Descending'); + dropdown.setValue(this.plugin.settings.sortOrder); + dropdown.onChange(async (option) => { + this.plugin.settings.sortOrder = option; + await this.plugin.saveSettings(); + }); + }); + new obsidian.Setting(containerEl) + .setName('List Style') + .setDesc('Select the style of the index-list.') + .addDropdown(async (dropdown) => { + dropdown.addOption(IndexItemStyle.PureLink, 'Pure Obsidian link'); + dropdown.addOption(IndexItemStyle.List, 'Listed link'); + dropdown.addOption(IndexItemStyle.Checkbox, 'Checkboxed link'); + dropdown.setValue(this.plugin.settings.indexItemStyle); + dropdown.onChange(async (option) => { + console.debug('Chosen index item style: ' + option); + this.plugin.settings.indexItemStyle = option; + await this.plugin.saveSettings(); + }); + }); + new obsidian.Setting(containerEl) + .setName('Embed sub-index content in preview') + .setDesc("If you enable this, the plugin will embed the sub-index content in preview mode.") + .addToggle((t) => { + t.setValue(this.plugin.settings.embedSubIndex); + t.onChange(async (v) => { + this.plugin.settings.embedSubIndex = v; + await this.plugin.saveSettings(); + }); + }); + // index prefix + new obsidian.Setting(containerEl) + .setName('Index Prefix') + .setDesc('Per default the file is named after your folder, but you can prefix it here.') + .addText((text) => text + .setPlaceholder('') + .setValue(this.plugin.settings.indexPrefix) + .onChange(async (value) => { + console.debug('Index prefix: ' + value); + this.plugin.settings.indexPrefix = value; + await this.plugin.saveSettings(); + })); + new obsidian.Setting(containerEl) + .setName('Template file') + .setDesc('Set your template file\'s absolute path like "templates/zoottel_template.md"') + .addText((text) => text + .setPlaceholder('') + .setValue(this.plugin.settings.templateFile) + .onChange(async (value) => { + console.debug('Template file: ' + value); + this.plugin.settings.templateFile = value; + await this.plugin.saveSettings(); + })); + new obsidian.Setting(containerEl) + .setName('Frontmatter separator') + .setDesc('It specifies the separator string generated before and after the frontmatter, by default its ---') + .addText((text) => text + .setPlaceholder('') + .setValue(this.plugin.settings.frontMatterSeparator) + .onChange(async (value) => { + this.plugin.settings.frontMatterSeparator = value; + await this.plugin.saveSettings(); + })); + containerEl.createEl('h4', { text: 'Meta Tags' }); + // Enabling Meta Tags + new obsidian.Setting(containerEl) + .setName('Enable Meta Tags') + .setDesc("You can add Meta Tags at the top of your index-file. This is useful when you're using the index files as MOCs.") + .addToggle((t) => { + t.setValue(this.plugin.settings.indexTagBoolean); + t.onChange(async (v) => { + this.plugin.settings.indexTagBoolean = v; + await this.plugin.saveSettings(); + }); + }); + // setting the meta tag value + const metaTagsSetting = new obsidian.Setting(containerEl) + .setName('Set Meta Tags') + .setDesc('You can add one or multiple tags to your index-files! There is no need to use "#", just use the exact value of the tags\' separator specified below between the tags.') + .addText((text) => text + .setPlaceholder('moc') + .setValue(this.plugin.settings.indexTagValue) + .onChange(async (value) => { + this.plugin.settings.indexTagValue = value; + await this.plugin.saveSettings(); + })); + new obsidian.Setting(containerEl) + .setName('Set the tag\'s label in frontmatter') + .setDesc('Please specify the label of the tags in frontmatter (the text before the colon ):') + .addText((text) => text + .setPlaceholder('tags') + .setValue(this.plugin.settings.indexTagLabel) + .onChange(async (value) => { + this.plugin.settings.indexTagLabel = value; + await this.plugin.saveSettings(); + })); + new obsidian.Setting(containerEl) + .setName('Set the tag\'s separator in Frontmatter') + .setDesc('Please specify the separator characters that distinguish the tags in Frontmatter:') + .addText((text) => text + .setPlaceholder(', ') + .setValue(this.plugin.settings.indexTagSeparator) + .onChange(async (value) => { + this.plugin.settings.indexTagSeparator = value; + await this.plugin.saveSettings(); + })); + new obsidian.Setting(containerEl) + .setName('Add square brackets around each tags') + .setDesc("If you enable this, the plugin will put square brackets around the tags set.") + .addToggle((t) => { + t.setValue(this.plugin.settings.addSquareBrackets); + t.onChange(async (v) => { + this.plugin.settings.addSquareBrackets = v; + await this.plugin.saveSettings(); + }); + }); + containerEl.createEl('h4', { text: 'Emojis' }); + // Enabling Meta Tags + new obsidian.Setting(containerEl) + .setName('Enable Emojis') + .setDesc("You can set an emoji at the beginning of each index item depending on its type (file or folder). If multiple emojis matches, the first one will be stored.") + .addToggle((t) => { + t.setValue(this.plugin.settings.enableEmojis); + t.onChange(async (v) => { + this.plugin.settings.enableEmojis = v; + await this.plugin.saveSettings(); + }); + }); + let emojiFolderDesc = 'Set an emoji for folders:'; + if (this.plugin.settings.folderEmoji) { + const setFolderEmoji = nodeEmoji.search(this.plugin.settings.folderEmoji); + emojiFolderDesc = `Matching Options:${setFolderEmoji[0].emoji} (${setFolderEmoji[0].key})`; + } + const emojiForFoldersSetting = new obsidian.Setting(containerEl) + .setName('Emojis') + .setDesc(emojiFolderDesc) + .addText((text) => text.setPlaceholder('card_index_dividers') + .setValue(this.plugin.settings.folderEmoji.replace(/:/g, '')) + .onChange(async (value) => { + if (value !== '') { + const emojiOptions = nodeEmoji.search(value); + emojiForFoldersSetting.setDesc(`Matching Options:${emojiOptions.map(emojOp => emojOp.emoji + "(" + emojOp.key + ")")}`); + if (emojiOptions.length > 0) { + this.plugin.settings.folderEmoji = `:${emojiOptions[0].key}:`; + await this.plugin.saveSettings(); + } + } + else { + emojiForFoldersSetting.setDesc('Set an emoji for folders:'); + } + })); + let emojiFileDesc = 'Set an emoji for files:'; + if (this.plugin.settings.fileEmoji) { + const setFileEmoji = nodeEmoji.search(this.plugin.settings.fileEmoji); + emojiFileDesc = `Matching Options:${setFileEmoji[0].emoji} (${setFileEmoji[0].key})`; + } + const emojiForFilesSetting = new obsidian.Setting(containerEl) + .setName('Emojis') + .setDesc(emojiFileDesc) + .addText((text) => text.setPlaceholder('page_facing_up') + .setValue(this.plugin.settings.fileEmoji.replace(/:/g, '')) + .onChange(async (value) => { + if (value !== '') { + const emojiOptions = nodeEmoji.search(value); + emojiForFilesSetting.setDesc(`Matching Options:${emojiOptions.map(emojOp => emojOp.emoji + "(" + emojOp.key + ")")}`); + if (emojiOptions.length > 0) { + this.plugin.settings.fileEmoji = `:${emojiOptions[0].key}:`; + await this.plugin.saveSettings(); + } + } + else { + emojiForFilesSetting.setDesc('Set an emoji for files:'); + } + })); + } +} + +module.exports = ZoottelkeeperPlugin; + + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/zoottelkeeper-obsidian-plugin/manifest.json b/.obsidian/plugins/zoottelkeeper-obsidian-plugin/manifest.json new file mode 100644 index 0000000..f1c5714 --- /dev/null +++ b/.obsidian/plugins/zoottelkeeper-obsidian-plugin/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "zoottelkeeper-obsidian-plugin", + "name": "Zoottelkeeper Plugin", + "version": "0.18.0", + "minAppVersion": "0.12.1", + "description": "This plugin automatically creates, maintains and tags MOCs for all your folders.", + "author": "Akos Balasko, Micha Brugger", + "authorUrl": "https://github.com/akosbalasko, https://github.com/michabrugger", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/zoottelkeeper-obsidian-plugin/styles.css b/.obsidian/plugins/zoottelkeeper-obsidian-plugin/styles.css new file mode 100644 index 0000000..efa69c0 --- /dev/null +++ b/.obsidian/plugins/zoottelkeeper-obsidian-plugin/styles.css @@ -0,0 +1,3 @@ +.zottelkeeper { + +} \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index f114c33..f63df4e 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -80,7 +80,8 @@ } ], "direction": "horizontal", - "width": 300 + "width": 300, + "collapsed": true }, "right": { "id": "19beab9b24a3a065", @@ -173,8 +174,8 @@ "state": { "type": "git-view", "state": {}, - "icon": "git-pull-request", - "title": "Source Control" + "icon": "lucide-ghost", + "title": "git-view" } } ], @@ -200,6 +201,8 @@ }, "active": "c3e5b400f87e4a39", "lastOpenFiles": [ + "cybersec/OS/Bash commands.md", + "cybersec/OS/Powershell commands.md", "cybersec/AD/Active Directory Basics.md", "Pasted image 20260809103935.png", "Pasted image 20260809103933.png", diff --git a/cybersec/OS/Powershell commands.md b/cybersec/OS/Powershell commands.md index 2b497a2..0e54030 100644 --- a/cybersec/OS/Powershell commands.md +++ b/cybersec/OS/Powershell commands.md @@ -6,3 +6,4 @@ `Find-Module -Name "PowerShell*"` `Install-Module -Name "PowerShellGet"` +kali \ No newline at end of file