diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..dcb58cd1 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..52409698 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules +coverage +__pycache__ +dist diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..b6e85c52 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,7 @@ +module.exports = { + presets: [ + ['@babel/preset-env', {targets: {node: 'current'}}], + '@babel/preset-typescript', + ]/* , + plugins: ["@babel/plugin-syntax-dynamic-import"] */ +}; diff --git a/fff.code-workspace b/fff.code-workspace new file mode 100644 index 00000000..d83eb9e2 --- /dev/null +++ b/fff.code-workspace @@ -0,0 +1,10 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "typescript.tsdk": "node_modules/typescript/lib" + } +} \ No newline at end of file diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..3705e410 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,195 @@ +// For a detailed explanation regarding each configuration property, visit: +// https://jestjs.io/docs/en/configuration.html + +module.exports = { + // All imported modules in your tests should be mocked automatically + //automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // Respect "browser" field in package.json when resolving modules + // browser: false, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/private/var/folders/2j/s40wkj715_14hqf2hpdpf2_h0000gn/T/jest_dx", + + // Automatically clear mock calls and instances between every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: null, + + // The directory where Jest should output its coverage files + coverageDirectory: "coverage", + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "/node_modules/" + // ], + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: null, + + // A path to a custom dependency extractor + // dependencyExtractor: null, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: null, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: null, + + // A set of global variables that need to be available in all test environments + globals: { + window: {}, + this: {}, + globalThis: {}, + Config: { + Modes: {} + } + }, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + moduleDirectories: [ + "node_modules" + ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // "js", + // "json", + // "jsx", + // "ts", + // "tsx", + // "node" + // ], + + // A map from regular expressions to module names that allow to stub out resources with a single module + // moduleNameMapper: {}, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + // preset: null, + + // Run tests from one or more projects + // projects: null, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state between every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: null, + + // Automatically restore mock state between every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: null, + + // A list of paths to directories that Jest should use to search for files in + roots: [ + '/src/tests', + ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: "node", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[tj]s?(x)" + // ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "/node_modules/" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: null, + + // This option allows use of a custom test runner + // testRunner: "jasmine2", + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: "http://localhost", + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: "real", + + // A map from regular expressions to paths to transformers + // transform: null, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: null, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..ddaa345c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,14286 @@ +{ + "name": "tweb", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/compat-data": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.1.tgz", + "integrity": "sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw==", + "dev": true, + "requires": { + "browserslist": "^4.8.2", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, + "@babel/core": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", + "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helpers": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-call-delegate": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz", + "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz", + "integrity": "sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.8.1", + "browserslist": "^4.8.2", + "invariant": "^2.2.4", + "levenary": "^1.1.0", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz", + "integrity": "sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz", + "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==", + "dev": true, + "requires": { + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.6.0" + } + }, + "@babel/helper-define-map": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz", + "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz", + "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-wrap-function": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helpers": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz", + "integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", + "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz", + "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", + "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz", + "integrity": "sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz", + "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz", + "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz", + "integrity": "sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", + "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", + "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", + "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", + "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz", + "integrity": "sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.8.3", + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz", + "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz", + "integrity": "sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz", + "integrity": "sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-typescript": "^7.8.3" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.3.tgz", + "integrity": "sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.8.0", + "@babel/helper-compilation-targets": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.8.3", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.8.3", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.8.3", + "@babel/plugin-transform-modules-systemjs": "^7.8.3", + "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.3", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.3", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.3", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/types": "^7.8.3", + "browserslist": "^4.8.2", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.0", + "semver": "^5.5.0" + } + }, + "@babel/preset-typescript": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.8.3.tgz", + "integrity": "sha512-qee5LgPGui9zQ0jR1TeU5/fP9L+ovoArklEqY12ek8P/wV5ZeM/VYSQYwICeoT6FfpJTekG9Ilay5PhwsOpMHA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-transform-typescript": "^7.8.3" + } + }, + "@babel/runtime": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.1.tgz", + "integrity": "sha512-SQ0sS7KUJDvgCI2cpZG0nJygO6002oTbhgSuw4WcocsnbxLwL5Q8I3fqbJdyBAc3uFrWZiR2JomseuxSuci3SQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/traverse": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@cryptography/sha1": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@cryptography/sha1/-/sha1-0.1.0.tgz", + "integrity": "sha512-QT/QL5R1UEXuTOl2+ADFPcpzUOuI2LW63qxWVYVvAjUMDzO5cxCYsrglQK5dVGoBEQYsRgCxPMal4KpCVt90bA==", + "dev": true + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/aes-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/aes-js/-/aes-js-3.1.0.tgz", + "integrity": "sha512-zHvLJrMxaisU/kyPtfLCsEciFWSbAxmEGdBHta+Zarz/QcBewFTywoyG9HhT57aseDfPgG0dEcGlVU1+fN94ng==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", + "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.8.tgz", + "integrity": "sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/cash": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/cash/-/cash-0.0.3.tgz", + "integrity": "sha512-gS24kdFuVwfo5h7IlStnXyBSIH4e9aFIhNHb4w+o5DwbYDeQJv+i9heh7u7nSvqnOP3v34tQMTe7VoJp2US08w==", + "dev": true + }, + "@types/chrome": { + "version": "0.0.91", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.91.tgz", + "integrity": "sha512-vNvo9lJkp1AvViWrUwe1bxhoMwr5dRZWlgr1DTuaNkz97LsG56lDX1sceWeZir2gRACJ5vdHtoRdVAvm8C75Ug==", + "dev": true, + "requires": { + "@types/filesystem": "*" + } + }, + "@types/crypto-js": { + "version": "3.1.43", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-3.1.43.tgz", + "integrity": "sha512-EHe/YKctU3IYNBsDmSOPX/7jLHPRlx8WaiDKSY9JCTnJ8XJeM4c0ZJvx+9Gxmr2s2ihI92R+3U/gNL1sq5oRuQ==", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" + }, + "@types/filesystem": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.29.tgz", + "integrity": "sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw==", + "dev": true, + "requires": { + "@types/filewriter": "*" + } + }, + "@types/filewriter": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.28.tgz", + "integrity": "sha1-wFTor02d11205jq8dviFFocU1LM=", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-dXvuABY9nM1xgsXlOtLQXJKdacxZJd7AtvLsKZ/0b57ruMXDKCOXAC/M75GbllQX6o1pcZ5hAG4JzYy7Z/wM2w==", + "dev": true, + "requires": { + "jest-diff": "^24.3.0" + } + }, + "@types/jquery": { + "version": "3.3.31", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.31.tgz", + "integrity": "sha512-Lz4BAJihoFw5nRzKvg4nawXPzutkv7wmfQ5121avptaSIXlDNJCUuxZxX/G+9EVidZGuO0UBlk+YjKbwRKJigg==", + "dev": true, + "requires": { + "@types/sizzle": "*" + } + }, + "@types/materialize-css": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/materialize-css/-/materialize-css-1.0.6.tgz", + "integrity": "sha512-H/QXdgih11880Rx+yhLU5mDCm3SVGF7CYyQjEmRYGrn/fGrPc+s2SQBwbB9gZCw2a/39bDkH/v+wyysj0nWXCQ==", + "dev": true, + "requires": { + "@types/cash": "*", + "@types/jquery": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/node": { + "version": "13.1.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.7.tgz", + "integrity": "sha512-HU0q9GXazqiKwviVxg9SI/+t/nAsGkvLDkIdxz+ObejG2nX6Si00TeLqHMoS+a/1tjH7a8YpKVQwtgHuMQsldg==" + }, + "@types/overlayscrollbars": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.9.0.tgz", + "integrity": "sha512-U3t35G0IH39eCoWKI6auh+3NkeP8jrmLyeZhiL3fKn4foOvbl223Ccd9cfUb1vhcxDmpTNAfKphDvl5jYJOD3w==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz", + "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.5.tgz", + "integrity": "sha512-CF/+sxTO7FOwbIRL4wMv0ZYLCRfMid2HQpzDRyViH7kSpfoAFiMdGqKIxb1PxWfjtQXQhnQuD33lvRHNwr809Q==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "dev": true, + "requires": { + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" + }, + "dependencies": { + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", + "dev": true + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + } + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big-integer": { + "version": "1.6.47", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.47.tgz", + "integrity": "sha512-9t9f7X3as2XGX8b52GqG6ox0GvIdM86LyIXASJnDCFhYNgt+A+MByQZ3W2PyMRZjEvG5f8TEbSPfEotVuMJnQg==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "broadcast-channel": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-2.3.2.tgz", + "integrity": "sha512-01yaxRPuB1+GN6jTBplZ2GpXnqKdqWQEnD7FBEerj65kMRRzOAwLBtf9TzJ91725gPCdxMHvID8afiUcIEDbdQ==", + "requires": { + "@babel/runtime": "^7.6.2", + "detect-node": "^2.0.4", + "js-sha3": "0.8.0", + "microseconds": "0.1.0", + "nano-time": "1.0.0", + "rimraf": "2.6.3", + "unload": "2.2.0" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30001021", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz", + "integrity": "sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.2.tgz", + "integrity": "sha512-yKycArwReQXbOD/3pmsPmt6p7oUBww8MisDabL2pCUWkbVONvCJoBdCjgY4ZVQmKX5juz/JB9oDcP6XzGUpjwQ==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, + "compression-webpack-plugin": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-3.1.0.tgz", + "integrity": "sha512-iqTHj3rADN4yHwXMBrQa/xrncex/uEQy8QHlaTKxGchT/hC0SdlJlmL/5eRqffmWq2ep0/Romw6Ld39JjTR/ug==", + "dev": true, + "requires": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.0.0", + "neo-async": "^2.5.0", + "schema-utils": "^2.6.1", + "serialize-javascript": "^2.1.2", + "webpack-sources": "^1.0.1" + }, + "dependencies": { + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", + "dev": true, + "requires": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + } + }, + "find-cache-dir": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", + "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.0", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.2.tgz", + "integrity": "sha512-sazKNMBX/jwrXRkOI7N6dtiTVYqzSckzol8SGuHt0lE/v3xSW6cUkOqzu6Bq2tW+dlUzq3CWIqHU3ZKauliqdg==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js-compat": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", + "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", + "dev": true, + "requires": { + "browserslist": "^4.8.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-loader": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.2.0.tgz", + "integrity": "sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.17", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.1.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.0.0", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", + "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.336.tgz", + "integrity": "sha512-FtazvnXAizSVMxQNPqUcTv2UElY5r3uRPQwiU1Tyg/Yc2UFr+/3wqDoLIV9ES6ablW3IrCcR8uEK2ppxaNPWhw==", + "dev": true + }, + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.2.tgz", + "integrity": "sha512-YoKuru3Lyoy7yVTBSH2j7UxTqe/je3dWAruC0sHvZX1GNd5zX8SSLvQqEgO9b3Ex8IW+goFI9arEEsFIbulhOw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + }, + "dependencies": { + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.52", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.52.tgz", + "integrity": "sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.2", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.1.tgz", + "integrity": "sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + } + } + }, + "ext": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.2.0.tgz", + "integrity": "sha512-0ccUQK/9e3NreLFg6K6np8aPyRgwycx+oFGtfx1dSp7Wj00Ozw9r05FgBRlzjf2XBM7LAzwgLyDscRrtSU91hA==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.2.tgz", + "integrity": "sha512-sazKNMBX/jwrXRkOI7N6dtiTVYqzSckzol8SGuHt0lE/v3xSW6cUkOqzu6Bq2tW+dlUzq3CWIqHU3ZKauliqdg==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", + "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.0.0.tgz", + "integrity": "sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "html-escaper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", + "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } + } + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "readable-stream": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "install": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", + "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==", + "dev": true + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0" + } + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "dev": true, + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "dev": true, + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + } + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + } + }, + "js-base64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=" + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "leemon": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/leemon/-/leemon-6.2.0.tgz", + "integrity": "sha512-a5ieuGSGEb5ezCL6UNds5//cVFaKpeexVK0VDCE8/eOF0r0/9Og94LQ33U2Px5dUcHVCDPWQY8gXLgDlDJnyyg==", + "dev": true + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.0.tgz", + "integrity": "sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "~3.0.5" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "localforage": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.3.tgz", + "integrity": "sha512-1TulyYfc4udS7ECSBT2vwJksWbkwwTX8BzeUIiq8Y07Riy7bDAAnxDaPU/tWyOVmQAcWJIEIFP9lPfBGqVoPgQ==", + "requires": { + "lie": "3.1.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "loglevel": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lottie-web": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.6.3.tgz", + "integrity": "sha512-cSG6kSA2m5ppxV/QMVHRVGop/R+oXgO4vVMvDcZR015Cy0PGml5hHP+XG21yB2qV6cYZy+X3ChTogSALgch7CA==" + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "materialize-css": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/materialize-css/-/materialize-css-1.0.0.tgz", + "integrity": "sha512-4/oecXl8y/1i8RDZvyvwAICyqwNoKU4or5uf8uoAd74k76KzZ0Llym4zhJ5lLNUskcqjO0AuMcvNyDkpz8Z6zw==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "microseconds": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.1.0.tgz", + "integrity": "sha1-R9x7z2IXG4Aw4hUv2C8SpolKcRk=" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz", + "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + }, + "nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=", + "requires": { + "big-integer": "^1.6.16" + } + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-releases": { + "version": "1.1.45", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.45.tgz", + "integrity": "sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "node-sass": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.0.tgz", + "integrity": "sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm": { + "version": "6.13.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.13.4.tgz", + "integrity": "sha512-vTcUL4SCg3AzwInWTbqg1OIaOXlzKSS8Mb8kc5avwrJpcvevDA5J9BhYSuei+fNs3pwOp4lzA5x2FVDXACvoXA==", + "dev": true, + "requires": { + "JSONStream": "^1.3.5", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "^2.0.0", + "archy": "~1.0.0", + "bin-links": "^1.1.6", + "bluebird": "^3.5.5", + "byte-size": "^5.0.1", + "cacache": "^12.0.3", + "call-limit": "^1.1.1", + "chownr": "^1.1.3", + "ci-info": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.1", + "cmd-shim": "^3.0.3", + "columnify": "~1.5.4", + "config-chain": "^1.1.12", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.3.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.8.5", + "iferr": "^1.0.2", + "imurmurhash": "*", + "infer-owner": "^1.0.4", + "inflight": "~1.0.6", + "inherits": "^2.0.4", + "ini": "^1.3.5", + "init-package-json": "^1.10.3", + "is-cidr": "^3.0.0", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^4.0.7", + "libnpm": "^3.0.1", + "libnpmaccess": "^3.0.2", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "libnpx": "^10.2.0", + "lock-verify": "^2.1.0", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^5.1.1", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "~0.5.1", + "move-concurrently": "^1.0.1", + "node-gyp": "^5.0.5", + "nopt": "~4.0.1", + "normalize-package-data": "^2.5.0", + "npm-audit-report": "^1.3.2", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "^3.0.2", + "npm-lifecycle": "^3.1.4", + "npm-package-arg": "^6.1.1", + "npm-packlist": "^1.4.7", + "npm-pick-manifest": "^3.0.2", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.2", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.1", + "osenv": "^0.1.5", + "pacote": "^9.5.11", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.8.2", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "^1.0.5", + "read-installed": "~4.0.3", + "read-package-json": "^2.1.1", + "read-package-tree": "^5.3.1", + "readable-stream": "^3.4.0", + "readdir-scoped-modules": "^1.1.0", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "^2.6.3", + "safe-buffer": "^5.1.2", + "semver": "^5.7.1", + "sha": "^3.0.0", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.1", + "stringify-package": "^1.0.1", + "tar": "^4.4.13", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "^1.1.1", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.3", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.7.0", + "write-file-atomic": "^2.4.3" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "bundled": true, + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "5.5.2", + "bundled": true, + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "asap": { + "version": "2.0.6", + "bundled": true, + "dev": true + }, + "asn1": { + "version": "0.2.4", + "bundled": true, + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "bundled": true, + "dev": true + }, + "aws4": { + "version": "1.8.0", + "bundled": true, + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.6", + "bundled": true, + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cmd-shim": "^3.0.0", + "gentle-fs": "^2.3.0", + "graceful-fs": "^4.1.15", + "npm-normalize-package-bin": "^1.0.0", + "write-file-atomic": "^2.3.0" + } + }, + "bluebird": { + "version": "3.5.5", + "bundled": true, + "dev": true + }, + "boxen": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "builtins": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "byline": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "byte-size": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "cacache": { + "version": "12.0.3", + "bundled": true, + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "call-limit": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "chalk": { + "version": "2.4.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "cidr-regex": { + "version": "2.0.10", + "bundled": true, + "dev": true, + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "cli-columns": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "cmd-shim": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "colors": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "dev": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "bundled": true, + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "bundled": true, + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true, + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "bundled": true, + "dev": true + } + } + }, + "crypto-random-string": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "cyclist": { + "version": "0.2.2", + "bundled": true, + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "detect-newline": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "duplexify": { + "version": "3.6.0", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "dev": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "env-paths": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "err-code": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "errno": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "bundled": true, + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "bundled": true, + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "figgy-pudding": { + "version": "3.5.1", + "bundled": true, + "dev": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true + }, + "form-data": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^2.6.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true, + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "genfun": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "gentle-fs": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.2", + "chownr": "^1.1.2", + "cmd-shim": "^3.0.3", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "infer-owner": "^1.0.4", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true, + "dev": true + } + } + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "bundled": true, + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.3", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "har-validator": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "2.8.5", + "bundled": true, + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true, + "dev": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true + }, + "init-package-json": { + "version": "1.10.3", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "ip": { + "version": "1.1.5", + "bundled": true, + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "is-ci": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "ci-info": "^1.0.0" + }, + "dependencies": { + "ci-info": { + "version": "1.6.0", + "bundled": true, + "dev": true + } + } + }, + "is-cidr": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "cidr-regex": "^2.0.10" + } + }, + "is-date-object": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "bundled": true, + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true, + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "libcipm": { + "version": "4.0.7", + "bundled": true, + "dev": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "ini": "^1.3.5", + "lock-verify": "^2.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^9.1.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" + } + }, + "libnpm": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.3", + "find-npm-prefix": "^1.0.2", + "libnpmaccess": "^3.0.2", + "libnpmconfig": "^1.2.1", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmpublish": "^1.1.2", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "lock-verify": "^2.0.2", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.0", + "npmlog": "^4.1.2", + "pacote": "^9.5.3", + "read-package-json": "^2.0.13", + "stringify-package": "^1.0.0" + } + }, + "libnpmaccess": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmconfig": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "bundled": true, + "dev": true + } + } + }, + "libnpmhook": { + "version": "5.0.3", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmorg": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmpublish": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + } + }, + "libnpmsearch": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmteam": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpx": { + "version": "10.2.0", + "bundled": true, + "dev": true, + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lock-verify": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "npm-package-arg": "^6.1.0", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true, + "dev": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "bundled": true, + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true, + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true, + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true, + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true, + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true, + "dev": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true, + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "5.0.2", + "bundled": true, + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "meant": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mime-db": { + "version": "1.35.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.19", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^2.9.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "mississippi": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "bundled": true, + "dev": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "5.0.5", + "bundled": true, + "dev": true, + "requires": { + "env-paths": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^4.4.12", + "which": "1" + }, + "dependencies": { + "nopt": { + "version": "3.0.6", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "npm-audit-report": { + "version": "1.3.2", + "bundled": true, + "dev": true, + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "npm-install-checks": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "3.1.4", + "bundled": true, + "dev": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true, + "dev": true + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "npm-package-arg": { + "version": "6.1.1", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.2 || 2", + "figgy-pudding": "^3.4.1", + "npm-registry-fetch": "^4.0.0" + } + }, + "npm-registry-fetch": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "bundled": true, + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "object-keys": { + "version": "1.0.12", + "bundled": true, + "dev": true + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.1", + "bundled": true, + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "package-json": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "9.5.11", + "bundled": true, + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-normalize-package-bin": "^1.0.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^3.0.0", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "pify": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true, + "dev": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "bundled": true, + "dev": true + }, + "protoduck": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "prr": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "psl": { + "version": "1.1.29", + "bundled": true, + "dev": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "bundled": true, + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "qs": { + "version": "6.5.2", + "bundled": true, + "dev": true + }, + "query-string": { + "version": "6.8.2", + "bundled": true, + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true + } + } + }, + "read": { + "version": "1.0.7", + "bundled": true, + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "bundled": true, + "dev": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "bundled": true, + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "bundled": true, + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "retry": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "sha": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "slide": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "smart-buffer": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, + "socks": { + "version": "2.3.3", + "bundled": true, + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "dev": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true, + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "bundled": true, + "dev": true + }, + "split-on-first": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "bundled": true, + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "bundled": true, + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-package": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "through": { + "version": "2.3.8", + "bundled": true, + "dev": true + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "timed-out": { + "version": "4.0.1", + "bundled": true, + "dev": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "bundled": true, + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "bundled": true, + "dev": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true + }, + "umask": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "bundled": true, + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "util-extend": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "util-promisify": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.3", + "bundled": true, + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.7.0", + "bundled": true, + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "2.4.3", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true, + "dev": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "11.0.0", + "bundled": true, + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "bundled": true, + "dev": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "on-build-webpack": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/on-build-webpack/-/on-build-webpack-0.1.0.tgz", + "integrity": "sha1-oofA4Xdm5hQZJuXyy7DYu1O3aBQ=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "overlayscrollbars": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.10.0.tgz", + "integrity": "sha512-SFGaq9wmR6jkwb5L7Wx0JIyGrQOT2/7ZD4F0srMN0KyYRbsdQ1nzdLF+JLp7QIQT2U1lsG1c16aMjxMtwzHA3Q==", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.0.tgz", + "integrity": "sha512-uhnEDzAbrcJ8R3g2fANnSuXZMBtkpSjxTTgn2LeSiQlfmq72enQJWdQllXW24MBLYnA1SBD2vfvx2o0Zw3Ielw==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "portfinder": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", + "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", + "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.16", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.0" + } + }, + "postcss-modules-scope": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz", + "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prompts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", + "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + } + } + }, + "react-is": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", + "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "dev": true, + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "requires": { + "define-properties": "^1.1.2" + } + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", + "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "dev": true, + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "resolve-url-loader": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", + "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "roboto-fontface": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz", + "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==" + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rusha": { + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.13.tgz", + "integrity": "sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "sass-loader": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.0.tgz", + "integrity": "sha512-+qeMu563PN7rPdit2+n5uuYVR0SSVwm0JsOUsaJXzgYcClWSlmX0iHDnmeOobPkf5kUglVot3QS6SyLyaQoJ4w==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", + "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "sisteransi": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", + "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + } + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "style-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz", + "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", + "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "tdweb": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/tdweb/-/tdweb-1.5.0.tgz", + "integrity": "sha512-WHLONE4LK4Sb9XZdFJCQLkGl1o0Ka28d9YNL0aSQFA6xdXYbLMLUcDExKIvQZ62xUTnpbZtYilJLItrmL3Bv/A==", + "requires": { + "@babel/runtime": "^7.4.3", + "broadcast-channel": "^2.1.12", + "localforage": "^1.7.3", + "uuid": "^3.3.2" + } + }, + "terser": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.9.tgz", + "integrity": "sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "ts-jest": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.3.0.tgz", + "integrity": "sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "ts-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.1.tgz", + "integrity": "sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", + "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unload": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", + "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", + "requires": { + "@babel/runtime": "^7.6.2", + "detect-node": "^2.0.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-loader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.2.0.tgz", + "integrity": "sha512-G8nk3np8ZAnwhHXas1JxJEwJyQdqFXAKJehfgZ/XrC48volFBRtO+FIKtF2u0Ma3bw+4vnDVjHPAQYlF9p2vsw==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.4.1" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + }, + "schema-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", + "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + }, + "v8-compile-cache": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "4.41.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz", + "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + } + }, + "webpack-cli": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", + "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" + }, + "dependencies": { + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + } + } + }, + "webpack-dev-server": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz", + "integrity": "sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw==", + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.4", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.25", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.4.0", + "spdy": "^4.0.1", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "12.0.5" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "worker-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-2.0.0.tgz", + "integrity": "sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw==", + "dev": true, + "requires": { + "loader-utils": "^1.0.0", + "schema-utils": "^0.4.0" + }, + "dependencies": { + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..26f94f72 --- /dev/null +++ b/package.json @@ -0,0 +1,61 @@ +{ + "name": "tweb", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "webpack-dev-server --open --config webpack.dev.js", + "serve": "webpack-dev-server --open --config webpack.prod.js", + "build": "webpack --config webpack.prod.js", + "test": "jest --config=jest.config.js", + "profile": "webpack --profile --json > stats.json --config webpack.prod.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "jsbn": "^1.1.0", + "lottie-web": "^5.6.3", + "materialize-css": "^1.0.0", + "roboto-fontface": "^0.10.0", + "rusha": "^0.8.13", + "tdweb": "^1.5.0", + "webpack-dev-server": "^3.9.0" + }, + "devDependencies": { + "@babel/core": "^7.8.3", + "@babel/preset-env": "^7.8.3", + "@babel/preset-typescript": "^7.8.3", + "@cryptography/sha1": "^0.1.0", + "@types/aes-js": "^3.1.0", + "@types/chrome": "0.0.91", + "@types/crypto-js": "^3.1.43", + "@types/jest": "^24.9.0", + "@types/materialize-css": "^1.0.6", + "@types/overlayscrollbars": "^1.9.0", + "aes-js": "^3.1.2", + "babel-jest": "^24.9.0", + "compression-webpack-plugin": "^3.1.0", + "css-loader": "^3.2.0", + "file-loader": "^4.3.0", + "html-webpack-plugin": "^3.2.0", + "install": "^0.13.0", + "jest": "^24.9.0", + "leemon": "^6.2.0", + "node-sass": "^4.13.0", + "npm": "^6.13.4", + "on-build-webpack": "^0.1.0", + "overlayscrollbars": "^1.10.0", + "pako": "^1.0.10", + "resolve-url-loader": "^3.1.1", + "sass-loader": "^8.0.0", + "style-loader": "^1.0.0", + "ts-jest": "^24.3.0", + "ts-loader": "^6.2.1", + "typescript": "^3.7.2", + "url-loader": "^2.2.0", + "webpack": "^4.41.2", + "webpack-cli": "^3.3.10", + "webpack-merge": "^4.2.2", + "worker-loader": "^2.0.0" + } +} diff --git a/public/.DS_Store b/public/.DS_Store new file mode 100644 index 00000000..35371a01 Binary files /dev/null and b/public/.DS_Store differ diff --git a/public/6b540956a47ff257d3ee.worker.js b/public/6b540956a47ff257d3ee.worker.js new file mode 100644 index 00000000..4b040f18 --- /dev/null +++ b/public/6b540956a47ff257d3ee.worker.js @@ -0,0 +1,7 @@ +!function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=3)}([function(t,e,r){"use strict";var n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(i,o){function s(t){try{f(n.next(t))}catch(t){o(t)}}function a(t){try{f(n.throw(t))}catch(t){o(t)}}function f(t){var e;t.done?i(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}f((n=n.apply(t,e||[])).next())}))},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const o=i(r(4)),s=r(5),a=r(2),f=i(r(6)),h=r(1);function u(t){var e=s.bigInt2str(t,16);return h.bytesFromHex(e)}function c(t){t instanceof ArrayBuffer&&(t=new Uint8Array(t));var e,r=t.length,n=[];for(e=0;e>>2]|=t[e]<<24-e%4*8;return new f.default.lib.WordArray.init(n,r)}function l(t){var e,r,n,i,o,a,f=Math.ceil(64/s.bpe)+1,c=0,l=new Array(f),d=new Array(f),p=new Array(f),g=new Array(f),v=new Array(f),y=new Array(f),m=new Array(f);for(e=0;e<3;e++){for(r=17+(15&h.nextRandomInt(128)),s.copyInt_(y,h.nextRandomInt(1e9)+1),s.copy_(m,y),i=1< + * https://github.com/zhukov/webogram/blob/master/LICENSE + */var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(2),o=n(r(7));var s=(new Date).getTime();function a(t){return new i.BigInteger(t.toString(16),16)}function f(t){return new i.BigInteger(t,10)}function h(t){return t<26?t+65:t<52?t+71:t<62?t-4:62===t?43:63===t?47:65}function u(t,e){for(var r=atob(t),n=r.length,i=Math.ceil(n/1024),o=new Array(i),s=0;s>>2]>>>24-i%4*8&255);return n}e.dT=function(){return"["+(((new Date).getTime()-s)/1e3).toFixed(3)+"]"},e.bigint=a,e.bigStringInt=f,e.bytesToHex=function(t){t=t||[];for(var e=[],r=0;r>>e&24),2!==e&&n-o!=1||(r+=String.fromCharCode(h(i>>>18&63),h(i>>>12&63),h(i>>>6&63),h(63&i)),i=0);return r.replace(/A(?=A$|$)/g,"=")},e.uint6ToBase64=h,e.base64ToBlob=u,e.dataUrlToBlob=function(t){var e=t.split(",");return u(e[1],e[0].split(":")[1].split(";")[0])},e.blobConstruct=c,e.blobSafeMimeType=l,e.bytesCmp=function(t,e){var r=t.length;if(r!=e.length)return!1;for(var n=0;ne);)r=r.slice(1);return r},e.bytesToArrayBuffer=d,e.convertToArrayBuffer=function(t){return t instanceof ArrayBuffer?t:void 0!==t.buffer&&t.buffer.byteLength==t.length*t.BYTES_PER_ELEMENT?t.buffer:d(t)},e.convertToUint8Array=p,e.convertToByteArray=function(t){if(Array.isArray(t))return t;for(var e=[],r=0,n=(t=p(t)).length;re+=t.byteLength||t.length);var r=new Uint8Array(e);let n=0;return t.forEach(t=>{r.set(t instanceof ArrayBuffer?new Uint8Array(t):t,n),n+=t.byteLength||t.length}),r},e.longToInts=v,e.bytesFromWords=y,e.longToBytes=function(t){return y({words:v(t),sigBytes:8}).reverse()},e.longFromInts=function(t,e){return a(t).shiftLeft(32).add(a(e)).toString(10)},e.intToUint=function(t){return"string"==typeof t&&(t=parseInt(t)),t<0&&(t+=4294967296),t},e.uintToInt=function(t){return t>2147483647&&(t-=4294967296),t},e.addPadding=function(t,e=16,r,n=!1,o=!1){let s=t.byteLength||t.length,a=e-s%e;if(a>0&&(a>15;--o>=0;){var f=32767&this[t],h=this[t++]>>15,u=a*f+h*s;i=((f=s*f+((32767&u)<<15)+r[n]+(1073741823&i))>>>30)+(u>>>15)+a*h+(i>>>30),r[n++]=1073741823&f}return i},e=30):i&&"Netscape"!=navigator.appName?(r.prototype.am=function(t,e,r,n,i,o){for(;--o>=0;){var s=e*this[t++]+r[n]+i;i=Math.floor(s/67108864),r[n++]=67108863&s}return i},e=26):(r.prototype.am=function(t,e,r,n,i,o){for(var s=16383&e,a=e>>14;--o>=0;){var f=16383&this[t],h=this[t++]>>14,u=a*f+h*s;i=((f=s*f+((16383&u)<<14)+r[n]+i)>>28)+(u>>14)+a*h,r[n++]=268435455&f}return i},e=28),r.prototype.DB=e,r.prototype.DM=(1<>>16)&&(t=e,r+=16),0!=(e=t>>8)&&(t=e,r+=8),0!=(e=t>>4)&&(t=e,r+=4),0!=(e=t>>2)&&(t=e,r+=2),0!=(e=t>>1)&&(t=e,r+=1),r}function d(t){this.m=t}function p(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,e+=16),0==(255&t)&&(t>>=8,e+=8),0==(15&t)&&(t>>=4,e+=4),0==(3&t)&&(t>>=2,e+=2),0==(1&t)&&++e,e}function w(t){for(var e=0;0!=t;)t&=t-1,++e;return e}function _(){}function k(t){return t}function S(t){this.r2=n(),this.q3=n(),r.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}d.prototype.convert=function(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},d.prototype.revert=function(t){return t},d.prototype.reduce=function(t){t.divRemTo(this.m,null,t)},d.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},d.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},p.prototype.convert=function(t){var e=n();return t.abs().dlShiftTo(this.m.t,e),e.divRemTo(this.m,null,e),t.s<0&&e.compareTo(r.ZERO)>0&&this.m.subTo(e,e),e},p.prototype.revert=function(t){var e=n();return t.copyTo(e),this.reduce(e),e},p.prototype.reduce=function(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(t[r=e+this.m.t]+=this.m.am(0,n,t,e,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},p.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},p.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},r.prototype.copyTo=function(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s},r.prototype.fromInt=function(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+this.DV:this.t=0},r.prototype.fromString=function(t,e){var n;if(16==e)n=4;else if(8==e)n=3;else if(256==e)n=8;else if(2==e)n=1;else if(32==e)n=5;else{if(4!=e)return void this.fromRadix(t,e);n=2}this.t=0,this.s=0;for(var i=t.length,o=!1,s=0;--i>=0;){var a=8==n?255&t[i]:u(t,i);a<0?"-"==t.charAt(i)&&(o=!0):(o=!1,0==s?this[this.t++]=a:s+n>this.DB?(this[this.t-1]|=(a&(1<>this.DB-s):this[this.t-1]|=a<=this.DB&&(s-=this.DB))}8==n&&0!=(128&t[0])&&(this.s=-1,s>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t},r.prototype.dlShiftTo=function(t,e){var r;for(r=this.t-1;r>=0;--r)e[r+t]=this[r];for(r=t-1;r>=0;--r)e[r]=0;e.t=this.t+t,e.s=this.s},r.prototype.drShiftTo=function(t,e){for(var r=t;r=0;--r)e[r+s+1]=this[r]>>i|a,a=(this[r]&o)<=0;--r)e[r]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()},r.prototype.rShiftTo=function(t,e){e.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)e.t=0;else{var n=t%this.DB,i=this.DB-n,o=(1<>n;for(var s=r+1;s>n;n>0&&(e[this.t-r-1]|=(this.s&o)<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=t.s}e.s=n<0?-1:0,n<-1?e[r++]=this.DV+n:n>0&&(e[r++]=n),e.t=r,e.clamp()},r.prototype.multiplyTo=function(t,e){var n=this.abs(),i=t.abs(),o=n.t;for(e.t=o+i.t;--o>=0;)e[o]=0;for(o=0;o=0;)t[r]=0;for(r=0;r=e.DV&&(t[r+e.t]-=e.DV,t[r+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(r,e[r],t,2*r,0,1)),t.s=0,t.clamp()},r.prototype.divRemTo=function(t,e,i){var o=t.abs();if(!(o.t<=0)){var s=this.abs();if(s.t0?(o.lShiftTo(u,a),s.lShiftTo(u,i)):(o.copyTo(a),s.copyTo(i));var c=a.t,d=a[c-1];if(0!=d){var p=d*(1<1?a[c-2]>>this.F2:0),g=this.FV/p,v=(1<=0&&(i[i.t++]=1,i.subTo(w,i)),r.ONE.dlShiftTo(c,w),w.subTo(a,a);a.t=0;){var _=i[--m]==d?this.DM:Math.floor(i[m]*g+(i[m-1]+y)*v);if((i[m]+=a.am(0,_,i,b,0,c))<_)for(a.dlShiftTo(b,w),i.subTo(w,i);i[m]<--_;)i.subTo(w,i)}null!=e&&(i.drShiftTo(c,e),f!=h&&r.ZERO.subTo(e,e)),i.t=c,i.clamp(),u>0&&i.rShiftTo(u,i),f<0&&r.ZERO.subTo(i,i)}}},r.prototype.invDigit=function(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return(e=(e=(e=(e=e*(2-(15&t)*e)&15)*(2-(255&t)*e)&255)*(2-((65535&t)*e&65535))&65535)*(2-t*e%this.DV)%this.DV)>0?this.DV-e:-e},r.prototype.isEven=function(){return 0==(this.t>0?1&this[0]:this.s)},r.prototype.exp=function(t,e){if(t>4294967295||t<1)return r.ONE;var i=n(),o=n(),s=e.convert(this),a=l(t)-1;for(s.copyTo(i);--a>=0;)if(e.sqrTo(i,o),(t&1<0)e.mulTo(o,s,i);else{var f=i;i=o,o=f}return e.revert(i)},r.prototype.toString=function(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var r,n=(1<0)for(a>a)>0&&(i=!0,o=h(r));s>=0;)a>(a+=this.DB-e)):(r=this[s]>>(a-=e)&n,a<=0&&(a+=this.DB,--s)),r>0&&(i=!0),i&&(o+=h(r));return i?o:"0"},r.prototype.negate=function(){var t=n();return r.ZERO.subTo(this,t),t},r.prototype.abs=function(){return this.s<0?this.negate():this},r.prototype.compareTo=function(t){var e=this.s-t.s;if(0!=e)return e;var r=this.t;if(0!=(e=r-t.t))return this.s<0?-e:e;for(;--r>=0;)if(0!=(e=this[r]-t[r]))return e;return 0},r.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+l(this[this.t-1]^this.s&this.DM)},r.prototype.mod=function(t){var e=n();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(r.ZERO)>0&&t.subTo(e,e),e},r.prototype.modPowInt=function(t,e){var r;return r=t<256||e.isEven()?new d(e):new p(e),this.exp(t,r)},r.ZERO=c(0),r.ONE=c(1),_.prototype.convert=k,_.prototype.revert=k,_.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r)},_.prototype.sqrTo=function(t,e){t.squareTo(e)},S.prototype.convert=function(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var e=n();return t.copyTo(e),this.reduce(e),e},S.prototype.revert=function(t){return t},S.prototype.reduce=function(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},S.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},S.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)};var B,T,x,A=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],D=(1<<26)/A[A.length-1];function E(){var t;t=(new Date).getTime(),T[x++]^=255&t,T[x++]^=t>>8&255,T[x++]^=t>>16&255,T[x++]^=t>>24&255,x>=F&&(x-=F)}if(r.prototype.chunkSize=function(t){return Math.floor(Math.LN2*this.DB/Math.log(t))},r.prototype.toRadix=function(t){if(null==t&&(t=10),0==this.signum()||t<2||t>36)return"0";var e=this.chunkSize(t),r=Math.pow(t,e),i=c(r),o=n(),s=n(),a="";for(this.divRemTo(i,o,s);o.signum()>0;)a=(r+s.intValue()).toString(t).substr(1)+a,o.divRemTo(i,o,s);return s.intValue().toString(t)+a},r.prototype.fromRadix=function(t,e){this.fromInt(0),null==e&&(e=10);for(var n=this.chunkSize(e),i=Math.pow(e,n),o=!1,s=0,a=0,f=0;f=n&&(this.dMultiply(i),this.dAddOffset(a,0),s=0,a=0))}s>0&&(this.dMultiply(Math.pow(e,s)),this.dAddOffset(a,0)),o&&r.ZERO.subTo(this,this)},r.prototype.fromNumber=function(t,e,n){if("number"==typeof e)if(t<2)this.fromInt(1);else for(this.fromNumber(t,n),this.testBit(t-1)||this.bitwiseTo(r.ONE.shiftLeft(t-1),v,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(e);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(r.ONE.shiftLeft(t-1),this);else{var i=new Array,o=7&t;i.length=1+(t>>3),e.nextBytes(i),o>0?i[0]&=(1<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n+=t.s}e.s=n<0?-1:0,n>0?e[r++]=n:n<-1&&(e[r++]=this.DV+n),e.t=r,e.clamp()},r.prototype.dMultiply=function(t){this[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()},r.prototype.dAddOffset=function(t,e){if(0!=t){for(;this.t<=e;)this[this.t++]=0;for(this[e]+=t;this[e]>=this.DV;)this[e]-=this.DV,++e>=this.t&&(this[this.t++]=0),++this[e]}},r.prototype.multiplyLowerTo=function(t,e,r){var n,i=Math.min(this.t+t.t,e);for(r.s=0,r.t=i;i>0;)r[--i]=0;for(n=r.t-this.t;i=0;)r[n]=0;for(n=Math.max(e-this.t,0);n0)if(0==e)r=this[0]%t;else for(var n=this.t-1;n>=0;--n)r=(e*r+this[n])%t;return r},r.prototype.millerRabin=function(t){var e=this.subtract(r.ONE),i=e.getLowestSetBit();if(i<=0)return!1;var o=e.shiftRight(i);(t=t+1>>1)>A.length&&(t=A.length);for(var s=n(),a=0;a>24},r.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},r.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},r.prototype.toByteArray=function(){var t=this.t,e=new Array;e[0]=this.s;var r,n=this.DB-t*this.DB%8,i=0;if(t-- >0)for(n>n)!=(this.s&this.DM)>>n&&(e[i++]=r|this.s<=0;)n<8?(r=(this[t]&(1<>(n+=this.DB-8)):(r=this[t]>>(n-=8)&255,n<=0&&(n+=this.DB,--t)),0!=(128&r)&&(r|=-256),0==i&&(128&this.s)!=(128&r)&&++i,(i>0||r!=this.s)&&(e[i++]=r);return e},r.prototype.equals=function(t){return 0==this.compareTo(t)},r.prototype.min=function(t){return this.compareTo(t)<0?this:t},r.prototype.max=function(t){return this.compareTo(t)>0?this:t},r.prototype.and=function(t){var e=n();return this.bitwiseTo(t,g,e),e},r.prototype.or=function(t){var e=n();return this.bitwiseTo(t,v,e),e},r.prototype.xor=function(t){var e=n();return this.bitwiseTo(t,y,e),e},r.prototype.andNot=function(t){var e=n();return this.bitwiseTo(t,m,e),e},r.prototype.not=function(){for(var t=n(),e=0;e=this.t?0!=this.s:0!=(this[e]&1<1){var g=n();for(i.sqrTo(a[1],g);f<=u;)a[f]=n(),i.mulTo(g,a[f-2],a[f]),f+=2}var v,y,m=t.t-1,b=!0,w=n();for(o=l(t[m])-1;m>=0;){for(o>=h?v=t[m]>>o-h&u:(v=(t[m]&(1<0&&(v|=t[m-1]>>this.DB+o-h)),f=r;0==(1&v);)v>>=1,--f;if((o-=f)<0&&(o+=this.DB,--m),b)a[v].copyTo(s),b=!1;else{for(;f>1;)i.sqrTo(s,w),i.sqrTo(w,s),f-=2;f>0?i.sqrTo(s,w):(y=s,s=w,w=y),i.mulTo(w,a[v],s)}for(;m>=0&&0==(t[m]&1<=0?(n.subTo(i,n),e&&o.subTo(a,o),s.subTo(f,s)):(i.subTo(n,i),e&&a.subTo(o,a),f.subTo(s,f))}return 0!=i.compareTo(r.ONE)?r.ZERO:f.compareTo(t)>=0?f.subtract(t):f.signum()<0?(f.addTo(t,f),f.signum()<0?f.add(t):f):f},r.prototype.pow=function(t){return this.exp(t,new _)},r.prototype.gcd=function(t){var e=this.s<0?this.negate():this.clone(),r=t.s<0?t.negate():t.clone();if(e.compareTo(r)<0){var n=e;e=r,r=n}var i=e.getLowestSetBit(),o=r.getLowestSetBit();if(o<0)return e;for(i0&&(e.rShiftTo(o,e),r.rShiftTo(o,r));e.signum()>0;)(i=e.getLowestSetBit())>0&&e.rShiftTo(i,e),(i=r.getLowestSetBit())>0&&r.rShiftTo(i,r),e.compareTo(r)>=0?(e.subTo(r,e),e.rShiftTo(1,e)):(r.subTo(e,r),r.rShiftTo(1,r));return o>0&&r.lShiftTo(o,r),r},r.prototype.isProbablePrime=function(t){var e,r=this.abs();if(1==r.t&&r[0]<=A[A.length-1]){for(e=0;e>>8,T[x++]=255&M;x=0,E()}function R(){if(null==B){for(E(),(B=new z).init(T),x=0;x{o.postMessage({taskID:e,result:t})});default:throw new Error("Unknown task: "+t.data.task)}o.postMessage({taskID:e,result:r})},o.postMessage("ready")},function(t,e,r){"use strict";function n(t){return String.fromCharCode(t>>24&255)+String.fromCharCode(t>>16&255)+String.fromCharCode(t>>8&255)+String.fromCharCode(255&t)}Object.defineProperty(e,"__esModule",{value:!0});for(var i=String.fromCharCode(128),o=64;o--;)i+=String.fromCharCode(0);e.default=function(t){for(var e=t.length,r=e/4294967296>>>0,o=e>>>0,s=[0,0],a=s.length-1;a>=0;a-=1)s[a]+=o,o=r+(s[a]/4294967296>>>0),s[a]>>>=0,r=o/4294967296>>>0;var f,h=t,u=63&s[s.length-1]+8;h+=i.substr(0,64-u);var c=8*s[0];for(a=0;a>>0)>>>0),c=f>>>0;var l=function(t){for(var e,r,n,i,o,s,a,f=0,h=0,u=new Uint32Array(80),c=1732584193,l=4023233417,d=2562383102,p=271733878,g=3285377520,v=t.length,y=0;v>=64;){for(e=c,r=l,n=d,i=p,o=g,f=0;f<16;f+=1)u[f]=(a=y,(s=t).charCodeAt(a)<<24^s.charCodeAt(a+1)<<16^s.charCodeAt(a+2)<<8^s.charCodeAt(a+3)),y+=4,h=(e<<5|e>>>27)+(i^r&(n^i))+o+1518500249+u[f],o=i,i=n,n=(r<<30|r>>>2)>>>0,r=e,e=h;for(;f<20;f+=1)h=(h=u[f-3]^u[f-8]^u[f-14]^u[f-16])<<1|h>>>31,u[f]=h,h=(e<<5|e>>>27)+(i^r&(n^i))+o+1518500249+h,o=i,i=n,n=(r<<30|r>>>2)>>>0,r=e,e=h;for(;f<32;f+=1)h=(h=u[f-3]^u[f-8]^u[f-14]^u[f-16])<<1|h>>>31,u[f]=h,h=(e<<5|e>>>27)+(r^n^i)+o+1859775393+h,o=i,i=n,n=(r<<30|r>>>2)>>>0,r=e,e=h;for(;f<40;f+=1)h=(h=u[f-6]^u[f-16]^u[f-28]^u[f-32])<<2|h>>>30,u[f]=h,h=(e<<5|e>>>27)+(r^n^i)+o+1859775393+h,o=i,i=n,n=(r<<30|r>>>2)>>>0,r=e,e=h;for(;f<60;f+=1)h=(h=u[f-6]^u[f-16]^u[f-28]^u[f-32])<<2|h>>>30,u[f]=h,h=(e<<5|e>>>27)+(r&n|i&(r^n))+o+2400959708+h,o=i,i=n,n=(r<<30|r>>>2)>>>0,r=e,e=h;for(;f<80;f+=1)h=(h=u[f-6]^u[f-16]^u[f-28]^u[f-32])<<2|h>>>30,u[f]=h,h=(e<<5|e>>>27)+(r^n^i)+o+3395469782+h,o=i,i=n,n=(r<<30|r>>>2)>>>0,r=e,e=h;c=c+e|0,l=l+r|0,d=d+n|0,p=p+i|0,g=g+o|0,v-=64}return{h1:c,h2:l,h3:d,h4:p,h5:g}}(h+=n(c));return n(l.h1)+n(l.h2)+n(l.h3)+n(l.h4)+n(l.h5)}},function(t,e,r){"use strict";r.r(e),r.d(e,"bpe",(function(){return n})),r.d(e,"one",(function(){return h})),r.d(e,"zero",(function(){return u})),r.d(e,"findPrimes",(function(){return V})),r.d(e,"millerRabinInt",(function(){return K})),r.d(e,"millerRabin",(function(){return W})),r.d(e,"bitSize",(function(){return G})),r.d(e,"expand",(function(){return X})),r.d(e,"randTruePrime",(function(){return Y})),r.d(e,"randProbPrime",(function(){return Q})),r.d(e,"randProbPrimeRounds",(function(){return $})),r.d(e,"mod",(function(){return J})),r.d(e,"addInt",(function(){return tt})),r.d(e,"mult",(function(){return et})),r.d(e,"powMod",(function(){return rt})),r.d(e,"sub",(function(){return nt})),r.d(e,"add",(function(){return it})),r.d(e,"inverseMod",(function(){return ot})),r.d(e,"multMod",(function(){return st})),r.d(e,"randTruePrime_",(function(){return at})),r.d(e,"randBigInt",(function(){return ft})),r.d(e,"randBigInt_",(function(){return ht})),r.d(e,"GCD",(function(){return ut})),r.d(e,"GCD_",(function(){return ct})),r.d(e,"inverseMod_",(function(){return lt})),r.d(e,"inverseModInt",(function(){return dt})),r.d(e,"eGCD_",(function(){return pt})),r.d(e,"negative",(function(){return gt})),r.d(e,"greaterShift",(function(){return vt})),r.d(e,"greater",(function(){return yt})),r.d(e,"divide_",(function(){return mt})),r.d(e,"carry_",(function(){return bt})),r.d(e,"modInt",(function(){return wt})),r.d(e,"int2bigInt",(function(){return _t})),r.d(e,"str2bigInt",(function(){return kt})),r.d(e,"equalsInt",(function(){return St})),r.d(e,"equals",(function(){return Bt})),r.d(e,"isZero",(function(){return Tt})),r.d(e,"bigInt2str",(function(){return xt})),r.d(e,"dup",(function(){return At})),r.d(e,"copy_",(function(){return Dt})),r.d(e,"copyInt_",(function(){return Et})),r.d(e,"addInt_",(function(){return Mt})),r.d(e,"rightShift_",(function(){return It})),r.d(e,"halve_",(function(){return Ct})),r.d(e,"leftShift_",(function(){return Rt})),r.d(e,"multInt_",(function(){return Ot})),r.d(e,"divInt_",(function(){return zt})),r.d(e,"linComb_",(function(){return Ft})),r.d(e,"linCombShift_",(function(){return Nt})),r.d(e,"addShift_",(function(){return Pt})),r.d(e,"subShift_",(function(){return Zt})),r.d(e,"sub_",(function(){return Ut})),r.d(e,"add_",(function(){return Lt})),r.d(e,"mult_",(function(){return Ht})),r.d(e,"mod_",(function(){return qt})),r.d(e,"multMod_",(function(){return jt})),r.d(e,"squareMod_",(function(){return Vt})),r.d(e,"trim",(function(){return Kt})),r.d(e,"powMod_",(function(){return Wt})),r.d(e,"mont_",(function(){return Gt}));var n=0,i=0,o=i+1,s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\'\"+-";for(n=0;1<1<>=1))-1)+1;var a,f,h=_t(1,1,1),u=_t(0,1,1),c=new Array(0),l=c,d=c,p=c,g=c,v=c,y=c,m=c,b=c,w=c,_=c,k=c,S=c,B=c,T=c,x=c,A=c,D=c,E=c,M=c,I=c,C=c,R=c,O=c,z=c,F=c,N=c,P=c,Z=c,U=c,L=c,H=c,q=c,j=c;function V(t){var e,r,n,i;for(r=new Array(t),e=0;e0;e--);for(r=0,i=t[e];i;i>>=1,r++);return r+=n*e}function X(t,e){var r=_t(0,(t.length>e?t.length:e)*n,0);return Dt(r,t),r}function Y(t){var e=_t(0,t,0);return at(e,t),Kt(e,1)}function Q(t){return $(t,t>=600?2:t>=550?4:t>=500?5:t>=400?6:t>=350?7:t>=300?9:t>=250?12:t>=200?15:t>=150?18:t>=100?27:40)}function $(t,e){var r,n,i;for(3e4,r=_t(0,t,0),0===M.length&&(M=V(3e4)),j.length!==r.length&&(j=At(r));;){for(ht(r,t,0),r[0]|=1,i=0,n=0;ne.length?t.length+1:e.length+1);return Ut(r,e),Kt(r,1)}function it(t,e){var r=X(t,t.length>e.length?t.length+1:e.length+1);return Lt(r,e),Kt(r,1)}function ot(t,e){var r=X(t,e.length);return lt(r,e)?Kt(r,1):null}function st(t,e,r){var n=X(t,r.length);return jt(n,e,r),Kt(n,1)}function at(t,e){var r,i,o,s,a,f,h,u,c,l;if(0==M.length&&(M=V(3e4)),0==I.length)for(I=new Array(512),o=0;o<512;o++)I[o]=Math.pow(2,o/511-1);if(R.length!=t.length&&(R=At(t),O=At(t),N=At(t),Z=At(t),H=At(t),At(t),At(t),L=At(t),U=At(t),C=At(t),z=At(t),F=At(t),P=At(t),q=At(t)),e<=20){for(r=(1<<(e+2>>1))-1,Et(t,0),i=1;i;)for(i=0,t[0]=1|1<40)for(s=1;e-e*s<=20;)s=I[Math.floor(512*Math.random())];else s=.5;for(c=Math.floor(s*e)+1,at(F,c),Et(R,0),R[Math.floor((e-2)/n)]|=1<<(e-2)%n,mt(R,F,C,z),h=G(C);;){for(;ht(O,h,0),!yt(C,O););for(Mt(O,1),Lt(O,C),Dt(U,F),Ht(U,O),Ot(U,2),Mt(U,1),Dt(Z,O),Ot(Z,2),f=0,o=0;o0;o--);for(u=0,l=U[o];l;l>>=1,u++);for(u+=n*o;ht(P,u,0),!yt(U,P););if(Mt(U,3),Mt(P,2),Dt(L,P),Dt(N,U),Mt(N,-1),Wt(L,N,U),Mt(L,-1),Tt(L)&&(Dt(L,P),Wt(L,Z,U),Mt(L,-1),Dt(q,U),Dt(H,L),ct(H,U),St(H,1)))return void Dt(t,q)}}}}function ft(t,e){var r;return ht(r=_t(0,0,Math.floor((t-1)/n)+2),t,e),r}function ht(t,e,r){var i,o;for(i=0;i=0;r--);for(n=t[r],i=e[r],o=1,s=0,a=0,f=1;i+a&&i+f&&(h=Math.floor((n+o)/(i+a)))==Math.floor((n+s)/(i+f));)c=o-h*a,o=a,a=c,c=s-h*f,s=f,f=c,c=n-h*i,n=i,i=c;s?(Dt(b,t),Ft(t,e,o,s),Ft(e,b,f,a)):(qt(t,e),Dt(b,t),Dt(t,e),Dt(e,b))}if(0!==e[0])for(c=wt(t,e[0]),Et(t,e[0]),e[0]=c;e[0];)t[0]%=e[0],c=t[0],t[0]=e[0],e[0]=c}function lt(t,e){var r=1+2*Math.max(t.length,e.length);if(!(1&t[0]||1&e[0]))return Et(t,0),0;for(T.length!=r&&(T=new Array(r),B=new Array(r),x=new Array(r),A=new Array(r),D=new Array(r),E=new Array(r)),Dt(T,t),Dt(B,e),Et(x,1),Et(A,0),Et(D,0),Et(E,1);;){for(;!(1&T[0]);)Ct(T),1&x[0]||1&A[0]?(Lt(x,e),Ct(x),Ut(A,t),Ct(A)):(Ct(x),Ct(A));for(;!(1&B[0]);)Ct(B),1&D[0]||1&E[0]?(Lt(D,e),Ct(D),Ut(E,t),Ct(E)):(Ct(D),Ct(E));if(yt(B,T)?(Ut(B,T),Ut(D,x),Ut(E,A)):(Ut(T,B),Ut(x,D),Ut(A,E)),St(T,0)){for(;gt(D);)Lt(D,e);return Dt(t,D),St(B,1)?1:(Et(t,0),0)}}}function dt(t,e){for(var r=1,n=0;;){if(1===t)return r;if(0===t)return 0;if(n-=r*Math.floor(e/t),1===(e%=t))return n;if(0===e)return 0;r-=n*Math.floor(t/e),t%=e}}function pt(t,e,r,n,i){var o=0,s=Math.max(t.length,e.length);for(T.length!=s&&(T=new Array(s),x=new Array(s),A=new Array(s),D=new Array(s),E=new Array(s));!(1&t[0]||1&e[0]);)Ct(t),Ct(e),o++;for(Dt(T,t),Dt(r,e),Et(x,1),Et(A,0),Et(D,0),Et(E,1);;){for(;!(1&T[0]);)Ct(T),1&x[0]||1&A[0]?(Lt(x,e),Ct(x),Ut(A,t),Ct(A)):(Ct(x),Ct(A));for(;!(1&r[0]);)Ct(r),1&D[0]||1&E[0]?(Lt(D,e),Ct(D),Ut(E,t),Ct(E)):(Ct(D),Ct(E));if(yt(r,T)?(Ut(r,T),Ut(D,x),Ut(E,A)):(Ut(T,r),Ut(x,D),Ut(A,E)),St(T,0)){for(;gt(D);)Lt(D,e),Ut(E,t);return Ot(E,-1),Dt(n,D),Dt(i,E),void Rt(r,o)}}}function gt(t){return t[t.length-1]>>n-1&1}function vt(t,e,r){var n,i=t.length,o=e.length;for(a=i+r=0;n++)if(t[n]>0)return 1;for(n=i-1+r;n0)return 0;for(n=a-1;n>=r;n--){if(t[n-r]>e[n])return 1;if(t[n-r]=0;r--){if(t[r]>e[r])return 1;if(t[r]>=1;for(Rt(e,d=n-d),Rt(s,d),a=s.length;0===s[a-1]&&a>f;a--);for(Et(r,0);!vt(e,s,a-f);)Zt(s,e,a-f),r[a-f]++;for(h=a-1;h>=f;h--){for(s[h]==e[f-1]?r[h-f]=i:r[h-f]=Math.floor((s[h]*o+s[h-1])/e[f-1]);l=(c=(f>1?e[f-2]:0)*r[h-f])>>n,c&=i,l=(u=l+r[h-f]*e[f-1])>>n,u&=i,l==s[h]?u==s[h-1]?c>(h>1?s[h-2]:0):u>s[h-1]:l>s[h];)r[h-f]--;Nt(s,e,-r[h-f],h-f),gt(s)&&(Pt(s,e,h-f),r[h-f]--)}It(e,d),It(s,d)}function bt(t){var e,r,s,a;for(r=t.length,s=0,e=0;e>n))*o),t[e]=s&i,s=(s>>n)-a}function wt(t,e){var r,n=0;for(r=t.length-1;r>=0;r--)n=(n*o+t[r])%e;return n}function _t(t,e,r){var i;i=r>(i=Math.ceil(e/n)+1)?r:i;var o=new Array(i);return Et(o,t),o}function kt(t,e,r){var n,i,o,a,f,h=t.length;if(-1===e){for(o=new Array(0);;){for(a=new Array(o.length+1),i=0;i=36&&(n-=26),!(n>=e||n<0));i++)Ot(o,e),Mt(o,n);for(h=o.length;h>0&&!o[h-1];h--);for(h=r>h+1?r:h+1,a=new Array(h),f=he.length){for(;r0;r--)i+=t[r]+",";i+=t[0]}else for(;!Tt(y);)n=zt(y,e),i=s.substring(n,n+1)+i;return 0===i.length&&(i="0"),i}function At(t){return Dt(f=Array(t.length),t),f}function Dt(t,e){var r,n=t.length>=n}function Mt(t,e){var r,s,a,f;for(t[0]+=e,s=t.length,a=0,r=0;r>n))*o),t[r]=a&i,!(a=(a>>n)-f))return}function It(t,e){var r,o=Math.floor(e/n);if(o){for(r=0;r>e);t[r]>>=e}function Ct(t){var e;for(e=0;e>1);t[e]=t[e]>>1|t[e]&o>>1}function Rt(t,e){var r,o=Math.floor(e/n);if(o){for(r=t.length;r>=o;r--)t[r]=t[r-o];for(;r>=0;r--)t[r]=0;e%=n}if(e){for(r=t.length-1;r>0;r--)t[r]=i&(t[r]<>n-e);t[r]=i&t[r]<>n))*o),t[r]=a&i,a=(a>>n)-f}function zt(t,e){var r,n,i=0;for(r=t.length-1;r>=0;r--)n=i*o+t[r],t[r]=Math.floor(n/e),i=n%e;return i}function Ft(t,e,r,o){var s,a,f,h;for(f=t.length>=n;for(s=f;s>=n}function Nt(t,e,r,o){var s,a,f,h;for(f=t.length>=n;for(s=f;a&&s>=n}function Pt(t,e,r){var o,s,a,f;for(a=t.length>=n;for(o=a;s&&o>=n}function Zt(t,e,r){var o,s,a,f;for(a=t.length>=n;for(o=a;s&&o>=n}function Ut(t,e){var r,o,s;for(s=t.length>=n;for(r=s;o&&r>=n}function Lt(t,e){var r,o,s;for(s=t.length>=n;for(r=s;o&&r>=n}function Ht(t,e){var r;for(l.length!=2*t.length&&(l=new Array(2*t.length)),Et(l,0),r=0;r0&&!t[a-1];a--);for(f=a>e.length?2*a:2*e.length,d.length!=f&&(d=new Array(f)),Et(d,0),r=0;r>=n,o=r+1;o>=n;d[r+a]=s}qt(d,e),Dt(t,d)}function Kt(t,e){var r,n;for(r=t.length;r>0&&!t[r-1];r--);return Dt(n=new Array(r+e),t),n}function Wt(t,e,r){var i,s,a,f;if(m.length!=r.length&&(m=At(r)),0!=(1&r[0])){for(Et(m,0),a=r.length;a>0&&!r[a-1];a--);for(f=o-dt(wt(r,o),o),m[a]=1,jt(t,m,r),p.length!=t.length?p=At(t):Dt(p,t),i=e.length-1;i>0&!e[i];i--);if(0!=e[i]){for(s=1<>=1);for(;;){if(!(s>>=1)){if(--i<0)return void Gt(t,h,r,f);s=1<0&&0==r[l-1];l--);for(;d>0&&0==e[d-1];d--);for(c=w.length-1,s=0;s>n,u=t[s],a=1;a>=n,f+=w[++a]+h*r[a]+u*e[a],w[a-1]=f&i,f>>=n,f+=w[++a]+h*r[a]+u*e[a],w[a-1]=f&i,f>>=n,f+=w[++a]+h*r[a]+u*e[a],w[a-1]=f&i,f>>=n,f+=w[++a]+h*r[a]+u*e[a],w[a-1]=f&i,f>>=n,a++;for(;a>=n,a++;for(;a>=n,f+=w[++a]+h*r[a],w[a-1]=f&i,f>>=n,f+=w[++a]+h*r[a],w[a-1]=f&i,f>>=n,f+=w[++a]+h*r[a],w[a-1]=f&i,f>>=n,f+=w[++a]+h*r[a],w[a-1]=f&i,f>>=n,a++;for(;a>=n,a++;for(;a>=n,a++;w[a-1]=f&i}yt(r,w)||Ut(w,r),Dt(t,w)}},function(t,e){console.log("CryptoJS included!");var r,n,i,o,s,a=a||function(t,e){var r={},n=r.lib={},i=n.Base=function(){function t(){}return{extend:function(e){t.prototype=this;var r=new t;return e&&r.mixIn(e),r.hasOwnProperty("init")||(r.init=function(){r.$super.init.apply(this,arguments)}),r.init.prototype=r,r.$super=this,r},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),o=n.WordArray=i.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||a).stringify(this)},concat:function(t){var e=this.words,r=t.words,n=this.sigBytes,i=t.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[n+o>>>2]|=s<<24-(n+o)%4*8}else if(r.length>65535)for(o=0;o>>2]=r[o>>>2];else for(o=0;o>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=i.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var r=[],n=0;n>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new o.init(r,e/2)}},f=s.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new o.init(r,e)}},h=s.Utf8={stringify:function(t){try{return decodeURIComponent(escape(f.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return f.parse(unescape(encodeURIComponent(t)))}},u=n.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=h.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r=this._data,n=r.words,i=r.sigBytes,s=this.blockSize,a=i/(4*s),f=(a=e?t.ceil(a):t.max((0|a)-this._minBufferSize,0))*s,h=t.min(4*f,i);if(f){for(var u=0;u>>2];t.sigBytes-=e}},v=(p.NoPadding={pad:function(){},unpad:function(){}},r.BlockCipher=u.extend({cfg:u.cfg.extend({mode:d,padding:g}),reset:function(){u.reset.call(this);var t=this.cfg,e=t.iv,r=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else{n=r.createDecryptor;this._minBufferSize=1}this._mode=n.call(r,this,e&&e.words)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else{e=this._process(!0);t.unpad(e)}return e},blockSize:4}),r.CipherParams=n.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=(e.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;if(r)var n=i.create([1398893684,1701076831]).concat(r).concat(e);else n=e;return n.toString(f)},parse:function(t){var e=f.parse(t),r=e.words;if(1398893684==r[0]&&1701076831==r[1]){var n=i.create(r.slice(2,4));r.splice(0,4),e.sigBytes-=16}return v.create({ciphertext:e,salt:n})}},m=r.SerializableCipher=n.extend({cfg:n.extend({format:y}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var i=t.createEncryptor(r,n),o=i.finalize(e),s=i.cfg;return v.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,r,n){return n=this.cfg.extend(n),e=this._parse(e,n.format),t.createDecryptor(r,n).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),b=(e.kdf={}).OpenSSL={execute:function(t,e,r,n){n||(n=i.random(8));var o=h.create({keySize:e+r}).compute(t,n),s=i.create(o.words.slice(e),4*r);return o.sigBytes=4*e,v.create({key:o,iv:s,salt:n})}},w=r.PasswordBasedCipher=m.extend({cfg:m.cfg.extend({kdf:b}),encrypt:function(t,e,r,n){var i=(n=this.cfg.extend(n)).kdf.execute(r,t.keySize,t.ivSize);n.iv=i.iv;var o=m.encrypt.call(this,t,e,i.key,n);return o.mixIn(i),o},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var i=n.kdf.execute(r,t.keySize,t.ivSize,e.salt);return n.iv=i.iv,m.decrypt.call(this,t,e,i.key,n)}})}(),function(){var t=a,e=t.lib.BlockCipher,r=t.algo,n=[],i=[],o=[],s=[],f=[],h=[],u=[],c=[],l=[],d=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var r=0,a=0;for(e=0;e<256;e++){var p=a^a<<1^a<<2^a<<3^a<<4;p=p>>>8^255&p^99,n[r]=p,i[p]=r;var g=t[r],v=t[g],y=t[v],m=257*t[p]^16843008*p;o[r]=m<<24|m>>>8,s[r]=m<<16|m>>>16,f[r]=m<<8|m>>>24,h[r]=m;m=16843009*y^65537*v^257*g^16843008*r;u[p]=m<<24|m>>>8,c[p]=m<<16|m>>>16,l[p]=m<<8|m>>>24,d[p]=m,r?(r=g^t[t[t[y^g]]],a^=t[t[a]]):r=a=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes/4,i=4*((this._nRounds=r+6)+1),o=this._keySchedule=[],s=0;s6&&s%r==4&&(a=n[a>>>24]<<24|n[a>>>16&255]<<16|n[a>>>8&255]<<8|n[255&a]):(a=n[(a=a<<8|a>>>24)>>>24]<<24|n[a>>>16&255]<<16|n[a>>>8&255]<<8|n[255&a],a^=p[s/r|0]<<24),o[s]=o[s-r]^a}for(var f=this._invKeySchedule=[],h=0;h>>24]]^c[n[a>>>16&255]]^l[n[a>>>8&255]]^d[n[255&a]]}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,o,s,f,h,n)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,u,c,l,d,i);r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,n,i,o,s,a){for(var f=this._nRounds,h=t[e]^r[0],u=t[e+1]^r[1],c=t[e+2]^r[2],l=t[e+3]^r[3],d=4,p=1;p>>24]^i[u>>>16&255]^o[c>>>8&255]^s[255&l]^r[d++],v=n[u>>>24]^i[c>>>16&255]^o[l>>>8&255]^s[255&h]^r[d++],y=n[c>>>24]^i[l>>>16&255]^o[h>>>8&255]^s[255&u]^r[d++],m=n[l>>>24]^i[h>>>16&255]^o[u>>>8&255]^s[255&c]^r[d++];h=g,u=v,c=y,l=m}g=(a[h>>>24]<<24|a[u>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^r[d++],v=(a[u>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^r[d++],y=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&u])^r[d++],m=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[u>>>8&255]<<8|a[255&c])^r[d++];t[e]=g,t[e+1]=v,t[e+2]=y,t[e+3]=m},keySize:8});t.AES=e._createHelper(g)}(),function(t){var e=a,r=e.lib,n=r.WordArray,i=r.Hasher,o=e.algo,s=[],f=[];!function(){function e(e){for(var r=t.sqrt(e),n=2;n<=r;n++)if(!(e%n))return!1;return!0}function r(t){return 4294967296*(t-(0|t))|0}for(var n=2,i=0;i<64;)e(n)&&(i<8&&(s[i]=r(t.pow(n,.5))),f[i]=r(t.pow(n,1/3)),i++),n++}();var h=[],u=o.SHA256=i.extend({_doReset:function(){this._hash=new n.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],u=r[5],c=r[6],l=r[7],d=0;d<64;d++){if(d<16)h[d]=0|t[e+d];else{var p=h[d-15],g=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,v=h[d-2],y=(v<<15|v>>>17)^(v<<13|v>>>19)^v>>>10;h[d]=g+h[d-7]+y+h[d-16]}var m=n&i^n&o^i&o,b=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),w=l+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&u^~a&c)+f[d]+h[d];l=c,c=u,u=a,a=s+w|0,s=o,o=i,i=n,n=w+(b+m)|0}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+a|0,r[5]=r[5]+u|0,r[6]=r[6]+c|0,r[7]=r[7]+l|0},_doFinalize:function(){var e=this._data,r=e.words,n=8*this._nDataBytes,i=8*e.sigBytes;return r[i>>>5]|=128<<24-i%32,r[14+(i+64>>>9<<4)]=t.floor(n/4294967296),r[15+(i+64>>>9<<4)]=n,e.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA256=i._createHelper(u),e.HmacSHA256=i._createHmacHelper(u)}(Math)},function(t,e,r){var n;t.exports=function t(e,r,i){function o(a,f){if(!r[a]){if(!e[a]){if(!f&&"function"==typeof n&&n)return n(a,!0);if(s)return s(a,!0);var h=new Error("Cannot find module '"+a+"'");throw h.code="MODULE_NOT_FOUND",h}var u=r[a]={exports:{}};e[a][0].call(u.exports,(function(t){return o(e[a][1][t]||t)}),u,u.exports,t,e,r,i)}return r[a].exports}for(var s="function"==typeof n&&n,a=0;a>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e},r.buf2binstring=function(t){return f(t,t.length)},r.binstring2buf=function(t){for(var e=new n.Buf8(t.length),r=0,i=e.length;r>10&1023,h[n++]=56320|1023&i)}return f(h,n)},r.utf8border=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+s[t[r]]>e?r:e}},{"./common":1}],3:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){for(var i=65535&t|0,o=t>>>16&65535|0,s=0;0!==r;){for(r-=s=2e3>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e,r,i){var o=n,s=i+r;t^=-1;for(var a=i;a>>8^o[255&(t^e[a])];return-1^t}},{}],6:[function(t,e,r){"use strict";e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],7:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n,i,o,s,a,f,h,u,c,l,d,p,g,v,y,m,b,w,_,k,S,B,T,x;r=t.state,n=t.next_in,T=t.input,i=n+(t.avail_in-5),o=t.next_out,x=t.output,s=o-(e-t.avail_out),a=o+(t.avail_out-257),f=r.dmax,h=r.wsize,u=r.whave,c=r.wnext,l=r.window,d=r.hold,p=r.bits,g=r.lencode,v=r.distcode,y=(1<>>=w=b>>>24,p-=w,0==(w=b>>>16&255))x[o++]=65535&b;else{if(!(16&w)){if(0==(64&w)){b=g[(65535&b)+(d&(1<>>=w,p-=w),p<15&&(d+=T[n++]<>>=w=b>>>24,p-=w,!(16&(w=b>>>16&255))){if(0==(64&w)){b=v[(65535&b)+(d&(1<>>=w,p-=w,(w=o-s)>3,d&=(1<<(p-=_<<3))-1,t.next_in=n,t.next_out=o,t.avail_in=n>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function v(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function y(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=l,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new n.Buf32(d),e.distcode=e.distdyn=new n.Buf32(p),e.sane=1,e.back=-1,u):c}function m(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,y(t)):c}function b(t,e){var r,n;return t&&t.state?(n=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15=s.wsize?(n.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(o=s.wsize-s.wnext)&&(o=i),n.arraySet(s.window,e,r-i,o,s.wnext),(i-=o)?(n.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=o,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=o(r.check,U,2,0),_=w=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&w)<<8)+(w>>8))%31){t.msg="incorrect header check",r.mode=30;break}if(8!=(15&w)){t.msg="unknown compression method",r.mode=30;break}if(_-=4,z=8+(15&(w>>>=4)),0===r.wbits)r.wbits=z;else if(z>r.wbits){t.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(U[0]=255&w,U[1]=w>>>8&255,r.check=o(r.check,U,2,0)),_=w=0,r.mode=3;case 3:for(;_<32;){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}r.head&&(r.head.time=w),512&r.flags&&(U[0]=255&w,U[1]=w>>>8&255,U[2]=w>>>16&255,U[3]=w>>>24&255,r.check=o(r.check,U,4,0)),_=w=0,r.mode=4;case 4:for(;_<16;){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}r.head&&(r.head.xflags=255&w,r.head.os=w>>8),512&r.flags&&(U[0]=255&w,U[1]=w>>>8&255,r.check=o(r.check,U,2,0)),_=w=0,r.mode=5;case 5:if(1024&r.flags){for(;_<16;){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}r.length=w,r.head&&(r.head.extra_len=w),512&r.flags&&(U[0]=255&w,U[1]=w>>>8&255,r.check=o(r.check,U,2,0)),_=w=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(m<(x=r.length)&&(x=m),x&&(r.head&&(z=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,d,v,x,z)),512&r.flags&&(r.check=o(r.check,d,x,v)),m-=x,v+=x,r.length-=x),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===m)break t;for(x=0;z=d[v+x++],r.head&&z&&r.length<65536&&(r.head.name+=String.fromCharCode(z)),z&&x>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;_<32;){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}t.adler=r.check=g(w),_=w=0,r.mode=11;case 11:if(0===r.havedict)return t.next_out=y,t.avail_out=b,t.next_in=v,t.avail_in=m,r.hold=w,r.bits=_,2;t.adler=r.check=1,r.mode=12;case 12:if(5===e||6===e)break t;case 13:if(r.last){w>>>=7&_,_-=7&_,r.mode=27;break}for(;_<3;){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}switch(r.last=1&w,_-=1,3&(w>>>=1)){case 0:r.mode=14;break;case 1:if(B(r),r.mode=20,6!==e)break;w>>>=2,_-=2;break t;case 2:r.mode=17;break;case 3:t.msg="invalid block type",r.mode=30}w>>>=2,_-=2;break;case 14:for(w>>>=7&_,_-=7&_;_<32;){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}if((65535&w)!=(w>>>16^65535)){t.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&w,_=w=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(x=r.length){if(m>>=5,_-=5,r.ndist=1+(31&w),w>>>=5,_-=5,r.ncode=4+(15&w),w>>>=4,_-=4,286>>=3,_-=3}for(;r.have<19;)r.lens[L[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,N={bits:r.lenbits},F=a(0,r.lens,0,19,r.lencode,0,r.work,N),r.lenbits=N.bits,F){t.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,I=65535&Z,!((E=Z>>>24)<=_);){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}if(I<16)w>>>=E,_-=E,r.lens[r.have++]=I;else{if(16===I){for(P=E+2;_>>=E,_-=E,0===r.have){t.msg="invalid bit length repeat",r.mode=30;break}z=r.lens[r.have-1],x=3+(3&w),w>>>=2,_-=2}else if(17===I){for(P=E+3;_>>=E)),w>>>=3,_-=3}else{for(P=E+7;_>>=E)),w>>>=7,_-=7}if(r.have+x>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=30;break}for(;x--;)r.lens[r.have++]=z}}if(30===r.mode)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,N={bits:r.lenbits},F=a(f,r.lens,0,r.nlen,r.lencode,0,r.work,N),r.lenbits=N.bits,F){t.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,N={bits:r.distbits},F=a(h,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,N),r.distbits=N.bits,F){t.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=m&&258<=b){t.next_out=y,t.avail_out=b,t.next_in=v,t.avail_in=m,r.hold=w,r.bits=_,s(t,S),y=t.next_out,p=t.output,b=t.avail_out,v=t.next_in,d=t.input,m=t.avail_in,w=r.hold,_=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;M=(Z=r.lencode[w&(1<>>16&255,I=65535&Z,!((E=Z>>>24)<=_);){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}if(M&&0==(240&M)){for(C=E,R=M,O=I;M=(Z=r.lencode[O+((w&(1<>C)])>>>16&255,I=65535&Z,!(C+(E=Z>>>24)<=_);){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}w>>>=C,_-=C,r.back+=C}if(w>>>=E,_-=E,r.back+=E,r.length=I,0===M){r.mode=26;break}if(32&M){r.back=-1,r.mode=12;break}if(64&M){t.msg="invalid literal/length code",r.mode=30;break}r.extra=15&M,r.mode=22;case 22:if(r.extra){for(P=r.extra;_>>=r.extra,_-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;M=(Z=r.distcode[w&(1<>>16&255,I=65535&Z,!((E=Z>>>24)<=_);){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}if(0==(240&M)){for(C=E,R=M,O=I;M=(Z=r.distcode[O+((w&(1<>C)])>>>16&255,I=65535&Z,!(C+(E=Z>>>24)<=_);){if(0===m)break t;m--,w+=d[v++]<<_,_+=8}w>>>=C,_-=C,r.back+=C}if(w>>>=E,_-=E,r.back+=E,64&M){t.msg="invalid distance code",r.mode=30;break}r.offset=I,r.extra=15&M,r.mode=24;case 24:if(r.extra){for(P=r.extra;_>>=r.extra,_-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===b)break t;if(x=S-b,r.offset>x){if((x=r.offset-x)>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=30;break}x>r.wnext?(x-=r.wnext,A=r.wsize-x):A=r.wnext-x,x>r.length&&(x=r.length),D=r.window}else D=p,A=y-r.offset,x=r.length;for(bm?(w=N[P+c[B]],_=R[O+c[B]]):(w=96,_=0),d=1<>E)+(p-=d)]=b<<24|w<<16|_|0,0!==p;);for(d=1<>=1;if(0!==d?(C&=d-1,C+=d):C=0,B++,0==--z[S]){if(S===x)break;S=e[r+c[B]]}if(A + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/fonts/tgico.svg.gz b/public/assets/fonts/tgico.svg.gz new file mode 100644 index 00000000..ee635248 Binary files /dev/null and b/public/assets/fonts/tgico.svg.gz differ diff --git a/public/assets/fonts/tgico.ttf b/public/assets/fonts/tgico.ttf new file mode 100644 index 00000000..9bdcff3a Binary files /dev/null and b/public/assets/fonts/tgico.ttf differ diff --git a/public/assets/fonts/tgico.woff b/public/assets/fonts/tgico.woff new file mode 100644 index 00000000..ee8dd3ce Binary files /dev/null and b/public/assets/fonts/tgico.woff differ diff --git a/public/assets/img/.DS_Store b/public/assets/img/.DS_Store new file mode 100644 index 00000000..290a46e6 Binary files /dev/null and b/public/assets/img/.DS_Store differ diff --git a/public/assets/img/TwoFactorSetupMonkeyClose.tgs b/public/assets/img/TwoFactorSetupMonkeyClose.tgs new file mode 100644 index 00000000..f16eca5a Binary files /dev/null and b/public/assets/img/TwoFactorSetupMonkeyClose.tgs differ diff --git a/public/assets/img/TwoFactorSetupMonkeyCloseAndPeek.tgs b/public/assets/img/TwoFactorSetupMonkeyCloseAndPeek.tgs new file mode 100644 index 00000000..c6f6cd07 Binary files /dev/null and b/public/assets/img/TwoFactorSetupMonkeyCloseAndPeek.tgs differ diff --git a/public/assets/img/TwoFactorSetupMonkeyCloseAndPeekToIdle.tgs b/public/assets/img/TwoFactorSetupMonkeyCloseAndPeekToIdle.tgs new file mode 100644 index 00000000..68514fb0 Binary files /dev/null and b/public/assets/img/TwoFactorSetupMonkeyCloseAndPeekToIdle.tgs differ diff --git a/public/assets/img/TwoFactorSetupMonkeyIdle.tgs b/public/assets/img/TwoFactorSetupMonkeyIdle.tgs new file mode 100644 index 00000000..773ee967 Binary files /dev/null and b/public/assets/img/TwoFactorSetupMonkeyIdle.tgs differ diff --git a/public/assets/img/TwoFactorSetupMonkeyPeek.tgs b/public/assets/img/TwoFactorSetupMonkeyPeek.tgs new file mode 100644 index 00000000..07cca60e Binary files /dev/null and b/public/assets/img/TwoFactorSetupMonkeyPeek.tgs differ diff --git a/public/assets/img/TwoFactorSetupMonkeyTracking.tgs b/public/assets/img/TwoFactorSetupMonkeyTracking.tgs new file mode 100644 index 00000000..ad52d48a Binary files /dev/null and b/public/assets/img/TwoFactorSetupMonkeyTracking.tgs differ diff --git a/public/assets/img/blank.gif b/public/assets/img/blank.gif new file mode 100644 index 00000000..75b945d2 Binary files /dev/null and b/public/assets/img/blank.gif differ diff --git a/public/assets/img/camomile.jpg b/public/assets/img/camomile.jpg new file mode 100644 index 00000000..7fa05b3e Binary files /dev/null and b/public/assets/img/camomile.jpg differ diff --git a/public/assets/img/doc-in.svg b/public/assets/img/doc-in.svg new file mode 100644 index 00000000..695a5996 --- /dev/null +++ b/public/assets/img/doc-in.svg @@ -0,0 +1,10 @@ + + + + doc-in + Created with Sketch. + + + + + \ No newline at end of file diff --git a/public/assets/img/msg-tail-left.svg b/public/assets/img/msg-tail-left.svg new file mode 100644 index 00000000..e3a9d82e --- /dev/null +++ b/public/assets/img/msg-tail-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/msg-tail-left.svg.gz b/public/assets/img/msg-tail-left.svg.gz new file mode 100644 index 00000000..7fc02fde Binary files /dev/null and b/public/assets/img/msg-tail-left.svg.gz differ diff --git a/public/assets/img/msg-tail-right.svg b/public/assets/img/msg-tail-right.svg new file mode 100644 index 00000000..b20de5f6 --- /dev/null +++ b/public/assets/img/msg-tail-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/msg-tail-right.svg.gz b/public/assets/img/msg-tail-right.svg.gz new file mode 100644 index 00000000..995b1245 Binary files /dev/null and b/public/assets/img/msg-tail-right.svg.gz differ diff --git a/public/assets/img/pepe.jpg b/public/assets/img/pepe.jpg new file mode 100644 index 00000000..2d66c2b0 Binary files /dev/null and b/public/assets/img/pepe.jpg differ diff --git a/public/assets/img/photo.jpg b/public/assets/img/photo.jpg new file mode 100644 index 00000000..f0129411 Binary files /dev/null and b/public/assets/img/photo.jpg differ diff --git a/public/assets/img/sheet_apple_32_1.png b/public/assets/img/sheet_apple_32_1.png new file mode 100644 index 00000000..61173293 Binary files /dev/null and b/public/assets/img/sheet_apple_32_1.png differ diff --git a/public/assets/img/sheet_apple_32_2.png b/public/assets/img/sheet_apple_32_2.png new file mode 100644 index 00000000..4a3f4e3c Binary files /dev/null and b/public/assets/img/sheet_apple_32_2.png differ diff --git a/public/assets/img/sheet_apple_32_3.png b/public/assets/img/sheet_apple_32_3.png new file mode 100644 index 00000000..dd5ef4d3 Binary files /dev/null and b/public/assets/img/sheet_apple_32_3.png differ diff --git a/public/assets/img/sheet_apple_32_4.png b/public/assets/img/sheet_apple_32_4.png new file mode 100644 index 00000000..38676a58 Binary files /dev/null and b/public/assets/img/sheet_apple_32_4.png differ diff --git a/public/assets/img/sheet_apple_32_5.png b/public/assets/img/sheet_apple_32_5.png new file mode 100644 index 00000000..08a817db Binary files /dev/null and b/public/assets/img/sheet_apple_32_5.png differ diff --git a/public/assets/img/sheet_apple_32_6.png b/public/assets/img/sheet_apple_32_6.png new file mode 100644 index 00000000..06dbb910 Binary files /dev/null and b/public/assets/img/sheet_apple_32_6.png differ diff --git a/public/assets/img/sheet_apple_32_7.png b/public/assets/img/sheet_apple_32_7.png new file mode 100644 index 00000000..b8c26d82 Binary files /dev/null and b/public/assets/img/sheet_apple_32_7.png differ diff --git a/public/assets/img/sheet_apple_32_8.png b/public/assets/img/sheet_apple_32_8.png new file mode 100644 index 00000000..b2723c4b Binary files /dev/null and b/public/assets/img/sheet_apple_32_8.png differ diff --git a/public/assets/img/sheet_apple_32_9.png b/public/assets/img/sheet_apple_32_9.png new file mode 100644 index 00000000..e8d36141 Binary files /dev/null and b/public/assets/img/sheet_apple_32_9.png differ diff --git a/public/assets/img/sheet_apple_64.png b/public/assets/img/sheet_apple_64.png new file mode 100644 index 00000000..de27909d Binary files /dev/null and b/public/assets/img/sheet_apple_64.png differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 00000000..71f2d525 --- /dev/null +++ b/public/index.html @@ -0,0 +1,423 @@ + + + + + + Telegram Web + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/index.html.gz b/public/index.html.gz new file mode 100644 index 00000000..a8e02455 Binary files /dev/null and b/public/index.html.gz differ diff --git a/public/index_template.html b/public/index_template.html new file mode 100644 index 00000000..9afc507b --- /dev/null +++ b/public/index_template.html @@ -0,0 +1,422 @@ + + + + + + Telegram Web + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/main.chunk.js b/public/main.chunk.js new file mode 100644 index 00000000..59981073 --- /dev/null +++ b/public/main.chunk.js @@ -0,0 +1,27 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[function(e,t,a){"use strict";a.r(t),a.d(t,"dT",(function(){return s})),a.d(t,"checkClick",(function(){return o})),a.d(t,"isInDOM",(function(){return n})),a.d(t,"checkDragEvent",(function(){return i})),a.d(t,"cancelEvent",(function(){return d})),a.d(t,"onCtrlEnter",(function(){return c})),a.d(t,"setFieldSelection",(function(){return l})),a.d(t,"getFieldSelection",(function(){return p})),a.d(t,"getRichValue",(function(){return h})),a.d(t,"getRichValueWithCaret",(function(){return m})),a.d(t,"getRichElementValue",(function(){return g})),a.d(t,"setRichFocus",(function(){return y})),a.d(t,"getSelectedText",(function(){return u})),a.d(t,"$rootScope",(function(){return _})),a.d(t,"_",(function(){return f})),a.d(t,"isObject",(function(){return b})),a.d(t,"tsNow",(function(){return x})),a.d(t,"safeReplaceObject",(function(){return D})),a.d(t,"numberWithCommas",(function(){return v})),a.d(t,"findUpTag",(function(){return w})),a.d(t,"isElementInViewport",(function(){return P})),a.d(t,"whichChild",(function(){return k})),a.d(t,"copy",(function(){return S})),a.d(t,"formatBytes",(function(){return C})),a.d(t,"deepEqual",(function(){return F})),a.d(t,"listMergeSorted",(function(){return M})),a.d(t,"listUniqSorted",(function(){return E})),a.d(t,"templateUrl",(function(){return I})),a.d(t,"encodeEntities",(function(){return A})),a.d(t,"calcImageInBox",(function(){return B})),a.d(t,"countryCodeEmoji",(function(){return U})),a.d(t,"unifiedCountryCodeEmoji",(function(){return O})),a.d(t,"SearchIndexManager",(function(){return V})); +/*! + * Webogram v0.7.0 - messaging web application for MTProto + * https://github.com/zhukov/webogram + * Copyright (C) 2014 Igor Zhukov + * https://github.com/zhukov/webogram/blob/master/LICENSE + */ +var r=(new Date).getTime();function s(){return"["+(((new Date).getTime()-r)/1e3).toFixed(3)+"]"}function o(e,t){return!((1!=e.which||!e.ctrlKey&&!e.metaKey)&&2!=e.which)||(t||e.preventDefault(),!1)}function n(e,t){return!!e&&(e==(t=t||document.body)||n(e.parentNode,t))}function i(e){if(!e||e.target&&("IMG"==e.target.tagName||"A"==e.target.tagName))return!1;if(!e.dataTransfer||!e.dataTransfer.types)return!0;for(var t=0;t{console.log(s(),"Broadcasting "+e+" event, with args:",t);let a=new CustomEvent(e,{detail:t});document.dispatchEvent(a)},$on:(e,t)=>{document.addEventListener(e,t)},selectedPeerID:0,idle:{isIDLE:!1}},f=e=>e;function b(e){return"object"==typeof e&&null!==e}function x(e){var t=+new Date+(window.tsOffset||0);return e?Math.floor(t/1e3):t}function D(e,t){for(var a in e)t.hasOwnProperty(a)||"$"==a.charAt(0)||delete e[a];for(var a in t)t.hasOwnProperty(a)&&(e[a]=t[a])}function v(e){var t=e.toString().split(".");return t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),t.join(".")}function w(e,t){if(e.tagName==t)return e;for(;e.parentNode;)if((e=e.parentNode).tagName===t)return e;return null}function P(e){var t=e.getBoundingClientRect(),a=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,s=function(e,t){return document.elementFromPoint(e,t)};if(t.right<0||t.bottom<0||t.left>a||t.top>r||!t.width||!t.height)return!1;return void 0!==[s(t.left+1,t.top+1),s(t.right-1,t.top+1),s(t.right-1,t.bottom-1),s(t.left+1,t.bottom-1)].find(t=>e.contains(t)||e.parentElement==t)}function k(e){let t=0;for(;null!=(e=e.previousElementSibling);)++t;return t}function S(e){if(null===e||"object"!=typeof e)return e;if(e instanceof Date)return new Date(e.getTime());if(Array.isArray(e)){var t=[];return e.forEach((function(e){t.push(S(e))})),t}let a=new e.constructor;for(var r in e)e.hasOwnProperty(r)&&(a[r]=S(e[r]));return a}function C(e,t=2){if(0===e)return"0 Bytes";const a=t<0?0:t,r=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,r)).toFixed(a))+" "+["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"][r]}function F(e,t){const a=Object.keys,r=typeof e;return e&&t&&"object"===r&&r===typeof t?a(e).length===a(t).length&&a(e).every(a=>F(e[a],t[a])):e===t}function M(e,t){t=t||[];for(var a=S(e=e||[]),r=e.length?e[e.length-1]:4294967295,s=0;s/g,">")}function B(e,t,a,r,s){var o=a,n=r;return e/t>a/r?n=parseInt(t*a/e):(o=parseInt(e*r/t))>a&&(n=parseInt(n*a/o),o=a),s&&o>=e&&n>=t&&(o=e,n=t),{w:o,h:n}}const T=/^[a-z]{2}$/i,L=127397;function U(e){if(!T.test(e)){const t=typeof e;throw new TypeError(`cc argument must be an ISO 3166-1 alpha-2 string, but got '${"string"===t?e:t}' instead.`)}const t=[...e.toUpperCase()].map(e=>e.charCodeAt(0)+L);return String.fromCodePoint(...t)}function O(e){if(!T.test(e)){const t=typeof e;throw new TypeError(`cc argument must be an ISO 3166-1 alpha-2 string, but got '${"string"===t?e:t}' instead.`)}return[...e.toUpperCase()].map(e=>e.charCodeAt(0)+L).map(e=>e.toString(16).toUpperCase()).join("-")}var R=/[`~!@#$%^&*()\-_=+\[\]\\|{}'";:\/?.>,<\s]+/g,j=/^\s+|\s$/g;function N(e){var t="%"==e.charAt(0);return e=(e=(e=e.replace(R," ").replace(j,"")).replace(/[^A-Za-z0-9]/g,(function(e){var t=Config.LatinizeMap[e];return void 0!==t?t:e}))).toLowerCase(),t&&(e="%"+e),e}let V={createIndex:function(){return{shortIndexes:{},fullTexts:{}}},indexObject:function(e,t,a){if(void 0!==a.fullTexts[e])return!1;if(!(t=N(t)).length)return!1;var r=a.shortIndexes;a.fullTexts[e]=t,t.split(" ").forEach((function(t){var a,s,o=Math.min(t.length,3);for(s=1;s<=o;s++)a=t.substr(0,s),void 0===r[a]?r[a]=[e]:r[a].push(e)}))},cleanSearchText:N,cleanUsername:function(e){return e&&e.toLowerCase()||""},search:function(e,t){var a,r,s,o,n,i=t.shortIndexes,d=t.fullTexts,c=(e=N(e)).split(" "),l=!1;for(r=0;ra.length)&&(l=a)}for(a={},s=0;s{var a=i.tsNow(!0);if(e&&t&&t.canRedirect==e&&t.ts+86400>a)return!1;n.default.set({tgme_sync:{canRedirect:e,ts:a}}),["//telegram.me/_websync_?authed="+(e?"1":"0"),"//t.me/_websync_?authed="+(e?"1":"0")].forEach(e=>{let t=document.createElement("script");t.onload=t.onerror=function(){t.remove()},t.src=e,document.body.appendChild(t)})})}}t.TelegramMeWebService=_,t.telegramMeWebService=new _;const f=a(23);var b;!function(e){e.secureRandom=new f.SecureRandom,e.passwordManager=d.default,e.dcConfigurator=c.default,e.rsaKeysManager=l.default,e.timeManager=p.default,e.authorizer=m.default,e.networkerFactory=g.default,e.apiManager=y.default,e.apiFileManager=u.default,e.serverTimeManager=h.default}(b=t.MTProto||(t.MTProto={})),window.MTProto=b},function(e,t,a){"use strict"; +/*! + * Webogram v0.7.0 - messaging web application for MTProto + * https://github.com/zhukov/webogram + * Copyright (C) 2014 Igor Zhukov + * https://github.com/zhukov/webogram/blob/master/LICENSE + */var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=a(23),o=r(a(59));var n=(new Date).getTime();function i(e){return new s.BigInteger(e.toString(16),16)}function d(e){return new s.BigInteger(e,10)}function c(e){return e<26?e+65:e<52?e+71:e<62?e-4:62===e?43:63===e?47:65}function l(e,t){for(var a=atob(e),r=a.length,s=Math.ceil(r/1024),o=new Array(s),n=0;n>>2]>>>24-s%4*8&255);return r}t.dT=function(){return"["+(((new Date).getTime()-n)/1e3).toFixed(3)+"]"},t.bigint=i,t.bigStringInt=d,t.bytesToHex=function(e){e=e||[];for(var t=[],a=0;a>>t&24),2!==t&&r-o!=1||(a+=String.fromCharCode(c(s>>>18&63),c(s>>>12&63),c(s>>>6&63),c(63&s)),s=0);return a.replace(/A(?=A$|$)/g,"=")},t.uint6ToBase64=c,t.base64ToBlob=l,t.dataUrlToBlob=function(e){var t=e.split(",");return l(t[1],t[0].split(":")[1].split(";")[0])},t.blobConstruct=p,t.blobSafeMimeType=h,t.bytesCmp=function(e,t){var a=e.length;if(a!=t.length)return!1;for(var r=0;rt);)a=a.slice(1);return a},t.bytesToArrayBuffer=m,t.convertToArrayBuffer=function(e){return e instanceof ArrayBuffer?e:void 0!==e.buffer&&e.buffer.byteLength==e.length*e.BYTES_PER_ELEMENT?e.buffer:m(e)},t.convertToUint8Array=g,t.convertToByteArray=function(e){if(Array.isArray(e))return e;for(var t=[],a=0,r=(e=g(e)).length;at+=e.byteLength||e.length);var a=new Uint8Array(t);let r=0;return e.forEach(e=>{a.set(e instanceof ArrayBuffer?new Uint8Array(e):e,r),r+=e.byteLength||e.length}),a},t.longToInts=u,t.bytesFromWords=_,t.longToBytes=function(e){return _({words:u(e),sigBytes:8}).reverse()},t.longFromInts=function(e,t){return i(e).shiftLeft(32).add(i(t)).toString(10)},t.intToUint=function(e){return"string"==typeof e&&(e=parseInt(e)),e<0&&(e+=4294967296),e},t.uintToInt=function(e){return e>2147483647&&(e-=4294967296),e},t.addPadding=function(e,t=16,a,r=!1,o=!1){let n=e.byteLength||e.length,i=t-n%t;if(i>0&&(ie,shortcuts:[],emojis:[]},n=Config.Emoji,i=(n.img_size,-1!=navigator.userAgent.search(/OS X|iPhone|iPad|iOS|Android/i)),d=new RegExp("(^| )(@)([a-zA-Z\\d_]{5,32})|(((?:https?|ftp)://|mailto:)?(?:\\S{1,64}(?::\\S{0,64})?@)?(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}|[a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc0-9][a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc·0-9-]{0,64}(?:\\.[a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc0-9][a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc·0-9-]{0,64}){0,10}(?:\\.(xn--[0-9a-z]{2,16}|[a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc]{2,24})))(?::\\d{2,5})?(?:/(?:\\S{0,255}[^\\s.;,(\\[\\]{}<>\"'])?)?)|(\\n)|(\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC6F\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDF])\\u200D[\\u2640\\u2642])\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD]))|(^|[\\s\\(\\]])(#[0-9_a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc]{2,64})|(^|\\s)\\/([a-zA-Z\\d_]{1,32})(?:@([a-zA-Z\\d_]{5,32}))?(\\b|$)","i"),c=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,l=/[`_*@]/,p=/(^|\s|\n)(````?)([\s\S]+?)(````?)([\s\n\.,:?!;]|$)|(^|\s)(`|\*\*|__)([^\n]+?)\7([\s\.,:?!;]|$)|@(\d+)\s*\((.+?)\)/m,h={Telegram:"tg://search_hashtag?hashtag={1}",Twitter:"https://twitter.com/hashtag/{1}",Instagram:"https://instagram.com/explore/tags/{1}/","Google Plus":"https://plus.google.com/explore/{1}"},m={Telegram:"#/im?p=%40{1}",Twitter:"https://twitter.com/{1}",Instagram:"https://instagram.com/{1}/",GitHub:"https://github.com/{1}"},g={"`":"messageEntityCode","**":"messageEntityBold",__:"messageEntityItalic"};function y(e){let t=n.emoji[e];if(!t)return null;let a=0,r="";n.splitted?(a=t[n.keyX]%6,r=1+(t[n.keyX]/6|0)):a=t[n.keyX];let s=a*n.multiplyX,o=100/n.side*t[n.keyY];return n.splitted&&(s=9==r?100*a/5:100*a/6),{row:o,column:s,sheetNo:r}}function u(e,t){var a;t=t||{};for(var r,s,o=e,n=[],i="",l=0;a=o.match(d);){if(s=l+a.index,a[3])n.push({_:"messageEntityMention",offset:s+a[1].length,length:a[2].length+a[3].length});else if(a[4])if(c.test(a[4]))n.push({_:"messageEntityEmail",offset:s,length:a[4].length});else{var p=!1,h=a[5],m=a[6];if(m){if(h||"xn--"!==m.substr(0,4)&&-1===Config.TLD.indexOf(m.toLowerCase())||(h="http://"),h){var g=b(a[4]);g.length!==a[4].length&&(a[4].substring(g.length),a[4]=g),p=(a[5]?"":h)+a[4]}}else p=(a[5]?"":"http://")+a[4];p&&n.push({_:"messageEntityUrl",offset:s,length:a[4].length})}else a[7]?n.push({_:"messageEntityLinebreak",offset:s,length:1}):a[8]?(i&&(s-=a[8].length),(r=y(i+=a[8]))&&(n.push({_:"messageEntityEmoji",offset:s,length:i.length,coords:r}),i="")):a[10]?n.push({_:"messageEntityHashtag",offset:s+a[9].length,length:a[10].length}):a[12]&&n.push({_:"messageEntityBotCommand",offset:s+a[11].length,length:1+a[12].length+(a[13]?1+a[13].length:0)});o=o.substr(a.index+a[0].length),l+=a.index+a[0].length}return n}function _(e,t,a){return void 0===t?Object(s.encodeEntities)(e):(a.hasNested=!0,f(e,{entities:t,nested:!0}))}function f(e,t={}){if(!e||!e.length)return"";var a=t.entities,r=t.contextSite||"Telegram",o="Telegram"!=r;void 0===a&&(a=u(e,t));for(var d,c,l,p,g=a.length,y=[],f=0,b=(t.emojiIconSize,0);bf)y.push(Object(s.encodeEntities)(e.substr(f,d.offset-f)));else if(d.offset',Object(s.encodeEntities)(c),"");break;case"messageEntityMentionName":if(t.noLinks){l=!0;break}y.push('',Object(s.encodeEntities)(c),"");break;case"messageEntityHashtag":var w;if(!(w=!t.noLinks&&h[r])){l=!0;break}var P=c.substr(1);y.push("',Object(s.encodeEntities)(c),"");break;case"messageEntityEmail":if(t.noLinks){l=!0;break}y.push('',Object(s.encodeEntities)(c),"");break;case"messageEntityUrl":case"messageEntityTextUrl":var k;"messageEntityTextUrl"==d._?(p=x(p=d.url,!0),k=_(c,d.nested,t)):(p=x(c,!1),k=Object(s.encodeEntities)(c.replace(/(%[A-Z\d]{2})+/g,(function(e){try{return decodeURIComponent(e)}catch(t){return e}})))),t.noLinks?y.push(k):y.push('',k,"");break;case"messageEntityLinebreak":y.push(t.noLinebreaks?" ":"
");break;case"messageEntityEmoji":k=``,y.push(i?`${Object(s.encodeEntities)(c)}`:k),!0;break;case"messageEntityBotCommand":if(t.noLinks||t.noCommands||o){l=!0;break}var S,C,F=c.substr(1);-1!=(C=F.indexOf("@"))?(S=F.substr(C+1),F=F.substr(0,C)):S=t.fromBot,y.push('',Object(s.encodeEntities)(c),"");break;case"messageEntityBold":y.push("",_(c,d.nested,t),"");break;case"messageEntityItalic":y.push("",_(c,d.nested,t),"");break;case"messageEntityCode":y.push("",Object(s.encodeEntities)(c),"");break;case"messageEntityPre":y.push("
",Object(s.encodeEntities)(c),"
");break;default:l=!0}f=d.offset+(l?0:d.length)}return y.push(Object(s.encodeEntities)(e.substr(f))),e=y.join("")}function b(e){for(var t=e.length,a=e.split("(").length-1,r=e.split(")").length-1;r>a&&")"===e.charAt(t-1);)e=e.substr(0,t-1),r--,t--;return a>r&&(e=e.replace(/\)+$/,"")),e}function x(e,t){var a,r;if(e.match(/^https?:\/\//i)||(e="http://"+e),2==t)e="tg://unsafe_url?url="+encodeURIComponent(e);else if(a=e.match(/^https?:\/\/t(?:elegram)?\.me\/(.+)/)){var s=a[1].split("/");switch(s[0]){case"joinchat":e="tg://join?invite="+s[1];break;case"addstickers":e="tg://addstickers?set="+s[1];break;default:if(s[1]&&s[1].match(/^\d+$/))e="tg://resolve?domain="+s[0]+"&post="+s[1];else if(1==s.length){var o=s[0].split("?"),n=o[0],i=o[1];if("iv"==n){var d=(i||"").match(/url=([^&=]+)/);if(d){e=d[1];try{e=decodeURIComponent(e)}catch(e){}return x(e,t)}}e="tg://resolve?domain="+n+(i?"&"+i:"")}}}else(r=e.match(/^https?:\/\/telesco\.pe\/([^/?]+)\/(\d+)/))?e="tg://resolve?domain="+r[1]+"&post="+r[2]:t&&(e="tg://unsafe_url?url="+encodeURIComponent(e));return e}let D={wrapRichText:f,wrapPlainText:function(e,t={}){if(i)return e;if(!e||!e.length)return"";var a,s,c=e=e.replace(/\ufe0f/g,"",e);for(e=[];a=c.match(d);)e.push(c.substr(0,a.index)),a[8]&&(r=o.emojiMap[a[8]])&&(s=n[r][1][0])?e.push(":"+s+":"):e.push(a[0]),c=c.substr(a.index+a[0].length);return e.push(c),e.join("")},wrapDraftText:function(e,t){if(!e||!e.length)return"";var a=(t=t||{}).entities;void 0===a&&(a=u(e,t));var r,s,o,n=0,i=a.length,d=[],c=0;for(n=0;nc)d.push(e.substr(c,r.offset-c));else if(r.offset=l&&dl&&c<=p){a&&d>=l&&c<=p&&(void 0===i.nested&&(i.nested=[]),n.offset-=l,i.nested.push(Object(s.copy)(n))),h=!0;break}if(l>=c)break}h||m.push(n)}return m.sort((function(e,t){return e.offset-t.offset})),m},getEmojiSpritesheetCoords:y};window.RichTextProcessor=D},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=a(1),n=a(0),i=s(a(10)),d=s(a(7)),c=s(a(14)),l=s(a(30)),p=s(a(39));let h=function(e){var t=this.firstElementChild,a=this.parentElement.getBoundingClientRect(),r=e.clientX-a.left,s=e.clientY-a.top;t.style.top=s+"px",t.style.left=r+"px",this.classList.add("active")};t.ripple=function(e){let t=document.createElement("div");t.classList.add("c-ripple");let a=document.createElement("span");a.classList.add("c-ripple__circle"),t.append(a),e.append(t),t.addEventListener("click",h);let r=()=>{t.classList.remove("active")};for(let e of["animationend","webkitAnimationEnd","oanimationend","MSAnimationEnd"])t.addEventListener(e,r)},t.putPreloader=function(e){e.innerHTML+='\n \n \n '};class m{constructor(e,t=!0){this.cancelable=t,this.preloader=null,this.circle=null,this.progress=0,this.preloader=document.createElement("div"),this.preloader.classList.add("preloader-container"),this.preloader.innerHTML='\n \n \n ',t?this.preloader.innerHTML+='\n \n \n \n ':this.preloader.classList.add("preloader-swing"),this.circle=this.preloader.firstElementChild.firstElementChild,e&&this.attach(e)}attach(e){this.cancelable&&this.setProgress(0),e.append(this.preloader)}detach(){this.preloader.parentElement&&this.preloader.parentElement.removeChild(this.preloader)}setProgress(e){if(this.progress=e,!n.isInDOM(this.circle))return;if(0==e)return void(this.circle.style.strokeDasharray="");let t=this.circle.getTotalLength();console.log("setProgress",e/100*t),this.circle.style.strokeDasharray=""+e/100*t}}t.ProgressivePreloader=m;t.LazyLoadQueue=class{constructor(){this.lazyLoadMedia=[]}check(e){if(void 0===e)this.lazyLoadMedia=this.lazyLoadMedia.filter(({div:e,load:t})=>!n.isElementInViewport(e)||(t(),!1));else{let{div:t,load:a}=this.lazyLoadMedia[e];n.isElementInViewport(t)&&(a(),this.lazyLoadMedia.splice(e,1))}}push(e){let t=this.lazyLoadMedia.push(e)-1;this.check(t)}},t.wrapVideo=function(e,t,a,r,s=!0,o){if(!t.firstElementChild||"IMG"!=t.firstElementChild.tagName){i.default.setAttachmentSize(e,t)}o||(o=new m(t,!0));let n=()=>{let n=p.default.downloadDoc(e);return n.notify=e=>{console.log("doc download",n,e),o.setProgress(e.done)},n.then(n=>{if(!a())return;console.log("loaded doc:",e,n,t.firstElementChild);let i=document.createElement("video");i.loop=!0,i.autoplay=!0,s||(i.controls=!0),i.setAttribute("message-id",""+r);let d=document.createElement("source");d.src=URL.createObjectURL(n),d.type=e.mime_type,i.append(d),t.append(i),t.firstElementChild&&t.firstElementChild.remove(),o.detach()})};return"gif"==e.type?n():i.default.preloadPhoto(e).then(e=>{if(!a())return;t.firstElementChild&&t.firstElementChild.remove();let o=new Image;return o.src=URL.createObjectURL(e),o.setAttribute("message-id",""+r),t.append(o),s?void 0:n()})},t.wrapDocument=function(e,t=!1){let a=document.createElement("div");a.classList.add("document"),document.createElement("div").classList.add("tgico-document");let r=e.attributes.find(e=>"documentAttributeFilename"==e._),s=r?r.file_name.split("."):"",o="";o=s.length>1&&Array.isArray(s)?s.pop().toLowerCase():"file";let i=r?r.file_name:"Unknown.file",d=n.formatBytes(e.size);if(t){let t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],a=new Date(1e3*e.date);d+=" · "+t[a.getMonth()]+" "+a.getDate()+", "+a.getFullYear()+" at "+a.getHours()+":"+("0"+a.getMinutes()).slice(-2)}return a.innerHTML=`\n
${o}
\n
${i}
\n
${d}
\n `,a},t.scrollable=function(e,t=!1,a=!0){let r=document.createElement("div");return r.classList.add("scrollable"),t&&r.classList.add("scrollable-x"),a&&r.classList.add("scrollable-y"),r.addEventListener("mouseover",()=>{r.classList.add("active"),r.addEventListener("mouseout",()=>{r.classList.remove("active")},{once:!0})}),Array.from(e.children).forEach(e=>r.append(e)),e.append(r),r},t.wrapSticker=function(e,t,a,s,n,p){let h="application/x-tgsticker"==e.mime_type?2:"image/webp"==e.mime_type?1:0;if(h||console.error("wrong doc for wrapSticker!",e,t),console.log("wrap sticker",e),e.thumbs){let a=e.thumbs[0];a.bytes&&(o.MTProto.apiFileManager.saveSmallFile(a.location,a.bytes),i.default.setAttachmentPreview(a.bytes,t,!0))}let m=()=>o.MTProto.apiFileManager.downloadSmallFile({_:"inputDocumentFileLocation",access_hash:e.access_hash,file_reference:e.file_reference,thumb_size:"",id:e.id,stickerType:h},{mimeType:e.mime_type,dcID:e.dc_id}).then(s=>{if(!a||a()){if(t.firstChild&&t.firstChild.remove(),2==h){const e=new FileReader;e.addEventListener("loadend",e=>r(this,void 0,void 0,(function*(){const a=e.srcElement.result;let r=yield d.default.gzipUncompress(a,!0);yield c.default.loadAnimation({container:t,loop:!1,autoplay:!1,animationData:JSON.parse(r),renderer:p?"canvas":"svg"},n);p||t.addEventListener("mouseover",e=>{let a=c.default.getAnimation(t,n);a&&(a.loop=!0,a.currentFrame==a.totalFrames-1?a.goToAndPlay(0,!0):a.play(),t.addEventListener("mouseout",()=>{a.loop=!1},{once:!0}))})}))),e.readAsArrayBuffer(s)}else if(1==h){let e=new Image;e.src=URL.createObjectURL(s),t.append(e)}t.setAttribute("file-id",e.id),l.default.saveSticker(e)}});return s?(s.push({div:t,load:m}),Promise.resolve()):m()},t.horizontalMenu=function(e,t,a,r){let s=0,o=null,i=-1;e.addEventListener("click",(function(d){let c=d.target;if("LI"!=c.tagName&&(c=n.findUpTag(c,"LI")),console.log("tabs click:",c),c.classList.contains("active"))return!1;let l=e.querySelector("li.active");l&&l.classList.remove("active"),c.classList.add("active");let p=n.whichChild(c);if(p==i)return!1;let h=t.children[p];h.classList.add("active"),console.log("mambo rap",i,p);let m=i{t.classList.add("animated"),t.style.marginLeft=""},0))),i=p;let g=o;clearTimeout(s),g&&(s=setTimeout(()=>{m&&(g.classList.remove("active"),t.classList.remove("animated"),t.style.width="100%"),m||(g.classList.remove("active"),t.classList.remove("animated"),t.style.width="100%"),t.style.marginLeft="",r&&r()},200)),a&&a(p,h),o=h}))},t.getNearestDc=function(){return o.MTProto.apiManager.invokeApi("help.getNearestDc").then(e=>(e.nearest_dc!=e.this_dc&&o.MTProto.apiManager.getNetworker(e.nearest_dc),e))}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=a(0),s=a(1),o=a(3);class n{constructor(){this.users={},this.usernames={},this.userAccess={},this.cachedPhotoLocations={},this.contactsIndex=r.SearchIndexManager.createIndex(),s.MTProto.apiManager.getUserID().then(e=>{this.myID=e}),r.$rootScope.$on("user_auth",e=>{let t=e.detail;this.myID=t?t.id:0}),setInterval(this.updateUsersStatuses.bind(this),6e4),r.$rootScope.$on("stateSynchronized",this.updateUsersStatuses.bind(this)),r.$rootScope.$on("apiUpdate",e=>{let t=e.detail;switch(console.log("on apiUpdate",t),t._){case"updateUserStatus":var a=t.user_id;(o=this.users[a])?(o.status=t.status,o.status&&(o.status.expires&&(o.status.expires-=s.MTProto.serverTimeManager.serverTimeOffset),o.status.was_online&&(o.status.was_online-=s.MTProto.serverTimeManager.serverTimeOffset)),o.sortStatus=this.getUserStatusForSort(o.status),r.$rootScope.$broadcast("user_update",a)):console.warn("No user by id:",a);break;case"updateUserPhoto":var o;a=t.user_id;(o=this.users[a])?(this.forceUserOnline(a),o.photo?r.safeReplaceObject(o.photo,t.photo):o.photo=t.photo,void 0!==this.cachedPhotoLocations[a]&&r.safeReplaceObject(this.cachedPhotoLocations[a],t.photo?t.photo:{empty:!0}),r.$rootScope.$broadcast("user_update",a)):console.warn("No user by id:",a);break;case"updateContactLink":this.onContactUpdated(t.user_id,"contactLinkContact"==t.my_link._)}})}getUserSearchText(e){var t=this.users[e];if(!t)return!1;var a="";return t.pFlags.self&&(a="user_name_saved_msgs_raw"),(t.first_name||"")+" "+(t.last_name||"")+" "+(t.phone||"")+" "+(t.username||"")+" "+a}resolveUsername(e){return this.usernames[e]||0}saveApiUsers(e){e.forEach(this.saveApiUser.bind(this))}saveApiUser(e,t){if(r.isObject(e)&&!(t&&r.isObject(this.users[e.id])&&this.users[e.id].first_name)){var a=e.id,n=this.users[a];if(void 0===e.pFlags&&(e.pFlags={}),!e.pFlags.min||void 0===n){if(e.phone,e.num=Math.abs(a)%8+1,e.first_name?(e.rFirstName=o.RichTextProcessor.wrapRichText(e.first_name,{noLinks:!0,noLinebreaks:!0}),e.rFullName=e.last_name?o.RichTextProcessor.wrapRichText(e.first_name+" "+(e.last_name||""),{noLinks:!0,noLinebreaks:!0}):e.rFirstName):(e.rFirstName=o.RichTextProcessor.wrapRichText(e.last_name,{noLinks:!0,noLinebreaks:!0})||e.rPhone||"user_first_name_deleted",e.rFullName=o.RichTextProcessor.wrapRichText(e.last_name,{noLinks:!0,noLinebreaks:!0})||e.rPhone||"user_name_deleted"),e.username){var i=r.SearchIndexManager.cleanUsername(e.username);this.usernames[i]=a}e.sortName=e.pFlags.deleted?"":r.SearchIndexManager.cleanSearchText(e.first_name+" "+(e.last_name||""));var d=e.sortName.split(" "),c=d.shift(),l=d.pop();e.initials=c.charAt(0)+(l?l.charAt(0):c.charAt(1)),e.status&&(e.status.expires&&(e.status.expires-=s.MTProto.serverTimeManager.serverTimeOffset),e.status.was_online&&(e.status.was_online-=s.MTProto.serverTimeManager.serverTimeOffset)),e.pFlags.bot?e.sortStatus=-1:e.sortStatus=this.getUserStatusForSort(e.status),void 0===(n=this.users[a])?n=this.users[a]=e:r.safeReplaceObject(n,e),r.$rootScope.$broadcast("user_update",a),void 0!==this.cachedPhotoLocations[a]&&r.safeReplaceObject(this.cachedPhotoLocations[a],e&&e.photo?e.photo:{empty:!0})}}}saveUserAccess(e,t){this.userAccess[e]=t}getUserStatusForSort(e){if(e){var t=e.expires||e.was_online;if(t)return t;var a=r.tsNow(!0);switch(e._){case"userStatusRecently":return a-259200;case"userStatusLastWeek":return a-604800;case"userStatusLastMonth":return a-2592e3}}return 0}getUser(e){return r.isObject(e)?e:this.users[e]||{id:e,deleted:!0,num:1,access_hash:this.userAccess[e]}}getSelf(){return this.getUser(this.myID)}isBot(e){return this.users[e]&&this.users[e].pFlags.bot}hasUser(e,t){var a=this.users[e];return r.isObject(a)&&(t||!a.pFlags.min)}getUserPhoto(e){var t=this.getUser(e);return void 0===this.cachedPhotoLocations[e]&&(this.cachedPhotoLocations[e]=t&&t.photo?t.photo:{empty:!0}),this.cachedPhotoLocations[e]}getUserString(e){var t=this.getUser(e);return"u"+e+(t.access_hash?"_"+t.access_hash:"")}getUserInput(e){var t=this.getUser(e);return t.pFlags.self?{_:"inputUserSelf"}:{_:"inputUser",user_id:e,access_hash:t.access_hash||0}}updateUsersStatuses(){var e=r.tsNow(!0);for(let t in this.users){let a=this.users[t];a.status&&"userStatusOnline"==a.status._&&a.status.expires{t.push(this.getUserInput(e))}),s.MTProto.apiManager.invokeApi("contacts.deleteContacts",{id:t}).then(()=>{e.forEach(e=>{this.onContactUpdated(e,!1)})})}onContactUpdated(e,t){if(e=parseInt(""+e),Array.isArray(this.contactsList)){var a=this.contactsList.indexOf(e);t!=(-1!=a)&&(t?(this.contactsList.push(e),r.SearchIndexManager.indexObject(e,this.getUserSearchText(e),this.contactsIndex)):this.contactsList.splice(a,1),r.$rootScope.$broadcast("contacts_update",e))}}setUserStatus(e,t){if(!this.isBot(e)){var a=this.users[e];if(a){var s=t?{_:"userStatusOffline",was_online:r.tsNow(!0)}:{_:"userStatusOnline",expires:r.tsNow(!0)+500};a.status=s,a.sortStatus=this.getUserStatusForSort(a.status),r.$rootScope.$broadcast("user_update",e)}}}}t.AppUsersManager=n,t.default=new n},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=a(11);t.default=new class{setPrefix(e){r.Storage.prefix(e)}noPrefix(){r.Storage.noPrefix()}proxy(e,...t){let a=Array.prototype.slice.call(t);return new Promise((t,s)=>{a.push(e=>{t(e)}),r.Storage[e].apply(r.Storage,a)})}get(...e){return this.proxy("get",...e)}set(...e){return this.proxy("set",...e)}remove(...e){return this.proxy("remove",...e)}clear(...e){return this.proxy("clear",...e)}constructor(){r.Modes.test&&this.setPrefix("t_")}}},function(e,t,a){"use strict";var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const s=a(2);const o=new class{constructor(){this.webWorker=!1,this.taskID=0,this.awaiting={},this.pending=[],this.debug=!1,console.log(s.dT(),"CW constructor"),window.Worker&&Promise.resolve().then(()=>r(a(61))).then(e=>{console.log(e);var t=new e.default;t.onmessage=e=>{this.webWorker?this.finalizeTask(e.data.taskID,e.data.result):(this.webWorker=t,console.info(s.dT(),"CW set webWorker"),this.releasePending())},t.onerror=e=>{console.error("CW error",e),this.webWorker=!1}})}finalizeTask(e,t){let a=this.awaiting[e];void 0!==a&&(this.debug&&console.log(s.dT(),"CW done",a.taskName,t),a.resolve(t),delete this.awaiting[e])}performTaskWorker(e,...t){return this.debug&&console.log(s.dT(),"CW start",e,t),new Promise((a,r)=>{this.awaiting[this.taskID]={resolve:a,reject:r,taskName:e};let s={task:e,taskID:this.taskID,args:t};this.pending.push(s),this.releasePending(),this.taskID++})}releasePending(){this.webWorker&&(this.pending.forEach(e=>{this.webWorker.postMessage(e)}),this.pending.length=0)}sha1Hash(e){return this.performTaskWorker("sha1-hash",e)}sha256Hash(e){return this.performTaskWorker("sha256-hash",e)}pbkdf2(e,t,a){return this.performTaskWorker("pbkdf2",e,t,a)}aesEncrypt(e,t,a){return this.performTaskWorker("aes-encrypt",s.convertToArrayBuffer(e),s.convertToArrayBuffer(t),s.convertToArrayBuffer(a))}aesDecrypt(e,t,a){return this.performTaskWorker("aes-decrypt",e,t,a).then(e=>s.convertToArrayBuffer(e))}rsaEncrypt(e,t){return this.performTaskWorker("rsa-encrypt",e,t)}factorize(e){return e=s.convertToByteArray(e),this.performTaskWorker("factorize",e)}modPow(e,t,a){return this.performTaskWorker("mod-pow",e,t,a)}gzipUncompress(e,t){return this.performTaskWorker("unzip",e,t)}};window.CryptoWorker=o,t.default=o},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(a(5)),o=r(a(13)),n=a(0),i={getPeerPhoto:e=>e>0?s.default.getUserPhoto(e):o.default.getChatPhoto(-e),getPeerMigratedTo:e=>{if(e>=0)return!1;var t=o.default.getChat(-e);return!!(t&&t.migrated_to&&t.pFlags.deactivated)&&i.getPeerID(t.migrated_to)},getPeerTitle:e=>{let t={};t=n.isObject(e)?e:i.getPeer(e);let a="";return e>0?(t.first_name&&(a+=t.first_name),t.last_name&&(a+=" "+t.last_name),a=a?a.trim():t.pFlags.deleted?"Deleted account":t.username):a=t.title,a},getOutputPeer:e=>{if(e>0)return{_:"peerUser",user_id:e};var t=-e;return o.default.isChannel(t)?{_:"peerChannel",channel_id:t}:{_:"peerChat",chat_id:t}},getPeerString:e=>e>0?s.default.getUserString(e):o.default.getChatString(-e),getPeerUsername:e=>e>0?s.default.getUser(e).username||"":o.default.getChat(-e).username||"",getPeer:e=>e>0?s.default.getUser(e):o.default.getChat(-e),getPeerID:e=>{if(n.isObject(e))return e.user_id?e.user_id:-(e.channel_id||e.chat_id);var t="u"==e.charAt(0),a=e.substr(1).split("_");return t?a[0]:-a[0]||0},isChannel:e=>e<0&&o.default.isChannel(-e),getInputPeerByID:e=>{if(!e)return{_:"inputPeerEmpty"};if(e<0){var t=-e;return o.default.isChannel(t)?{_:"inputPeerChannel",channel_id:t,access_hash:o.default.getChat(t).access_hash||0}:{_:"inputPeerChat",chat_id:t}}return{_:"inputPeerUser",user_id:e,access_hash:s.default.getUser(e).access_hash||0}},isMegagroup:e=>e<0&&o.default.isMegagroup(-e),getPeerSearchText:e=>{var t;if(e>0)t="%pu "+s.default.getUserSearchText(e);else if(e<0){t="%pg "+(o.default.getChat(-e).title||"")}return t}};t.default=i},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=a(2),s=a(1);t.logger=function(e){function t(...t){return console.log(r.dT(),"["+e+"]:",...t)}return t.warn=function(...t){return console.warn(r.dT(),"["+e+"]:",...t)},t.info=function(...t){return console.info(r.dT(),"["+e+"]:",...t)},t.error=function(...t){return console.error(r.dT(),"["+e+"]:",...t)},t.trace=function(...t){return console.trace(r.dT(),"["+e+"]:",...t)},t},Object.defineProperty(Uint8Array.prototype,"hex",{get:function(){return r.bytesToHex([...this])},set:function(e){this.set(r.bytesFromHex(e))},enumerable:!0,configurable:!0}),Uint8Array.prototype.randomize=function(){return s.MTProto.secureRandom.nextBytes(this),this},Uint8Array.prototype.concat=function(...e){return r.bufferConcats(this,...e)}},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=a(1),n=s(a(5)),i=a(0),d=s(a(29)),c=a(2);class l{constructor(){this.photos={},this.windowW=document.body.scrollWidth,this.windowH=document.body.scrollHeight,window.addEventListener("resize",e=>{this.windowW=document.body.scrollWidth,this.windowH=document.body.scrollHeight})}savePhoto(e,t){t&&Object.assign(e,t),e.id?this.photos[e.id]=e:console.warn("no apiPhoto.id",e),"sizes"in e&&e.sizes.forEach(t=>{"photoCachedSize"==t._&&(o.MTProto.apiFileManager.saveSmallFile(t.location,t.bytes),console.log("clearing photo cached size",e),t.size=t.bytes.length,delete t.bytes,t._="photoSize")})}choosePhotoSize(e,t=0,a=0){Config.Navigator.retina&&(t*=2,a*=2);let r={_:"photoSizeEmpty"},s=16777215;return(e.sizes||e.thumbs).forEach(e=>{if(!e.w||!e.h)return;let o=Math.abs(e.w*e.h-t*a);o{n.default.saveApiUsers(t.users);for(var a=[],r={user_id:e},s=0;s800&&(a-=208);var s=this.choosePhotoSize(t,a,r),o={};if(o.width=a,o.height=r,s&&"photoSizeEmpty"!=s._){var n=i.calcImageInBox(s.w,s.h,a,r,!0);o.width=n.w,o.height=n.h,o.modalWidth=Math.max(o.width,Math.min(400,a)),o.location=s.location,o.size=s.size}return t.full=o,t}downloadPhoto(e){var t=this.photos[e],a="photo"+e+".jpg",r=Math.max(screen.width||0,document.body.scrollWidth-36,800),s=Math.max(screen.height||0,document.body.scrollHeight-150,800),n=this.choosePhotoSize(t,r,s),i={_:"inputFileLocation",volume_id:n.location.volume_id,local_id:n.location.local_id,secret:n.location.secret};d.default.chooseSaveFile(a,"jpg","image/jpeg").then(e=>{e&&o.MTProto.apiFileManager.downloadFile(t.dc_id,i,n.size,{mimeType:"image/jpeg",toFileEntry:e}).then(()=>{},e=>{console.log("photo download failed",e)})},()=>{var e=o.MTProto.apiFileManager.getCachedFile(i);if(e)return d.default.download(e,"image/jpeg",a);o.MTProto.apiFileManager.downloadFile(t.dc_id,i,n.size,{mimeType:"image/jpeg"}).then(e=>{d.default.download(e,"image/jpeg",a)},e=>{console.log("photo download failed",e)})})}}t.AppPhotosManager=l,l.jf=new Uint8Array(c.bytesFromHex("ffd8ffe000104a46494600010100000100010000ffdb004300281c1e231e19282321232d2b28303c64413c37373c7b585d4964918099968f808c8aa0b4e6c3a0aadaad8a8cc8ffcbdaeef5ffffff9bc1fffffffaffe6fdfff8ffdb0043012b2d2d3c353c76414176f8a58ca5f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8ffc00011080000000003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00")),l.Df=c.bytesFromHex("ffd9"),t.default=new l},function(e,t){ +/*! + * Webogram v0.7.0 - messaging web application for MTProto + * https://github.com/zhukov/webogram + * Copyright (C) 2014 Igor Zhukov + * https://github.com/zhukov/webogram/blob/master/LICENSE + */ +Config=window.Config||{},Config.App={id:1025907,hash:"452b0359b988148995f22ff0f4229750",version:"0.3.0",domains:[],baseDcID:2},Config.Modes={test:location.search.indexOf("test=1")>0,debug:location.search.indexOf("debug=1")>0,http:location.search.indexOf("http=1")>0,ssl:location.search.indexOf("ssl=1")>0||"https:"==location.protocol&&-1==location.search.indexOf("ssl=0"),force_mobile:location.search.indexOf("mobile=1")>0,force_desktop:location.search.indexOf("desktop=1")>0,webcrypto:-1==location.search.indexOf("webcrypto=0")&&!1,packed:"app:"==location.protocol||"chrome-extension:"==location.protocol,ios_standalone:window.navigator.standalone&&navigator.userAgent.match(/iOS|iPhone|iPad/),chrome_packed:!!(window.chrome&&chrome.app&&chrome.app.window),animations:!0,memory_only:!1,allow_tmpfs:location.search.indexOf("tmpfs=yeahImSureIknowWhatImDoing")>0||!1,push_api:-1==location.search.indexOf("push=1"),multipleConnections:!0},Config.Mobile=!1,Config.Navigator={nativeEmoji:/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform||""),osX:-1!=(navigator.platform||"").toLowerCase().indexOf("mac")||-1!=(navigator.userAgent||"").toLowerCase().indexOf("mac"),msie:-1!=(navigator.userAgent||"").search(/MSIE | Trident\/|Edge\//),retina:window.devicePixelRatio>1,ffos:-1!=navigator.userAgent.search(/mobi.+Gecko/i),ffos2p:-1!=navigator.userAgent.search(/mobi.+Gecko\/[34567]/i),touch:screen.width<=768||"ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,mobile:screen.width&&screen.width<480||-1!=navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i)},Config.ExtCredentials={gmaps:{api_key:"AIzaSyC72t5GDcP-dob20d-ARwSwOQ41-zgbArg"}};{let e=64,t=56,a=`assets/img/sheet_apple_${e}`,r=100/t,s=t*(e+2),o=t*(e+2),n=s/e*100,i=o/e*100,d=!1;Config.Emoji={img_size:e,sheetUrl:a,multiplyX:r,sheetSizeX:s,sheetSizeY:o,sizeX:n,sizeY:i,side:t,splitted:d,keyCategory:"category",keyX:"sheet_x",keyY:"sheet_y",emoji:{"#️⃣":{category:"Symbols",sheet_x:0,sheet_y:0,sort_order:132},"*️⃣":{category:"Symbols",sheet_x:0,sheet_y:1,sort_order:133},"0️⃣":{category:"Symbols",sheet_x:0,sheet_y:2,sort_order:134},"1️⃣":{category:"Symbols",sheet_x:0,sheet_y:3,sort_order:135},"2️⃣":{category:"Symbols",sheet_x:0,sheet_y:4,sort_order:136},"3️⃣":{category:"Symbols",sheet_x:0,sheet_y:5,sort_order:137},"4️⃣":{category:"Symbols",sheet_x:0,sheet_y:6,sort_order:138},"5️⃣":{category:"Symbols",sheet_x:0,sheet_y:7,sort_order:139},"6️⃣":{category:"Symbols",sheet_x:0,sheet_y:8,sort_order:140},"7️⃣":{category:"Symbols",sheet_x:0,sheet_y:9,sort_order:141},"8️⃣":{category:"Symbols",sheet_x:0,sheet_y:10,sort_order:142},"9️⃣":{category:"Symbols",sheet_x:0,sheet_y:11,sort_order:143},"©️":{category:"Symbols",sheet_x:0,sheet_y:12,sort_order:129},"®️":{category:"Symbols",sheet_x:0,sheet_y:13,sort_order:130},"🀄":{category:"Activities",sheet_x:0,sheet_y:14,sort_order:73},"🃏":{category:"Activities",sheet_x:0,sheet_y:15,sort_order:72},"🅰️":{category:"Symbols",sheet_x:0,sheet_y:16,sort_order:150},"🅱️":{category:"Symbols",sheet_x:0,sheet_y:17,sort_order:152},"🅾️":{category:"Symbols",sheet_x:0,sheet_y:18,sort_order:161},"🅿️":{category:"Symbols",sheet_x:0,sheet_y:19,sort_order:163},"🆎":{category:"Symbols",sheet_x:0,sheet_y:20,sort_order:151},"🆑":{category:"Symbols",sheet_x:0,sheet_y:21,sort_order:153},"🆒":{category:"Symbols",sheet_x:0,sheet_y:22,sort_order:154},"🆓":{category:"Symbols",sheet_x:0,sheet_y:23,sort_order:155},"🆔":{category:"Symbols",sheet_x:0,sheet_y:24,sort_order:157},"🆕":{category:"Symbols",sheet_x:0,sheet_y:25,sort_order:159},"🆖":{category:"Symbols",sheet_x:0,sheet_y:26,sort_order:160},"🆗":{category:"Symbols",sheet_x:0,sheet_y:27,sort_order:162},"🆘":{category:"Symbols",sheet_x:0,sheet_y:28,sort_order:164},"🆙":{category:"Symbols",sheet_x:0,sheet_y:29,sort_order:165},"🆚":{category:"Symbols",sheet_x:0,sheet_y:30,sort_order:166},"🇦🇨":{category:"Flags",sheet_x:0,sheet_y:31,sort_order:8},"🇦🇩":{category:"Flags",sheet_x:0,sheet_y:32,sort_order:9},"🇦🇪":{category:"Flags",sheet_x:0,sheet_y:33,sort_order:10},"🇦🇫":{category:"Flags",sheet_x:0,sheet_y:34,sort_order:11},"🇦🇬":{category:"Flags",sheet_x:0,sheet_y:35,sort_order:12},"🇦🇮":{category:"Flags",sheet_x:0,sheet_y:36,sort_order:13},"🇦🇱":{category:"Flags",sheet_x:0,sheet_y:37,sort_order:14},"🇦🇲":{category:"Flags",sheet_x:0,sheet_y:38,sort_order:15},"🇦🇴":{category:"Flags",sheet_x:0,sheet_y:39,sort_order:16},"🇦🇶":{category:"Flags",sheet_x:0,sheet_y:40,sort_order:17},"🇦🇷":{category:"Flags",sheet_x:0,sheet_y:41,sort_order:18},"🇦🇸":{category:"Flags",sheet_x:0,sheet_y:42,sort_order:19},"🇦🇹":{category:"Flags",sheet_x:0,sheet_y:43,sort_order:20},"🇦🇺":{category:"Flags",sheet_x:0,sheet_y:44,sort_order:21},"🇦🇼":{category:"Flags",sheet_x:0,sheet_y:45,sort_order:22},"🇦🇽":{category:"Flags",sheet_x:0,sheet_y:46,sort_order:23},"🇦🇿":{category:"Flags",sheet_x:0,sheet_y:47,sort_order:24},"🇧🇦":{category:"Flags",sheet_x:0,sheet_y:48,sort_order:25},"🇧🇧":{category:"Flags",sheet_x:0,sheet_y:49,sort_order:26},"🇧🇩":{category:"Flags",sheet_x:0,sheet_y:50,sort_order:27},"🇧🇪":{category:"Flags",sheet_x:0,sheet_y:51,sort_order:28},"🇧🇫":{category:"Flags",sheet_x:0,sheet_y:52,sort_order:29},"🇧🇬":{category:"Flags",sheet_x:0,sheet_y:53,sort_order:30},"🇧🇭":{category:"Flags",sheet_x:0,sheet_y:54,sort_order:31},"🇧🇮":{category:"Flags",sheet_x:0,sheet_y:55,sort_order:32},"🇧🇯":{category:"Flags",sheet_x:0,sheet_y:56,sort_order:33},"🇧🇱":{category:"Flags",sheet_x:1,sheet_y:0,sort_order:34},"🇧🇲":{category:"Flags",sheet_x:1,sheet_y:1,sort_order:35},"🇧🇳":{category:"Flags",sheet_x:1,sheet_y:2,sort_order:36},"🇧🇴":{category:"Flags",sheet_x:1,sheet_y:3,sort_order:37},"🇧🇶":{category:"Flags",sheet_x:1,sheet_y:4,sort_order:38},"🇧🇷":{category:"Flags",sheet_x:1,sheet_y:5,sort_order:39},"🇧🇸":{category:"Flags",sheet_x:1,sheet_y:6,sort_order:40},"🇧🇹":{category:"Flags",sheet_x:1,sheet_y:7,sort_order:41},"🇧🇻":{category:"Flags",sheet_x:1,sheet_y:8,sort_order:42},"🇧🇼":{category:"Flags",sheet_x:1,sheet_y:9,sort_order:43},"🇧🇾":{category:"Flags",sheet_x:1,sheet_y:10,sort_order:44},"🇧🇿":{category:"Flags",sheet_x:1,sheet_y:11,sort_order:45},"🇨🇦":{category:"Flags",sheet_x:1,sheet_y:12,sort_order:46},"🇨🇨":{category:"Flags",sheet_x:1,sheet_y:13,sort_order:47},"🇨🇩":{category:"Flags",sheet_x:1,sheet_y:14,sort_order:48},"🇨🇫":{category:"Flags",sheet_x:1,sheet_y:15,sort_order:49},"🇨🇬":{category:"Flags",sheet_x:1,sheet_y:16,sort_order:50},"🇨🇭":{category:"Flags",sheet_x:1,sheet_y:17,sort_order:51},"🇨🇮":{category:"Flags",sheet_x:1,sheet_y:18,sort_order:52},"🇨🇰":{category:"Flags",sheet_x:1,sheet_y:19,sort_order:53},"🇨🇱":{category:"Flags",sheet_x:1,sheet_y:20,sort_order:54},"🇨🇲":{category:"Flags",sheet_x:1,sheet_y:21,sort_order:55},"🇨🇳":{category:"Flags",sheet_x:1,sheet_y:22,sort_order:56},"🇨🇴":{category:"Flags",sheet_x:1,sheet_y:23,sort_order:57},"🇨🇵":{category:"Flags",sheet_x:1,sheet_y:24,sort_order:58},"🇨🇷":{category:"Flags",sheet_x:1,sheet_y:25,sort_order:59},"🇨🇺":{category:"Flags",sheet_x:1,sheet_y:26,sort_order:60},"🇨🇻":{category:"Flags",sheet_x:1,sheet_y:27,sort_order:61},"🇨🇼":{category:"Flags",sheet_x:1,sheet_y:28,sort_order:62},"🇨🇽":{category:"Flags",sheet_x:1,sheet_y:29,sort_order:63},"🇨🇾":{category:"Flags",sheet_x:1,sheet_y:30,sort_order:64},"🇨🇿":{category:"Flags",sheet_x:1,sheet_y:31,sort_order:65},"🇩🇪":{category:"Flags",sheet_x:1,sheet_y:32,sort_order:66},"🇩🇬":{category:"Flags",sheet_x:1,sheet_y:33,sort_order:67},"🇩🇯":{category:"Flags",sheet_x:1,sheet_y:34,sort_order:68},"🇩🇰":{category:"Flags",sheet_x:1,sheet_y:35,sort_order:69},"🇩🇲":{category:"Flags",sheet_x:1,sheet_y:36,sort_order:70},"🇩🇴":{category:"Flags",sheet_x:1,sheet_y:37,sort_order:71},"🇩🇿":{category:"Flags",sheet_x:1,sheet_y:38,sort_order:72},"🇪🇦":{category:"Flags",sheet_x:1,sheet_y:39,sort_order:73},"🇪🇨":{category:"Flags",sheet_x:1,sheet_y:40,sort_order:74},"🇪🇪":{category:"Flags",sheet_x:1,sheet_y:41,sort_order:75},"🇪🇬":{category:"Flags",sheet_x:1,sheet_y:42,sort_order:76},"🇪🇭":{category:"Flags",sheet_x:1,sheet_y:43,sort_order:77},"🇪🇷":{category:"Flags",sheet_x:1,sheet_y:44,sort_order:78},"🇪🇸":{category:"Flags",sheet_x:1,sheet_y:45,sort_order:79},"🇪🇹":{category:"Flags",sheet_x:1,sheet_y:46,sort_order:80},"🇪🇺":{category:"Flags",sheet_x:1,sheet_y:47,sort_order:81},"🇫🇮":{category:"Flags",sheet_x:1,sheet_y:48,sort_order:82},"🇫🇯":{category:"Flags",sheet_x:1,sheet_y:49,sort_order:83},"🇫🇰":{category:"Flags",sheet_x:1,sheet_y:50,sort_order:84},"🇫🇲":{category:"Flags",sheet_x:1,sheet_y:51,sort_order:85},"🇫🇴":{category:"Flags",sheet_x:1,sheet_y:52,sort_order:86},"🇫🇷":{category:"Flags",sheet_x:1,sheet_y:53,sort_order:87},"🇬🇦":{category:"Flags",sheet_x:1,sheet_y:54,sort_order:88},"🇬🇧":{category:"Flags",sheet_x:1,sheet_y:55,sort_order:89},"🇬🇩":{category:"Flags",sheet_x:1,sheet_y:56,sort_order:90},"🇬🇪":{category:"Flags",sheet_x:2,sheet_y:0,sort_order:91},"🇬🇫":{category:"Flags",sheet_x:2,sheet_y:1,sort_order:92},"🇬🇬":{category:"Flags",sheet_x:2,sheet_y:2,sort_order:93},"🇬🇭":{category:"Flags",sheet_x:2,sheet_y:3,sort_order:94},"🇬🇮":{category:"Flags",sheet_x:2,sheet_y:4,sort_order:95},"🇬🇱":{category:"Flags",sheet_x:2,sheet_y:5,sort_order:96},"🇬🇲":{category:"Flags",sheet_x:2,sheet_y:6,sort_order:97},"🇬🇳":{category:"Flags",sheet_x:2,sheet_y:7,sort_order:98},"🇬🇵":{category:"Flags",sheet_x:2,sheet_y:8,sort_order:99},"🇬🇶":{category:"Flags",sheet_x:2,sheet_y:9,sort_order:100},"🇬🇷":{category:"Flags",sheet_x:2,sheet_y:10,sort_order:101},"🇬🇸":{category:"Flags",sheet_x:2,sheet_y:11,sort_order:102},"🇬🇹":{category:"Flags",sheet_x:2,sheet_y:12,sort_order:103},"🇬🇺":{category:"Flags",sheet_x:2,sheet_y:13,sort_order:104},"🇬🇼":{category:"Flags",sheet_x:2,sheet_y:14,sort_order:105},"🇬🇾":{category:"Flags",sheet_x:2,sheet_y:15,sort_order:106},"🇭🇰":{category:"Flags",sheet_x:2,sheet_y:16,sort_order:107},"🇭🇲":{category:"Flags",sheet_x:2,sheet_y:17,sort_order:108},"🇭🇳":{category:"Flags",sheet_x:2,sheet_y:18,sort_order:109},"🇭🇷":{category:"Flags",sheet_x:2,sheet_y:19,sort_order:110},"🇭🇹":{category:"Flags",sheet_x:2,sheet_y:20,sort_order:111},"🇭🇺":{category:"Flags",sheet_x:2,sheet_y:21,sort_order:112},"🇮🇨":{category:"Flags",sheet_x:2,sheet_y:22,sort_order:113},"🇮🇩":{category:"Flags",sheet_x:2,sheet_y:23,sort_order:114},"🇮🇪":{category:"Flags",sheet_x:2,sheet_y:24,sort_order:115},"🇮🇱":{category:"Flags",sheet_x:2,sheet_y:25,sort_order:116},"🇮🇲":{category:"Flags",sheet_x:2,sheet_y:26,sort_order:117},"🇮🇳":{category:"Flags",sheet_x:2,sheet_y:27,sort_order:118},"🇮🇴":{category:"Flags",sheet_x:2,sheet_y:28,sort_order:119},"🇮🇶":{category:"Flags",sheet_x:2,sheet_y:29,sort_order:120},"🇮🇷":{category:"Flags",sheet_x:2,sheet_y:30,sort_order:121},"🇮🇸":{category:"Flags",sheet_x:2,sheet_y:31,sort_order:122},"🇮🇹":{category:"Flags",sheet_x:2,sheet_y:32,sort_order:123},"🇯🇪":{category:"Flags",sheet_x:2,sheet_y:33,sort_order:124},"🇯🇲":{category:"Flags",sheet_x:2,sheet_y:34,sort_order:125},"🇯🇴":{category:"Flags",sheet_x:2,sheet_y:35,sort_order:126},"🇯🇵":{category:"Flags",sheet_x:2,sheet_y:36,sort_order:127},"🇰🇪":{category:"Flags",sheet_x:2,sheet_y:37,sort_order:128},"🇰🇬":{category:"Flags",sheet_x:2,sheet_y:38,sort_order:129},"🇰🇭":{category:"Flags",sheet_x:2,sheet_y:39,sort_order:130},"🇰🇮":{category:"Flags",sheet_x:2,sheet_y:40,sort_order:131},"🇰🇲":{category:"Flags",sheet_x:2,sheet_y:41,sort_order:132},"🇰🇳":{category:"Flags",sheet_x:2,sheet_y:42,sort_order:133},"🇰🇵":{category:"Flags",sheet_x:2,sheet_y:43,sort_order:134},"🇰🇷":{category:"Flags",sheet_x:2,sheet_y:44,sort_order:135},"🇰🇼":{category:"Flags",sheet_x:2,sheet_y:45,sort_order:136},"🇰🇾":{category:"Flags",sheet_x:2,sheet_y:46,sort_order:137},"🇰🇿":{category:"Flags",sheet_x:2,sheet_y:47,sort_order:138},"🇱🇦":{category:"Flags",sheet_x:2,sheet_y:48,sort_order:139},"🇱🇧":{category:"Flags",sheet_x:2,sheet_y:49,sort_order:140},"🇱🇨":{category:"Flags",sheet_x:2,sheet_y:50,sort_order:141},"🇱🇮":{category:"Flags",sheet_x:2,sheet_y:51,sort_order:142},"🇱🇰":{category:"Flags",sheet_x:2,sheet_y:52,sort_order:143},"🇱🇷":{category:"Flags",sheet_x:2,sheet_y:53,sort_order:144},"🇱🇸":{category:"Flags",sheet_x:2,sheet_y:54,sort_order:145},"🇱🇹":{category:"Flags",sheet_x:2,sheet_y:55,sort_order:146},"🇱🇺":{category:"Flags",sheet_x:2,sheet_y:56,sort_order:147},"🇱🇻":{category:"Flags",sheet_x:3,sheet_y:0,sort_order:148},"🇱🇾":{category:"Flags",sheet_x:3,sheet_y:1,sort_order:149},"🇲🇦":{category:"Flags",sheet_x:3,sheet_y:2,sort_order:150},"🇲🇨":{category:"Flags",sheet_x:3,sheet_y:3,sort_order:151},"🇲🇩":{category:"Flags",sheet_x:3,sheet_y:4,sort_order:152},"🇲🇪":{category:"Flags",sheet_x:3,sheet_y:5,sort_order:153},"🇲🇫":{category:"Flags",sheet_x:3,sheet_y:6,sort_order:154},"🇲🇬":{category:"Flags",sheet_x:3,sheet_y:7,sort_order:155},"🇲🇭":{category:"Flags",sheet_x:3,sheet_y:8,sort_order:156},"🇲🇰":{category:"Flags",sheet_x:3,sheet_y:9,sort_order:157},"🇲🇱":{category:"Flags",sheet_x:3,sheet_y:10,sort_order:158},"🇲🇲":{category:"Flags",sheet_x:3,sheet_y:11,sort_order:159},"🇲🇳":{category:"Flags",sheet_x:3,sheet_y:12,sort_order:160},"🇲🇴":{category:"Flags",sheet_x:3,sheet_y:13,sort_order:161},"🇲🇵":{category:"Flags",sheet_x:3,sheet_y:14,sort_order:162},"🇲🇶":{category:"Flags",sheet_x:3,sheet_y:15,sort_order:163},"🇲🇷":{category:"Flags",sheet_x:3,sheet_y:16,sort_order:164},"🇲🇸":{category:"Flags",sheet_x:3,sheet_y:17,sort_order:165},"🇲🇹":{category:"Flags",sheet_x:3,sheet_y:18,sort_order:166},"🇲🇺":{category:"Flags",sheet_x:3,sheet_y:19,sort_order:167},"🇲🇻":{category:"Flags",sheet_x:3,sheet_y:20,sort_order:168},"🇲🇼":{category:"Flags",sheet_x:3,sheet_y:21,sort_order:169},"🇲🇽":{category:"Flags",sheet_x:3,sheet_y:22,sort_order:170},"🇲🇾":{category:"Flags",sheet_x:3,sheet_y:23,sort_order:171},"🇲🇿":{category:"Flags",sheet_x:3,sheet_y:24,sort_order:172},"🇳🇦":{category:"Flags",sheet_x:3,sheet_y:25,sort_order:173},"🇳🇨":{category:"Flags",sheet_x:3,sheet_y:26,sort_order:174},"🇳🇪":{category:"Flags",sheet_x:3,sheet_y:27,sort_order:175},"🇳🇫":{category:"Flags",sheet_x:3,sheet_y:28,sort_order:176},"🇳🇬":{category:"Flags",sheet_x:3,sheet_y:29,sort_order:177},"🇳🇮":{category:"Flags",sheet_x:3,sheet_y:30,sort_order:178},"🇳🇱":{category:"Flags",sheet_x:3,sheet_y:31,sort_order:179},"🇳🇴":{category:"Flags",sheet_x:3,sheet_y:32,sort_order:180},"🇳🇵":{category:"Flags",sheet_x:3,sheet_y:33,sort_order:181},"🇳🇷":{category:"Flags",sheet_x:3,sheet_y:34,sort_order:182},"🇳🇺":{category:"Flags",sheet_x:3,sheet_y:35,sort_order:183},"🇳🇿":{category:"Flags",sheet_x:3,sheet_y:36,sort_order:184},"🇴🇲":{category:"Flags",sheet_x:3,sheet_y:37,sort_order:185},"🇵🇦":{category:"Flags",sheet_x:3,sheet_y:38,sort_order:186},"🇵🇪":{category:"Flags",sheet_x:3,sheet_y:39,sort_order:187},"🇵🇫":{category:"Flags",sheet_x:3,sheet_y:40,sort_order:188},"🇵🇬":{category:"Flags",sheet_x:3,sheet_y:41,sort_order:189},"🇵🇭":{category:"Flags",sheet_x:3,sheet_y:42,sort_order:190},"🇵🇰":{category:"Flags",sheet_x:3,sheet_y:43,sort_order:191},"🇵🇱":{category:"Flags",sheet_x:3,sheet_y:44,sort_order:192},"🇵🇲":{category:"Flags",sheet_x:3,sheet_y:45,sort_order:193},"🇵🇳":{category:"Flags",sheet_x:3,sheet_y:46,sort_order:194},"🇵🇷":{category:"Flags",sheet_x:3,sheet_y:47,sort_order:195},"🇵🇸":{category:"Flags",sheet_x:3,sheet_y:48,sort_order:196},"🇵🇹":{category:"Flags",sheet_x:3,sheet_y:49,sort_order:197},"🇵🇼":{category:"Flags",sheet_x:3,sheet_y:50,sort_order:198},"🇵🇾":{category:"Flags",sheet_x:3,sheet_y:51,sort_order:199},"🇶🇦":{category:"Flags",sheet_x:3,sheet_y:52,sort_order:200},"🇷🇪":{category:"Flags",sheet_x:3,sheet_y:53,sort_order:201},"🇷🇴":{category:"Flags",sheet_x:3,sheet_y:54,sort_order:202},"🇷🇸":{category:"Flags",sheet_x:3,sheet_y:55,sort_order:203},"🇷🇺":{category:"Flags",sheet_x:3,sheet_y:56,sort_order:204},"🇷🇼":{category:"Flags",sheet_x:4,sheet_y:0,sort_order:205},"🇸🇦":{category:"Flags",sheet_x:4,sheet_y:1,sort_order:206},"🇸🇧":{category:"Flags",sheet_x:4,sheet_y:2,sort_order:207},"🇸🇨":{category:"Flags",sheet_x:4,sheet_y:3,sort_order:208},"🇸🇩":{category:"Flags",sheet_x:4,sheet_y:4,sort_order:209},"🇸🇪":{category:"Flags",sheet_x:4,sheet_y:5,sort_order:210},"🇸🇬":{category:"Flags",sheet_x:4,sheet_y:6,sort_order:211},"🇸🇭":{category:"Flags",sheet_x:4,sheet_y:7,sort_order:212},"🇸🇮":{category:"Flags",sheet_x:4,sheet_y:8,sort_order:213},"🇸🇯":{category:"Flags",sheet_x:4,sheet_y:9,sort_order:214},"🇸🇰":{category:"Flags",sheet_x:4,sheet_y:10,sort_order:215},"🇸🇱":{category:"Flags",sheet_x:4,sheet_y:11,sort_order:216},"🇸🇲":{category:"Flags",sheet_x:4,sheet_y:12,sort_order:217},"🇸🇳":{category:"Flags",sheet_x:4,sheet_y:13,sort_order:218},"🇸🇴":{category:"Flags",sheet_x:4,sheet_y:14,sort_order:219},"🇸🇷":{category:"Flags",sheet_x:4,sheet_y:15,sort_order:220},"🇸🇸":{category:"Flags",sheet_x:4,sheet_y:16,sort_order:221},"🇸🇹":{category:"Flags",sheet_x:4,sheet_y:17,sort_order:222},"🇸🇻":{category:"Flags",sheet_x:4,sheet_y:18,sort_order:223},"🇸🇽":{category:"Flags",sheet_x:4,sheet_y:19,sort_order:224},"🇸🇾":{category:"Flags",sheet_x:4,sheet_y:20,sort_order:225},"🇸🇿":{category:"Flags",sheet_x:4,sheet_y:21,sort_order:226},"🇹🇦":{category:"Flags",sheet_x:4,sheet_y:22,sort_order:227},"🇹🇨":{category:"Flags",sheet_x:4,sheet_y:23,sort_order:228},"🇹🇩":{category:"Flags",sheet_x:4,sheet_y:24,sort_order:229},"🇹🇫":{category:"Flags",sheet_x:4,sheet_y:25,sort_order:230},"🇹🇬":{category:"Flags",sheet_x:4,sheet_y:26,sort_order:231},"🇹🇭":{category:"Flags",sheet_x:4,sheet_y:27,sort_order:232},"🇹🇯":{category:"Flags",sheet_x:4,sheet_y:28,sort_order:233},"🇹🇰":{category:"Flags",sheet_x:4,sheet_y:29,sort_order:234},"🇹🇱":{category:"Flags",sheet_x:4,sheet_y:30,sort_order:235},"🇹🇲":{category:"Flags",sheet_x:4,sheet_y:31,sort_order:236},"🇹🇳":{category:"Flags",sheet_x:4,sheet_y:32,sort_order:237},"🇹🇴":{category:"Flags",sheet_x:4,sheet_y:33,sort_order:238},"🇹🇷":{category:"Flags",sheet_x:4,sheet_y:34,sort_order:239},"🇹🇹":{category:"Flags",sheet_x:4,sheet_y:35,sort_order:240},"🇹🇻":{category:"Flags",sheet_x:4,sheet_y:36,sort_order:241},"🇹🇼":{category:"Flags",sheet_x:4,sheet_y:37,sort_order:242},"🇹🇿":{category:"Flags",sheet_x:4,sheet_y:38,sort_order:243},"🇺🇦":{category:"Flags",sheet_x:4,sheet_y:39,sort_order:244},"🇺🇬":{category:"Flags",sheet_x:4,sheet_y:40,sort_order:245},"🇺🇲":{category:"Flags",sheet_x:4,sheet_y:41,sort_order:246},"🇺🇳":{category:"Flags",sheet_x:4,sheet_y:42,sort_order:247},"🇺🇸":{category:"Flags",sheet_x:4,sheet_y:43,sort_order:248},"🇺🇾":{category:"Flags",sheet_x:4,sheet_y:44,sort_order:249},"🇺🇿":{category:"Flags",sheet_x:4,sheet_y:45,sort_order:250},"🇻🇦":{category:"Flags",sheet_x:4,sheet_y:46,sort_order:251},"🇻🇨":{category:"Flags",sheet_x:4,sheet_y:47,sort_order:252},"🇻🇪":{category:"Flags",sheet_x:4,sheet_y:48,sort_order:253},"🇻🇬":{category:"Flags",sheet_x:4,sheet_y:49,sort_order:254},"🇻🇮":{category:"Flags",sheet_x:4,sheet_y:50,sort_order:255},"🇻🇳":{category:"Flags",sheet_x:4,sheet_y:51,sort_order:256},"🇻🇺":{category:"Flags",sheet_x:4,sheet_y:52,sort_order:257},"🇼🇫":{category:"Flags",sheet_x:4,sheet_y:53,sort_order:258},"🇼🇸":{category:"Flags",sheet_x:4,sheet_y:54,sort_order:259},"🇽🇰":{category:"Flags",sheet_x:4,sheet_y:55,sort_order:260},"🇾🇪":{category:"Flags",sheet_x:4,sheet_y:56,sort_order:261},"🇾🇹":{category:"Flags",sheet_x:5,sheet_y:0,sort_order:262},"🇿🇦":{category:"Flags",sheet_x:5,sheet_y:1,sort_order:263},"🇿🇲":{category:"Flags",sheet_x:5,sheet_y:2,sort_order:264},"🇿🇼":{category:"Flags",sheet_x:5,sheet_y:3,sort_order:265},"🈁":{category:"Symbols",sheet_x:5,sheet_y:4,sort_order:167},"🈂️":{category:"Symbols",sheet_x:5,sheet_y:5,sort_order:168},"🈚":{category:"Symbols",sheet_x:5,sheet_y:6,sort_order:174},"🈯":{category:"Symbols",sheet_x:5,sheet_y:7,sort_order:171},"🈲":{category:"Symbols",sheet_x:5,sheet_y:8,sort_order:175},"🈳":{category:"Symbols",sheet_x:5,sheet_y:9,sort_order:179},"🈴":{category:"Symbols",sheet_x:5,sheet_y:10,sort_order:178},"🈵":{category:"Symbols",sheet_x:5,sheet_y:11,sort_order:183},"🈶":{category:"Symbols",sheet_x:5,sheet_y:12,sort_order:170},"🈷️":{category:"Symbols",sheet_x:5,sheet_y:13,sort_order:169},"🈸":{category:"Symbols",sheet_x:5,sheet_y:14,sort_order:177},"🈹":{category:"Symbols",sheet_x:5,sheet_y:15,sort_order:173},"🈺":{category:"Symbols",sheet_x:5,sheet_y:16,sort_order:182},"🉐":{category:"Symbols",sheet_x:5,sheet_y:17,sort_order:172},"🉑":{category:"Symbols",sheet_x:5,sheet_y:18,sort_order:176},"🌀":{category:"Travel & Places",sheet_x:5,sheet_y:19,sort_order:197},"🌁":{category:"Travel & Places",sheet_x:5,sheet_y:20,sort_order:49},"🌂":{category:"Travel & Places",sheet_x:5,sheet_y:21,sort_order:199},"🌃":{category:"Travel & Places",sheet_x:5,sheet_y:22,sort_order:50},"🌄":{category:"Travel & Places",sheet_x:5,sheet_y:23,sort_order:52},"🌅":{category:"Travel & Places",sheet_x:5,sheet_y:24,sort_order:53},"🌆":{category:"Travel & Places",sheet_x:5,sheet_y:25,sort_order:54},"🌇":{category:"Travel & Places",sheet_x:5,sheet_y:26,sort_order:55},"🌈":{category:"Travel & Places",sheet_x:5,sheet_y:27,sort_order:198},"🌉":{category:"Travel & Places",sheet_x:5,sheet_y:28,sort_order:56},"🌊":{category:"Travel & Places",sheet_x:5,sheet_y:29,sort_order:210},"🌋":{category:"Travel & Places",sheet_x:5,sheet_y:30,sort_order:10},"🌌":{category:"Travel & Places",sheet_x:5,sheet_y:31,sort_order:184},"🌍":{category:"Travel & Places",sheet_x:5,sheet_y:32,sort_order:1},"🌎":{category:"Travel & Places",sheet_x:5,sheet_y:33,sort_order:2},"🌏":{category:"Travel & Places",sheet_x:5,sheet_y:34,sort_order:3},"🌐":{category:"Travel & Places",sheet_x:5,sheet_y:35,sort_order:4},"🌑":{category:"Travel & Places",sheet_x:5,sheet_y:36,sort_order:164},"🌒":{category:"Travel & Places",sheet_x:5,sheet_y:37,sort_order:165},"🌓":{category:"Travel & Places",sheet_x:5,sheet_y:38,sort_order:166},"🌔":{category:"Travel & Places",sheet_x:5,sheet_y:39,sort_order:167},"🌕":{category:"Travel & Places",sheet_x:5,sheet_y:40,sort_order:168},"🌖":{category:"Travel & Places",sheet_x:5,sheet_y:41,sort_order:169},"🌗":{category:"Travel & Places",sheet_x:5,sheet_y:42,sort_order:170},"🌘":{category:"Travel & Places",sheet_x:5,sheet_y:43,sort_order:171},"🌙":{category:"Travel & Places",sheet_x:5,sheet_y:44,sort_order:172},"🌚":{category:"Travel & Places",sheet_x:5,sheet_y:45,sort_order:173},"🌛":{category:"Travel & Places",sheet_x:5,sheet_y:46,sort_order:174},"🌜":{category:"Travel & Places",sheet_x:5,sheet_y:47,sort_order:175},"🌝":{category:"Travel & Places",sheet_x:5,sheet_y:48,sort_order:178},"🌞":{category:"Travel & Places",sheet_x:5,sheet_y:49,sort_order:179},"🌟":{category:"Travel & Places",sheet_x:5,sheet_y:50,sort_order:182},"🌠":{category:"Travel & Places",sheet_x:5,sheet_y:51,sort_order:183},"🌡️":{category:"Travel & Places",sheet_x:5,sheet_y:52,sort_order:176},"🌤️":{category:"Travel & Places",sheet_x:5,sheet_y:53,sort_order:188},"🌥️":{category:"Travel & Places",sheet_x:5,sheet_y:54,sort_order:189},"🌦️":{category:"Travel & Places",sheet_x:5,sheet_y:55,sort_order:190},"🌧️":{category:"Travel & Places",sheet_x:5,sheet_y:56,sort_order:191},"🌨️":{category:"Travel & Places",sheet_x:6,sheet_y:0,sort_order:192},"🌩️":{category:"Travel & Places",sheet_x:6,sheet_y:1,sort_order:193},"🌪️":{category:"Travel & Places",sheet_x:6,sheet_y:2,sort_order:194},"🌫️":{category:"Travel & Places",sheet_x:6,sheet_y:3,sort_order:195},"🌬️":{category:"Travel & Places",sheet_x:6,sheet_y:4,sort_order:196},"🌭":{category:"Food & Drink",sheet_x:6,sheet_y:5,sort_order:47},"🌮":{category:"Food & Drink",sheet_x:6,sheet_y:6,sort_order:49},"🌯":{category:"Food & Drink",sheet_x:6,sheet_y:7,sort_order:50},"🌰":{category:"Food & Drink",sheet_x:6,sheet_y:8,sort_order:31},"🌱":{category:"Animals & Nature",sheet_x:6,sheet_y:9,sort_order:116},"🌲":{category:"Animals & Nature",sheet_x:6,sheet_y:10,sort_order:117},"🌳":{category:"Animals & Nature",sheet_x:6,sheet_y:11,sort_order:118},"🌴":{category:"Animals & Nature",sheet_x:6,sheet_y:12,sort_order:119},"🌵":{category:"Animals & Nature",sheet_x:6,sheet_y:13,sort_order:120},"🌶️":{category:"Food & Drink",sheet_x:6,sheet_y:14,sort_order:23},"🌷":{category:"Animals & Nature",sheet_x:6,sheet_y:15,sort_order:115},"🌸":{category:"Animals & Nature",sheet_x:6,sheet_y:16,sort_order:107},"🌹":{category:"Animals & Nature",sheet_x:6,sheet_y:17,sort_order:110},"🌺":{category:"Animals & Nature",sheet_x:6,sheet_y:18,sort_order:112},"🌻":{category:"Animals & Nature",sheet_x:6,sheet_y:19,sort_order:113},"🌼":{category:"Animals & Nature",sheet_x:6,sheet_y:20,sort_order:114},"🌽":{category:"Food & Drink",sheet_x:6,sheet_y:21,sort_order:22},"🌾":{category:"Animals & Nature",sheet_x:6,sheet_y:22,sort_order:121},"🌿":{category:"Animals & Nature",sheet_x:6,sheet_y:23,sort_order:122},"🍀":{category:"Animals & Nature",sheet_x:6,sheet_y:24,sort_order:124},"🍁":{category:"Animals & Nature",sheet_x:6,sheet_y:25,sort_order:125},"🍂":{category:"Animals & Nature",sheet_x:6,sheet_y:26,sort_order:126},"🍃":{category:"Animals & Nature",sheet_x:6,sheet_y:27,sort_order:127},"🍄":{category:"Food & Drink",sheet_x:6,sheet_y:28,sort_order:29},"🍅":{category:"Food & Drink",sheet_x:6,sheet_y:29,sort_order:16},"🍆":{category:"Food & Drink",sheet_x:6,sheet_y:30,sort_order:19},"🍇":{category:"Food & Drink",sheet_x:6,sheet_y:31,sort_order:1},"🍈":{category:"Food & Drink",sheet_x:6,sheet_y:32,sort_order:2},"🍉":{category:"Food & Drink",sheet_x:6,sheet_y:33,sort_order:3},"🍊":{category:"Food & Drink",sheet_x:6,sheet_y:34,sort_order:4},"🍋":{category:"Food & Drink",sheet_x:6,sheet_y:35,sort_order:5},"🍌":{category:"Food & Drink",sheet_x:6,sheet_y:36,sort_order:6},"🍍":{category:"Food & Drink",sheet_x:6,sheet_y:37,sort_order:7},"🍎":{category:"Food & Drink",sheet_x:6,sheet_y:38,sort_order:9},"🍏":{category:"Food & Drink",sheet_x:6,sheet_y:39,sort_order:10},"🍐":{category:"Food & Drink",sheet_x:6,sheet_y:40,sort_order:11},"🍑":{category:"Food & Drink",sheet_x:6,sheet_y:41,sort_order:12},"🍒":{category:"Food & Drink",sheet_x:6,sheet_y:42,sort_order:13},"🍓":{category:"Food & Drink",sheet_x:6,sheet_y:43,sort_order:14},"🍔":{category:"Food & Drink",sheet_x:6,sheet_y:44,sort_order:44},"🍕":{category:"Food & Drink",sheet_x:6,sheet_y:45,sort_order:46},"🍖":{category:"Food & Drink",sheet_x:6,sheet_y:46,sort_order:40},"🍗":{category:"Food & Drink",sheet_x:6,sheet_y:47,sort_order:41},"🍘":{category:"Food & Drink",sheet_x:6,sheet_y:48,sort_order:64},"🍙":{category:"Food & Drink",sheet_x:6,sheet_y:49,sort_order:65},"🍚":{category:"Food & Drink",sheet_x:6,sheet_y:50,sort_order:66},"🍛":{category:"Food & Drink",sheet_x:6,sheet_y:51,sort_order:67},"🍜":{category:"Food & Drink",sheet_x:6,sheet_y:52,sort_order:68},"🍝":{category:"Food & Drink",sheet_x:6,sheet_y:53,sort_order:69},"🍞":{category:"Food & Drink",sheet_x:6,sheet_y:54,sort_order:32},"🍟":{category:"Food & Drink",sheet_x:6,sheet_y:55,sort_order:45},"🍠":{category:"Food & Drink",sheet_x:6,sheet_y:56,sort_order:70},"🍡":{category:"Food & Drink",sheet_x:7,sheet_y:0,sort_order:76},"🍢":{category:"Food & Drink",sheet_x:7,sheet_y:1,sort_order:71},"🍣":{category:"Food & Drink",sheet_x:7,sheet_y:2,sort_order:72},"🍤":{category:"Food & Drink",sheet_x:7,sheet_y:3,sort_order:73},"🍥":{category:"Food & Drink",sheet_x:7,sheet_y:4,sort_order:74},"🍦":{category:"Food & Drink",sheet_x:7,sheet_y:5,sort_order:85},"🍧":{category:"Food & Drink",sheet_x:7,sheet_y:6,sort_order:86},"🍨":{category:"Food & Drink",sheet_x:7,sheet_y:7,sort_order:87},"🍩":{category:"Food & Drink",sheet_x:7,sheet_y:8,sort_order:88},"🍪":{category:"Food & Drink",sheet_x:7,sheet_y:9,sort_order:89},"🍫":{category:"Food & Drink",sheet_x:7,sheet_y:10,sort_order:94},"🍬":{category:"Food & Drink",sheet_x:7,sheet_y:11,sort_order:95},"🍭":{category:"Food & Drink",sheet_x:7,sheet_y:12,sort_order:96},"🍮":{category:"Food & Drink",sheet_x:7,sheet_y:13,sort_order:97},"🍯":{category:"Food & Drink",sheet_x:7,sheet_y:14,sort_order:98},"🍰":{category:"Food & Drink",sheet_x:7,sheet_y:15,sort_order:91},"🍱":{category:"Food & Drink",sheet_x:7,sheet_y:16,sort_order:63},"🍲":{category:"Food & Drink",sheet_x:7,sheet_y:17,sort_order:56},"🍳":{category:"Food & Drink",sheet_x:7,sheet_y:18,sort_order:54},"🍴":{category:"Food & Drink",sheet_x:7,sheet_y:19,sort_order:118},"🍵":{category:"Food & Drink",sheet_x:7,sheet_y:20,sort_order:102},"🍶":{category:"Food & Drink",sheet_x:7,sheet_y:21,sort_order:103},"🍷":{category:"Food & Drink",sheet_x:7,sheet_y:22,sort_order:105},"🍸":{category:"Food & Drink",sheet_x:7,sheet_y:23,sort_order:106},"🍹":{category:"Food & Drink",sheet_x:7,sheet_y:24,sort_order:107},"🍺":{category:"Food & Drink",sheet_x:7,sheet_y:25,sort_order:108},"🍻":{category:"Food & Drink",sheet_x:7,sheet_y:26,sort_order:109},"🍼":{category:"Food & Drink",sheet_x:7,sheet_y:27,sort_order:99},"🍽️":{category:"Food & Drink",sheet_x:7,sheet_y:28,sort_order:117},"🍾":{category:"Food & Drink",sheet_x:7,sheet_y:29,sort_order:104},"🍿":{category:"Food & Drink",sheet_x:7,sheet_y:30,sort_order:59},"🎀":{category:"Activities",sheet_x:7,sheet_y:31,sort_order:17},"🎁":{category:"Activities",sheet_x:7,sheet_y:32,sort_order:18},"🎂":{category:"Food & Drink",sheet_x:7,sheet_y:33,sort_order:90},"🎃":{category:"Activities",sheet_x:7,sheet_y:34,sort_order:1},"🎄":{category:"Activities",sheet_x:7,sheet_y:35,sort_order:2},"🎅":{category:"People & Body",sheet_x:7,sheet_y:36,sort_order:177},"🎆":{category:"Activities",sheet_x:7,sheet_y:42,sort_order:3},"🎇":{category:"Activities",sheet_x:7,sheet_y:43,sort_order:4},"🎈":{category:"Activities",sheet_x:7,sheet_y:44,sort_order:7},"🎉":{category:"Activities",sheet_x:7,sheet_y:45,sort_order:8},"🎊":{category:"Activities",sheet_x:7,sheet_y:46,sort_order:9},"🎋":{category:"Activities",sheet_x:7,sheet_y:47,sort_order:10},"🎌":{category:"Flags",sheet_x:7,sheet_y:48,sort_order:3},"🎍":{category:"Activities",sheet_x:7,sheet_y:49,sort_order:11},"🎎":{category:"Activities",sheet_x:7,sheet_y:50,sort_order:12},"🎏":{category:"Activities",sheet_x:7,sheet_y:51,sort_order:13},"🎐":{category:"Activities",sheet_x:7,sheet_y:52,sort_order:14},"🎑":{category:"Activities",sheet_x:7,sheet_y:53,sort_order:15},"🎒":{category:"Objects",sheet_x:7,sheet_y:54,sort_order:25},"🎓":{category:"Objects",sheet_x:7,sheet_y:55,sort_order:37},"🎖️":{category:"Activities",sheet_x:7,sheet_y:56,sort_order:22},"🎗️":{category:"Activities",sheet_x:8,sheet_y:0,sort_order:19},"🎙️":{category:"Objects",sheet_x:8,sheet_y:1,sort_order:56},"🎚️":{category:"Objects",sheet_x:8,sheet_y:2,sort_order:57},"🎛️":{category:"Objects",sheet_x:8,sheet_y:3,sort_order:58},"🎞️":{category:"Objects",sheet_x:8,sheet_y:4,sort_order:89},"🎟️":{category:"Activities",sheet_x:8,sheet_y:5,sort_order:20},"🎠":{category:"Travel & Places",sheet_x:8,sheet_y:6,sort_order:58},"🎡":{category:"Travel & Places",sheet_x:8,sheet_y:7,sort_order:59},"🎢":{category:"Travel & Places",sheet_x:8,sheet_y:8,sort_order:60},"🎣":{category:"Activities",sheet_x:8,sheet_y:9,sort_order:49},"🎤":{category:"Objects",sheet_x:8,sheet_y:10,sort_order:59},"🎥":{category:"Objects",sheet_x:8,sheet_y:11,sort_order:88},"🎦":{category:"Symbols",sheet_x:8,sheet_y:12,sort_order:91},"🎧":{category:"Objects",sheet_x:8,sheet_y:13,sort_order:60},"🎨":{category:"Activities",sheet_x:8,sheet_y:14,sort_order:77},"🎩":{category:"Objects",sheet_x:8,sheet_y:15,sort_order:36},"🎪":{category:"Travel & Places",sheet_x:8,sheet_y:16,sort_order:62},"🎫":{category:"Activities",sheet_x:8,sheet_y:17,sort_order:21},"🎬":{category:"Objects",sheet_x:8,sheet_y:18,sort_order:91},"🎭":{category:"Activities",sheet_x:8,sheet_y:19,sort_order:75},"🎮":{category:"Activities",sheet_x:8,sheet_y:20,sort_order:61},"🎯":{category:"Activities",sheet_x:8,sheet_y:21,sort_order:55},"🎰":{category:"Activities",sheet_x:8,sheet_y:22,sort_order:63},"🎱":{category:"Activities",sheet_x:8,sheet_y:23,sort_order:58},"🎲":{category:"Activities",sheet_x:8,sheet_y:24,sort_order:64},"🎳":{category:"Activities",sheet_x:8,sheet_y:25,sort_order:37},"🎴":{category:"Activities",sheet_x:8,sheet_y:26,sort_order:74},"🎵":{category:"Objects",sheet_x:8,sheet_y:27,sort_order:54},"🎶":{category:"Objects",sheet_x:8,sheet_y:28,sort_order:55},"🎷":{category:"Objects",sheet_x:8,sheet_y:29,sort_order:62},"🎸":{category:"Objects",sheet_x:8,sheet_y:30,sort_order:63},"🎹":{category:"Objects",sheet_x:8,sheet_y:31,sort_order:64},"🎺":{category:"Objects",sheet_x:8,sheet_y:32,sort_order:65},"🎻":{category:"Objects",sheet_x:8,sheet_y:33,sort_order:66},"🎼":{category:"Objects",sheet_x:8,sheet_y:34,sort_order:53},"🎽":{category:"Activities",sheet_x:8,sheet_y:35,sort_order:51},"🎾":{category:"Activities",sheet_x:8,sheet_y:36,sort_order:35},"🎿":{category:"Activities",sheet_x:8,sheet_y:37,sort_order:52},"🏀":{category:"Activities",sheet_x:8,sheet_y:38,sort_order:31},"🏁":{category:"Flags",sheet_x:8,sheet_y:39,sort_order:1},"🏂":{category:"People & Body",sheet_x:8,sheet_y:40,sort_order:248},"🏃‍♀️":{category:"People & Body",sheet_x:8,sheet_y:46,sort_order:232},"🏃‍♂️":{category:"People & Body",sheet_x:8,sheet_y:52,sort_order:231},"🏃":{category:"People & Body",sheet_x:9,sheet_y:1,sort_order:230},"🏄‍♀️":{category:"People & Body",sheet_x:9,sheet_y:7,sort_order:254},"🏄‍♂️":{category:"People & Body",sheet_x:9,sheet_y:13,sort_order:253},"🏄":{category:"People & Body",sheet_x:9,sheet_y:19,sort_order:252},"🏅":{category:"Activities",sheet_x:9,sheet_y:25,sort_order:24},"🏆":{category:"Activities",sheet_x:9,sheet_y:26,sort_order:23},"🏇":{category:"People & Body",sheet_x:9,sheet_y:27,sort_order:246},"🏈":{category:"Activities",sheet_x:9,sheet_y:33,sort_order:33},"🏉":{category:"Activities",sheet_x:9,sheet_y:34,sort_order:34},"🏊‍♀️":{category:"People & Body",sheet_x:9,sheet_y:35,sort_order:260},"🏊‍♂️":{category:"People & Body",sheet_x:9,sheet_y:41,sort_order:259},"🏊":{category:"People & Body",sheet_x:9,sheet_y:47,sort_order:258},"🏋️‍♀️":{category:"People & Body",sheet_x:9,sheet_y:53,sort_order:266},"🏋️‍♂️":{category:"People & Body",sheet_x:10,sheet_y:2,sort_order:265},"🏋️":{category:"People & Body",sheet_x:10,sheet_y:8,sort_order:264},"🏌️‍♀️":{category:"People & Body",sheet_x:10,sheet_y:14,sort_order:251},"🏌️‍♂️":{category:"People & Body",sheet_x:10,sheet_y:20,sort_order:250},"🏌️":{category:"People & Body",sheet_x:10,sheet_y:26,sort_order:249},"🏍️":{category:"Travel & Places",sheet_x:10,sheet_y:32,sort_order:92},"🏎️":{category:"Travel & Places",sheet_x:10,sheet_y:33,sort_order:91},"🏏":{category:"Activities",sheet_x:10,sheet_y:34,sort_order:38},"🏐":{category:"Activities",sheet_x:10,sheet_y:35,sort_order:32},"🏑":{category:"Activities",sheet_x:10,sheet_y:36,sort_order:39},"🏒":{category:"Activities",sheet_x:10,sheet_y:37,sort_order:40},"🏓":{category:"Activities",sheet_x:10,sheet_y:38,sort_order:42},"🏔️":{category:"Travel & Places",sheet_x:10,sheet_y:39,sort_order:8},"🏕️":{category:"Travel & Places",sheet_x:10,sheet_y:40,sort_order:12},"🏖️":{category:"Travel & Places",sheet_x:10,sheet_y:41,sort_order:13},"🏗️":{category:"Travel & Places",sheet_x:10,sheet_y:42,sort_order:19},"🏘️":{category:"Travel & Places",sheet_x:10,sheet_y:43,sort_order:21},"🏙️":{category:"Travel & Places",sheet_x:10,sheet_y:44,sort_order:51},"🏚️":{category:"Travel & Places",sheet_x:10,sheet_y:45,sort_order:22},"🏛️":{category:"Travel & Places",sheet_x:10,sheet_y:46,sort_order:18},"🏜️":{category:"Travel & Places",sheet_x:10,sheet_y:47,sort_order:14},"🏝️":{category:"Travel & Places",sheet_x:10,sheet_y:48,sort_order:15},"🏞️":{category:"Travel & Places",sheet_x:10,sheet_y:49,sort_order:16},"🏟️":{category:"Travel & Places",sheet_x:10,sheet_y:50,sort_order:17},"🏠":{category:"Travel & Places",sheet_x:10,sheet_y:51,sort_order:23},"🏡":{category:"Travel & Places",sheet_x:10,sheet_y:52,sort_order:24},"🏢":{category:"Travel & Places",sheet_x:10,sheet_y:53,sort_order:25},"🏣":{category:"Travel & Places",sheet_x:10,sheet_y:54,sort_order:26},"🏤":{category:"Travel & Places",sheet_x:10,sheet_y:55,sort_order:27},"🏥":{category:"Travel & Places",sheet_x:10,sheet_y:56,sort_order:28},"🏦":{category:"Travel & Places",sheet_x:11,sheet_y:0,sort_order:29},"🏧":{category:"Symbols",sheet_x:11,sheet_y:1,sort_order:1},"🏨":{category:"Travel & Places",sheet_x:11,sheet_y:2,sort_order:30},"🏩":{category:"Travel & Places",sheet_x:11,sheet_y:3,sort_order:31},"🏪":{category:"Travel & Places",sheet_x:11,sheet_y:4,sort_order:32},"🏫":{category:"Travel & Places",sheet_x:11,sheet_y:5,sort_order:33},"🏬":{category:"Travel & Places",sheet_x:11,sheet_y:6,sort_order:34},"🏭":{category:"Travel & Places",sheet_x:11,sheet_y:7,sort_order:35},"🏮":{category:"Objects",sheet_x:11,sheet_y:8,sort_order:102},"🏯":{category:"Travel & Places",sheet_x:11,sheet_y:9,sort_order:36},"🏰":{category:"Travel & Places",sheet_x:11,sheet_y:10,sort_order:37},"🏳️‍🌈":{category:"Flags",sheet_x:11,sheet_y:11,sort_order:6},"🏳️":{category:"Flags",sheet_x:11,sheet_y:12,sort_order:5},"🏴‍☠️":{category:"Flags",sheet_x:11,sheet_y:13,sort_order:7},"🏴󠁧󠁢󠁥󠁮󠁧󠁿":{category:"Flags",sheet_x:11,sheet_y:14,sort_order:266},"🏴󠁧󠁢󠁳󠁣󠁴󠁿":{category:"Flags",sheet_x:11,sheet_y:15,sort_order:267},"🏴󠁧󠁢󠁷󠁬󠁳󠁿":{category:"Flags",sheet_x:11,sheet_y:16,sort_order:268},"🏴":{category:"Flags",sheet_x:11,sheet_y:17,sort_order:4},"🏵️":{category:"Animals & Nature",sheet_x:11,sheet_y:18,sort_order:109},"🏷️":{category:"Objects",sheet_x:11,sheet_y:19,sort_order:120},"🏸":{category:"Activities",sheet_x:11,sheet_y:20,sort_order:43},"🏹":{category:"Objects",sheet_x:11,sheet_y:21,sort_order:189},"🏺":{category:"Food & Drink",sheet_x:11,sheet_y:22,sort_order:121},"🏻":{category:"Skin Tones",sheet_x:11,sheet_y:23,sort_order:1},"🏼":{category:"Skin Tones",sheet_x:11,sheet_y:24,sort_order:2},"🏽":{category:"Skin Tones",sheet_x:11,sheet_y:25,sort_order:3},"🏾":{category:"Skin Tones",sheet_x:11,sheet_y:26,sort_order:4},"🏿":{category:"Skin Tones",sheet_x:11,sheet_y:27,sort_order:5},"🐀":{category:"Animals & Nature",sheet_x:11,sheet_y:28,sort_order:44},"🐁":{category:"Animals & Nature",sheet_x:11,sheet_y:29,sort_order:43},"🐂":{category:"Animals & Nature",sheet_x:11,sheet_y:30,sort_order:25},"🐃":{category:"Animals & Nature",sheet_x:11,sheet_y:31,sort_order:26},"🐄":{category:"Animals & Nature",sheet_x:11,sheet_y:32,sort_order:27},"🐅":{category:"Animals & Nature",sheet_x:11,sheet_y:33,sort_order:17},"🐆":{category:"Animals & Nature",sheet_x:11,sheet_y:34,sort_order:18},"🐇":{category:"Animals & Nature",sheet_x:11,sheet_y:35,sort_order:47},"🐈":{category:"Animals & Nature",sheet_x:11,sheet_y:36,sort_order:14},"🐉":{category:"Animals & Nature",sheet_x:11,sheet_y:37,sort_order:82},"🐊":{category:"Animals & Nature",sheet_x:11,sheet_y:38,sort_order:77},"🐋":{category:"Animals & Nature",sheet_x:11,sheet_y:39,sort_order:86},"🐌":{category:"Animals & Nature",sheet_x:11,sheet_y:40,sort_order:94},"🐍":{category:"Animals & Nature",sheet_x:11,sheet_y:41,sort_order:80},"🐎":{category:"Animals & Nature",sheet_x:11,sheet_y:42,sort_order:20},"🐏":{category:"Animals & Nature",sheet_x:11,sheet_y:43,sort_order:32},"🐐":{category:"Animals & Nature",sheet_x:11,sheet_y:44,sort_order:34},"🐑":{category:"Animals & Nature",sheet_x:11,sheet_y:45,sort_order:33},"🐒":{category:"Animals & Nature",sheet_x:11,sheet_y:46,sort_order:2},"🐓":{category:"Animals & Nature",sheet_x:11,sheet_y:47,sort_order:62},"🐔":{category:"Animals & Nature",sheet_x:11,sheet_y:48,sort_order:61},"🐕‍🦺":{category:"Animals & Nature",sheet_x:11,sheet_y:49,sort_order:8},"🐕":{category:"Animals & Nature",sheet_x:11,sheet_y:50,sort_order:6},"🐖":{category:"Animals & Nature",sheet_x:11,sheet_y:51,sort_order:29},"🐗":{category:"Animals & Nature",sheet_x:11,sheet_y:52,sort_order:30},"🐘":{category:"Animals & Nature",sheet_x:11,sheet_y:53,sort_order:39},"🐙":{category:"Animals & Nature",sheet_x:11,sheet_y:54,sort_order:92},"🐚":{category:"Animals & Nature",sheet_x:11,sheet_y:55,sort_order:93},"🐛":{category:"Animals & Nature",sheet_x:11,sheet_y:56,sort_order:96},"🐜":{category:"Animals & Nature",sheet_x:12,sheet_y:0,sort_order:97},"🐝":{category:"Animals & Nature",sheet_x:12,sheet_y:1,sort_order:98},"🐞":{category:"Animals & Nature",sheet_x:12,sheet_y:2,sort_order:99},"🐟":{category:"Animals & Nature",sheet_x:12,sheet_y:3,sort_order:88},"🐠":{category:"Animals & Nature",sheet_x:12,sheet_y:4,sort_order:89},"🐡":{category:"Animals & Nature",sheet_x:12,sheet_y:5,sort_order:90},"🐢":{category:"Animals & Nature",sheet_x:12,sheet_y:6,sort_order:78},"🐣":{category:"Animals & Nature",sheet_x:12,sheet_y:7,sort_order:63},"🐤":{category:"Animals & Nature",sheet_x:12,sheet_y:8,sort_order:64},"🐥":{category:"Animals & Nature",sheet_x:12,sheet_y:9,sort_order:65},"🐦":{category:"Animals & Nature",sheet_x:12,sheet_y:10,sort_order:66},"🐧":{category:"Animals & Nature",sheet_x:12,sheet_y:11,sort_order:67},"🐨":{category:"Animals & Nature",sheet_x:12,sheet_y:12,sort_order:52},"🐩":{category:"Animals & Nature",sheet_x:12,sheet_y:13,sort_order:9},"🐪":{category:"Animals & Nature",sheet_x:12,sheet_y:14,sort_order:35},"🐫":{category:"Animals & Nature",sheet_x:12,sheet_y:15,sort_order:36},"🐬":{category:"Animals & Nature",sheet_x:12,sheet_y:16,sort_order:87},"🐭":{category:"Animals & Nature",sheet_x:12,sheet_y:17,sort_order:42},"🐮":{category:"Animals & Nature",sheet_x:12,sheet_y:18,sort_order:24},"🐯":{category:"Animals & Nature",sheet_x:12,sheet_y:19,sort_order:16},"🐰":{category:"Animals & Nature",sheet_x:12,sheet_y:20,sort_order:46},"🐱":{category:"Animals & Nature",sheet_x:12,sheet_y:21,sort_order:13},"🐲":{category:"Animals & Nature",sheet_x:12,sheet_y:22,sort_order:81},"🐳":{category:"Animals & Nature",sheet_x:12,sheet_y:23,sort_order:85},"🐴":{category:"Animals & Nature",sheet_x:12,sheet_y:24,sort_order:19},"🐵":{category:"Animals & Nature",sheet_x:12,sheet_y:25,sort_order:1},"🐶":{category:"Animals & Nature",sheet_x:12,sheet_y:26,sort_order:5},"🐷":{category:"Animals & Nature",sheet_x:12,sheet_y:27,sort_order:28},"🐸":{category:"Animals & Nature",sheet_x:12,sheet_y:28,sort_order:76},"🐹":{category:"Animals & Nature",sheet_x:12,sheet_y:29,sort_order:45},"🐺":{category:"Animals & Nature",sheet_x:12,sheet_y:30,sort_order:10},"🐻":{category:"Animals & Nature",sheet_x:12,sheet_y:31,sort_order:51},"🐼":{category:"Animals & Nature",sheet_x:12,sheet_y:32,sort_order:53},"🐽":{category:"Animals & Nature",sheet_x:12,sheet_y:33,sort_order:31},"🐾":{category:"Animals & Nature",sheet_x:12,sheet_y:34,sort_order:59},"🐿️":{category:"Animals & Nature",sheet_x:12,sheet_y:35,sort_order:48},"👀":{category:"People & Body",sheet_x:12,sheet_y:36,sort_order:45},"👁️‍🗨️":{category:"Smileys & Emotion",sheet_x:12,sheet_y:37,sort_order:145},"👁️":{category:"People & Body",sheet_x:12,sheet_y:38,sort_order:46},"👂":{category:"People & Body",sheet_x:12,sheet_y:39,sort_order:39},"👃":{category:"People & Body",sheet_x:12,sheet_y:45,sort_order:41},"👄":{category:"People & Body",sheet_x:12,sheet_y:51,sort_order:48},"👅":{category:"People & Body",sheet_x:12,sheet_y:52,sort_order:47},"👆":{category:"People & Body",sheet_x:12,sheet_y:53,sort_order:15},"👇":{category:"People & Body",sheet_x:13,sheet_y:2,sort_order:17},"👈":{category:"People & Body",sheet_x:13,sheet_y:8,sort_order:13},"👉":{category:"People & Body",sheet_x:13,sheet_y:14,sort_order:14},"👊":{category:"People & Body",sheet_x:13,sheet_y:20,sort_order:22},"👋":{category:"People & Body",sheet_x:13,sheet_y:26,sort_order:1},"👌":{category:"People & Body",sheet_x:13,sheet_y:32,sort_order:6},"👍":{category:"People & Body",sheet_x:13,sheet_y:38,sort_order:19},"👎":{category:"People & Body",sheet_x:13,sheet_y:44,sort_order:20},"👏":{category:"People & Body",sheet_x:13,sheet_y:50,sort_order:25},"👐":{category:"People & Body",sheet_x:13,sheet_y:56,sort_order:27},"👑":{category:"Objects",sheet_x:14,sheet_y:5,sort_order:34},"👒":{category:"Objects",sheet_x:14,sheet_y:6,sort_order:35},"👓":{category:"Objects",sheet_x:14,sheet_y:7,sort_order:1},"👔":{category:"Objects",sheet_x:14,sheet_y:8,sort_order:6},"👕":{category:"Objects",sheet_x:14,sheet_y:9,sort_order:7},"👖":{category:"Objects",sheet_x:14,sheet_y:10,sort_order:8},"👗":{category:"Objects",sheet_x:14,sheet_y:11,sort_order:13},"👘":{category:"Objects",sheet_x:14,sheet_y:12,sort_order:14},"👙":{category:"Objects",sheet_x:14,sheet_y:13,sort_order:19},"👚":{category:"Objects",sheet_x:14,sheet_y:14,sort_order:20},"👛":{category:"Objects",sheet_x:14,sheet_y:15,sort_order:21},"👜":{category:"Objects",sheet_x:14,sheet_y:16,sort_order:22},"👝":{category:"Objects",sheet_x:14,sheet_y:17,sort_order:23},"👞":{category:"Objects",sheet_x:14,sheet_y:18,sort_order:26},"👟":{category:"Objects",sheet_x:14,sheet_y:19,sort_order:27},"👠":{category:"Objects",sheet_x:14,sheet_y:20,sort_order:30},"👡":{category:"Objects",sheet_x:14,sheet_y:21,sort_order:31},"👢":{category:"Objects",sheet_x:14,sheet_y:22,sort_order:33},"👣":{category:"People & Body",sheet_x:14,sheet_y:23,sort_order:334},"👤":{category:"People & Body",sheet_x:14,sheet_y:24,sort_order:332},"👥":{category:"People & Body",sheet_x:14,sheet_y:25,sort_order:333},"👦":{category:"People & Body",sheet_x:14,sheet_y:26,sort_order:51},"👧":{category:"People & Body",sheet_x:14,sheet_y:32,sort_order:52},"👨‍🌾":{category:"People & Body",sheet_x:14,sheet_y:38,sort_order:118},"👨‍🍳":{category:"People & Body",sheet_x:14,sheet_y:44,sort_order:121},"👨‍🎓":{category:"People & Body",sheet_x:14,sheet_y:50,sort_order:109},"👨‍🎤":{category:"People & Body",sheet_x:14,sheet_y:56,sort_order:139},"👨‍🎨":{category:"People & Body",sheet_x:15,sheet_y:5,sort_order:142},"👨‍🏫":{category:"People & Body",sheet_x:15,sheet_y:11,sort_order:112},"👨‍🏭":{category:"People & Body",sheet_x:15,sheet_y:17,sort_order:127},"👨‍👦‍👦":{category:"People & Body",sheet_x:15,sheet_y:23,sort_order:322},"👨‍👦":{category:"People & Body",sheet_x:15,sheet_y:24,sort_order:321},"👨‍👧‍👦":{category:"People & Body",sheet_x:15,sheet_y:25,sort_order:324},"👨‍👧‍👧":{category:"People & Body",sheet_x:15,sheet_y:26,sort_order:325},"👨‍👧":{category:"People & Body",sheet_x:15,sheet_y:27,sort_order:323},"👨‍👨‍👦":{category:"People & Body",sheet_x:15,sheet_y:28,sort_order:311},"👨‍👨‍👦‍👦":{category:"People & Body",sheet_x:15,sheet_y:29,sort_order:314},"👨‍👨‍👧":{category:"People & Body",sheet_x:15,sheet_y:30,sort_order:312},"👨‍👨‍👧‍👦":{category:"People & Body",sheet_x:15,sheet_y:31,sort_order:313},"👨‍👨‍👧‍👧":{category:"People & Body",sheet_x:15,sheet_y:32,sort_order:315},"👨‍👩‍👦":{category:"People & Body",sheet_x:15,sheet_y:33,sort_order:306},"👨‍👩‍👦‍👦":{category:"People & Body",sheet_x:15,sheet_y:34,sort_order:309},"👨‍👩‍👧":{category:"People & Body",sheet_x:15,sheet_y:35,sort_order:307},"👨‍👩‍👧‍👦":{category:"People & Body",sheet_x:15,sheet_y:36,sort_order:308},"👨‍👩‍👧‍👧":{category:"People & Body",sheet_x:15,sheet_y:37,sort_order:310},"👨‍💻":{category:"People & Body",sheet_x:15,sheet_y:38,sort_order:136},"👨‍💼":{category:"People & Body",sheet_x:15,sheet_y:44,sort_order:130},"👨‍🔧":{category:"People & Body",sheet_x:15,sheet_y:50,sort_order:124},"👨‍🔬":{category:"People & Body",sheet_x:15,sheet_y:56,sort_order:133},"👨‍🚀":{category:"People & Body",sheet_x:16,sheet_y:5,sort_order:148},"👨‍🚒":{category:"People & Body",sheet_x:16,sheet_y:11,sort_order:151},"👨‍🦯":{category:"People & Body",sheet_x:16,sheet_y:17,sort_order:222},"👨‍🦰":{category:"People & Body",sheet_x:16,sheet_y:23,sort_order:57},"👨‍🦱":{category:"People & Body",sheet_x:16,sheet_y:29,sort_order:58},"👨‍🦲":{category:"People & Body",sheet_x:16,sheet_y:35,sort_order:60},"👨‍🦳":{category:"People & Body",sheet_x:16,sheet_y:41,sort_order:59},"👨‍🦼":{category:"People & Body",sheet_x:16,sheet_y:47,sort_order:225},"👨‍🦽":{category:"People & Body",sheet_x:16,sheet_y:53,sort_order:228},"👨‍⚕️":{category:"People & Body",sheet_x:17,sheet_y:2,sort_order:106},"👨‍⚖️":{category:"People & Body",sheet_x:17,sheet_y:8,sort_order:115},"👨‍✈️":{category:"People & Body",sheet_x:17,sheet_y:14,sort_order:145},"👨‍❤️‍👨":{category:"People & Body",sheet_x:17,sheet_y:20,sort_order:303},"👨‍❤️‍💋‍👨":{category:"People & Body",sheet_x:17,sheet_y:21,sort_order:299},"👨":{category:"People & Body",sheet_x:17,sheet_y:22,sort_order:55},"👩‍🌾":{category:"People & Body",sheet_x:17,sheet_y:28,sort_order:119},"👩‍🍳":{category:"People & Body",sheet_x:17,sheet_y:34,sort_order:122},"👩‍🎓":{category:"People & Body",sheet_x:17,sheet_y:40,sort_order:110},"👩‍🎤":{category:"People & Body",sheet_x:17,sheet_y:46,sort_order:140},"👩‍🎨":{category:"People & Body",sheet_x:17,sheet_y:52,sort_order:143},"👩‍🏫":{category:"People & Body",sheet_x:18,sheet_y:1,sort_order:113},"👩‍🏭":{category:"People & Body",sheet_x:18,sheet_y:7,sort_order:128},"👩‍👦‍👦":{category:"People & Body",sheet_x:18,sheet_y:13,sort_order:327},"👩‍👦":{category:"People & Body",sheet_x:18,sheet_y:14,sort_order:326},"👩‍👧‍👦":{category:"People & Body",sheet_x:18,sheet_y:15,sort_order:329},"👩‍👧‍👧":{category:"People & Body",sheet_x:18,sheet_y:16,sort_order:330},"👩‍👧":{category:"People & Body",sheet_x:18,sheet_y:17,sort_order:328},"👩‍👩‍👦":{category:"People & Body",sheet_x:18,sheet_y:18,sort_order:316},"👩‍👩‍👦‍👦":{category:"People & Body",sheet_x:18,sheet_y:19,sort_order:319},"👩‍👩‍👧":{category:"People & Body",sheet_x:18,sheet_y:20,sort_order:317},"👩‍👩‍👧‍👦":{category:"People & Body",sheet_x:18,sheet_y:21,sort_order:318},"👩‍👩‍👧‍👧":{category:"People & Body",sheet_x:18,sheet_y:22,sort_order:320},"👩‍💻":{category:"People & Body",sheet_x:18,sheet_y:23,sort_order:137},"👩‍💼":{category:"People & Body",sheet_x:18,sheet_y:29,sort_order:131},"👩‍🔧":{category:"People & Body",sheet_x:18,sheet_y:35,sort_order:125},"👩‍🔬":{category:"People & Body",sheet_x:18,sheet_y:41,sort_order:134},"👩‍🚀":{category:"People & Body",sheet_x:18,sheet_y:47,sort_order:149},"👩‍🚒":{category:"People & Body",sheet_x:18,sheet_y:53,sort_order:152},"👩‍🦯":{category:"People & Body",sheet_x:19,sheet_y:2,sort_order:223},"👩‍🦰":{category:"People & Body",sheet_x:19,sheet_y:8,sort_order:62},"👩‍🦱":{category:"People & Body",sheet_x:19,sheet_y:14,sort_order:64},"👩‍🦲":{category:"People & Body",sheet_x:19,sheet_y:20,sort_order:68},"👩‍🦳":{category:"People & Body",sheet_x:19,sheet_y:26,sort_order:66},"👩‍🦼":{category:"People & Body",sheet_x:19,sheet_y:32,sort_order:226},"👩‍🦽":{category:"People & Body",sheet_x:19,sheet_y:38,sort_order:229},"👩‍⚕️":{category:"People & Body",sheet_x:19,sheet_y:44,sort_order:107},"👩‍⚖️":{category:"People & Body",sheet_x:19,sheet_y:50,sort_order:116},"👩‍✈️":{category:"People & Body",sheet_x:19,sheet_y:56,sort_order:146},"👩‍❤️‍👨":{category:"People & Body",sheet_x:20,sheet_y:5,sort_order:302},"👩‍❤️‍👩":{category:"People & Body",sheet_x:20,sheet_y:6,sort_order:304},"👩‍❤️‍💋‍👨":{category:"People & Body",sheet_x:20,sheet_y:7,sort_order:298},"👩‍❤️‍💋‍👩":{category:"People & Body",sheet_x:20,sheet_y:8,sort_order:300},"👩":{category:"People & Body",sheet_x:20,sheet_y:9,sort_order:61},"👪":{category:"People & Body",sheet_x:20,sheet_y:15,sort_order:305},"👫":{category:"People & Body",sheet_x:20,sheet_y:16,sort_order:295},"👬":{category:"People & Body",sheet_x:20,sheet_y:42,sort_order:296},"👭":{category:"People & Body",sheet_x:21,sheet_y:11,sort_order:294},"👮‍♀️":{category:"People & Body",sheet_x:21,sheet_y:37,sort_order:155},"👮‍♂️":{category:"People & Body",sheet_x:21,sheet_y:43,sort_order:154},"👮":{category:"People & Body",sheet_x:21,sheet_y:49,sort_order:153},"👯‍♀️":{category:"People & Body",sheet_x:21,sheet_y:55,sort_order:238},"👯‍♂️":{category:"People & Body",sheet_x:21,sheet_y:56,sort_order:237},"👯":{category:"People & Body",sheet_x:22,sheet_y:0,sort_order:236},"👰":{category:"People & Body",sheet_x:22,sheet_y:1,sort_order:173},"👱‍♀️":{category:"People & Body",sheet_x:22,sheet_y:7,sort_order:70},"👱‍♂️":{category:"People & Body",sheet_x:22,sheet_y:13,sort_order:71},"👱":{category:"People & Body",sheet_x:22,sheet_y:19,sort_order:54},"👲":{category:"People & Body",sheet_x:22,sheet_y:25,sort_order:170},"👳‍♀️":{category:"People & Body",sheet_x:22,sheet_y:31,sort_order:169},"👳‍♂️":{category:"People & Body",sheet_x:22,sheet_y:37,sort_order:168},"👳":{category:"People & Body",sheet_x:22,sheet_y:43,sort_order:167},"👴":{category:"People & Body",sheet_x:22,sheet_y:49,sort_order:73},"👵":{category:"People & Body",sheet_x:22,sheet_y:55,sort_order:74},"👶":{category:"People & Body",sheet_x:23,sheet_y:4,sort_order:49},"👷‍♀️":{category:"People & Body",sheet_x:23,sheet_y:10,sort_order:164},"👷‍♂️":{category:"People & Body",sheet_x:23,sheet_y:16,sort_order:163},"👷":{category:"People & Body",sheet_x:23,sheet_y:22,sort_order:162},"👸":{category:"People & Body",sheet_x:23,sheet_y:28,sort_order:166},"👹":{category:"Smileys & Emotion",sheet_x:23,sheet_y:34,sort_order:97},"👺":{category:"Smileys & Emotion",sheet_x:23,sheet_y:35,sort_order:98},"👻":{category:"Smileys & Emotion",sheet_x:23,sheet_y:36,sort_order:99},"👼":{category:"People & Body",sheet_x:23,sheet_y:37,sort_order:176},"👽":{category:"Smileys & Emotion",sheet_x:23,sheet_y:43,sort_order:100},"👾":{category:"Smileys & Emotion",sheet_x:23,sheet_y:44,sort_order:101},"👿":{category:"Smileys & Emotion",sheet_x:23,sheet_y:45,sort_order:92},"💀":{category:"Smileys & Emotion",sheet_x:23,sheet_y:46,sort_order:93},"💁‍♀️":{category:"People & Body",sheet_x:23,sheet_y:47,sort_order:89},"💁‍♂️":{category:"People & Body",sheet_x:23,sheet_y:53,sort_order:88},"💁":{category:"People & Body",sheet_x:24,sheet_y:2,sort_order:87},"💂‍♀️":{category:"People & Body",sheet_x:24,sheet_y:8,sort_order:161},"💂‍♂️":{category:"People & Body",sheet_x:24,sheet_y:14,sort_order:160},"💂":{category:"People & Body",sheet_x:24,sheet_y:20,sort_order:159},"💃":{category:"People & Body",sheet_x:24,sheet_y:26,sort_order:233},"💄":{category:"Objects",sheet_x:24,sheet_y:32,sort_order:41},"💅":{category:"People & Body",sheet_x:24,sheet_y:33,sort_order:32},"💆‍♀️":{category:"People & Body",sheet_x:24,sheet_y:39,sort_order:208},"💆‍♂️":{category:"People & Body",sheet_x:24,sheet_y:45,sort_order:207},"💆":{category:"People & Body",sheet_x:24,sheet_y:51,sort_order:206},"💇‍♀️":{category:"People & Body",sheet_x:25,sheet_y:0,sort_order:211},"💇‍♂️":{category:"People & Body",sheet_x:25,sheet_y:6,sort_order:210},"💇":{category:"People & Body",sheet_x:25,sheet_y:12,sort_order:209},"💈":{category:"Travel & Places",sheet_x:25,sheet_y:18,sort_order:61},"💉":{category:"Objects",sheet_x:25,sheet_y:19,sort_order:208},"💊":{category:"Objects",sheet_x:25,sheet_y:20,sort_order:210},"💋":{category:"Smileys & Emotion",sheet_x:25,sheet_y:21,sort_order:115},"💌":{category:"Smileys & Emotion",sheet_x:25,sheet_y:22,sort_order:116},"💍":{category:"Objects",sheet_x:25,sheet_y:23,sort_order:42},"💎":{category:"Objects",sheet_x:25,sheet_y:24,sort_order:43},"💏":{category:"People & Body",sheet_x:25,sheet_y:25,sort_order:297},"💐":{category:"Animals & Nature",sheet_x:25,sheet_y:26,sort_order:106},"💑":{category:"People & Body",sheet_x:25,sheet_y:27,sort_order:301},"💒":{category:"Travel & Places",sheet_x:25,sheet_y:28,sort_order:38},"💓":{category:"Smileys & Emotion",sheet_x:25,sheet_y:29,sort_order:121},"💔":{category:"Smileys & Emotion",sheet_x:25,sheet_y:30,sort_order:126},"💕":{category:"Smileys & Emotion",sheet_x:25,sheet_y:31,sort_order:123},"💖":{category:"Smileys & Emotion",sheet_x:25,sheet_y:32,sort_order:119},"💗":{category:"Smileys & Emotion",sheet_x:25,sheet_y:33,sort_order:120},"💘":{category:"Smileys & Emotion",sheet_x:25,sheet_y:34,sort_order:117},"💙":{category:"Smileys & Emotion",sheet_x:25,sheet_y:35,sort_order:131},"💚":{category:"Smileys & Emotion",sheet_x:25,sheet_y:36,sort_order:130},"💛":{category:"Smileys & Emotion",sheet_x:25,sheet_y:37,sort_order:129},"💜":{category:"Smileys & Emotion",sheet_x:25,sheet_y:38,sort_order:132},"💝":{category:"Smileys & Emotion",sheet_x:25,sheet_y:39,sort_order:118},"💞":{category:"Smileys & Emotion",sheet_x:25,sheet_y:40,sort_order:122},"💟":{category:"Smileys & Emotion",sheet_x:25,sheet_y:41,sort_order:124},"💠":{category:"Symbols",sheet_x:25,sheet_y:42,sort_order:214},"💡":{category:"Objects",sheet_x:25,sheet_y:43,sort_order:100},"💢":{category:"Smileys & Emotion",sheet_x:25,sheet_y:44,sort_order:137},"💣":{category:"Smileys & Emotion",sheet_x:25,sheet_y:45,sort_order:143},"💤":{category:"Smileys & Emotion",sheet_x:25,sheet_y:46,sort_order:149},"💥":{category:"Smileys & Emotion",sheet_x:25,sheet_y:47,sort_order:138},"💦":{category:"Smileys & Emotion",sheet_x:25,sheet_y:48,sort_order:140},"💧":{category:"Travel & Places",sheet_x:25,sheet_y:49,sort_order:209},"💨":{category:"Smileys & Emotion",sheet_x:25,sheet_y:50,sort_order:141},"💩":{category:"Smileys & Emotion",sheet_x:25,sheet_y:51,sort_order:95},"💪":{category:"People & Body",sheet_x:25,sheet_y:52,sort_order:34},"💫":{category:"Smileys & Emotion",sheet_x:26,sheet_y:1,sort_order:139},"💬":{category:"Smileys & Emotion",sheet_x:26,sheet_y:2,sort_order:144},"💭":{category:"Smileys & Emotion",sheet_x:26,sheet_y:3,sort_order:148},"💮":{category:"Animals & Nature",sheet_x:26,sheet_y:4,sort_order:108},"💯":{category:"Smileys & Emotion",sheet_x:26,sheet_y:5,sort_order:136},"💰":{category:"Objects",sheet_x:26,sheet_y:6,sort_order:121},"💱":{category:"Objects",sheet_x:26,sheet_y:7,sort_order:130},"💲":{category:"Objects",sheet_x:26,sheet_y:8,sort_order:131},"💳":{category:"Objects",sheet_x:26,sheet_y:9,sort_order:127},"💴":{category:"Objects",sheet_x:26,sheet_y:10,sort_order:122},"💵":{category:"Objects",sheet_x:26,sheet_y:11,sort_order:123},"💶":{category:"Objects",sheet_x:26,sheet_y:12,sort_order:124},"💷":{category:"Objects",sheet_x:26,sheet_y:13,sort_order:125},"💸":{category:"Objects",sheet_x:26,sheet_y:14,sort_order:126},"💹":{category:"Objects",sheet_x:26,sheet_y:15,sort_order:129},"💺":{category:"Travel & Places",sheet_x:26,sheet_y:16,sort_order:123},"💻":{category:"Objects",sheet_x:26,sheet_y:17,sort_order:77},"💼":{category:"Objects",sheet_x:26,sheet_y:18,sort_order:152},"💽":{category:"Objects",sheet_x:26,sheet_y:19,sort_order:83},"💾":{category:"Objects",sheet_x:26,sheet_y:20,sort_order:84},"💿":{category:"Objects",sheet_x:26,sheet_y:21,sort_order:85},"📀":{category:"Objects",sheet_x:26,sheet_y:22,sort_order:86},"📁":{category:"Objects",sheet_x:26,sheet_y:23,sort_order:153},"📂":{category:"Objects",sheet_x:26,sheet_y:24,sort_order:154},"📃":{category:"Objects",sheet_x:26,sheet_y:25,sort_order:113},"📄":{category:"Objects",sheet_x:26,sheet_y:26,sort_order:115},"📅":{category:"Objects",sheet_x:26,sheet_y:27,sort_order:156},"📆":{category:"Objects",sheet_x:26,sheet_y:28,sort_order:157},"📇":{category:"Objects",sheet_x:26,sheet_y:29,sort_order:160},"📈":{category:"Objects",sheet_x:26,sheet_y:30,sort_order:161},"📉":{category:"Objects",sheet_x:26,sheet_y:31,sort_order:162},"📊":{category:"Objects",sheet_x:26,sheet_y:32,sort_order:163},"📋":{category:"Objects",sheet_x:26,sheet_y:33,sort_order:164},"📌":{category:"Objects",sheet_x:26,sheet_y:34,sort_order:165},"📍":{category:"Objects",sheet_x:26,sheet_y:35,sort_order:166},"📎":{category:"Objects",sheet_x:26,sheet_y:36,sort_order:167},"📏":{category:"Objects",sheet_x:26,sheet_y:37,sort_order:169},"📐":{category:"Objects",sheet_x:26,sheet_y:38,sort_order:170},"📑":{category:"Objects",sheet_x:26,sheet_y:39,sort_order:118},"📒":{category:"Objects",sheet_x:26,sheet_y:40,sort_order:112},"📓":{category:"Objects",sheet_x:26,sheet_y:41,sort_order:111},"📔":{category:"Objects",sheet_x:26,sheet_y:42,sort_order:104},"📕":{category:"Objects",sheet_x:26,sheet_y:43,sort_order:105},"📖":{category:"Objects",sheet_x:26,sheet_y:44,sort_order:106},"📗":{category:"Objects",sheet_x:26,sheet_y:45,sort_order:107},"📘":{category:"Objects",sheet_x:26,sheet_y:46,sort_order:108},"📙":{category:"Objects",sheet_x:26,sheet_y:47,sort_order:109},"📚":{category:"Objects",sheet_x:26,sheet_y:48,sort_order:110},"📛":{category:"Symbols",sheet_x:26,sheet_y:49,sort_order:104},"📜":{category:"Objects",sheet_x:26,sheet_y:50,sort_order:114},"📝":{category:"Objects",sheet_x:26,sheet_y:51,sort_order:151},"📞":{category:"Objects",sheet_x:26,sheet_y:52,sort_order:72},"📟":{category:"Objects",sheet_x:26,sheet_y:53,sort_order:73},"📠":{category:"Objects",sheet_x:26,sheet_y:54,sort_order:74},"📡":{category:"Objects",sheet_x:26,sheet_y:55,sort_order:207},"📢":{category:"Objects",sheet_x:26,sheet_y:56,sort_order:48},"📣":{category:"Objects",sheet_x:27,sheet_y:0,sort_order:49},"📤":{category:"Objects",sheet_x:27,sheet_y:1,sort_order:136},"📥":{category:"Objects",sheet_x:27,sheet_y:2,sort_order:137},"📦":{category:"Objects",sheet_x:27,sheet_y:3,sort_order:138},"📧":{category:"Objects",sheet_x:27,sheet_y:4,sort_order:133},"📨":{category:"Objects",sheet_x:27,sheet_y:5,sort_order:134},"📩":{category:"Objects",sheet_x:27,sheet_y:6,sort_order:135},"📪":{category:"Objects",sheet_x:27,sheet_y:7,sort_order:140},"📫":{category:"Objects",sheet_x:27,sheet_y:8,sort_order:139},"📬":{category:"Objects",sheet_x:27,sheet_y:9,sort_order:141},"📭":{category:"Objects",sheet_x:27,sheet_y:10,sort_order:142},"📮":{category:"Objects",sheet_x:27,sheet_y:11,sort_order:143},"📯":{category:"Objects",sheet_x:27,sheet_y:12,sort_order:50},"📰":{category:"Objects",sheet_x:27,sheet_y:13,sort_order:116},"📱":{category:"Objects",sheet_x:27,sheet_y:14,sort_order:69},"📲":{category:"Objects",sheet_x:27,sheet_y:15,sort_order:70},"📳":{category:"Symbols",sheet_x:27,sheet_y:16,sort_order:95},"📴":{category:"Symbols",sheet_x:27,sheet_y:17,sort_order:96},"📵":{category:"Symbols",sheet_x:27,sheet_y:18,sort_order:23},"📶":{category:"Symbols",sheet_x:27,sheet_y:19,sort_order:94},"📷":{category:"Objects",sheet_x:27,sheet_y:20,sort_order:93},"📸":{category:"Objects",sheet_x:27,sheet_y:21,sort_order:94},"📹":{category:"Objects",sheet_x:27,sheet_y:22,sort_order:95},"📺":{category:"Objects",sheet_x:27,sheet_y:23,sort_order:92},"📻":{category:"Objects",sheet_x:27,sheet_y:24,sort_order:61},"📼":{category:"Objects",sheet_x:27,sheet_y:25,sort_order:96},"📽️":{category:"Objects",sheet_x:27,sheet_y:26,sort_order:90},"📿":{category:"Objects",sheet_x:27,sheet_y:27,sort_order:40},"🔀":{category:"Symbols",sheet_x:27,sheet_y:28,sort_order:73},"🔁":{category:"Symbols",sheet_x:27,sheet_y:29,sort_order:74},"🔂":{category:"Symbols",sheet_x:27,sheet_y:30,sort_order:75},"🔃":{category:"Symbols",sheet_x:27,sheet_y:31,sort_order:41},"🔄":{category:"Symbols",sheet_x:27,sheet_y:32,sort_order:42},"🔅":{category:"Symbols",sheet_x:27,sheet_y:33,sort_order:92},"🔆":{category:"Symbols",sheet_x:27,sheet_y:34,sort_order:93},"🔇":{category:"Objects",sheet_x:27,sheet_y:35,sort_order:44},"🔈":{category:"Objects",sheet_x:27,sheet_y:36,sort_order:45},"🔉":{category:"Objects",sheet_x:27,sheet_y:37,sort_order:46},"🔊":{category:"Objects",sheet_x:27,sheet_y:38,sort_order:47},"🔋":{category:"Objects",sheet_x:27,sheet_y:39,sort_order:75},"🔌":{category:"Objects",sheet_x:27,sheet_y:40,sort_order:76},"🔍":{category:"Objects",sheet_x:27,sheet_y:41,sort_order:97},"🔎":{category:"Objects",sheet_x:27,sheet_y:42,sort_order:98},"🔏":{category:"Objects",sheet_x:27,sheet_y:43,sort_order:177},"🔐":{category:"Objects",sheet_x:27,sheet_y:44,sort_order:178},"🔑":{category:"Objects",sheet_x:27,sheet_y:45,sort_order:179},"🔒":{category:"Objects",sheet_x:27,sheet_y:46,sort_order:175},"🔓":{category:"Objects",sheet_x:27,sheet_y:47,sort_order:176},"🔔":{category:"Objects",sheet_x:27,sheet_y:48,sort_order:51},"🔕":{category:"Objects",sheet_x:27,sheet_y:49,sort_order:52},"🔖":{category:"Objects",sheet_x:27,sheet_y:50,sort_order:119},"🔗":{category:"Objects",sheet_x:27,sheet_y:51,sort_order:197},"🔘":{category:"Symbols",sheet_x:27,sheet_y:52,sort_order:215},"🔙":{category:"Symbols",sheet_x:27,sheet_y:53,sort_order:43},"🔚":{category:"Symbols",sheet_x:27,sheet_y:54,sort_order:44},"🔛":{category:"Symbols",sheet_x:27,sheet_y:55,sort_order:45},"🔜":{category:"Symbols",sheet_x:27,sheet_y:56,sort_order:46},"🔝":{category:"Symbols",sheet_x:28,sheet_y:0,sort_order:47},"🔞":{category:"Symbols",sheet_x:28,sheet_y:1,sort_order:24},"🔟":{category:"Symbols",sheet_x:28,sheet_y:2,sort_order:144},"🔠":{category:"Symbols",sheet_x:28,sheet_y:3,sort_order:145},"🔡":{category:"Symbols",sheet_x:28,sheet_y:4,sort_order:146},"🔢":{category:"Symbols",sheet_x:28,sheet_y:5,sort_order:147},"🔣":{category:"Symbols",sheet_x:28,sheet_y:6,sort_order:148},"🔤":{category:"Symbols",sheet_x:28,sheet_y:7,sort_order:149},"🔥":{category:"Travel & Places",sheet_x:28,sheet_y:8,sort_order:208},"🔦":{category:"Objects",sheet_x:28,sheet_y:9,sort_order:101},"🔧":{category:"Objects",sheet_x:28,sheet_y:10,sort_order:191},"🔨":{category:"Objects",sheet_x:28,sheet_y:11,sort_order:181},"🔩":{category:"Objects",sheet_x:28,sheet_y:12,sort_order:192},"🔪":{category:"Food & Drink",sheet_x:28,sheet_y:13,sort_order:120},"🔫":{category:"Objects",sheet_x:28,sheet_y:14,sort_order:188},"🔬":{category:"Objects",sheet_x:28,sheet_y:15,sort_order:205},"🔭":{category:"Objects",sheet_x:28,sheet_y:16,sort_order:206},"🔮":{category:"Activities",sheet_x:28,sheet_y:17,sort_order:59},"🔯":{category:"Symbols",sheet_x:28,sheet_y:18,sort_order:59},"🔰":{category:"Symbols",sheet_x:28,sheet_y:19,sort_order:105},"🔱":{category:"Symbols",sheet_x:28,sheet_y:20,sort_order:103},"🔲":{category:"Symbols",sheet_x:28,sheet_y:21,sort_order:217},"🔳":{category:"Symbols",sheet_x:28,sheet_y:22,sort_order:216},"🔴":{category:"Symbols",sheet_x:28,sheet_y:23,sort_order:184},"🔵":{category:"Symbols",sheet_x:28,sheet_y:24,sort_order:188},"🔶":{category:"Symbols",sheet_x:28,sheet_y:25,sort_order:208},"🔷":{category:"Symbols",sheet_x:28,sheet_y:26,sort_order:209},"🔸":{category:"Symbols",sheet_x:28,sheet_y:27,sort_order:210},"🔹":{category:"Symbols",sheet_x:28,sheet_y:28,sort_order:211},"🔺":{category:"Symbols",sheet_x:28,sheet_y:29,sort_order:212},"🔻":{category:"Symbols",sheet_x:28,sheet_y:30,sort_order:213},"🔼":{category:"Symbols",sheet_x:28,sheet_y:31,sort_order:83},"🔽":{category:"Symbols",sheet_x:28,sheet_y:32,sort_order:85},"🕉️":{category:"Symbols",sheet_x:28,sheet_y:33,sort_order:50},"🕊️":{category:"Animals & Nature",sheet_x:28,sheet_y:34,sort_order:68},"🕋":{category:"Travel & Places",sheet_x:28,sheet_y:35,sort_order:46},"🕌":{category:"Travel & Places",sheet_x:28,sheet_y:36,sort_order:42},"🕍":{category:"Travel & Places",sheet_x:28,sheet_y:37,sort_order:44},"🕎":{category:"Symbols",sheet_x:28,sheet_y:38,sort_order:58},"🕐":{category:"Travel & Places",sheet_x:28,sheet_y:39,sort_order:142},"🕑":{category:"Travel & Places",sheet_x:28,sheet_y:40,sort_order:144},"🕒":{category:"Travel & Places",sheet_x:28,sheet_y:41,sort_order:146},"🕓":{category:"Travel & Places",sheet_x:28,sheet_y:42,sort_order:148},"🕔":{category:"Travel & Places",sheet_x:28,sheet_y:43,sort_order:150},"🕕":{category:"Travel & Places",sheet_x:28,sheet_y:44,sort_order:152},"🕖":{category:"Travel & Places",sheet_x:28,sheet_y:45,sort_order:154},"🕗":{category:"Travel & Places",sheet_x:28,sheet_y:46,sort_order:156},"🕘":{category:"Travel & Places",sheet_x:28,sheet_y:47,sort_order:158},"🕙":{category:"Travel & Places",sheet_x:28,sheet_y:48,sort_order:160},"🕚":{category:"Travel & Places",sheet_x:28,sheet_y:49,sort_order:162},"🕛":{category:"Travel & Places",sheet_x:28,sheet_y:50,sort_order:140},"🕜":{category:"Travel & Places",sheet_x:28,sheet_y:51,sort_order:143},"🕝":{category:"Travel & Places",sheet_x:28,sheet_y:52,sort_order:145},"🕞":{category:"Travel & Places",sheet_x:28,sheet_y:53,sort_order:147},"🕟":{category:"Travel & Places",sheet_x:28,sheet_y:54,sort_order:149},"🕠":{category:"Travel & Places",sheet_x:28,sheet_y:55,sort_order:151},"🕡":{category:"Travel & Places",sheet_x:28,sheet_y:56,sort_order:153},"🕢":{category:"Travel & Places",sheet_x:29,sheet_y:0,sort_order:155},"🕣":{category:"Travel & Places",sheet_x:29,sheet_y:1,sort_order:157},"🕤":{category:"Travel & Places",sheet_x:29,sheet_y:2,sort_order:159},"🕥":{category:"Travel & Places",sheet_x:29,sheet_y:3,sort_order:161},"🕦":{category:"Travel & Places",sheet_x:29,sheet_y:4,sort_order:163},"🕧":{category:"Travel & Places",sheet_x:29,sheet_y:5,sort_order:141},"🕯️":{category:"Objects",sheet_x:29,sheet_y:6,sort_order:99},"🕰️":{category:"Travel & Places",sheet_x:29,sheet_y:7,sort_order:139},"🕳️":{category:"Smileys & Emotion",sheet_x:29,sheet_y:8,sort_order:142},"🕴️":{category:"People & Body",sheet_x:29,sheet_y:9,sort_order:235},"🕵️‍♀️":{category:"People & Body",sheet_x:29,sheet_y:15,sort_order:158},"🕵️‍♂️":{category:"People & Body",sheet_x:29,sheet_y:21,sort_order:157},"🕵️":{category:"People & Body",sheet_x:29,sheet_y:27,sort_order:156},"🕶️":{category:"Objects",sheet_x:29,sheet_y:33,sort_order:2},"🕷️":{category:"Animals & Nature",sheet_x:29,sheet_y:34,sort_order:101},"🕸️":{category:"Animals & Nature",sheet_x:29,sheet_y:35,sort_order:102},"🕹️":{category:"Activities",sheet_x:29,sheet_y:36,sort_order:62},"🕺":{category:"People & Body",sheet_x:29,sheet_y:37,sort_order:234},"🖇️":{category:"Objects",sheet_x:29,sheet_y:43,sort_order:168},"🖊️":{category:"Objects",sheet_x:29,sheet_y:44,sort_order:148},"🖋️":{category:"Objects",sheet_x:29,sheet_y:45,sort_order:147},"🖌️":{category:"Objects",sheet_x:29,sheet_y:46,sort_order:149},"🖍️":{category:"Objects",sheet_x:29,sheet_y:47,sort_order:150},"🖐️":{category:"People & Body",sheet_x:29,sheet_y:48,sort_order:3},"🖕":{category:"People & Body",sheet_x:29,sheet_y:54,sort_order:16},"🖖":{category:"People & Body",sheet_x:30,sheet_y:3,sort_order:5},"🖤":{category:"Smileys & Emotion",sheet_x:30,sheet_y:9,sort_order:134},"🖥️":{category:"Objects",sheet_x:30,sheet_y:10,sort_order:78},"🖨️":{category:"Objects",sheet_x:30,sheet_y:11,sort_order:79},"🖱️":{category:"Objects",sheet_x:30,sheet_y:12,sort_order:81},"🖲️":{category:"Objects",sheet_x:30,sheet_y:13,sort_order:82},"🖼️":{category:"Activities",sheet_x:30,sheet_y:14,sort_order:76},"🗂️":{category:"Objects",sheet_x:30,sheet_y:15,sort_order:155},"🗃️":{category:"Objects",sheet_x:30,sheet_y:16,sort_order:172},"🗄️":{category:"Objects",sheet_x:30,sheet_y:17,sort_order:173},"🗑️":{category:"Objects",sheet_x:30,sheet_y:18,sort_order:174},"🗒️":{category:"Objects",sheet_x:30,sheet_y:19,sort_order:158},"🗓️":{category:"Objects",sheet_x:30,sheet_y:20,sort_order:159},"🗜️":{category:"Objects",sheet_x:30,sheet_y:21,sort_order:194},"🗝️":{category:"Objects",sheet_x:30,sheet_y:22,sort_order:180},"🗞️":{category:"Objects",sheet_x:30,sheet_y:23,sort_order:117},"🗡️":{category:"Objects",sheet_x:30,sheet_y:24,sort_order:186},"🗣️":{category:"People & Body",sheet_x:30,sheet_y:25,sort_order:331},"🗨️":{category:"Smileys & Emotion",sheet_x:30,sheet_y:26,sort_order:146},"🗯️":{category:"Smileys & Emotion",sheet_x:30,sheet_y:27,sort_order:147},"🗳️":{category:"Objects",sheet_x:30,sheet_y:28,sort_order:144},"🗺️":{category:"Travel & Places",sheet_x:30,sheet_y:29,sort_order:5},"🗻":{category:"Travel & Places",sheet_x:30,sheet_y:30,sort_order:11},"🗼":{category:"Travel & Places",sheet_x:30,sheet_y:31,sort_order:39},"🗽":{category:"Travel & Places",sheet_x:30,sheet_y:32,sort_order:40},"🗾":{category:"Travel & Places",sheet_x:30,sheet_y:33,sort_order:6},"🗿":{category:"Objects",sheet_x:30,sheet_y:34,sort_order:233},"😀":{category:"Smileys & Emotion",sheet_x:30,sheet_y:35,sort_order:1},"😁":{category:"Smileys & Emotion",sheet_x:30,sheet_y:36,sort_order:4},"😂":{category:"Smileys & Emotion",sheet_x:30,sheet_y:37,sort_order:8},"😃":{category:"Smileys & Emotion",sheet_x:30,sheet_y:38,sort_order:2},"😄":{category:"Smileys & Emotion",sheet_x:30,sheet_y:39,sort_order:3},"😅":{category:"Smileys & Emotion",sheet_x:30,sheet_y:40,sort_order:6},"😆":{category:"Smileys & Emotion",sheet_x:30,sheet_y:41,sort_order:5},"😇":{category:"Smileys & Emotion",sheet_x:30,sheet_y:42,sort_order:13},"😈":{category:"Smileys & Emotion",sheet_x:30,sheet_y:43,sort_order:91},"😉":{category:"Smileys & Emotion",sheet_x:30,sheet_y:44,sort_order:11},"😊":{category:"Smileys & Emotion",sheet_x:30,sheet_y:45,sort_order:12},"😋":{category:"Smileys & Emotion",sheet_x:30,sheet_y:46,sort_order:22},"😌":{category:"Smileys & Emotion",sheet_x:30,sheet_y:47,sort_order:42},"😍":{category:"Smileys & Emotion",sheet_x:30,sheet_y:48,sort_order:15},"😎":{category:"Smileys & Emotion",sheet_x:30,sheet_y:49,sort_order:60},"😏":{category:"Smileys & Emotion",sheet_x:30,sheet_y:50,sort_order:37},"😐":{category:"Smileys & Emotion",sheet_x:30,sheet_y:51,sort_order:34},"😑":{category:"Smileys & Emotion",sheet_x:30,sheet_y:52,sort_order:35},"😒":{category:"Smileys & Emotion",sheet_x:30,sheet_y:53,sort_order:38},"😓":{category:"Smileys & Emotion",sheet_x:30,sheet_y:54,sort_order:83},"😔":{category:"Smileys & Emotion",sheet_x:30,sheet_y:55,sort_order:43},"😕":{category:"Smileys & Emotion",sheet_x:30,sheet_y:56,sort_order:63},"😖":{category:"Smileys & Emotion",sheet_x:31,sheet_y:0,sort_order:80},"😗":{category:"Smileys & Emotion",sheet_x:31,sheet_y:1,sort_order:18},"😘":{category:"Smileys & Emotion",sheet_x:31,sheet_y:2,sort_order:17},"😙":{category:"Smileys & Emotion",sheet_x:31,sheet_y:3,sort_order:21},"😚":{category:"Smileys & Emotion",sheet_x:31,sheet_y:4,sort_order:20},"😛":{category:"Smileys & Emotion",sheet_x:31,sheet_y:5,sort_order:23},"😜":{category:"Smileys & Emotion",sheet_x:31,sheet_y:6,sort_order:24},"😝":{category:"Smileys & Emotion",sheet_x:31,sheet_y:7,sort_order:26},"😞":{category:"Smileys & Emotion",sheet_x:31,sheet_y:8,sort_order:82},"😟":{category:"Smileys & Emotion",sheet_x:31,sheet_y:9,sort_order:64},"😠":{category:"Smileys & Emotion",sheet_x:31,sheet_y:10,sort_order:89},"😡":{category:"Smileys & Emotion",sheet_x:31,sheet_y:11,sort_order:88},"😢":{category:"Smileys & Emotion",sheet_x:31,sheet_y:12,sort_order:77},"😣":{category:"Smileys & Emotion",sheet_x:31,sheet_y:13,sort_order:81},"😤":{category:"Smileys & Emotion",sheet_x:31,sheet_y:14,sort_order:87},"😥":{category:"Smileys & Emotion",sheet_x:31,sheet_y:15,sort_order:76},"😦":{category:"Smileys & Emotion",sheet_x:31,sheet_y:16,sort_order:72},"😧":{category:"Smileys & Emotion",sheet_x:31,sheet_y:17,sort_order:73},"😨":{category:"Smileys & Emotion",sheet_x:31,sheet_y:18,sort_order:74},"😩":{category:"Smileys & Emotion",sheet_x:31,sheet_y:19,sort_order:84},"😪":{category:"Smileys & Emotion",sheet_x:31,sheet_y:20,sort_order:44},"😫":{category:"Smileys & Emotion",sheet_x:31,sheet_y:21,sort_order:85},"😬":{category:"Smileys & Emotion",sheet_x:31,sheet_y:22,sort_order:40},"😭":{category:"Smileys & Emotion",sheet_x:31,sheet_y:23,sort_order:78},"😮":{category:"Smileys & Emotion",sheet_x:31,sheet_y:24,sort_order:67},"😯":{category:"Smileys & Emotion",sheet_x:31,sheet_y:25,sort_order:68},"😰":{category:"Smileys & Emotion",sheet_x:31,sheet_y:26,sort_order:75},"😱":{category:"Smileys & Emotion",sheet_x:31,sheet_y:27,sort_order:79},"😲":{category:"Smileys & Emotion",sheet_x:31,sheet_y:28,sort_order:69},"😳":{category:"Smileys & Emotion",sheet_x:31,sheet_y:29,sort_order:70},"😴":{category:"Smileys & Emotion",sheet_x:31,sheet_y:30,sort_order:46},"😵":{category:"Smileys & Emotion",sheet_x:31,sheet_y:31,sort_order:56},"😶":{category:"Smileys & Emotion",sheet_x:31,sheet_y:32,sort_order:36},"😷":{category:"Smileys & Emotion",sheet_x:31,sheet_y:33,sort_order:47},"😸":{category:"Smileys & Emotion",sheet_x:31,sheet_y:34,sort_order:104},"😹":{category:"Smileys & Emotion",sheet_x:31,sheet_y:35,sort_order:105},"😺":{category:"Smileys & Emotion",sheet_x:31,sheet_y:36,sort_order:103},"😻":{category:"Smileys & Emotion",sheet_x:31,sheet_y:37,sort_order:106},"😼":{category:"Smileys & Emotion",sheet_x:31,sheet_y:38,sort_order:107},"😽":{category:"Smileys & Emotion",sheet_x:31,sheet_y:39,sort_order:108},"😾":{category:"Smileys & Emotion",sheet_x:31,sheet_y:40,sort_order:111},"😿":{category:"Smileys & Emotion",sheet_x:31,sheet_y:41,sort_order:110},"🙀":{category:"Smileys & Emotion",sheet_x:31,sheet_y:42,sort_order:109},"🙁":{category:"Smileys & Emotion",sheet_x:31,sheet_y:43,sort_order:65},"🙂":{category:"Smileys & Emotion",sheet_x:31,sheet_y:44,sort_order:9},"🙃":{category:"Smileys & Emotion",sheet_x:31,sheet_y:45,sort_order:10},"🙄":{category:"Smileys & Emotion",sheet_x:31,sheet_y:46,sort_order:39},"🙅‍♀️":{category:"People & Body",sheet_x:31,sheet_y:47,sort_order:83},"🙅‍♂️":{category:"People & Body",sheet_x:31,sheet_y:53,sort_order:82},"🙅":{category:"People & Body",sheet_x:32,sheet_y:2,sort_order:81},"🙆‍♀️":{category:"People & Body",sheet_x:32,sheet_y:8,sort_order:86},"🙆‍♂️":{category:"People & Body",sheet_x:32,sheet_y:14,sort_order:85},"🙆":{category:"People & Body",sheet_x:32,sheet_y:20,sort_order:84},"🙇‍♀️":{category:"People & Body",sheet_x:32,sheet_y:26,sort_order:98},"🙇‍♂️":{category:"People & Body",sheet_x:32,sheet_y:32,sort_order:97},"🙇":{category:"People & Body",sheet_x:32,sheet_y:38,sort_order:96},"🙈":{category:"Smileys & Emotion",sheet_x:32,sheet_y:44,sort_order:112},"🙉":{category:"Smileys & Emotion",sheet_x:32,sheet_y:45,sort_order:113},"🙊":{category:"Smileys & Emotion",sheet_x:32,sheet_y:46,sort_order:114},"🙋‍♀️":{category:"People & Body",sheet_x:32,sheet_y:47,sort_order:92},"🙋‍♂️":{category:"People & Body",sheet_x:32,sheet_y:53,sort_order:91},"🙋":{category:"People & Body",sheet_x:33,sheet_y:2,sort_order:90},"🙌":{category:"People & Body",sheet_x:33,sheet_y:8,sort_order:26},"🙍‍♀️":{category:"People & Body",sheet_x:33,sheet_y:14,sort_order:77},"🙍‍♂️":{category:"People & Body",sheet_x:33,sheet_y:20,sort_order:76},"🙍":{category:"People & Body",sheet_x:33,sheet_y:26,sort_order:75},"🙎‍♀️":{category:"People & Body",sheet_x:33,sheet_y:32,sort_order:80},"🙎‍♂️":{category:"People & Body",sheet_x:33,sheet_y:38,sort_order:79},"🙎":{category:"People & Body",sheet_x:33,sheet_y:44,sort_order:78},"🙏":{category:"People & Body",sheet_x:33,sheet_y:50,sort_order:30},"🚀":{category:"Travel & Places",sheet_x:33,sheet_y:56,sort_order:129},"🚁":{category:"Travel & Places",sheet_x:34,sheet_y:0,sort_order:124},"🚂":{category:"Travel & Places",sheet_x:34,sheet_y:1,sort_order:63},"🚃":{category:"Travel & Places",sheet_x:34,sheet_y:2,sort_order:64},"🚄":{category:"Travel & Places",sheet_x:34,sheet_y:3,sort_order:65},"🚅":{category:"Travel & Places",sheet_x:34,sheet_y:4,sort_order:66},"🚆":{category:"Travel & Places",sheet_x:34,sheet_y:5,sort_order:67},"🚇":{category:"Travel & Places",sheet_x:34,sheet_y:6,sort_order:68},"🚈":{category:"Travel & Places",sheet_x:34,sheet_y:7,sort_order:69},"🚉":{category:"Travel & Places",sheet_x:34,sheet_y:8,sort_order:70},"🚊":{category:"Travel & Places",sheet_x:34,sheet_y:9,sort_order:71},"🚋":{category:"Travel & Places",sheet_x:34,sheet_y:10,sort_order:74},"🚌":{category:"Travel & Places",sheet_x:34,sheet_y:11,sort_order:75},"🚍":{category:"Travel & Places",sheet_x:34,sheet_y:12,sort_order:76},"🚎":{category:"Travel & Places",sheet_x:34,sheet_y:13,sort_order:77},"🚏":{category:"Travel & Places",sheet_x:34,sheet_y:14,sort_order:100},"🚐":{category:"Travel & Places",sheet_x:34,sheet_y:15,sort_order:78},"🚑":{category:"Travel & Places",sheet_x:34,sheet_y:16,sort_order:79},"🚒":{category:"Travel & Places",sheet_x:34,sheet_y:17,sort_order:80},"🚓":{category:"Travel & Places",sheet_x:34,sheet_y:18,sort_order:81},"🚔":{category:"Travel & Places",sheet_x:34,sheet_y:19,sort_order:82},"🚕":{category:"Travel & Places",sheet_x:34,sheet_y:20,sort_order:83},"🚖":{category:"Travel & Places",sheet_x:34,sheet_y:21,sort_order:84},"🚗":{category:"Travel & Places",sheet_x:34,sheet_y:22,sort_order:85},"🚘":{category:"Travel & Places",sheet_x:34,sheet_y:23,sort_order:86},"🚙":{category:"Travel & Places",sheet_x:34,sheet_y:24,sort_order:87},"🚚":{category:"Travel & Places",sheet_x:34,sheet_y:25,sort_order:88},"🚛":{category:"Travel & Places",sheet_x:34,sheet_y:26,sort_order:89},"🚜":{category:"Travel & Places",sheet_x:34,sheet_y:27,sort_order:90},"🚝":{category:"Travel & Places",sheet_x:34,sheet_y:28,sort_order:72},"🚞":{category:"Travel & Places",sheet_x:34,sheet_y:29,sort_order:73},"🚟":{category:"Travel & Places",sheet_x:34,sheet_y:30,sort_order:125},"🚠":{category:"Travel & Places",sheet_x:34,sheet_y:31,sort_order:126},"🚡":{category:"Travel & Places",sheet_x:34,sheet_y:32,sort_order:127},"🚢":{category:"Travel & Places",sheet_x:34,sheet_y:33,sort_order:117},"🚣‍♀️":{category:"People & Body",sheet_x:34,sheet_y:34,sort_order:257},"🚣‍♂️":{category:"People & Body",sheet_x:34,sheet_y:40,sort_order:256},"🚣":{category:"People & Body",sheet_x:34,sheet_y:46,sort_order:255},"🚤":{category:"Travel & Places",sheet_x:34,sheet_y:52,sort_order:113},"🚥":{category:"Travel & Places",sheet_x:34,sheet_y:53,sort_order:106},"🚦":{category:"Travel & Places",sheet_x:34,sheet_y:54,sort_order:107},"🚧":{category:"Travel & Places",sheet_x:34,sheet_y:55,sort_order:109},"🚨":{category:"Travel & Places",sheet_x:34,sheet_y:56,sort_order:105},"🚩":{category:"Flags",sheet_x:35,sheet_y:0,sort_order:2},"🚪":{category:"Objects",sheet_x:35,sheet_y:1,sort_order:213},"🚫":{category:"Symbols",sheet_x:35,sheet_y:2,sort_order:17},"🚬":{category:"Objects",sheet_x:35,sheet_y:3,sort_order:230},"🚭":{category:"Symbols",sheet_x:35,sheet_y:4,sort_order:19},"🚮":{category:"Symbols",sheet_x:35,sheet_y:5,sort_order:2},"🚯":{category:"Symbols",sheet_x:35,sheet_y:6,sort_order:20},"🚰":{category:"Symbols",sheet_x:35,sheet_y:7,sort_order:3},"🚱":{category:"Symbols",sheet_x:35,sheet_y:8,sort_order:21},"🚲":{category:"Travel & Places",sheet_x:35,sheet_y:9,sort_order:97},"🚳":{category:"Symbols",sheet_x:35,sheet_y:10,sort_order:18},"🚴‍♀️":{category:"People & Body",sheet_x:35,sheet_y:11,sort_order:269},"🚴‍♂️":{category:"People & Body",sheet_x:35,sheet_y:17,sort_order:268},"🚴":{category:"People & Body",sheet_x:35,sheet_y:23,sort_order:267},"🚵‍♀️":{category:"People & Body",sheet_x:35,sheet_y:29,sort_order:272},"🚵‍♂️":{category:"People & Body",sheet_x:35,sheet_y:35,sort_order:271},"🚵":{category:"People & Body",sheet_x:35,sheet_y:41,sort_order:270},"🚶‍♀️":{category:"People & Body",sheet_x:35,sheet_y:47,sort_order:214},"🚶‍♂️":{category:"People & Body",sheet_x:35,sheet_y:53,sort_order:213},"🚶":{category:"People & Body",sheet_x:36,sheet_y:2,sort_order:212},"🚷":{category:"Symbols",sheet_x:36,sheet_y:8,sort_order:22},"🚸":{category:"Symbols",sheet_x:36,sheet_y:9,sort_order:15},"🚹":{category:"Symbols",sheet_x:36,sheet_y:10,sort_order:5},"🚺":{category:"Symbols",sheet_x:36,sheet_y:11,sort_order:6},"🚻":{category:"Symbols",sheet_x:36,sheet_y:12,sort_order:7},"🚼":{category:"Symbols",sheet_x:36,sheet_y:13,sort_order:8},"🚽":{category:"Objects",sheet_x:36,sheet_y:14,sort_order:217},"🚾":{category:"Symbols",sheet_x:36,sheet_y:15,sort_order:9},"🚿":{category:"Objects",sheet_x:36,sheet_y:16,sort_order:218},"🛀":{category:"People & Body",sheet_x:36,sheet_y:17,sort_order:291},"🛁":{category:"Objects",sheet_x:36,sheet_y:23,sort_order:219},"🛂":{category:"Symbols",sheet_x:36,sheet_y:24,sort_order:10},"🛃":{category:"Symbols",sheet_x:36,sheet_y:25,sort_order:11},"🛄":{category:"Symbols",sheet_x:36,sheet_y:26,sort_order:12},"🛅":{category:"Symbols",sheet_x:36,sheet_y:27,sort_order:13},"🛋️":{category:"Objects",sheet_x:36,sheet_y:28,sort_order:215},"🛌":{category:"People & Body",sheet_x:36,sheet_y:29,sort_order:292},"🛍️":{category:"Objects",sheet_x:36,sheet_y:35,sort_order:24},"🛎️":{category:"Travel & Places",sheet_x:36,sheet_y:36,sort_order:131},"🛏️":{category:"Objects",sheet_x:36,sheet_y:37,sort_order:214},"🛐":{category:"Symbols",sheet_x:36,sheet_y:38,sort_order:48},"🛑":{category:"Travel & Places",sheet_x:36,sheet_y:39,sort_order:108},"🛒":{category:"Objects",sheet_x:36,sheet_y:40,sort_order:229},"🛕":{category:"Travel & Places",sheet_x:36,sheet_y:41,sort_order:43},"🛠️":{category:"Objects",sheet_x:36,sheet_y:42,sort_order:185},"🛡️":{category:"Objects",sheet_x:36,sheet_y:43,sort_order:190},"🛢️":{category:"Travel & Places",sheet_x:36,sheet_y:44,sort_order:103},"🛣️":{category:"Travel & Places",sheet_x:36,sheet_y:45,sort_order:101},"🛤️":{category:"Travel & Places",sheet_x:36,sheet_y:46,sort_order:102},"🛥️":{category:"Travel & Places",sheet_x:36,sheet_y:47,sort_order:116},"🛩️":{category:"Travel & Places",sheet_x:36,sheet_y:48,sort_order:119},"🛫":{category:"Travel & Places",sheet_x:36,sheet_y:49,sort_order:120},"🛬":{category:"Travel & Places",sheet_x:36,sheet_y:50,sort_order:121},"🛰️":{category:"Travel & Places",sheet_x:36,sheet_y:51,sort_order:128},"🛳️":{category:"Travel & Places",sheet_x:36,sheet_y:52,sort_order:114},"🛴":{category:"Travel & Places",sheet_x:36,sheet_y:53,sort_order:98},"🛵":{category:"Travel & Places",sheet_x:36,sheet_y:54,sort_order:93},"🛶":{category:"Travel & Places",sheet_x:36,sheet_y:55,sort_order:112},"🛷":{category:"Activities",sheet_x:36,sheet_y:56,sort_order:53},"🛸":{category:"Travel & Places",sheet_x:37,sheet_y:0,sort_order:130},"🛹":{category:"Travel & Places",sheet_x:37,sheet_y:1,sort_order:99},"🛺":{category:"Travel & Places",sheet_x:37,sheet_y:2,sort_order:96},"🟠":{category:"Symbols",sheet_x:37,sheet_y:3,sort_order:185},"🟡":{category:"Symbols",sheet_x:37,sheet_y:4,sort_order:186},"🟢":{category:"Symbols",sheet_x:37,sheet_y:5,sort_order:187},"🟣":{category:"Symbols",sheet_x:37,sheet_y:6,sort_order:189},"🟤":{category:"Symbols",sheet_x:37,sheet_y:7,sort_order:190},"🟥":{category:"Symbols",sheet_x:37,sheet_y:8,sort_order:193},"🟦":{category:"Symbols",sheet_x:37,sheet_y:9,sort_order:197},"🟧":{category:"Symbols",sheet_x:37,sheet_y:10,sort_order:194},"🟨":{category:"Symbols",sheet_x:37,sheet_y:11,sort_order:195},"🟩":{category:"Symbols",sheet_x:37,sheet_y:12,sort_order:196},"🟪":{category:"Symbols",sheet_x:37,sheet_y:13,sort_order:198},"🟫":{category:"Symbols",sheet_x:37,sheet_y:14,sort_order:199},"🤍":{category:"Smileys & Emotion",sheet_x:37,sheet_y:15,sort_order:135},"🤎":{category:"Smileys & Emotion",sheet_x:37,sheet_y:16,sort_order:133},"🤏":{category:"People & Body",sheet_x:37,sheet_y:17,sort_order:7},"🤐":{category:"Smileys & Emotion",sheet_x:37,sheet_y:23,sort_order:32},"🤑":{category:"Smileys & Emotion",sheet_x:37,sheet_y:24,sort_order:27},"🤒":{category:"Smileys & Emotion",sheet_x:37,sheet_y:25,sort_order:48},"🤓":{category:"Smileys & Emotion",sheet_x:37,sheet_y:26,sort_order:61},"🤔":{category:"Smileys & Emotion",sheet_x:37,sheet_y:27,sort_order:31},"🤕":{category:"Smileys & Emotion",sheet_x:37,sheet_y:28,sort_order:49},"🤖":{category:"Smileys & Emotion",sheet_x:37,sheet_y:29,sort_order:102},"🤗":{category:"Smileys & Emotion",sheet_x:37,sheet_y:30,sort_order:28},"🤘":{category:"People & Body",sheet_x:37,sheet_y:31,sort_order:11},"🤙":{category:"People & Body",sheet_x:37,sheet_y:37,sort_order:12},"🤚":{category:"People & Body",sheet_x:37,sheet_y:43,sort_order:2},"🤛":{category:"People & Body",sheet_x:37,sheet_y:49,sort_order:23},"🤜":{category:"People & Body",sheet_x:37,sheet_y:55,sort_order:24},"🤝":{category:"People & Body",sheet_x:38,sheet_y:4,sort_order:29},"🤞":{category:"People & Body",sheet_x:38,sheet_y:5,sort_order:9},"🤟":{category:"People & Body",sheet_x:38,sheet_y:11,sort_order:10},"🤠":{category:"Smileys & Emotion",sheet_x:38,sheet_y:17,sort_order:58},"🤡":{category:"Smileys & Emotion",sheet_x:38,sheet_y:18,sort_order:96},"🤢":{category:"Smileys & Emotion",sheet_x:38,sheet_y:19,sort_order:50},"🤣":{category:"Smileys & Emotion",sheet_x:38,sheet_y:20,sort_order:7},"🤤":{category:"Smileys & Emotion",sheet_x:38,sheet_y:21,sort_order:45},"🤥":{category:"Smileys & Emotion",sheet_x:38,sheet_y:22,sort_order:41},"🤦‍♀️":{category:"People & Body",sheet_x:38,sheet_y:23,sort_order:101},"🤦‍♂️":{category:"People & Body",sheet_x:38,sheet_y:29,sort_order:100},"🤦":{category:"People & Body",sheet_x:38,sheet_y:35,sort_order:99},"🤧":{category:"Smileys & Emotion",sheet_x:38,sheet_y:41,sort_order:52},"🤨":{category:"Smileys & Emotion",sheet_x:38,sheet_y:42,sort_order:33},"🤩":{category:"Smileys & Emotion",sheet_x:38,sheet_y:43,sort_order:16},"🤪":{category:"Smileys & Emotion",sheet_x:38,sheet_y:44,sort_order:25},"🤫":{category:"Smileys & Emotion",sheet_x:38,sheet_y:45,sort_order:30},"🤬":{category:"Smileys & Emotion",sheet_x:38,sheet_y:46,sort_order:90},"🤭":{category:"Smileys & Emotion",sheet_x:38,sheet_y:47,sort_order:29},"🤮":{category:"Smileys & Emotion",sheet_x:38,sheet_y:48,sort_order:51},"🤯":{category:"Smileys & Emotion",sheet_x:38,sheet_y:49,sort_order:57},"🤰":{category:"People & Body",sheet_x:38,sheet_y:50,sort_order:174},"🤱":{category:"People & Body",sheet_x:38,sheet_y:56,sort_order:175},"🤲":{category:"People & Body",sheet_x:39,sheet_y:5,sort_order:28},"🤳":{category:"People & Body",sheet_x:39,sheet_y:11,sort_order:33},"🤴":{category:"People & Body",sheet_x:39,sheet_y:17,sort_order:165},"🤵":{category:"People & Body",sheet_x:39,sheet_y:23,sort_order:172},"🤶":{category:"People & Body",sheet_x:39,sheet_y:29,sort_order:178},"🤷‍♀️":{category:"People & Body",sheet_x:39,sheet_y:35,sort_order:104},"🤷‍♂️":{category:"People & Body",sheet_x:39,sheet_y:41,sort_order:103},"🤷":{category:"People & Body",sheet_x:39,sheet_y:47,sort_order:102},"🤸‍♀️":{category:"People & Body",sheet_x:39,sheet_y:53,sort_order:275},"🤸‍♂️":{category:"People & Body",sheet_x:40,sheet_y:2,sort_order:274},"🤸":{category:"People & Body",sheet_x:40,sheet_y:8,sort_order:273},"🤹‍♀️":{category:"People & Body",sheet_x:40,sheet_y:14,sort_order:287},"🤹‍♂️":{category:"People & Body",sheet_x:40,sheet_y:20,sort_order:286},"🤹":{category:"People & Body",sheet_x:40,sheet_y:26,sort_order:285},"🤺":{category:"People & Body",sheet_x:40,sheet_y:32,sort_order:245},"🤼‍♀️":{category:"People & Body",sheet_x:40,sheet_y:33,sort_order:278},"🤼‍♂️":{category:"People & Body",sheet_x:40,sheet_y:34,sort_order:277},"🤼":{category:"People & Body",sheet_x:40,sheet_y:35,sort_order:276},"🤽‍♀️":{category:"People & Body",sheet_x:40,sheet_y:36,sort_order:281},"🤽‍♂️":{category:"People & Body",sheet_x:40,sheet_y:42,sort_order:280},"🤽":{category:"People & Body",sheet_x:40,sheet_y:48,sort_order:279},"🤾‍♀️":{category:"People & Body",sheet_x:40,sheet_y:54,sort_order:284},"🤾‍♂️":{category:"People & Body",sheet_x:41,sheet_y:3,sort_order:283},"🤾":{category:"People & Body",sheet_x:41,sheet_y:9,sort_order:282},"🤿":{category:"Activities",sheet_x:41,sheet_y:15,sort_order:50},"🥀":{category:"Animals & Nature",sheet_x:41,sheet_y:16,sort_order:111},"🥁":{category:"Objects",sheet_x:41,sheet_y:17,sort_order:68},"🥂":{category:"Food & Drink",sheet_x:41,sheet_y:18,sort_order:110},"🥃":{category:"Food & Drink",sheet_x:41,sheet_y:19,sort_order:111},"🥄":{category:"Food & Drink",sheet_x:41,sheet_y:20,sort_order:119},"🥅":{category:"Activities",sheet_x:41,sheet_y:21,sort_order:46},"🥇":{category:"Activities",sheet_x:41,sheet_y:22,sort_order:25},"🥈":{category:"Activities",sheet_x:41,sheet_y:23,sort_order:26},"🥉":{category:"Activities",sheet_x:41,sheet_y:24,sort_order:27},"🥊":{category:"Activities",sheet_x:41,sheet_y:25,sort_order:44},"🥋":{category:"Activities",sheet_x:41,sheet_y:26,sort_order:45},"🥌":{category:"Activities",sheet_x:41,sheet_y:27,sort_order:54},"🥍":{category:"Activities",sheet_x:41,sheet_y:28,sort_order:41},"🥎":{category:"Activities",sheet_x:41,sheet_y:29,sort_order:30},"🥏":{category:"Activities",sheet_x:41,sheet_y:30,sort_order:36},"🥐":{category:"Food & Drink",sheet_x:41,sheet_y:31,sort_order:33},"🥑":{category:"Food & Drink",sheet_x:41,sheet_y:32,sort_order:18},"🥒":{category:"Food & Drink",sheet_x:41,sheet_y:33,sort_order:24},"🥓":{category:"Food & Drink",sheet_x:41,sheet_y:34,sort_order:43},"🥔":{category:"Food & Drink",sheet_x:41,sheet_y:35,sort_order:20},"🥕":{category:"Food & Drink",sheet_x:41,sheet_y:36,sort_order:21},"🥖":{category:"Food & Drink",sheet_x:41,sheet_y:37,sort_order:34},"🥗":{category:"Food & Drink",sheet_x:41,sheet_y:38,sort_order:58},"🥘":{category:"Food & Drink",sheet_x:41,sheet_y:39,sort_order:55},"🥙":{category:"Food & Drink",sheet_x:41,sheet_y:40,sort_order:51},"🥚":{category:"Food & Drink",sheet_x:41,sheet_y:41,sort_order:53},"🥛":{category:"Food & Drink",sheet_x:41,sheet_y:42,sort_order:100},"🥜":{category:"Food & Drink",sheet_x:41,sheet_y:43,sort_order:30},"🥝":{category:"Food & Drink",sheet_x:41,sheet_y:44,sort_order:15},"🥞":{category:"Food & Drink",sheet_x:41,sheet_y:45,sort_order:37},"🥟":{category:"Food & Drink",sheet_x:41,sheet_y:46,sort_order:77},"🥠":{category:"Food & Drink",sheet_x:41,sheet_y:47,sort_order:78},"🥡":{category:"Food & Drink",sheet_x:41,sheet_y:48,sort_order:79},"🥢":{category:"Food & Drink",sheet_x:41,sheet_y:49,sort_order:116},"🥣":{category:"Food & Drink",sheet_x:41,sheet_y:50,sort_order:57},"🥤":{category:"Food & Drink",sheet_x:41,sheet_y:51,sort_order:112},"🥥":{category:"Food & Drink",sheet_x:41,sheet_y:52,sort_order:17},"🥦":{category:"Food & Drink",sheet_x:41,sheet_y:53,sort_order:26},"🥧":{category:"Food & Drink",sheet_x:41,sheet_y:54,sort_order:93},"🥨":{category:"Food & Drink",sheet_x:41,sheet_y:55,sort_order:35},"🥩":{category:"Food & Drink",sheet_x:41,sheet_y:56,sort_order:42},"🥪":{category:"Food & Drink",sheet_x:42,sheet_y:0,sort_order:48},"🥫":{category:"Food & Drink",sheet_x:42,sheet_y:1,sort_order:62},"🥬":{category:"Food & Drink",sheet_x:42,sheet_y:2,sort_order:25},"🥭":{category:"Food & Drink",sheet_x:42,sheet_y:3,sort_order:8},"🥮":{category:"Food & Drink",sheet_x:42,sheet_y:4,sort_order:75},"🥯":{category:"Food & Drink",sheet_x:42,sheet_y:5,sort_order:36},"🥰":{category:"Smileys & Emotion",sheet_x:42,sheet_y:6,sort_order:14},"🥱":{category:"Smileys & Emotion",sheet_x:42,sheet_y:7,sort_order:86},"🥳":{category:"Smileys & Emotion",sheet_x:42,sheet_y:8,sort_order:59},"🥴":{category:"Smileys & Emotion",sheet_x:42,sheet_y:9,sort_order:55},"🥵":{category:"Smileys & Emotion",sheet_x:42,sheet_y:10,sort_order:53},"🥶":{category:"Smileys & Emotion",sheet_x:42,sheet_y:11,sort_order:54},"🥺":{category:"Smileys & Emotion",sheet_x:42,sheet_y:12,sort_order:71},"🥻":{category:"Objects",sheet_x:42,sheet_y:13,sort_order:15},"🥼":{category:"Objects",sheet_x:42,sheet_y:14,sort_order:4},"🥽":{category:"Objects",sheet_x:42,sheet_y:15,sort_order:3},"🥾":{category:"Objects",sheet_x:42,sheet_y:16,sort_order:28},"🥿":{category:"Objects",sheet_x:42,sheet_y:17,sort_order:29},"🦀":{category:"Food & Drink",sheet_x:42,sheet_y:18,sort_order:80},"🦁":{category:"Animals & Nature",sheet_x:42,sheet_y:19,sort_order:15},"🦂":{category:"Animals & Nature",sheet_x:42,sheet_y:20,sort_order:103},"🦃":{category:"Animals & Nature",sheet_x:42,sheet_y:21,sort_order:60},"🦄":{category:"Animals & Nature",sheet_x:42,sheet_y:22,sort_order:21},"🦅":{category:"Animals & Nature",sheet_x:42,sheet_y:23,sort_order:69},"🦆":{category:"Animals & Nature",sheet_x:42,sheet_y:24,sort_order:70},"🦇":{category:"Animals & Nature",sheet_x:42,sheet_y:25,sort_order:50},"🦈":{category:"Animals & Nature",sheet_x:42,sheet_y:26,sort_order:91},"🦉":{category:"Animals & Nature",sheet_x:42,sheet_y:27,sort_order:72},"🦊":{category:"Animals & Nature",sheet_x:42,sheet_y:28,sort_order:11},"🦋":{category:"Animals & Nature",sheet_x:42,sheet_y:29,sort_order:95},"🦌":{category:"Animals & Nature",sheet_x:42,sheet_y:30,sort_order:23},"🦍":{category:"Animals & Nature",sheet_x:42,sheet_y:31,sort_order:3},"🦎":{category:"Animals & Nature",sheet_x:42,sheet_y:32,sort_order:79},"🦏":{category:"Animals & Nature",sheet_x:42,sheet_y:33,sort_order:40},"🦐":{category:"Food & Drink",sheet_x:42,sheet_y:34,sort_order:82},"🦑":{category:"Food & Drink",sheet_x:42,sheet_y:35,sort_order:83},"🦒":{category:"Animals & Nature",sheet_x:42,sheet_y:36,sort_order:38},"🦓":{category:"Animals & Nature",sheet_x:42,sheet_y:37,sort_order:22},"🦔":{category:"Animals & Nature",sheet_x:42,sheet_y:38,sort_order:49},"🦕":{category:"Animals & Nature",sheet_x:42,sheet_y:39,sort_order:83},"🦖":{category:"Animals & Nature",sheet_x:42,sheet_y:40,sort_order:84},"🦗":{category:"Animals & Nature",sheet_x:42,sheet_y:41,sort_order:100},"🦘":{category:"Animals & Nature",sheet_x:42,sheet_y:42,sort_order:57},"🦙":{category:"Animals & Nature",sheet_x:42,sheet_y:43,sort_order:37},"🦚":{category:"Animals & Nature",sheet_x:42,sheet_y:44,sort_order:74},"🦛":{category:"Animals & Nature",sheet_x:42,sheet_y:45,sort_order:41},"🦜":{category:"Animals & Nature",sheet_x:42,sheet_y:46,sort_order:75},"🦝":{category:"Animals & Nature",sheet_x:42,sheet_y:47,sort_order:12},"🦞":{category:"Food & Drink",sheet_x:42,sheet_y:48,sort_order:81},"🦟":{category:"Animals & Nature",sheet_x:42,sheet_y:49,sort_order:104},"🦠":{category:"Animals & Nature",sheet_x:42,sheet_y:50,sort_order:105},"🦡":{category:"Animals & Nature",sheet_x:42,sheet_y:51,sort_order:58},"🦢":{category:"Animals & Nature",sheet_x:42,sheet_y:52,sort_order:71},"🦥":{category:"Animals & Nature",sheet_x:42,sheet_y:53,sort_order:54},"🦦":{category:"Animals & Nature",sheet_x:42,sheet_y:54,sort_order:55},"🦧":{category:"Animals & Nature",sheet_x:42,sheet_y:55,sort_order:4},"🦨":{category:"Animals & Nature",sheet_x:42,sheet_y:56,sort_order:56},"🦩":{category:"Animals & Nature",sheet_x:43,sheet_y:0,sort_order:73},"🦪":{category:"Food & Drink",sheet_x:43,sheet_y:1,sort_order:84},"🦮":{category:"Animals & Nature",sheet_x:43,sheet_y:2,sort_order:7},"🦯":{category:"Objects",sheet_x:43,sheet_y:3,sort_order:196},"🦴":{category:"People & Body",sheet_x:43,sheet_y:4,sort_order:44},"🦵":{category:"People & Body",sheet_x:43,sheet_y:5,sort_order:37},"🦶":{category:"People & Body",sheet_x:43,sheet_y:11,sort_order:38},"🦷":{category:"People & Body",sheet_x:43,sheet_y:17,sort_order:43},"🦸‍♀️":{category:"People & Body",sheet_x:43,sheet_y:18,sort_order:181},"🦸‍♂️":{category:"People & Body",sheet_x:43,sheet_y:24,sort_order:180},"🦸":{category:"People & Body",sheet_x:43,sheet_y:30,sort_order:179},"🦹‍♀️":{category:"People & Body",sheet_x:43,sheet_y:36,sort_order:184},"🦹‍♂️":{category:"People & Body",sheet_x:43,sheet_y:42,sort_order:183},"🦹":{category:"People & Body",sheet_x:43,sheet_y:48,sort_order:182},"🦺":{category:"Objects",sheet_x:43,sheet_y:54,sort_order:5},"🦻":{category:"People & Body",sheet_x:43,sheet_y:55,sort_order:40},"🦼":{category:"Travel & Places",sheet_x:44,sheet_y:4,sort_order:95},"🦽":{category:"Travel & Places",sheet_x:44,sheet_y:5,sort_order:94},"🦾":{category:"People & Body",sheet_x:44,sheet_y:6,sort_order:35},"🦿":{category:"People & Body",sheet_x:44,sheet_y:7,sort_order:36},"🧀":{category:"Food & Drink",sheet_x:44,sheet_y:8,sort_order:39},"🧁":{category:"Food & Drink",sheet_x:44,sheet_y:9,sort_order:92},"🧂":{category:"Food & Drink",sheet_x:44,sheet_y:10,sort_order:61},"🧃":{category:"Food & Drink",sheet_x:44,sheet_y:11,sort_order:113},"🧄":{category:"Food & Drink",sheet_x:44,sheet_y:12,sort_order:27},"🧅":{category:"Food & Drink",sheet_x:44,sheet_y:13,sort_order:28},"🧆":{category:"Food & Drink",sheet_x:44,sheet_y:14,sort_order:52},"🧇":{category:"Food & Drink",sheet_x:44,sheet_y:15,sort_order:38},"🧈":{category:"Food & Drink",sheet_x:44,sheet_y:16,sort_order:60},"🧉":{category:"Food & Drink",sheet_x:44,sheet_y:17,sort_order:114},"🧊":{category:"Food & Drink",sheet_x:44,sheet_y:18,sort_order:115},"🧍‍♀️":{category:"People & Body",sheet_x:44,sheet_y:19,sort_order:217},"🧍‍♂️":{category:"People & Body",sheet_x:44,sheet_y:25,sort_order:216},"🧍":{category:"People & Body",sheet_x:44,sheet_y:31,sort_order:215},"🧎‍♀️":{category:"People & Body",sheet_x:44,sheet_y:37,sort_order:220},"🧎‍♂️":{category:"People & Body",sheet_x:44,sheet_y:43,sort_order:219},"🧎":{category:"People & Body",sheet_x:44,sheet_y:49,sort_order:218},"🧏‍♀️":{category:"People & Body",sheet_x:44,sheet_y:55,sort_order:95},"🧏‍♂️":{category:"People & Body",sheet_x:45,sheet_y:4,sort_order:94},"🧏":{category:"People & Body",sheet_x:45,sheet_y:10,sort_order:93},"🧐":{category:"Smileys & Emotion",sheet_x:45,sheet_y:16,sort_order:62},"🧑‍🌾":{category:"People & Body",sheet_x:45,sheet_y:17,sort_order:117},"🧑‍🍳":{category:"People & Body",sheet_x:45,sheet_y:23,sort_order:120},"🧑‍🎓":{category:"People & Body",sheet_x:45,sheet_y:29,sort_order:108},"🧑‍🎤":{category:"People & Body",sheet_x:45,sheet_y:35,sort_order:138},"🧑‍🎨":{category:"People & Body",sheet_x:45,sheet_y:41,sort_order:141},"🧑‍🏫":{category:"People & Body",sheet_x:45,sheet_y:47,sort_order:111},"🧑‍🏭":{category:"People & Body",sheet_x:45,sheet_y:53,sort_order:126},"🧑‍💻":{category:"People & Body",sheet_x:46,sheet_y:2,sort_order:135},"🧑‍💼":{category:"People & Body",sheet_x:46,sheet_y:8,sort_order:129},"🧑‍🔧":{category:"People & Body",sheet_x:46,sheet_y:14,sort_order:123},"🧑‍🔬":{category:"People & Body",sheet_x:46,sheet_y:20,sort_order:132},"🧑‍🚀":{category:"People & Body",sheet_x:46,sheet_y:26,sort_order:147},"🧑‍🚒":{category:"People & Body",sheet_x:46,sheet_y:32,sort_order:150},"🧑‍🤝‍🧑":{category:"People & Body",sheet_x:46,sheet_y:38,sort_order:293},"🧑‍🦯":{category:"People & Body",sheet_x:47,sheet_y:7,sort_order:221},"🧑‍🦰":{category:"People & Body",sheet_x:47,sheet_y:13,sort_order:63},"🧑‍🦱":{category:"People & Body",sheet_x:47,sheet_y:19,sort_order:65},"🧑‍🦲":{category:"People & Body",sheet_x:47,sheet_y:25,sort_order:69},"🧑‍🦳":{category:"People & Body",sheet_x:47,sheet_y:31,sort_order:67},"🧑‍🦼":{category:"People & Body",sheet_x:47,sheet_y:37,sort_order:224},"🧑‍🦽":{category:"People & Body",sheet_x:47,sheet_y:43,sort_order:227},"🧑‍⚕️":{category:"People & Body",sheet_x:47,sheet_y:49,sort_order:105},"🧑‍⚖️":{category:"People & Body",sheet_x:47,sheet_y:55,sort_order:114},"🧑‍✈️":{category:"People & Body",sheet_x:48,sheet_y:4,sort_order:144},"🧑":{category:"People & Body",sheet_x:48,sheet_y:10,sort_order:53},"🧒":{category:"People & Body",sheet_x:48,sheet_y:16,sort_order:50},"🧓":{category:"People & Body",sheet_x:48,sheet_y:22,sort_order:72},"🧔":{category:"People & Body",sheet_x:48,sheet_y:28,sort_order:56},"🧕":{category:"People & Body",sheet_x:48,sheet_y:34,sort_order:171},"🧖‍♀️":{category:"People & Body",sheet_x:48,sheet_y:40,sort_order:241},"🧖‍♂️":{category:"People & Body",sheet_x:48,sheet_y:46,sort_order:240},"🧖":{category:"People & Body",sheet_x:48,sheet_y:52,sort_order:239},"🧗‍♀️":{category:"People & Body",sheet_x:49,sheet_y:1,sort_order:244},"🧗‍♂️":{category:"People & Body",sheet_x:49,sheet_y:7,sort_order:243},"🧗":{category:"People & Body",sheet_x:49,sheet_y:13,sort_order:242},"🧘‍♀️":{category:"People & Body",sheet_x:49,sheet_y:19,sort_order:290},"🧘‍♂️":{category:"People & Body",sheet_x:49,sheet_y:25,sort_order:289},"🧘":{category:"People & Body",sheet_x:49,sheet_y:31,sort_order:288},"🧙‍♀️":{category:"People & Body",sheet_x:49,sheet_y:37,sort_order:187},"🧙‍♂️":{category:"People & Body",sheet_x:49,sheet_y:43,sort_order:186},"🧙":{category:"People & Body",sheet_x:49,sheet_y:49,sort_order:185},"🧚‍♀️":{category:"People & Body",sheet_x:49,sheet_y:55,sort_order:190},"🧚‍♂️":{category:"People & Body",sheet_x:50,sheet_y:4,sort_order:189},"🧚":{category:"People & Body",sheet_x:50,sheet_y:10,sort_order:188},"🧛‍♀️":{category:"People & Body",sheet_x:50,sheet_y:16,sort_order:193},"🧛‍♂️":{category:"People & Body",sheet_x:50,sheet_y:22,sort_order:192},"🧛":{category:"People & Body",sheet_x:50,sheet_y:28,sort_order:191},"🧜‍♀️":{category:"People & Body",sheet_x:50,sheet_y:34,sort_order:196},"🧜‍♂️":{category:"People & Body",sheet_x:50,sheet_y:40,sort_order:195},"🧜":{category:"People & Body",sheet_x:50,sheet_y:46,sort_order:194},"🧝‍♀️":{category:"People & Body",sheet_x:50,sheet_y:52,sort_order:199},"🧝‍♂️":{category:"People & Body",sheet_x:51,sheet_y:1,sort_order:198},"🧝":{category:"People & Body",sheet_x:51,sheet_y:7,sort_order:197},"🧞‍♀️":{category:"People & Body",sheet_x:51,sheet_y:13,sort_order:202},"🧞‍♂️":{category:"People & Body",sheet_x:51,sheet_y:14,sort_order:201},"🧞":{category:"People & Body",sheet_x:51,sheet_y:15,sort_order:200},"🧟‍♀️":{category:"People & Body",sheet_x:51,sheet_y:16,sort_order:205},"🧟‍♂️":{category:"People & Body",sheet_x:51,sheet_y:17,sort_order:204},"🧟":{category:"People & Body",sheet_x:51,sheet_y:18,sort_order:203},"🧠":{category:"People & Body",sheet_x:51,sheet_y:19,sort_order:42},"🧡":{category:"Smileys & Emotion",sheet_x:51,sheet_y:20,sort_order:128},"🧢":{category:"Objects",sheet_x:51,sheet_y:21,sort_order:38},"🧣":{category:"Objects",sheet_x:51,sheet_y:22,sort_order:9},"🧤":{category:"Objects",sheet_x:51,sheet_y:23,sort_order:10},"🧥":{category:"Objects",sheet_x:51,sheet_y:24,sort_order:11},"🧦":{category:"Objects",sheet_x:51,sheet_y:25,sort_order:12},"🧧":{category:"Activities",sheet_x:51,sheet_y:26,sort_order:16},"🧨":{category:"Activities",sheet_x:51,sheet_y:27,sort_order:5},"🧩":{category:"Activities",sheet_x:51,sheet_y:28,sort_order:65},"🧪":{category:"Objects",sheet_x:51,sheet_y:29,sort_order:202},"🧫":{category:"Objects",sheet_x:51,sheet_y:30,sort_order:203},"🧬":{category:"Objects",sheet_x:51,sheet_y:31,sort_order:204},"🧭":{category:"Travel & Places",sheet_x:51,sheet_y:32,sort_order:7},"🧮":{category:"Objects",sheet_x:51,sheet_y:33,sort_order:87},"🧯":{category:"Objects",sheet_x:51,sheet_y:34,sort_order:228},"🧰":{category:"Objects",sheet_x:51,sheet_y:35,sort_order:199},"🧱":{category:"Travel & Places",sheet_x:51,sheet_y:36,sort_order:20},"🧲":{category:"Objects",sheet_x:51,sheet_y:37,sort_order:200},"🧳":{category:"Travel & Places",sheet_x:51,sheet_y:38,sort_order:132},"🧴":{category:"Objects",sheet_x:51,sheet_y:39,sort_order:221},"🧵":{category:"Activities",sheet_x:51,sheet_y:40,sort_order:78},"🧶":{category:"Activities",sheet_x:51,sheet_y:41,sort_order:79},"🧷":{category:"Objects",sheet_x:51,sheet_y:42,sort_order:222},"🧸":{category:"Activities",sheet_x:51,sheet_y:43,sort_order:66},"🧹":{category:"Objects",sheet_x:51,sheet_y:44,sort_order:223},"🧺":{category:"Objects",sheet_x:51,sheet_y:45,sort_order:224},"🧻":{category:"Objects",sheet_x:51,sheet_y:46,sort_order:225},"🧼":{category:"Objects",sheet_x:51,sheet_y:47,sort_order:226},"🧽":{category:"Objects",sheet_x:51,sheet_y:48,sort_order:227},"🧾":{category:"Objects",sheet_x:51,sheet_y:49,sort_order:128},"🧿":{category:"Activities",sheet_x:51,sheet_y:50,sort_order:60},"🩰":{category:"Objects",sheet_x:51,sheet_y:51,sort_order:32},"🩱":{category:"Objects",sheet_x:51,sheet_y:52,sort_order:16},"🩲":{category:"Objects",sheet_x:51,sheet_y:53,sort_order:17},"🩳":{category:"Objects",sheet_x:51,sheet_y:54,sort_order:18},"🩸":{category:"Objects",sheet_x:51,sheet_y:55,sort_order:209},"🩹":{category:"Objects",sheet_x:51,sheet_y:56,sort_order:211},"🩺":{category:"Objects",sheet_x:52,sheet_y:0,sort_order:212},"🪀":{category:"Activities",sheet_x:52,sheet_y:1,sort_order:56},"🪁":{category:"Activities",sheet_x:52,sheet_y:2,sort_order:57},"🪂":{category:"Travel & Places",sheet_x:52,sheet_y:3,sort_order:122},"🪐":{category:"Travel & Places",sheet_x:52,sheet_y:4,sort_order:180},"🪑":{category:"Objects",sheet_x:52,sheet_y:5,sort_order:216},"🪒":{category:"Objects",sheet_x:52,sheet_y:6,sort_order:220},"🪓":{category:"Objects",sheet_x:52,sheet_y:7,sort_order:182},"🪔":{category:"Objects",sheet_x:52,sheet_y:8,sort_order:103},"🪕":{category:"Objects",sheet_x:52,sheet_y:9,sort_order:67},"‼️":{category:"Symbols",sheet_x:52,sheet_y:10,sort_order:122},"⁉️":{category:"Symbols",sheet_x:52,sheet_y:11,sort_order:123},"™️":{category:"Symbols",sheet_x:52,sheet_y:12,sort_order:131},"ℹ️":{category:"Symbols",sheet_x:52,sheet_y:13,sort_order:156},"↔️":{category:"Symbols",sheet_x:52,sheet_y:14,sort_order:36},"↕️":{category:"Symbols",sheet_x:52,sheet_y:15,sort_order:35},"↖️":{category:"Symbols",sheet_x:52,sheet_y:16,sort_order:34},"↗️":{category:"Symbols",sheet_x:52,sheet_y:17,sort_order:28},"↘️":{category:"Symbols",sheet_x:52,sheet_y:18,sort_order:30},"↙️":{category:"Symbols",sheet_x:52,sheet_y:19,sort_order:32},"↩️":{category:"Symbols",sheet_x:52,sheet_y:20,sort_order:37},"↪️":{category:"Symbols",sheet_x:52,sheet_y:21,sort_order:38},"⌚":{category:"Travel & Places",sheet_x:52,sheet_y:22,sort_order:135},"⌛":{category:"Travel & Places",sheet_x:52,sheet_y:23,sort_order:133},"⌨️":{category:"Objects",sheet_x:52,sheet_y:24,sort_order:80},"⏏️":{category:"Symbols",sheet_x:52,sheet_y:25,sort_order:90},"⏩":{category:"Symbols",sheet_x:52,sheet_y:26,sort_order:77},"⏪":{category:"Symbols",sheet_x:52,sheet_y:27,sort_order:81},"⏫":{category:"Symbols",sheet_x:52,sheet_y:28,sort_order:84},"⏬":{category:"Symbols",sheet_x:52,sheet_y:29,sort_order:86},"⏭️":{category:"Symbols",sheet_x:52,sheet_y:30,sort_order:78},"⏮️":{category:"Symbols",sheet_x:52,sheet_y:31,sort_order:82},"⏯️":{category:"Symbols",sheet_x:52,sheet_y:32,sort_order:79},"⏰":{category:"Travel & Places",sheet_x:52,sheet_y:33,sort_order:136},"⏱️":{category:"Travel & Places",sheet_x:52,sheet_y:34,sort_order:137},"⏲️":{category:"Travel & Places",sheet_x:52,sheet_y:35,sort_order:138},"⏳":{category:"Travel & Places",sheet_x:52,sheet_y:36,sort_order:134},"⏸️":{category:"Symbols",sheet_x:52,sheet_y:37,sort_order:87},"⏹️":{category:"Symbols",sheet_x:52,sheet_y:38,sort_order:88},"⏺️":{category:"Symbols",sheet_x:52,sheet_y:39,sort_order:89},"Ⓜ️":{category:"Symbols",sheet_x:52,sheet_y:40,sort_order:158},"▪️":{category:"Symbols",sheet_x:52,sheet_y:41,sort_order:206},"▫️":{category:"Symbols",sheet_x:52,sheet_y:42,sort_order:207},"▶️":{category:"Symbols",sheet_x:52,sheet_y:43,sort_order:76},"◀️":{category:"Symbols",sheet_x:52,sheet_y:44,sort_order:80},"◻️":{category:"Symbols",sheet_x:52,sheet_y:45,sort_order:203},"◼️":{category:"Symbols",sheet_x:52,sheet_y:46,sort_order:202},"◽":{category:"Symbols",sheet_x:52,sheet_y:47,sort_order:205},"◾":{category:"Symbols",sheet_x:52,sheet_y:48,sort_order:204},"☀️":{category:"Travel & Places",sheet_x:52,sheet_y:49,sort_order:177},"☁️":{category:"Travel & Places",sheet_x:52,sheet_y:50,sort_order:185},"☂️":{category:"Travel & Places",sheet_x:52,sheet_y:51,sort_order:200},"☃️":{category:"Travel & Places",sheet_x:52,sheet_y:52,sort_order:205},"☄️":{category:"Travel & Places",sheet_x:52,sheet_y:53,sort_order:207},"☎️":{category:"Objects",sheet_x:52,sheet_y:54,sort_order:71},"☑️":{category:"Symbols",sheet_x:52,sheet_y:55,sort_order:108},"☔":{category:"Travel & Places",sheet_x:52,sheet_y:56,sort_order:201},"☕":{category:"Food & Drink",sheet_x:53,sheet_y:0,sort_order:101},"☘️":{category:"Animals & Nature",sheet_x:53,sheet_y:1,sort_order:123},"☝️":{category:"People & Body",sheet_x:53,sheet_y:2,sort_order:18},"☠️":{category:"Smileys & Emotion",sheet_x:53,sheet_y:8,sort_order:94},"☢️":{category:"Symbols",sheet_x:53,sheet_y:9,sort_order:25},"☣️":{category:"Symbols",sheet_x:53,sheet_y:10,sort_order:26},"☦️":{category:"Symbols",sheet_x:53,sheet_y:11,sort_order:55},"☪️":{category:"Symbols",sheet_x:53,sheet_y:12,sort_order:56},"☮️":{category:"Symbols",sheet_x:53,sheet_y:13,sort_order:57},"☯️":{category:"Symbols",sheet_x:53,sheet_y:14,sort_order:53},"☸️":{category:"Symbols",sheet_x:53,sheet_y:15,sort_order:52},"☹️":{category:"Smileys & Emotion",sheet_x:53,sheet_y:16,sort_order:66},"☺️":{category:"Smileys & Emotion",sheet_x:53,sheet_y:17,sort_order:19},"♈":{category:"Symbols",sheet_x:53,sheet_y:20,sort_order:60},"♉":{category:"Symbols",sheet_x:53,sheet_y:21,sort_order:61},"♊":{category:"Symbols",sheet_x:53,sheet_y:22,sort_order:62},"♋":{category:"Symbols",sheet_x:53,sheet_y:23,sort_order:63},"♌":{category:"Symbols",sheet_x:53,sheet_y:24,sort_order:64},"♍":{category:"Symbols",sheet_x:53,sheet_y:25,sort_order:65},"♎":{category:"Symbols",sheet_x:53,sheet_y:26,sort_order:66},"♏":{category:"Symbols",sheet_x:53,sheet_y:27,sort_order:67},"♐":{category:"Symbols",sheet_x:53,sheet_y:28,sort_order:68},"♑":{category:"Symbols",sheet_x:53,sheet_y:29,sort_order:69},"♒":{category:"Symbols",sheet_x:53,sheet_y:30,sort_order:70},"♓":{category:"Symbols",sheet_x:53,sheet_y:31,sort_order:71},"♟️":{category:"Activities",sheet_x:53,sheet_y:32,sort_order:71},"♠️":{category:"Activities",sheet_x:53,sheet_y:33,sort_order:67},"♣️":{category:"Activities",sheet_x:53,sheet_y:34,sort_order:70},"♥️":{category:"Activities",sheet_x:53,sheet_y:35,sort_order:68},"♦️":{category:"Activities",sheet_x:53,sheet_y:36,sort_order:69},"♨️":{category:"Travel & Places",sheet_x:53,sheet_y:37,sort_order:57},"♻️":{category:"Symbols",sheet_x:53,sheet_y:38,sort_order:101},"♾️":{category:"Symbols",sheet_x:53,sheet_y:39,sort_order:100},"♿":{category:"Symbols",sheet_x:53,sheet_y:40,sort_order:4},"⚒️":{category:"Objects",sheet_x:53,sheet_y:41,sort_order:184},"⚓":{category:"Travel & Places",sheet_x:53,sheet_y:42,sort_order:110},"⚔️":{category:"Objects",sheet_x:53,sheet_y:43,sort_order:187},"⚖️":{category:"Objects",sheet_x:53,sheet_y:45,sort_order:195},"⚗️":{category:"Objects",sheet_x:53,sheet_y:46,sort_order:201},"⚙️":{category:"Objects",sheet_x:53,sheet_y:47,sort_order:193},"⚛️":{category:"Symbols",sheet_x:53,sheet_y:48,sort_order:49},"⚜️":{category:"Symbols",sheet_x:53,sheet_y:49,sort_order:102},"⚠️":{category:"Symbols",sheet_x:53,sheet_y:50,sort_order:14},"⚡":{category:"Travel & Places",sheet_x:53,sheet_y:51,sort_order:203},"⚪":{category:"Symbols",sheet_x:53,sheet_y:52,sort_order:192},"⚫":{category:"Symbols",sheet_x:53,sheet_y:53,sort_order:191},"⚰️":{category:"Objects",sheet_x:53,sheet_y:54,sort_order:231},"⚱️":{category:"Objects",sheet_x:53,sheet_y:55,sort_order:232},"⚽":{category:"Activities",sheet_x:53,sheet_y:56,sort_order:28},"⚾":{category:"Activities",sheet_x:54,sheet_y:0,sort_order:29},"⛄":{category:"Travel & Places",sheet_x:54,sheet_y:1,sort_order:206},"⛅":{category:"Travel & Places",sheet_x:54,sheet_y:2,sort_order:186},"⛈️":{category:"Travel & Places",sheet_x:54,sheet_y:3,sort_order:187},"⛎":{category:"Symbols",sheet_x:54,sheet_y:4,sort_order:72},"⛏️":{category:"Objects",sheet_x:54,sheet_y:5,sort_order:183},"⛑️":{category:"Objects",sheet_x:54,sheet_y:6,sort_order:39},"⛓️":{category:"Objects",sheet_x:54,sheet_y:7,sort_order:198},"⛔":{category:"Symbols",sheet_x:54,sheet_y:8,sort_order:16},"⛩️":{category:"Travel & Places",sheet_x:54,sheet_y:9,sort_order:45},"⛪":{category:"Travel & Places",sheet_x:54,sheet_y:10,sort_order:41},"⛰️":{category:"Travel & Places",sheet_x:54,sheet_y:11,sort_order:9},"⛱️":{category:"Travel & Places",sheet_x:54,sheet_y:12,sort_order:202},"⛲":{category:"Travel & Places",sheet_x:54,sheet_y:13,sort_order:47},"⛳":{category:"Activities",sheet_x:54,sheet_y:14,sort_order:47},"⛴️":{category:"Travel & Places",sheet_x:54,sheet_y:15,sort_order:115},"⛵":{category:"Travel & Places",sheet_x:54,sheet_y:16,sort_order:111},"⛷️":{category:"People & Body",sheet_x:54,sheet_y:17,sort_order:247},"⛸️":{category:"Activities",sheet_x:54,sheet_y:18,sort_order:48},"⛹️‍♀️":{category:"People & Body",sheet_x:54,sheet_y:19,sort_order:263},"⛹️‍♂️":{category:"People & Body",sheet_x:54,sheet_y:25,sort_order:262},"⛹️":{category:"People & Body",sheet_x:54,sheet_y:31,sort_order:261},"⛺":{category:"Travel & Places",sheet_x:54,sheet_y:37,sort_order:48},"⛽":{category:"Travel & Places",sheet_x:54,sheet_y:38,sort_order:104},"✂️":{category:"Objects",sheet_x:54,sheet_y:39,sort_order:171},"✅":{category:"Symbols",sheet_x:54,sheet_y:40,sort_order:107},"✈️":{category:"Travel & Places",sheet_x:54,sheet_y:41,sort_order:118},"✉️":{category:"Objects",sheet_x:54,sheet_y:42,sort_order:132},"✊":{category:"People & Body",sheet_x:54,sheet_y:43,sort_order:21},"✋":{category:"People & Body",sheet_x:54,sheet_y:49,sort_order:4},"✌️":{category:"People & Body",sheet_x:54,sheet_y:55,sort_order:8},"✍️":{category:"People & Body",sheet_x:55,sheet_y:4,sort_order:31},"✏️":{category:"Objects",sheet_x:55,sheet_y:10,sort_order:145},"✒️":{category:"Objects",sheet_x:55,sheet_y:11,sort_order:146},"✔️":{category:"Symbols",sheet_x:55,sheet_y:12,sort_order:109},"✖️":{category:"Symbols",sheet_x:55,sheet_y:13,sort_order:110},"✝️":{category:"Symbols",sheet_x:55,sheet_y:14,sort_order:54},"✡️":{category:"Symbols",sheet_x:55,sheet_y:15,sort_order:51},"✨":{category:"Activities",sheet_x:55,sheet_y:16,sort_order:6},"✳️":{category:"Symbols",sheet_x:55,sheet_y:17,sort_order:119},"✴️":{category:"Symbols",sheet_x:55,sheet_y:18,sort_order:120},"❄️":{category:"Travel & Places",sheet_x:55,sheet_y:19,sort_order:204},"❇️":{category:"Symbols",sheet_x:55,sheet_y:20,sort_order:121},"❌":{category:"Symbols",sheet_x:55,sheet_y:21,sort_order:111},"❎":{category:"Symbols",sheet_x:55,sheet_y:22,sort_order:112},"❓":{category:"Symbols",sheet_x:55,sheet_y:23,sort_order:124},"❔":{category:"Symbols",sheet_x:55,sheet_y:24,sort_order:125},"❕":{category:"Symbols",sheet_x:55,sheet_y:25,sort_order:126},"❗":{category:"Symbols",sheet_x:55,sheet_y:26,sort_order:127},"❣️":{category:"Smileys & Emotion",sheet_x:55,sheet_y:27,sort_order:125},"❤️":{category:"Smileys & Emotion",sheet_x:55,sheet_y:28,sort_order:127},"➕":{category:"Symbols",sheet_x:55,sheet_y:29,sort_order:113},"➖":{category:"Symbols",sheet_x:55,sheet_y:30,sort_order:114},"➗":{category:"Symbols",sheet_x:55,sheet_y:31,sort_order:115},"➡️":{category:"Symbols",sheet_x:55,sheet_y:32,sort_order:29},"➰":{category:"Symbols",sheet_x:55,sheet_y:33,sort_order:116},"➿":{category:"Symbols",sheet_x:55,sheet_y:34,sort_order:117},"⤴️":{category:"Symbols",sheet_x:55,sheet_y:35,sort_order:39},"⤵️":{category:"Symbols",sheet_x:55,sheet_y:36,sort_order:40},"⬅️":{category:"Symbols",sheet_x:55,sheet_y:37,sort_order:33},"⬆️":{category:"Symbols",sheet_x:55,sheet_y:38,sort_order:27},"⬇️":{category:"Symbols",sheet_x:55,sheet_y:39,sort_order:31},"⬛":{category:"Symbols",sheet_x:55,sheet_y:40,sort_order:200},"⬜":{category:"Symbols",sheet_x:55,sheet_y:41,sort_order:201},"⭐":{category:"Travel & Places",sheet_x:55,sheet_y:42,sort_order:181},"⭕":{category:"Symbols",sheet_x:55,sheet_y:43,sort_order:106},"〰️":{category:"Symbols",sheet_x:55,sheet_y:44,sort_order:128},"〽️":{category:"Symbols",sheet_x:55,sheet_y:45,sort_order:118},"㊗️":{category:"Symbols",sheet_x:55,sheet_y:46,sort_order:180},"㊙️":{category:"Symbols",sheet_x:55,sheet_y:47,sort_order:181}}}}Config.Schema=Config.Schema||{},Config.Schema.MTProto={constructors:[{id:"481674261",predicate:"vector",params:[],type:"Vector t"},{id:"85337187",predicate:"resPQ",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"pq",type:"bytes"},{name:"server_public_key_fingerprints",type:"Vector"}],type:"ResPQ"},{id:"-2083955988",predicate:"p_q_inner_data",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"}],type:"P_Q_inner_data"},{id:"1013613780",predicate:"p_q_inner_data_temp",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"},{name:"expires_in",type:"int"}],type:"P_Q_inner_data"},{id:"2043348061",predicate:"server_DH_params_fail",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash",type:"int128"}],type:"Server_DH_Params"},{id:"-790100132",predicate:"server_DH_params_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_answer",type:"bytes"}],type:"Server_DH_Params"},{id:"-1249309254",predicate:"server_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"g",type:"int"},{name:"dh_prime",type:"bytes"},{name:"g_a",type:"bytes"},{name:"server_time",type:"int"}],type:"Server_DH_inner_data"},{id:"1715713620",predicate:"client_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"retry_id",type:"long"},{name:"g_b",type:"bytes"}],type:"Client_DH_Inner_Data"},{id:"1003222836",predicate:"dh_gen_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash1",type:"int128"}],type:"Set_client_DH_params_answer"},{id:"1188831161",predicate:"dh_gen_retry",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash2",type:"int128"}],type:"Set_client_DH_params_answer"},{id:"-1499615742",predicate:"dh_gen_fail",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash3",type:"int128"}],type:"Set_client_DH_params_answer"},{id:"-212046591",predicate:"rpc_result",params:[{name:"req_msg_id",type:"long"},{name:"result",type:"Object"}],type:"RpcResult"},{id:"558156313",predicate:"rpc_error",params:[{name:"error_code",type:"int"},{name:"error_message",type:"string"}],type:"RpcError"},{id:"1579864942",predicate:"rpc_answer_unknown",params:[],type:"RpcDropAnswer"},{id:"-847714938",predicate:"rpc_answer_dropped_running",params:[],type:"RpcDropAnswer"},{id:"-1539647305",predicate:"rpc_answer_dropped",params:[{name:"msg_id",type:"long"},{name:"seq_no",type:"int"},{name:"bytes",type:"int"}],type:"RpcDropAnswer"},{id:"155834844",predicate:"future_salt",params:[{name:"valid_since",type:"int"},{name:"valid_until",type:"int"},{name:"salt",type:"long"}],type:"FutureSalt"},{id:"-1370486635",predicate:"future_salts",params:[{name:"req_msg_id",type:"long"},{name:"now",type:"int"},{name:"salts",type:"vector"}],type:"FutureSalts"},{id:"880243653",predicate:"pong",params:[{name:"msg_id",type:"long"},{name:"ping_id",type:"long"}],type:"Pong"},{id:"-501201412",predicate:"destroy_session_ok",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:"1658015945",predicate:"destroy_session_none",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:"-1631450872",predicate:"new_session_created",params:[{name:"first_msg_id",type:"long"},{name:"unique_id",type:"long"},{name:"server_salt",type:"long"}],type:"NewSession"},{id:"1945237724",predicate:"msg_container",params:[{name:"messages",type:"vector<%Message>"}],type:"MessageContainer"},{id:"1538843921",predicate:"message",params:[{name:"msg_id",type:"long"},{name:"seqno",type:"int"},{name:"bytes",type:"int"},{name:"body",type:"Object"}],type:"Message"},{id:"-530561358",predicate:"msg_copy",params:[{name:"orig_message",type:"Message"}],type:"MessageCopy"},{id:"812830625",predicate:"gzip_packed",params:[{name:"packed_data",type:"bytes"}],type:"Object"},{id:"1658238041",predicate:"msgs_ack",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsAck"},{id:"-1477445615",predicate:"bad_msg_notification",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"}],type:"BadMsgNotification"},{id:"-307542917",predicate:"bad_server_salt",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"},{name:"new_server_salt",type:"long"}],type:"BadMsgNotification"},{id:"2105940488",predicate:"msg_resend_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgResendReq"},{id:"-630588590",predicate:"msgs_state_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsStateReq"},{id:"81704317",predicate:"msgs_state_info",params:[{name:"req_msg_id",type:"long"},{name:"info",type:"bytes"}],type:"MsgsStateInfo"},{id:"-1933520591",predicate:"msgs_all_info",params:[{name:"msg_ids",type:"Vector"},{name:"info",type:"bytes"}],type:"MsgsAllInfo"},{id:"661470918",predicate:"msg_detailed_info",params:[{name:"msg_id",type:"long"},{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:"-2137147681",predicate:"msg_new_detailed_info",params:[{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:"1973679973",predicate:"bind_auth_key_inner",params:[{name:"nonce",type:"long"},{name:"temp_auth_key_id",type:"long"},{name:"perm_auth_key_id",type:"long"},{name:"temp_session_id",type:"long"},{name:"expires_at",type:"int"}],type:"BindAuthKeyInner"}],methods:[{id:"3195965169",method:"req_pq_multi",params:[{name:"nonce",type:"int128"}],type:"ResPQ"},{id:"1615239032",method:"req_pq",params:[{name:"nonce",type:"int128"}],type:"ResPQ"},{id:"-686627650",method:"req_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"public_key_fingerprint",type:"long"},{name:"encrypted_data",type:"bytes"}],type:"Server_DH_Params"},{id:"-184262881",method:"set_client_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_data",type:"bytes"}],type:"Set_client_DH_params_answer"},{id:"1491380032",method:"rpc_drop_answer",params:[{name:"req_msg_id",type:"long"}],type:"RpcDropAnswer"},{id:"-1188971260",method:"get_future_salts",params:[{name:"num",type:"int"}],type:"FutureSalts"},{id:"2059302892",method:"ping",params:[{name:"ping_id",type:"long"}],type:"Pong"},{id:"-213746804",method:"ping_delay_disconnect",params:[{name:"ping_id",type:"long"},{name:"disconnect_delay",type:"int"}],type:"Pong"},{id:"-414113498",method:"destroy_session",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:"-1835453025",method:"http_wait",params:[{name:"max_delay",type:"int"},{name:"wait_after",type:"int"},{name:"max_wait",type:"int"}],type:"HttpWait"}]},Config.Schema.API={constructors:[{id:"-1132882121",predicate:"boolFalse",params:[],type:"Bool"},{id:"-1720552011",predicate:"boolTrue",params:[],type:"Bool"},{id:"1072550713",predicate:"true",params:[],type:"True"},{id:"481674261",predicate:"vector",params:[],type:"Vector t"},{id:"-994444869",predicate:"error",params:[{name:"code",type:"int"},{name:"text",type:"string"}],type:"Error"},{id:"1450380236",predicate:"null",params:[],type:"Null"},{id:"2134579434",predicate:"inputPeerEmpty",params:[],type:"InputPeer"},{id:"2107670217",predicate:"inputPeerSelf",params:[],type:"InputPeer"},{id:"396093539",predicate:"inputPeerChat",params:[{name:"chat_id",type:"int"}],type:"InputPeer"},{id:"-1182234929",predicate:"inputUserEmpty",params:[],type:"InputUser"},{id:"-138301121",predicate:"inputUserSelf",params:[],type:"InputUser"},{id:"-208488460",predicate:"inputPhoneContact",params:[{name:"client_id",type:"long"},{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"InputContact"},{id:"-181407105",predicate:"inputFile",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"},{name:"md5_checksum",type:"string"}],type:"InputFile"},{id:"-1771768449",predicate:"inputMediaEmpty",params:[],type:"InputMedia"},{id:"505969924",predicate:"inputMediaUploadedPhoto",params:[{name:"flags",type:"#"},{name:"file",type:"InputFile"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:"-1279654347",predicate:"inputMediaPhoto",params:[{name:"flags",type:"#"},{name:"id",type:"InputPhoto"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:"-104578748",predicate:"inputMediaGeoPoint",params:[{name:"geo_point",type:"InputGeoPoint"}],type:"InputMedia"},{id:"-122978821",predicate:"inputMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"}],type:"InputMedia"},{id:"480546647",predicate:"inputChatPhotoEmpty",params:[],type:"InputChatPhoto"},{id:"-1837345356",predicate:"inputChatUploadedPhoto",params:[{name:"file",type:"InputFile"}],type:"InputChatPhoto"},{id:"-1991004873",predicate:"inputChatPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputChatPhoto"},{id:"-457104426",predicate:"inputGeoPointEmpty",params:[],type:"InputGeoPoint"},{id:"-206066487",predicate:"inputGeoPoint",params:[{name:"lat",type:"double"},{name:"long",type:"double"}],type:"InputGeoPoint"},{id:"483901197",predicate:"inputPhotoEmpty",params:[],type:"InputPhoto"},{id:"1001634122",predicate:"inputPhoto",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputPhoto"},{id:"-539317279",predicate:"inputFileLocation",params:[{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputFileLocation"},{id:"-1649296275",predicate:"peerUser",params:[{name:"user_id",type:"int"}],type:"Peer"},{id:"-1160714821",predicate:"peerChat",params:[{name:"chat_id",type:"int"}],type:"Peer"},{id:"-1432995067",predicate:"storage.fileUnknown",params:[],type:"storage.FileType"},{id:"1086091090",predicate:"storage.filePartial",params:[],type:"storage.FileType"},{id:"8322574",predicate:"storage.fileJpeg",params:[],type:"storage.FileType"},{id:"-891180321",predicate:"storage.fileGif",params:[],type:"storage.FileType"},{id:"172975040",predicate:"storage.filePng",params:[],type:"storage.FileType"},{id:"-1373745011",predicate:"storage.filePdf",params:[],type:"storage.FileType"},{id:"1384777335",predicate:"storage.fileMp3",params:[],type:"storage.FileType"},{id:"1258941372",predicate:"storage.fileMov",params:[],type:"storage.FileType"},{id:"-1278304028",predicate:"storage.fileMp4",params:[],type:"storage.FileType"},{id:"276907596",predicate:"storage.fileWebp",params:[],type:"storage.FileType"},{id:"537022650",predicate:"userEmpty",params:[{name:"id",type:"int"}],type:"User"},{id:"1326562017",predicate:"userProfilePhotoEmpty",params:[],type:"UserProfilePhoto"},{id:"-321430132",predicate:"userProfilePhoto",params:[{name:"photo_id",type:"long"},{name:"photo_small",type:"FileLocation"},{name:"photo_big",type:"FileLocation"},{name:"dc_id",type:"int"}],type:"UserProfilePhoto"},{id:"164646985",predicate:"userStatusEmpty",params:[],type:"UserStatus"},{id:"-306628279",predicate:"userStatusOnline",params:[{name:"expires",type:"int"}],type:"UserStatus"},{id:"9203775",predicate:"userStatusOffline",params:[{name:"was_online",type:"int"}],type:"UserStatus"},{id:"-1683826688",predicate:"chatEmpty",params:[{name:"id",type:"int"}],type:"Chat"},{id:"1004149726",predicate:"chat",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"kicked",type:"flags.1?true"},{name:"left",type:"flags.2?true"},{name:"deactivated",type:"flags.5?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"photo",type:"ChatPhoto"},{name:"participants_count",type:"int"},{name:"date",type:"int"},{name:"version",type:"int"},{name:"migrated_to",type:"flags.6?InputChannel"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"}],type:"Chat"},{id:"120753115",predicate:"chatForbidden",params:[{name:"id",type:"int"},{name:"title",type:"string"}],type:"Chat"},{id:"461151667",predicate:"chatFull",params:[{name:"flags",type:"#"},{name:"can_set_username",type:"flags.7?true"},{name:"has_scheduled",type:"flags.8?true"},{name:"id",type:"int"},{name:"about",type:"string"},{name:"participants",type:"ChatParticipants"},{name:"chat_photo",type:"flags.2?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"ExportedChatInvite"},{name:"bot_info",type:"flags.3?Vector"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"folder_id",type:"flags.11?int"}],type:"ChatFull"},{id:"-925415106",predicate:"chatParticipant",params:[{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:"-57668565",predicate:"chatParticipantsForbidden",params:[{name:"flags",type:"#"},{name:"chat_id",type:"int"},{name:"self_participant",type:"flags.0?ChatParticipant"}],type:"ChatParticipants"},{id:"1061556205",predicate:"chatParticipants",params:[{name:"chat_id",type:"int"},{name:"participants",type:"Vector"},{name:"version",type:"int"}],type:"ChatParticipants"},{id:"935395612",predicate:"chatPhotoEmpty",params:[],type:"ChatPhoto"},{id:"1197267925",predicate:"chatPhoto",params:[{name:"photo_small",type:"FileLocation"},{name:"photo_big",type:"FileLocation"},{name:"dc_id",type:"int"}],type:"ChatPhoto"},{id:"-2082087340",predicate:"messageEmpty",params:[{name:"id",type:"int"}],type:"Message"},{id:"1160515173",predicate:"message",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"from_scheduled",type:"flags.18?true"},{name:"legacy",type:"flags.19?true"},{name:"edit_hide",type:"flags.21?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?int"},{name:"to_id",type:"Peer"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?int"},{name:"reply_to_msg_id",type:"flags.3?int"},{name:"date",type:"int"},{name:"message",type:"string"},{name:"media",type:"flags.9?MessageMedia"},{name:"reply_markup",type:"flags.6?ReplyMarkup"},{name:"entities",type:"flags.7?Vector"},{name:"views",type:"flags.10?int"},{name:"edit_date",type:"flags.15?int"},{name:"post_author",type:"flags.16?string"},{name:"grouped_id",type:"flags.17?long"},{name:"restriction_reason",type:"flags.22?Vector"}],type:"Message"},{id:"-1642487306",predicate:"messageService",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"legacy",type:"flags.19?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?int"},{name:"to_id",type:"Peer"},{name:"reply_to_msg_id",type:"flags.3?int"},{name:"date",type:"int"},{name:"action",type:"MessageAction"}],type:"Message"},{id:"1038967584",predicate:"messageMediaEmpty",params:[],type:"MessageMedia"},{id:"1766936791",predicate:"messageMediaPhoto",params:[{name:"flags",type:"#"},{name:"photo",type:"flags.0?Photo"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:"1457575028",predicate:"messageMediaGeo",params:[{name:"geo",type:"GeoPoint"}],type:"MessageMedia"},{id:"-873313984",predicate:"messageMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"user_id",type:"int"}],type:"MessageMedia"},{id:"-1618676578",predicate:"messageMediaUnsupported",params:[],type:"MessageMedia"},{id:"-1230047312",predicate:"messageActionEmpty",params:[],type:"MessageAction"},{id:"-1503425638",predicate:"messageActionChatCreate",params:[{name:"title",type:"string"},{name:"users",type:"Vector"}],type:"MessageAction"},{id:"-1247687078",predicate:"messageActionChatEditTitle",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:"2144015272",predicate:"messageActionChatEditPhoto",params:[{name:"photo",type:"Photo"}],type:"MessageAction"},{id:"-1780220945",predicate:"messageActionChatDeletePhoto",params:[],type:"MessageAction"},{id:"1217033015",predicate:"messageActionChatAddUser",params:[{name:"users",type:"Vector"}],type:"MessageAction"},{id:"-1297179892",predicate:"messageActionChatDeleteUser",params:[{name:"user_id",type:"int"}],type:"MessageAction"},{id:"739712882",predicate:"dialog",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"unread_mark",type:"flags.3?true"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"unread_mentions_count",type:"int"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"pts",type:"flags.0?int"},{name:"draft",type:"flags.1?DraftMessage"},{name:"folder_id",type:"flags.4?int"}],type:"Dialog"},{id:"590459437",predicate:"photoEmpty",params:[{name:"id",type:"long"}],type:"Photo"},{id:"-797637467",predicate:"photo",params:[{name:"flags",type:"#"},{name:"has_stickers",type:"flags.0?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"sizes",type:"Vector"},{name:"dc_id",type:"int"}],type:"Photo"},{id:"236446268",predicate:"photoSizeEmpty",params:[{name:"type",type:"string"}],type:"PhotoSize"},{id:"2009052699",predicate:"photoSize",params:[{name:"type",type:"string"},{name:"location",type:"FileLocation"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"size",type:"int"}],type:"PhotoSize"},{id:"-374917894",predicate:"photoCachedSize",params:[{name:"type",type:"string"},{name:"location",type:"FileLocation"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:"286776671",predicate:"geoPointEmpty",params:[],type:"GeoPoint"},{id:"43446532",predicate:"geoPoint",params:[{name:"long",type:"double"},{name:"lat",type:"double"},{name:"access_hash",type:"long"}],type:"GeoPoint"},{id:"1577067778",predicate:"auth.sentCode",params:[{name:"flags",type:"#"},{name:"type",type:"auth.SentCodeType"},{name:"phone_code_hash",type:"string"},{name:"next_type",type:"flags.1?auth.CodeType"},{name:"timeout",type:"flags.2?int"}],type:"auth.SentCode"},{id:"-855308010",predicate:"auth.authorization",params:[{name:"flags",type:"#"},{name:"tmp_sessions",type:"flags.0?int"},{name:"user",type:"User"}],type:"auth.Authorization"},{id:"-543777747",predicate:"auth.exportedAuthorization",params:[{name:"id",type:"int"},{name:"bytes",type:"bytes"}],type:"auth.ExportedAuthorization"},{id:"-1195615476",predicate:"inputNotifyPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputNotifyPeer"},{id:"423314455",predicate:"inputNotifyUsers",params:[],type:"InputNotifyPeer"},{id:"1251338318",predicate:"inputNotifyChats",params:[],type:"InputNotifyPeer"},{id:"-1673717362",predicate:"inputPeerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"sound",type:"flags.3?string"}],type:"InputPeerNotifySettings"},{id:"-1353671392",predicate:"peerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"sound",type:"flags.3?string"}],type:"PeerNotifySettings"},{id:"-2122045747",predicate:"peerSettings",params:[{name:"flags",type:"#"},{name:"report_spam",type:"flags.0?true"},{name:"add_contact",type:"flags.1?true"},{name:"block_contact",type:"flags.2?true"},{name:"share_contact",type:"flags.3?true"},{name:"need_contacts_exception",type:"flags.4?true"},{name:"report_geo",type:"flags.5?true"}],type:"PeerSettings"},{id:"-1539849235",predicate:"wallPaper",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"pattern",type:"flags.3?true"},{name:"dark",type:"flags.4?true"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"document",type:"Document"},{name:"settings",type:"flags.2?WallPaperSettings"}],type:"WallPaper"},{id:"1490799288",predicate:"inputReportReasonSpam",params:[],type:"ReportReason"},{id:"505595789",predicate:"inputReportReasonViolence",params:[],type:"ReportReason"},{id:"777640226",predicate:"inputReportReasonPornography",params:[],type:"ReportReason"},{id:"-1376497949",predicate:"inputReportReasonChildAbuse",params:[],type:"ReportReason"},{id:"-512463606",predicate:"inputReportReasonOther",params:[{name:"text",type:"string"}],type:"ReportReason"},{id:"-302941166",predicate:"userFull",params:[{name:"flags",type:"#"},{name:"blocked",type:"flags.0?true"},{name:"phone_calls_available",type:"flags.4?true"},{name:"phone_calls_private",type:"flags.5?true"},{name:"can_pin_message",type:"flags.7?true"},{name:"has_scheduled",type:"flags.12?true"},{name:"user",type:"User"},{name:"about",type:"flags.1?string"},{name:"settings",type:"PeerSettings"},{name:"profile_photo",type:"flags.2?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"bot_info",type:"flags.3?BotInfo"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"common_chats_count",type:"int"},{name:"folder_id",type:"flags.11?int"}],type:"UserFull"},{id:"-116274796",predicate:"contact",params:[{name:"user_id",type:"int"},{name:"mutual",type:"Bool"}],type:"Contact"},{id:"-805141448",predicate:"importedContact",params:[{name:"user_id",type:"int"},{name:"client_id",type:"long"}],type:"ImportedContact"},{id:"1444661369",predicate:"contactBlocked",params:[{name:"user_id",type:"int"},{name:"date",type:"int"}],type:"ContactBlocked"},{id:"-748155807",predicate:"contactStatus",params:[{name:"user_id",type:"int"},{name:"status",type:"UserStatus"}],type:"ContactStatus"},{id:"-1219778094",predicate:"contacts.contactsNotModified",params:[],type:"contacts.Contacts"},{id:"-353862078",predicate:"contacts.contacts",params:[{name:"contacts",type:"Vector"},{name:"saved_count",type:"int"},{name:"users",type:"Vector"}],type:"contacts.Contacts"},{id:"2010127419",predicate:"contacts.importedContacts",params:[{name:"imported",type:"Vector"},{name:"popular_invites",type:"Vector"},{name:"retry_contacts",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ImportedContacts"},{id:"471043349",predicate:"contacts.blocked",params:[{name:"blocked",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:"-1878523231",predicate:"contacts.blockedSlice",params:[{name:"count",type:"int"},{name:"blocked",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:"364538944",predicate:"messages.dialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:"1910543603",predicate:"messages.dialogsSlice",params:[{name:"count",type:"int"},{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:"-1938715001",predicate:"messages.messages",params:[{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:"-923939298",predicate:"messages.messagesSlice",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"count",type:"int"},{name:"next_rate",type:"flags.0?int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:"1694474197",predicate:"messages.chats",params:[{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:"-438840932",predicate:"messages.chatFull",params:[{name:"full_chat",type:"ChatFull"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatFull"},{id:"-1269012015",predicate:"messages.affectedHistory",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"offset",type:"int"}],type:"messages.AffectedHistory"},{id:"1474492012",predicate:"inputMessagesFilterEmpty",params:[],type:"MessagesFilter"},{id:"-1777752804",predicate:"inputMessagesFilterPhotos",params:[],type:"MessagesFilter"},{id:"-1614803355",predicate:"inputMessagesFilterVideo",params:[],type:"MessagesFilter"},{id:"1458172132",predicate:"inputMessagesFilterPhotoVideo",params:[],type:"MessagesFilter"},{id:"-1629621880",predicate:"inputMessagesFilterDocument",params:[],type:"MessagesFilter"},{id:"2129714567",predicate:"inputMessagesFilterUrl",params:[],type:"MessagesFilter"},{id:"-3644025",predicate:"inputMessagesFilterGif",params:[],type:"MessagesFilter"},{id:"522914557",predicate:"updateNewMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"1318109142",predicate:"updateMessageID",params:[{name:"id",type:"int"},{name:"random_id",type:"long"}],type:"Update"},{id:"-1576161051",predicate:"updateDeleteMessages",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"1548249383",predicate:"updateUserTyping",params:[{name:"user_id",type:"int"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:"-1704596961",predicate:"updateChatUserTyping",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:"125178264",predicate:"updateChatParticipants",params:[{name:"participants",type:"ChatParticipants"}],type:"Update"},{id:"469489699",predicate:"updateUserStatus",params:[{name:"user_id",type:"int"},{name:"status",type:"UserStatus"}],type:"Update"},{id:"-1489818765",predicate:"updateUserName",params:[{name:"user_id",type:"int"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"username",type:"string"}],type:"Update"},{id:"-1791935732",predicate:"updateUserPhoto",params:[{name:"user_id",type:"int"},{name:"date",type:"int"},{name:"photo",type:"UserProfilePhoto"},{name:"previous",type:"Bool"}],type:"Update"},{id:"-1519637954",predicate:"updates.state",params:[{name:"pts",type:"int"},{name:"qts",type:"int"},{name:"date",type:"int"},{name:"seq",type:"int"},{name:"unread_count",type:"int"}],type:"updates.State"},{id:"1567990072",predicate:"updates.differenceEmpty",params:[{name:"date",type:"int"},{name:"seq",type:"int"}],type:"updates.Difference"},{id:"16030880",predicate:"updates.difference",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"updates.Difference"},{id:"-1459938943",predicate:"updates.differenceSlice",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"intermediate_state",type:"updates.State"}],type:"updates.Difference"},{id:"-484987010",predicate:"updatesTooLong",params:[],type:"Updates"},{id:"-1857044719",predicate:"updateShortMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"user_id",type:"int"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?int"},{name:"reply_to_msg_id",type:"flags.3?int"},{name:"entities",type:"flags.7?Vector"}],type:"Updates"},{id:"377562760",predicate:"updateShortChatMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"from_id",type:"int"},{name:"chat_id",type:"int"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?int"},{name:"reply_to_msg_id",type:"flags.3?int"},{name:"entities",type:"flags.7?Vector"}],type:"Updates"},{id:"2027216577",predicate:"updateShort",params:[{name:"update",type:"Update"},{name:"date",type:"int"}],type:"Updates"},{id:"1918567619",predicate:"updatesCombined",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq_start",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:"1957577280",predicate:"updates",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:"-1916114267",predicate:"photos.photos",params:[{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:"352657236",predicate:"photos.photosSlice",params:[{name:"count",type:"int"},{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:"539045032",predicate:"photos.photo",params:[{name:"photo",type:"Photo"},{name:"users",type:"Vector"}],type:"photos.Photo"},{id:"157948117",predicate:"upload.file",params:[{name:"type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.File"},{id:"414687501",predicate:"dcOption",params:[{name:"flags",type:"#"},{name:"ipv6",type:"flags.0?true"},{name:"media_only",type:"flags.1?true"},{name:"tcpo_only",type:"flags.2?true"},{name:"cdn",type:"flags.3?true"},{name:"static",type:"flags.4?true"},{name:"id",type:"int"},{name:"ip_address",type:"string"},{name:"port",type:"int"},{name:"secret",type:"flags.10?bytes"}],type:"DcOption"},{id:"856375399",predicate:"config",params:[{name:"flags",type:"#"},{name:"phonecalls_enabled",type:"flags.1?true"},{name:"default_p2p_contacts",type:"flags.3?true"},{name:"preload_featured_stickers",type:"flags.4?true"},{name:"ignore_phone_entities",type:"flags.5?true"},{name:"revoke_pm_inbox",type:"flags.6?true"},{name:"blocked_mode",type:"flags.8?true"},{name:"pfs_enabled",type:"flags.13?true"},{name:"date",type:"int"},{name:"expires",type:"int"},{name:"test_mode",type:"Bool"},{name:"this_dc",type:"int"},{name:"dc_options",type:"Vector"},{name:"dc_txt_domain_name",type:"string"},{name:"chat_size_max",type:"int"},{name:"megagroup_size_max",type:"int"},{name:"forwarded_count_max",type:"int"},{name:"online_update_period_ms",type:"int"},{name:"offline_blur_timeout_ms",type:"int"},{name:"offline_idle_timeout_ms",type:"int"},{name:"online_cloud_timeout_ms",type:"int"},{name:"notify_cloud_delay_ms",type:"int"},{name:"notify_default_delay_ms",type:"int"},{name:"push_chat_period_ms",type:"int"},{name:"push_chat_limit",type:"int"},{name:"saved_gifs_limit",type:"int"},{name:"edit_time_limit",type:"int"},{name:"revoke_time_limit",type:"int"},{name:"revoke_pm_time_limit",type:"int"},{name:"rating_e_decay",type:"int"},{name:"stickers_recent_limit",type:"int"},{name:"stickers_faved_limit",type:"int"},{name:"channels_read_media_period",type:"int"},{name:"tmp_sessions",type:"flags.0?int"},{name:"pinned_dialogs_count_max",type:"int"},{name:"pinned_infolder_count_max",type:"int"},{name:"call_receive_timeout_ms",type:"int"},{name:"call_ring_timeout_ms",type:"int"},{name:"call_connect_timeout_ms",type:"int"},{name:"call_packet_timeout_ms",type:"int"},{name:"me_url_prefix",type:"string"},{name:"autoupdate_url_prefix",type:"flags.7?string"},{name:"gif_search_username",type:"flags.9?string"},{name:"venue_search_username",type:"flags.10?string"},{name:"img_search_username",type:"flags.11?string"},{name:"static_maps_provider",type:"flags.12?string"},{name:"caption_length_max",type:"int"},{name:"message_length_max",type:"int"},{name:"webfile_dc_id",type:"int"},{name:"suggested_lang_code",type:"flags.2?string"},{name:"lang_pack_version",type:"flags.2?int"},{name:"base_lang_pack_version",type:"flags.2?int"}],type:"Config"},{id:"-1910892683",predicate:"nearestDc",params:[{name:"country",type:"string"},{name:"this_dc",type:"int"},{name:"nearest_dc",type:"int"}],type:"NearestDc"},{id:"497489295",predicate:"help.appUpdate",params:[{name:"flags",type:"#"},{name:"can_not_skip",type:"flags.0?true"},{name:"id",type:"int"},{name:"version",type:"string"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"document",type:"flags.1?Document"},{name:"url",type:"flags.2?string"}],type:"help.AppUpdate"},{id:"-1000708810",predicate:"help.noAppUpdate",params:[],type:"help.AppUpdate"},{id:"415997816",predicate:"help.inviteText",params:[{name:"message",type:"string"}],type:"help.InviteText"},{id:"314359194",predicate:"updateNewEncryptedMessage",params:[{name:"message",type:"EncryptedMessage"},{name:"qts",type:"int"}],type:"Update"},{id:"386986326",predicate:"updateEncryptedChatTyping",params:[{name:"chat_id",type:"int"}],type:"Update"},{id:"-1264392051",predicate:"updateEncryption",params:[{name:"chat",type:"EncryptedChat"},{name:"date",type:"int"}],type:"Update"},{id:"956179895",predicate:"updateEncryptedMessagesRead",params:[{name:"chat_id",type:"int"},{name:"max_date",type:"int"},{name:"date",type:"int"}],type:"Update"},{id:"-1417756512",predicate:"encryptedChatEmpty",params:[{name:"id",type:"int"}],type:"EncryptedChat"},{id:"1006044124",predicate:"encryptedChatWaiting",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"}],type:"EncryptedChat"},{id:"-931638658",predicate:"encryptedChatRequested",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:"-94974410",predicate:"encryptedChat",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:"332848423",predicate:"encryptedChatDiscarded",params:[{name:"id",type:"int"}],type:"EncryptedChat"},{id:"-247351839",predicate:"inputEncryptedChat",params:[{name:"chat_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputEncryptedChat"},{id:"-1038136962",predicate:"encryptedFileEmpty",params:[],type:"EncryptedFile"},{id:"1248893260",predicate:"encryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"dc_id",type:"int"},{name:"key_fingerprint",type:"int"}],type:"EncryptedFile"},{id:"406307684",predicate:"inputEncryptedFileEmpty",params:[],type:"InputEncryptedFile"},{id:"1690108678",predicate:"inputEncryptedFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:"1511503333",predicate:"inputEncryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputEncryptedFile"},{id:"-182231723",predicate:"inputEncryptedFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:"-317144808",predicate:"encryptedMessage",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"},{name:"file",type:"EncryptedFile"}],type:"EncryptedMessage"},{id:"594758406",predicate:"encryptedMessageService",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"}],type:"EncryptedMessage"},{id:"-1058912715",predicate:"messages.dhConfigNotModified",params:[{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:"740433629",predicate:"messages.dhConfig",params:[{name:"g",type:"int"},{name:"p",type:"bytes"},{name:"version",type:"int"},{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:"1443858741",predicate:"messages.sentEncryptedMessage",params:[{name:"date",type:"int"}],type:"messages.SentEncryptedMessage"},{id:"-1802240206",predicate:"messages.sentEncryptedFile",params:[{name:"date",type:"int"},{name:"file",type:"EncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:"-95482955",predicate:"inputFileBig",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"}],type:"InputFile"},{id:"767652808",predicate:"inputEncryptedFileBigUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:"-364179876",predicate:"updateChatParticipantAdd",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"},{name:"version",type:"int"}],type:"Update"},{id:"1851755554",predicate:"updateChatParticipantDelete",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"version",type:"int"}],type:"Update"},{id:"-1906403213",predicate:"updateDcOptions",params:[{name:"dc_options",type:"Vector"}],type:"Update"},{id:"1530447553",predicate:"inputMediaUploadedDocument",params:[{name:"flags",type:"#"},{name:"nosound_video",type:"flags.3?true"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.2?InputFile"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:"598418386",predicate:"inputMediaDocument",params:[{name:"flags",type:"#"},{name:"id",type:"InputDocument"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:"-1666158377",predicate:"messageMediaDocument",params:[{name:"flags",type:"#"},{name:"document",type:"flags.0?Document"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:"1928391342",predicate:"inputDocumentEmpty",params:[],type:"InputDocument"},{id:"448771445",predicate:"inputDocument",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputDocument"},{id:"-1160743548",predicate:"inputDocumentFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:"922273905",predicate:"documentEmpty",params:[{name:"id",type:"long"}],type:"Document"},{id:"-1683841855",predicate:"document",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"mime_type",type:"string"},{name:"size",type:"int"},{name:"thumbs",type:"flags.0?Vector"},{name:"dc_id",type:"int"},{name:"attributes",type:"Vector"}],type:"Document"},{id:"398898678",predicate:"help.support",params:[{name:"phone_number",type:"string"},{name:"user",type:"User"}],type:"help.Support"},{id:"-1613493288",predicate:"notifyPeer",params:[{name:"peer",type:"Peer"}],type:"NotifyPeer"},{id:"-1261946036",predicate:"notifyUsers",params:[],type:"NotifyPeer"},{id:"-1073230141",predicate:"notifyChats",params:[],type:"NotifyPeer"},{id:"-2131957734",predicate:"updateUserBlocked",params:[{name:"user_id",type:"int"},{name:"blocked",type:"Bool"}],type:"Update"},{id:"-1094555409",predicate:"updateNotifySettings",params:[{name:"peer",type:"NotifyPeer"},{name:"notify_settings",type:"PeerNotifySettings"}],type:"Update"},{id:"381645902",predicate:"sendMessageTypingAction",params:[],type:"SendMessageAction"},{id:"-44119819",predicate:"sendMessageCancelAction",params:[],type:"SendMessageAction"},{id:"-1584933265",predicate:"sendMessageRecordVideoAction",params:[],type:"SendMessageAction"},{id:"-378127636",predicate:"sendMessageUploadVideoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:"-718310409",predicate:"sendMessageRecordAudioAction",params:[],type:"SendMessageAction"},{id:"-212740181",predicate:"sendMessageUploadAudioAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:"-774682074",predicate:"sendMessageUploadPhotoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:"-1441998364",predicate:"sendMessageUploadDocumentAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:"393186209",predicate:"sendMessageGeoLocationAction",params:[],type:"SendMessageAction"},{id:"1653390447",predicate:"sendMessageChooseContactAction",params:[],type:"SendMessageAction"},{id:"-1290580579",predicate:"contacts.found",params:[{name:"my_results",type:"Vector"},{name:"results",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Found"},{id:"-337352679",predicate:"updateServiceNotification",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"inbox_date",type:"flags.1?int"},{name:"type",type:"string"},{name:"message",type:"string"},{name:"media",type:"MessageMedia"},{name:"entities",type:"Vector"}],type:"Update"},{id:"-496024847",predicate:"userStatusRecently",params:[],type:"UserStatus"},{id:"129960444",predicate:"userStatusLastWeek",params:[],type:"UserStatus"},{id:"2011940674",predicate:"userStatusLastMonth",params:[],type:"UserStatus"},{id:"-298113238",predicate:"updatePrivacy",params:[{name:"key",type:"PrivacyKey"},{name:"rules",type:"Vector"}],type:"Update"},{id:"1335282456",predicate:"inputPrivacyKeyStatusTimestamp",params:[],type:"InputPrivacyKey"},{id:"-1137792208",predicate:"privacyKeyStatusTimestamp",params:[],type:"PrivacyKey"},{id:"218751099",predicate:"inputPrivacyValueAllowContacts",params:[],type:"InputPrivacyRule"},{id:"407582158",predicate:"inputPrivacyValueAllowAll",params:[],type:"InputPrivacyRule"},{id:"320652927",predicate:"inputPrivacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:"195371015",predicate:"inputPrivacyValueDisallowContacts",params:[],type:"InputPrivacyRule"},{id:"-697604407",predicate:"inputPrivacyValueDisallowAll",params:[],type:"InputPrivacyRule"},{id:"-1877932953",predicate:"inputPrivacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:"-123988",predicate:"privacyValueAllowContacts",params:[],type:"PrivacyRule"},{id:"1698855810",predicate:"privacyValueAllowAll",params:[],type:"PrivacyRule"},{id:"1297858060",predicate:"privacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:"-125240806",predicate:"privacyValueDisallowContacts",params:[],type:"PrivacyRule"},{id:"-1955338397",predicate:"privacyValueDisallowAll",params:[],type:"PrivacyRule"},{id:"209668535",predicate:"privacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:"1352683077",predicate:"account.privacyRules",params:[{name:"rules",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"account.PrivacyRules"},{id:"-1194283041",predicate:"accountDaysTTL",params:[{name:"days",type:"int"}],type:"AccountDaysTTL"},{id:"314130811",predicate:"updateUserPhone",params:[{name:"user_id",type:"int"},{name:"phone",type:"string"}],type:"Update"},{id:"1815593308",predicate:"documentAttributeImageSize",params:[{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:"297109817",predicate:"documentAttributeAnimated",params:[],type:"DocumentAttribute"},{id:"1662637586",predicate:"documentAttributeSticker",params:[{name:"flags",type:"#"},{name:"mask",type:"flags.1?true"},{name:"alt",type:"string"},{name:"stickerset",type:"InputStickerSet"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"DocumentAttribute"},{id:"250621158",predicate:"documentAttributeVideo",params:[{name:"flags",type:"#"},{name:"round_message",type:"flags.0?true"},{name:"supports_streaming",type:"flags.1?true"},{name:"duration",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:"-1739392570",predicate:"documentAttributeAudio",params:[{name:"flags",type:"#"},{name:"voice",type:"flags.10?true"},{name:"duration",type:"int"},{name:"title",type:"flags.0?string"},{name:"performer",type:"flags.1?string"},{name:"waveform",type:"flags.2?bytes"}],type:"DocumentAttribute"},{id:"358154344",predicate:"documentAttributeFilename",params:[{name:"file_name",type:"string"}],type:"DocumentAttribute"},{id:"-244016606",predicate:"messages.stickersNotModified",params:[],type:"messages.Stickers"},{id:"-463889475",predicate:"messages.stickers",params:[{name:"hash",type:"int"},{name:"stickers",type:"Vector"}],type:"messages.Stickers"},{id:"313694676",predicate:"stickerPack",params:[{name:"emoticon",type:"string"},{name:"documents",type:"Vector"}],type:"StickerPack"},{id:"-395967805",predicate:"messages.allStickersNotModified",params:[],type:"messages.AllStickers"},{id:"-302170017",predicate:"messages.allStickers",params:[{name:"hash",type:"int"},{name:"sets",type:"Vector"}],type:"messages.AllStickers"},{id:"-1667805217",predicate:"updateReadHistoryInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"791617983",predicate:"updateReadHistoryOutbox",params:[{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"-2066640507",predicate:"messages.affectedMessages",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"messages.AffectedMessages"},{id:"2139689491",predicate:"updateWebPage",params:[{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"-350980120",predicate:"webPageEmpty",params:[{name:"id",type:"long"}],type:"WebPage"},{id:"-981018084",predicate:"webPagePending",params:[{name:"id",type:"long"},{name:"date",type:"int"}],type:"WebPage"},{id:"-94051982",predicate:"webPage",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"url",type:"string"},{name:"display_url",type:"string"},{name:"hash",type:"int"},{name:"type",type:"flags.0?string"},{name:"site_name",type:"flags.1?string"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"photo",type:"flags.4?Photo"},{name:"embed_url",type:"flags.5?string"},{name:"embed_type",type:"flags.5?string"},{name:"embed_width",type:"flags.6?int"},{name:"embed_height",type:"flags.6?int"},{name:"duration",type:"flags.7?int"},{name:"author",type:"flags.8?string"},{name:"document",type:"flags.9?Document"},{name:"documents",type:"flags.11?Vector"},{name:"cached_page",type:"flags.10?Page"}],type:"WebPage"},{id:"-1557277184",predicate:"messageMediaWebPage",params:[{name:"webpage",type:"WebPage"}],type:"MessageMedia"},{id:"-1392388579",predicate:"authorization",params:[{name:"flags",type:"#"},{name:"current",type:"flags.0?true"},{name:"official_app",type:"flags.1?true"},{name:"password_pending",type:"flags.2?true"},{name:"hash",type:"long"},{name:"device_model",type:"string"},{name:"platform",type:"string"},{name:"system_version",type:"string"},{name:"api_id",type:"int"},{name:"app_name",type:"string"},{name:"app_version",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"country",type:"string"},{name:"region",type:"string"}],type:"Authorization"},{id:"307276766",predicate:"account.authorizations",params:[{name:"authorizations",type:"Vector"}],type:"account.Authorizations"},{id:"-1390001672",predicate:"account.password",params:[{name:"flags",type:"#"},{name:"has_recovery",type:"flags.0?true"},{name:"has_secure_values",type:"flags.1?true"},{name:"has_password",type:"flags.2?true"},{name:"current_algo",type:"flags.2?PasswordKdfAlgo"},{name:"srp_B",type:"flags.2?bytes"},{name:"srp_id",type:"flags.2?long"},{name:"hint",type:"flags.3?string"},{name:"email_unconfirmed_pattern",type:"flags.4?string"},{name:"new_algo",type:"PasswordKdfAlgo"},{name:"new_secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_random",type:"bytes"}],type:"account.Password"},{id:"-1705233435",predicate:"account.passwordSettings",params:[{name:"flags",type:"#"},{name:"email",type:"flags.0?string"},{name:"secure_settings",type:"flags.1?SecureSecretSettings"}],type:"account.PasswordSettings"},{id:"-1036572727",predicate:"account.passwordInputSettings",params:[{name:"flags",type:"#"},{name:"new_algo",type:"flags.0?PasswordKdfAlgo"},{name:"new_password_hash",type:"flags.0?bytes"},{name:"hint",type:"flags.0?string"},{name:"email",type:"flags.1?string"},{name:"new_secure_settings",type:"flags.2?SecureSecretSettings"}],type:"account.PasswordInputSettings"},{id:"326715557",predicate:"auth.passwordRecovery",params:[{name:"email_pattern",type:"string"}],type:"auth.PasswordRecovery"},{id:"-1052959727",predicate:"inputMediaVenue",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"InputMedia"},{id:"784356159",predicate:"messageMediaVenue",params:[{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"MessageMedia"},{id:"-1551583367",predicate:"receivedNotifyMessage",params:[{name:"id",type:"int"},{name:"flags",type:"int"}],type:"ReceivedNotifyMessage"},{id:"1776236393",predicate:"chatInviteEmpty",params:[],type:"ExportedChatInvite"},{id:"-64092740",predicate:"chatInviteExported",params:[{name:"link",type:"string"}],type:"ExportedChatInvite"},{id:"1516793212",predicate:"chatInviteAlready",params:[{name:"chat",type:"Chat"}],type:"ChatInvite"},{id:"-540871282",predicate:"chatInvite",params:[{name:"flags",type:"#"},{name:"channel",type:"flags.0?true"},{name:"broadcast",type:"flags.1?true"},{name:"public",type:"flags.2?true"},{name:"megagroup",type:"flags.3?true"},{name:"title",type:"string"},{name:"photo",type:"Photo"},{name:"participants_count",type:"int"},{name:"participants",type:"flags.4?Vector"}],type:"ChatInvite"},{id:"-123931160",predicate:"messageActionChatJoinedByLink",params:[{name:"inviter_id",type:"int"}],type:"MessageAction"},{id:"1757493555",predicate:"updateReadMessagesContents",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"-4838507",predicate:"inputStickerSetEmpty",params:[],type:"InputStickerSet"},{id:"-1645763991",predicate:"inputStickerSetID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputStickerSet"},{id:"-2044933984",predicate:"inputStickerSetShortName",params:[{name:"short_name",type:"string"}],type:"InputStickerSet"},{id:"-290164953",predicate:"stickerSet",params:[{name:"flags",type:"#"},{name:"archived",type:"flags.1?true"},{name:"official",type:"flags.2?true"},{name:"masks",type:"flags.3?true"},{name:"animated",type:"flags.5?true"},{name:"installed_date",type:"flags.0?int"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"thumb",type:"flags.4?PhotoSize"},{name:"thumb_dc_id",type:"flags.4?int"},{name:"count",type:"int"},{name:"hash",type:"int"}],type:"StickerSet"},{id:"-1240849242",predicate:"messages.stickerSet",params:[{name:"set",type:"StickerSet"},{name:"packs",type:"Vector"},{name:"documents",type:"Vector"}],type:"messages.StickerSet"},{id:"-1820043071",predicate:"user",params:[{name:"flags",type:"#"},{name:"self",type:"flags.10?true"},{name:"contact",type:"flags.11?true"},{name:"mutual_contact",type:"flags.12?true"},{name:"deleted",type:"flags.13?true"},{name:"bot",type:"flags.14?true"},{name:"bot_chat_history",type:"flags.15?true"},{name:"bot_nochats",type:"flags.16?true"},{name:"verified",type:"flags.17?true"},{name:"restricted",type:"flags.18?true"},{name:"min",type:"flags.20?true"},{name:"bot_inline_geo",type:"flags.21?true"},{name:"support",type:"flags.23?true"},{name:"scam",type:"flags.24?true"},{name:"id",type:"int"},{name:"access_hash",type:"flags.0?long"},{name:"first_name",type:"flags.1?string"},{name:"last_name",type:"flags.2?string"},{name:"username",type:"flags.3?string"},{name:"phone",type:"flags.4?string"},{name:"photo",type:"flags.5?UserProfilePhoto"},{name:"status",type:"flags.6?UserStatus"},{name:"bot_info_version",type:"flags.14?int"},{name:"restriction_reason",type:"flags.18?Vector"},{name:"bot_inline_placeholder",type:"flags.19?string"},{name:"lang_code",type:"flags.22?string"}],type:"User"},{id:"-1032140601",predicate:"botCommand",params:[{name:"command",type:"string"},{name:"description",type:"string"}],type:"BotCommand"},{id:"-1729618630",predicate:"botInfo",params:[{name:"user_id",type:"int"},{name:"description",type:"string"},{name:"commands",type:"Vector"}],type:"BotInfo"},{id:"-1560655744",predicate:"keyboardButton",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:"2002815875",predicate:"keyboardButtonRow",params:[{name:"buttons",type:"Vector"}],type:"KeyboardButtonRow"},{id:"-1606526075",predicate:"replyKeyboardHide",params:[{name:"flags",type:"#"},{name:"selective",type:"flags.2?true"}],type:"ReplyMarkup"},{id:"-200242528",predicate:"replyKeyboardForceReply",params:[{name:"flags",type:"#"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"}],type:"ReplyMarkup"},{id:"889353612",predicate:"replyKeyboardMarkup",params:[{name:"flags",type:"#"},{name:"resize",type:"flags.0?true"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"},{name:"rows",type:"Vector"}],type:"ReplyMarkup"},{id:"2072935910",predicate:"inputPeerUser",params:[{name:"user_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:"-668391402",predicate:"inputUser",params:[{name:"user_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputUser"},{id:"-1148011883",predicate:"messageEntityUnknown",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"-100378723",predicate:"messageEntityMention",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"1868782349",predicate:"messageEntityHashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"1827637959",predicate:"messageEntityBotCommand",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"1859134776",predicate:"messageEntityUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"1692693954",predicate:"messageEntityEmail",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"-1117713463",predicate:"messageEntityBold",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"-2106619040",predicate:"messageEntityItalic",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"681706865",predicate:"messageEntityCode",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"1938967520",predicate:"messageEntityPre",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"language",type:"string"}],type:"MessageEntity"},{id:"1990644519",predicate:"messageEntityTextUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"url",type:"string"}],type:"MessageEntity"},{id:"301019932",predicate:"updateShortSentMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"media",type:"flags.9?MessageMedia"},{name:"entities",type:"flags.7?Vector"}],type:"Updates"},{id:"-292807034",predicate:"inputChannelEmpty",params:[],type:"InputChannel"},{id:"-1343524562",predicate:"inputChannel",params:[{name:"channel_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputChannel"},{id:"-1109531342",predicate:"peerChannel",params:[{name:"channel_id",type:"int"}],type:"Peer"},{id:"548253432",predicate:"inputPeerChannel",params:[{name:"channel_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:"-753232354",predicate:"channel",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"left",type:"flags.2?true"},{name:"broadcast",type:"flags.5?true"},{name:"verified",type:"flags.7?true"},{name:"megagroup",type:"flags.8?true"},{name:"restricted",type:"flags.9?true"},{name:"signatures",type:"flags.11?true"},{name:"min",type:"flags.12?true"},{name:"scam",type:"flags.19?true"},{name:"has_link",type:"flags.20?true"},{name:"has_geo",type:"flags.21?true"},{name:"slowmode_enabled",type:"flags.22?true"},{name:"id",type:"int"},{name:"access_hash",type:"flags.13?long"},{name:"title",type:"string"},{name:"username",type:"flags.6?string"},{name:"photo",type:"ChatPhoto"},{name:"date",type:"int"},{name:"version",type:"int"},{name:"restriction_reason",type:"flags.9?Vector"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"banned_rights",type:"flags.15?ChatBannedRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"},{name:"participants_count",type:"flags.17?int"}],type:"Chat"},{id:"681420594",predicate:"channelForbidden",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.5?true"},{name:"megagroup",type:"flags.8?true"},{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"until_date",type:"flags.16?int"}],type:"Chat"},{id:"2131196633",predicate:"contacts.resolvedPeer",params:[{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ResolvedPeer"},{id:"763976820",predicate:"channelFull",params:[{name:"flags",type:"#"},{name:"can_view_participants",type:"flags.3?true"},{name:"can_set_username",type:"flags.6?true"},{name:"can_set_stickers",type:"flags.7?true"},{name:"hidden_prehistory",type:"flags.10?true"},{name:"can_view_stats",type:"flags.12?true"},{name:"can_set_location",type:"flags.16?true"},{name:"has_scheduled",type:"flags.19?true"},{name:"id",type:"int"},{name:"about",type:"string"},{name:"participants_count",type:"flags.0?int"},{name:"admins_count",type:"flags.1?int"},{name:"kicked_count",type:"flags.2?int"},{name:"banned_count",type:"flags.2?int"},{name:"online_count",type:"flags.13?int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"chat_photo",type:"Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"ExportedChatInvite"},{name:"bot_info",type:"Vector"},{name:"migrated_from_chat_id",type:"flags.4?int"},{name:"migrated_from_max_id",type:"flags.4?int"},{name:"pinned_msg_id",type:"flags.5?int"},{name:"stickerset",type:"flags.8?StickerSet"},{name:"available_min_id",type:"flags.9?int"},{name:"folder_id",type:"flags.11?int"},{name:"linked_chat_id",type:"flags.14?int"},{name:"location",type:"flags.15?ChannelLocation"},{name:"slowmode_seconds",type:"flags.17?int"},{name:"slowmode_next_send_date",type:"flags.18?int"},{name:"pts",type:"int"}],type:"ChatFull"},{id:"182649427",predicate:"messageRange",params:[{name:"min_id",type:"int"},{name:"max_id",type:"int"}],type:"MessageRange"},{id:"-1725551049",predicate:"messages.channelMessages",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"pts",type:"int"},{name:"count",type:"int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:"-1781355374",predicate:"messageActionChannelCreate",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:"-352032773",predicate:"updateChannelTooLong",params:[{name:"flags",type:"#"},{name:"channel_id",type:"int"},{name:"pts",type:"flags.0?int"}],type:"Update"},{id:"-1227598250",predicate:"updateChannel",params:[{name:"channel_id",type:"int"}],type:"Update"},{id:"1656358105",predicate:"updateNewChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"856380452",predicate:"updateReadChannelInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"channel_id",type:"int"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"}],type:"Update"},{id:"-1015733815",predicate:"updateDeleteChannelMessages",params:[{name:"channel_id",type:"int"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"-1734268085",predicate:"updateChannelMessageViews",params:[{name:"channel_id",type:"int"},{name:"id",type:"int"},{name:"views",type:"int"}],type:"Update"},{id:"1041346555",predicate:"updates.channelDifferenceEmpty",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"}],type:"updates.ChannelDifference"},{id:"-1531132162",predicate:"updates.channelDifferenceTooLong",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"timeout",type:"flags.1?int"},{name:"dialog",type:"Dialog"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:"543450958",predicate:"updates.channelDifference",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"},{name:"new_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:"-1798033689",predicate:"channelMessagesFilterEmpty",params:[],type:"ChannelMessagesFilter"},{id:"-847783593",predicate:"channelMessagesFilter",params:[{name:"flags",type:"#"},{name:"exclude_new_messages",type:"flags.1?true"},{name:"ranges",type:"Vector"}],type:"ChannelMessagesFilter"},{id:"367766557",predicate:"channelParticipant",params:[{name:"user_id",type:"int"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:"-1557620115",predicate:"channelParticipantSelf",params:[{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:"-2138237532",predicate:"channelParticipantCreator",params:[{name:"flags",type:"#"},{name:"user_id",type:"int"},{name:"rank",type:"flags.0?string"}],type:"ChannelParticipant"},{id:"-566281095",predicate:"channelParticipantsRecent",params:[],type:"ChannelParticipantsFilter"},{id:"-1268741783",predicate:"channelParticipantsAdmins",params:[],type:"ChannelParticipantsFilter"},{id:"-1548400251",predicate:"channelParticipantsKicked",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:"-177282392",predicate:"channels.channelParticipants",params:[{name:"count",type:"int"},{name:"participants",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipants"},{id:"-791039645",predicate:"channels.channelParticipant",params:[{name:"participant",type:"ChannelParticipant"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipant"},{id:"-636267638",predicate:"chatParticipantCreator",params:[{name:"user_id",type:"int"}],type:"ChatParticipant"},{id:"-489233354",predicate:"chatParticipantAdmin",params:[{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:"-1232070311",predicate:"updateChatParticipantAdmin",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"is_admin",type:"Bool"},{name:"version",type:"int"}],type:"Update"},{id:"1371385889",predicate:"messageActionChatMigrateTo",params:[{name:"channel_id",type:"int"}],type:"MessageAction"},{id:"-1336546578",predicate:"messageActionChannelMigrateFrom",params:[{name:"title",type:"string"},{name:"chat_id",type:"int"}],type:"MessageAction"},{id:"-1328445861",predicate:"channelParticipantsBots",params:[],type:"ChannelParticipantsFilter"},{id:"2013922064",predicate:"help.termsOfService",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"id",type:"DataJSON"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"min_age_confirm",type:"flags.1?int"}],type:"help.TermsOfService"},{id:"1753886890",predicate:"updateNewStickerSet",params:[{name:"stickerset",type:"messages.StickerSet"}],type:"Update"},{id:"196268545",predicate:"updateStickerSetsOrder",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"order",type:"Vector"}],type:"Update"},{id:"1135492588",predicate:"updateStickerSets",params:[],type:"Update"},{id:"372165663",predicate:"foundGif",params:[{name:"url",type:"string"},{name:"thumb_url",type:"string"},{name:"content_url",type:"string"},{name:"content_type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"FoundGif"},{id:"-1670052855",predicate:"foundGifCached",params:[{name:"url",type:"string"},{name:"photo",type:"Photo"},{name:"document",type:"Document"}],type:"FoundGif"},{id:"1212395773",predicate:"inputMediaGifExternal",params:[{name:"url",type:"string"},{name:"q",type:"string"}],type:"InputMedia"},{id:"1158290442",predicate:"messages.foundGifs",params:[{name:"next_offset",type:"int"},{name:"results",type:"Vector"}],type:"messages.FoundGifs"},{id:"-402498398",predicate:"messages.savedGifsNotModified",params:[],type:"messages.SavedGifs"},{id:"772213157",predicate:"messages.savedGifs",params:[{name:"hash",type:"int"},{name:"gifs",type:"Vector"}],type:"messages.SavedGifs"},{id:"-1821035490",predicate:"updateSavedGifs",params:[],type:"Update"},{id:"864077702",predicate:"inputBotInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:"1036876423",predicate:"inputBotInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:"-2000710887",predicate:"inputBotInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?InputWebDocument"},{name:"content",type:"flags.5?InputWebDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:"1984755728",predicate:"botInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:"-1937807902",predicate:"botInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:"295067450",predicate:"botInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?WebDocument"},{name:"content",type:"flags.5?WebDocument"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:"-1803769784",predicate:"messages.botResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"query_id",type:"long"},{name:"next_offset",type:"flags.1?string"},{name:"switch_pm",type:"flags.2?InlineBotSwitchPM"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"users",type:"Vector"}],type:"messages.BotResults"},{id:"1417832080",predicate:"updateBotInlineQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"offset",type:"string"}],type:"Update"},{id:"239663460",predicate:"updateBotInlineSend",params:[{name:"flags",type:"#"},{name:"user_id",type:"int"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"id",type:"string"},{name:"msg_id",type:"flags.1?InputBotInlineMessageID"}],type:"Update"},{id:"1358283666",predicate:"inputMessagesFilterVoice",params:[],type:"MessagesFilter"},{id:"928101534",predicate:"inputMessagesFilterMusic",params:[],type:"MessagesFilter"},{id:"-1107622874",predicate:"inputPrivacyKeyChatInvite",params:[],type:"InputPrivacyKey"},{id:"1343122938",predicate:"privacyKeyChatInvite",params:[],type:"PrivacyKey"},{id:"1571494644",predicate:"exportedMessageLink",params:[{name:"link",type:"string"},{name:"html",type:"string"}],type:"ExportedMessageLink"},{id:"-332168592",predicate:"messageFwdHeader",params:[{name:"flags",type:"#"},{name:"from_id",type:"flags.0?int"},{name:"from_name",type:"flags.5?string"},{name:"date",type:"int"},{name:"channel_id",type:"flags.1?int"},{name:"channel_post",type:"flags.2?int"},{name:"post_author",type:"flags.3?string"},{name:"saved_from_peer",type:"flags.4?Peer"},{name:"saved_from_msg_id",type:"flags.4?int"}],type:"MessageFwdHeader"},{id:"457133559",predicate:"updateEditChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"-1738988427",predicate:"updateChannelPinnedMessage",params:[{name:"channel_id",type:"int"},{name:"id",type:"int"}],type:"Update"},{id:"-1799538451",predicate:"messageActionPinMessage",params:[],type:"MessageAction"},{id:"1923290508",predicate:"auth.codeTypeSms",params:[],type:"auth.CodeType"},{id:"1948046307",predicate:"auth.codeTypeCall",params:[],type:"auth.CodeType"},{id:"577556219",predicate:"auth.codeTypeFlashCall",params:[],type:"auth.CodeType"},{id:"1035688326",predicate:"auth.sentCodeTypeApp",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:"-1073693790",predicate:"auth.sentCodeTypeSms",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:"1398007207",predicate:"auth.sentCodeTypeCall",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:"-1425815847",predicate:"auth.sentCodeTypeFlashCall",params:[{name:"pattern",type:"string"}],type:"auth.SentCodeType"},{id:"629866245",predicate:"keyboardButtonUrl",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"KeyboardButton"},{id:"1748655686",predicate:"keyboardButtonCallback",params:[{name:"text",type:"string"},{name:"data",type:"bytes"}],type:"KeyboardButton"},{id:"-1318425559",predicate:"keyboardButtonRequestPhone",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:"-59151553",predicate:"keyboardButtonRequestGeoLocation",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:"90744648",predicate:"keyboardButtonSwitchInline",params:[{name:"flags",type:"#"},{name:"same_peer",type:"flags.0?true"},{name:"text",type:"string"},{name:"query",type:"string"}],type:"KeyboardButton"},{id:"1218642516",predicate:"replyInlineMarkup",params:[{name:"rows",type:"Vector"}],type:"ReplyMarkup"},{id:"911761060",predicate:"messages.botCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"has_url",type:"flags.3?true"},{name:"native_ui",type:"flags.4?true"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"messages.BotCallbackAnswer"},{id:"-415938591",predicate:"updateBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:"649453030",predicate:"messages.messageEditData",params:[{name:"flags",type:"#"},{name:"caption",type:"flags.0?true"}],type:"messages.MessageEditData"},{id:"-469536605",predicate:"updateEditMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"-1045340827",predicate:"inputBotInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"period",type:"int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:"1098628881",predicate:"inputBotInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:"-1494368259",predicate:"inputBotInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:"-1222451611",predicate:"botInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"period",type:"int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:"-1970903652",predicate:"botInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:"416402882",predicate:"botInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:"-1462213465",predicate:"inputBotInlineResultPhoto",params:[{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"InputPhoto"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:"-459324",predicate:"inputBotInlineResultDocument",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"document",type:"InputDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:"400266251",predicate:"botInlineMediaResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"flags.0?Photo"},{name:"document",type:"flags.1?Document"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:"-1995686519",predicate:"inputBotInlineMessageID",params:[{name:"dc_id",type:"int"},{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputBotInlineMessageID"},{id:"-103646630",predicate:"updateInlineBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"msg_id",type:"InputBotInlineMessageID"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:"1008755359",predicate:"inlineBotSwitchPM",params:[{name:"text",type:"string"},{name:"start_param",type:"string"}],type:"InlineBotSwitchPM"},{id:"863093588",predicate:"messages.peerDialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"messages.PeerDialogs"},{id:"-305282981",predicate:"topPeer",params:[{name:"peer",type:"Peer"},{name:"rating",type:"double"}],type:"TopPeer"},{id:"-1419371685",predicate:"topPeerCategoryBotsPM",params:[],type:"TopPeerCategory"},{id:"344356834",predicate:"topPeerCategoryBotsInline",params:[],type:"TopPeerCategory"},{id:"104314861",predicate:"topPeerCategoryCorrespondents",params:[],type:"TopPeerCategory"},{id:"-1122524854",predicate:"topPeerCategoryGroups",params:[],type:"TopPeerCategory"},{id:"371037736",predicate:"topPeerCategoryChannels",params:[],type:"TopPeerCategory"},{id:"-75283823",predicate:"topPeerCategoryPeers",params:[{name:"category",type:"TopPeerCategory"},{name:"count",type:"int"},{name:"peers",type:"Vector"}],type:"TopPeerCategoryPeers"},{id:"-567906571",predicate:"contacts.topPeersNotModified",params:[],type:"contacts.TopPeers"},{id:"1891070632",predicate:"contacts.topPeers",params:[{name:"categories",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.TopPeers"},{id:"892193368",predicate:"messageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"int"}],type:"MessageEntity"},{id:"546203849",predicate:"inputMessageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"InputUser"}],type:"MessageEntity"},{id:"975236280",predicate:"inputMessagesFilterChatPhotos",params:[],type:"MessagesFilter"},{id:"634833351",predicate:"updateReadChannelOutbox",params:[{name:"channel_id",type:"int"},{name:"max_id",type:"int"}],type:"Update"},{id:"-299124375",predicate:"updateDraftMessage",params:[{name:"peer",type:"Peer"},{name:"draft",type:"DraftMessage"}],type:"Update"},{id:"453805082",predicate:"draftMessageEmpty",params:[{name:"flags",type:"#"},{name:"date",type:"flags.0?int"}],type:"DraftMessage"},{id:"-40996577",predicate:"draftMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"},{name:"date",type:"int"}],type:"DraftMessage"},{id:"-1615153660",predicate:"messageActionHistoryClear",params:[],type:"MessageAction"},{id:"82699215",predicate:"messages.featuredStickersNotModified",params:[],type:"messages.FeaturedStickers"},{id:"-123893531",predicate:"messages.featuredStickers",params:[{name:"hash",type:"int"},{name:"sets",type:"Vector"},{name:"unread",type:"Vector"}],type:"messages.FeaturedStickers"},{id:"1461528386",predicate:"updateReadFeaturedStickers",params:[],type:"Update"},{id:"186120336",predicate:"messages.recentStickersNotModified",params:[],type:"messages.RecentStickers"},{id:"586395571",predicate:"messages.recentStickers",params:[{name:"hash",type:"int"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"},{name:"dates",type:"Vector"}],type:"messages.RecentStickers"},{id:"-1706939360",predicate:"updateRecentStickers",params:[],type:"Update"},{id:"1338747336",predicate:"messages.archivedStickers",params:[{name:"count",type:"int"},{name:"sets",type:"Vector"}],type:"messages.ArchivedStickers"},{id:"946083368",predicate:"messages.stickerSetInstallResultSuccess",params:[],type:"messages.StickerSetInstallResult"},{id:"904138920",predicate:"messages.stickerSetInstallResultArchive",params:[{name:"sets",type:"Vector"}],type:"messages.StickerSetInstallResult"},{id:"1678812626",predicate:"stickerSetCovered",params:[{name:"set",type:"StickerSet"},{name:"cover",type:"Document"}],type:"StickerSetCovered"},{id:"-1574314746",predicate:"updateConfig",params:[],type:"Update"},{id:"861169551",predicate:"updatePtsChanged",params:[],type:"Update"},{id:"-440664550",predicate:"inputMediaPhotoExternal",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:"-78455655",predicate:"inputMediaDocumentExternal",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:"872932635",predicate:"stickerSetMultiCovered",params:[{name:"set",type:"StickerSet"},{name:"covers",type:"Vector"}],type:"StickerSetCovered"},{id:"-1361650766",predicate:"maskCoords",params:[{name:"n",type:"int"},{name:"x",type:"double"},{name:"y",type:"double"},{name:"zoom",type:"double"}],type:"MaskCoords"},{id:"-1744710921",predicate:"documentAttributeHasStickers",params:[],type:"DocumentAttribute"},{id:"1251549527",predicate:"inputStickeredMediaPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputStickeredMedia"},{id:"70813275",predicate:"inputStickeredMediaDocument",params:[{name:"id",type:"InputDocument"}],type:"InputStickeredMedia"},{id:"-1107729093",predicate:"game",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"short_name",type:"string"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"Photo"},{name:"document",type:"flags.0?Document"}],type:"Game"},{id:"1336154098",predicate:"inputBotInlineResultGame",params:[{name:"id",type:"string"},{name:"short_name",type:"string"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:"1262639204",predicate:"inputBotInlineMessageGame",params:[{name:"flags",type:"#"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:"-38694904",predicate:"messageMediaGame",params:[{name:"game",type:"Game"}],type:"MessageMedia"},{id:"-750828557",predicate:"inputMediaGame",params:[{name:"id",type:"InputGame"}],type:"InputMedia"},{id:"53231223",predicate:"inputGameID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputGame"},{id:"-1020139510",predicate:"inputGameShortName",params:[{name:"bot_id",type:"InputUser"},{name:"short_name",type:"string"}],type:"InputGame"},{id:"1358175439",predicate:"keyboardButtonGame",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:"-1834538890",predicate:"messageActionGameScore",params:[{name:"game_id",type:"long"},{name:"score",type:"int"}],type:"MessageAction"},{id:"1493171408",predicate:"highScore",params:[{name:"pos",type:"int"},{name:"user_id",type:"int"},{name:"score",type:"int"}],type:"HighScore"},{id:"-1707344487",predicate:"messages.highScores",params:[{name:"scores",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.HighScores"},{id:"1258196845",predicate:"updates.differenceTooLong",params:[{name:"pts",type:"int"}],type:"updates.Difference"},{id:"1081547008",predicate:"updateChannelWebPage",params:[{name:"channel_id",type:"int"},{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"-1663561404",predicate:"messages.chatsSlice",params:[{name:"count",type:"int"},{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:"-599948721",predicate:"textEmpty",params:[],type:"RichText"},{id:"1950782688",predicate:"textPlain",params:[{name:"text",type:"string"}],type:"RichText"},{id:"1730456516",predicate:"textBold",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:"-653089380",predicate:"textItalic",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:"-1054465340",predicate:"textUnderline",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:"-1678197867",predicate:"textStrike",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:"1816074681",predicate:"textFixed",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:"1009288385",predicate:"textUrl",params:[{name:"text",type:"RichText"},{name:"url",type:"string"},{name:"webpage_id",type:"long"}],type:"RichText"},{id:"-564523562",predicate:"textEmail",params:[{name:"text",type:"RichText"},{name:"email",type:"string"}],type:"RichText"},{id:"2120376535",predicate:"textConcat",params:[{name:"texts",type:"Vector"}],type:"RichText"},{id:"324435594",predicate:"pageBlockUnsupported",params:[],type:"PageBlock"},{id:"1890305021",predicate:"pageBlockTitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:"-1879401953",predicate:"pageBlockSubtitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:"-1162877472",predicate:"pageBlockAuthorDate",params:[{name:"author",type:"RichText"},{name:"published_date",type:"int"}],type:"PageBlock"},{id:"-1076861716",predicate:"pageBlockHeader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:"-248793375",predicate:"pageBlockSubheader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:"1182402406",predicate:"pageBlockParagraph",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:"-1066346178",predicate:"pageBlockPreformatted",params:[{name:"text",type:"RichText"},{name:"language",type:"string"}],type:"PageBlock"},{id:"1216809369",predicate:"pageBlockFooter",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:"-618614392",predicate:"pageBlockDivider",params:[],type:"PageBlock"},{id:"-837994576",predicate:"pageBlockAnchor",params:[{name:"name",type:"string"}],type:"PageBlock"},{id:"-454524911",predicate:"pageBlockList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:"641563686",predicate:"pageBlockBlockquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:"1329878739",predicate:"pageBlockPullquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:"391759200",predicate:"pageBlockPhoto",params:[{name:"flags",type:"#"},{name:"photo_id",type:"long"},{name:"caption",type:"PageCaption"},{name:"url",type:"flags.0?string"},{name:"webpage_id",type:"flags.0?long"}],type:"PageBlock"},{id:"2089805750",predicate:"pageBlockVideo",params:[{name:"flags",type:"#"},{name:"autoplay",type:"flags.0?true"},{name:"loop",type:"flags.1?true"},{name:"video_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:"972174080",predicate:"pageBlockCover",params:[{name:"cover",type:"PageBlock"}],type:"PageBlock"},{id:"-1468953147",predicate:"pageBlockEmbed",params:[{name:"flags",type:"#"},{name:"full_width",type:"flags.0?true"},{name:"allow_scrolling",type:"flags.3?true"},{name:"url",type:"flags.1?string"},{name:"html",type:"flags.2?string"},{name:"poster_photo_id",type:"flags.4?long"},{name:"w",type:"flags.5?int"},{name:"h",type:"flags.5?int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:"-229005301",predicate:"pageBlockEmbedPost",params:[{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"author_photo_id",type:"long"},{name:"author",type:"string"},{name:"date",type:"int"},{name:"blocks",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:"1705048653",predicate:"pageBlockCollage",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:"52401552",predicate:"pageBlockSlideshow",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:"-2054908813",predicate:"webPageNotModified",params:[],type:"WebPage"},{id:"-88417185",predicate:"inputPrivacyKeyPhoneCall",params:[],type:"InputPrivacyKey"},{id:"1030105979",predicate:"privacyKeyPhoneCall",params:[],type:"PrivacyKey"},{id:"-580219064",predicate:"sendMessageGamePlayAction",params:[],type:"SendMessageAction"},{id:"-2048646399",predicate:"phoneCallDiscardReasonMissed",params:[],type:"PhoneCallDiscardReason"},{id:"-527056480",predicate:"phoneCallDiscardReasonDisconnect",params:[],type:"PhoneCallDiscardReason"},{id:"1471006352",predicate:"phoneCallDiscardReasonHangup",params:[],type:"PhoneCallDiscardReason"},{id:"-84416311",predicate:"phoneCallDiscardReasonBusy",params:[],type:"PhoneCallDiscardReason"},{id:"1852826908",predicate:"updateDialogPinned",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:"-99664734",predicate:"updatePinnedDialogs",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.1?int"},{name:"order",type:"flags.0?Vector"}],type:"Update"},{id:"2104790276",predicate:"dataJSON",params:[{name:"data",type:"string"}],type:"DataJSON"},{id:"-2095595325",predicate:"updateBotWebhookJSON",params:[{name:"data",type:"DataJSON"}],type:"Update"},{id:"-1684914010",predicate:"updateBotWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"},{name:"timeout",type:"int"}],type:"Update"},{id:"-886477832",predicate:"labeledPrice",params:[{name:"label",type:"string"},{name:"amount",type:"long"}],type:"LabeledPrice"},{id:"-1022713000",predicate:"invoice",params:[{name:"flags",type:"#"},{name:"test",type:"flags.0?true"},{name:"name_requested",type:"flags.1?true"},{name:"phone_requested",type:"flags.2?true"},{name:"email_requested",type:"flags.3?true"},{name:"shipping_address_requested",type:"flags.4?true"},{name:"flexible",type:"flags.5?true"},{name:"phone_to_provider",type:"flags.6?true"},{name:"email_to_provider",type:"flags.7?true"},{name:"currency",type:"string"},{name:"prices",type:"Vector"}],type:"Invoice"},{id:"-186607933",predicate:"inputMediaInvoice",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?InputWebDocument"},{name:"invoice",type:"Invoice"},{name:"payload",type:"bytes"},{name:"provider",type:"string"},{name:"provider_data",type:"DataJSON"},{name:"start_param",type:"string"}],type:"InputMedia"},{id:"-368917890",predicate:"paymentCharge",params:[{name:"id",type:"string"},{name:"provider_charge_id",type:"string"}],type:"PaymentCharge"},{id:"-1892568281",predicate:"messageActionPaymentSentMe",params:[{name:"flags",type:"#"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"charge",type:"PaymentCharge"}],type:"MessageAction"},{id:"-2074799289",predicate:"messageMediaInvoice",params:[{name:"flags",type:"#"},{name:"shipping_address_requested",type:"flags.1?true"},{name:"test",type:"flags.3?true"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?WebDocument"},{name:"receipt_msg_id",type:"flags.2?int"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"start_param",type:"string"}],type:"MessageMedia"},{id:"512535275",predicate:"postAddress",params:[{name:"street_line1",type:"string"},{name:"street_line2",type:"string"},{name:"city",type:"string"},{name:"state",type:"string"},{name:"country_iso2",type:"string"},{name:"post_code",type:"string"}],type:"PostAddress"},{id:"-1868808300",predicate:"paymentRequestedInfo",params:[{name:"flags",type:"#"},{name:"name",type:"flags.0?string"},{name:"phone",type:"flags.1?string"},{name:"email",type:"flags.2?string"},{name:"shipping_address",type:"flags.3?PostAddress"}],type:"PaymentRequestedInfo"},{id:"-1344716869",predicate:"keyboardButtonBuy",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:"1080663248",predicate:"messageActionPaymentSent",params:[{name:"currency",type:"string"},{name:"total_amount",type:"long"}],type:"MessageAction"},{id:"-842892769",predicate:"paymentSavedCredentialsCard",params:[{name:"id",type:"string"},{name:"title",type:"string"}],type:"PaymentSavedCredentials"},{id:"475467473",predicate:"webDocument",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:"-1678949555",predicate:"inputWebDocument",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"InputWebDocument"},{id:"-1036396922",predicate:"inputWebFileLocation",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"}],type:"InputWebFileLocation"},{id:"568808380",predicate:"upload.webFile",params:[{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"file_type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.WebFile"},{id:"1062645411",predicate:"payments.paymentForm",params:[{name:"flags",type:"#"},{name:"can_save_credentials",type:"flags.2?true"},{name:"password_missing",type:"flags.3?true"},{name:"bot_id",type:"int"},{name:"invoice",type:"Invoice"},{name:"provider_id",type:"int"},{name:"url",type:"string"},{name:"native_provider",type:"flags.4?string"},{name:"native_params",type:"flags.4?DataJSON"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"},{name:"saved_credentials",type:"flags.1?PaymentSavedCredentials"},{name:"users",type:"Vector"}],type:"payments.PaymentForm"},{id:"-784000893",predicate:"payments.validatedRequestedInfo",params:[{name:"flags",type:"#"},{name:"id",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"payments.ValidatedRequestedInfo"},{id:"1314881805",predicate:"payments.paymentResult",params:[{name:"updates",type:"Updates"}],type:"payments.PaymentResult"},{id:"1342771681",predicate:"payments.paymentReceipt",params:[{name:"flags",type:"#"},{name:"date",type:"int"},{name:"bot_id",type:"int"},{name:"invoice",type:"Invoice"},{name:"provider_id",type:"int"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping",type:"flags.1?ShippingOption"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"credentials_title",type:"string"},{name:"users",type:"Vector"}],type:"payments.PaymentReceipt"},{id:"-74456004",predicate:"payments.savedInfo",params:[{name:"flags",type:"#"},{name:"has_saved_credentials",type:"flags.1?true"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"}],type:"payments.SavedInfo"},{id:"-1056001329",predicate:"inputPaymentCredentialsSaved",params:[{name:"id",type:"string"},{name:"tmp_password",type:"bytes"}],type:"InputPaymentCredentials"},{id:"873977640",predicate:"inputPaymentCredentials",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:"-614138572",predicate:"account.tmpPassword",params:[{name:"tmp_password",type:"bytes"},{name:"valid_until",type:"int"}],type:"account.TmpPassword"},{id:"-1239335713",predicate:"shippingOption",params:[{name:"id",type:"string"},{name:"title",type:"string"},{name:"prices",type:"Vector"}],type:"ShippingOption"},{id:"-523384512",predicate:"updateBotShippingQuery",params:[{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"payload",type:"bytes"},{name:"shipping_address",type:"PostAddress"}],type:"Update"},{id:"1563376297",predicate:"updateBotPrecheckoutQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"currency",type:"string"},{name:"total_amount",type:"long"}],type:"Update"},{id:"-6249322",predicate:"inputStickerSetItem",params:[{name:"flags",type:"#"},{name:"document",type:"InputDocument"},{name:"emoji",type:"string"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"InputStickerSetItem"},{id:"-1425052898",predicate:"updatePhoneCall",params:[{name:"phone_call",type:"PhoneCall"}],type:"Update"},{id:"506920429",predicate:"inputPhoneCall",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputPhoneCall"},{id:"1399245077",predicate:"phoneCallEmpty",params:[{name:"id",type:"long"}],type:"PhoneCall"},{id:"462375633",predicate:"phoneCallWaiting",params:[{name:"flags",type:"#"},{name:"video",type:"flags.5?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"protocol",type:"PhoneCallProtocol"},{name:"receive_date",type:"flags.0?int"}],type:"PhoneCall"},{id:"-2014659757",predicate:"phoneCallRequested",params:[{name:"flags",type:"#"},{name:"video",type:"flags.5?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:"-1719909046",predicate:"phoneCallAccepted",params:[{name:"flags",type:"#"},{name:"video",type:"flags.5?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:"-2025673089",predicate:"phoneCall",params:[{name:"flags",type:"#"},{name:"p2p_allowed",type:"flags.5?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"},{name:"connections",type:"Vector"},{name:"start_date",type:"int"}],type:"PhoneCall"},{id:"1355435489",predicate:"phoneCallDiscarded",params:[{name:"flags",type:"#"},{name:"need_rating",type:"flags.2?true"},{name:"need_debug",type:"flags.3?true"},{name:"video",type:"flags.5?true"},{name:"id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"PhoneCall"},{id:"-1655957568",predicate:"phoneConnection",params:[{name:"id",type:"long"},{name:"ip",type:"string"},{name:"ipv6",type:"string"},{name:"port",type:"int"},{name:"peer_tag",type:"bytes"}],type:"PhoneConnection"},{id:"-1564789301",predicate:"phoneCallProtocol",params:[{name:"flags",type:"#"},{name:"udp_p2p",type:"flags.0?true"},{name:"udp_reflector",type:"flags.1?true"},{name:"min_layer",type:"int"},{name:"max_layer",type:"int"}],type:"PhoneCallProtocol"},{id:"-326966976",predicate:"phone.phoneCall",params:[{name:"phone_call",type:"PhoneCall"},{name:"users",type:"Vector"}],type:"phone.PhoneCall"},{id:"-2134272152",predicate:"inputMessagesFilterPhoneCalls",params:[{name:"flags",type:"#"},{name:"missed",type:"flags.0?true"}],type:"MessagesFilter"},{id:"-2132731265",predicate:"messageActionPhoneCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.2?true"},{name:"call_id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"MessageAction"},{id:"2054952868",predicate:"inputMessagesFilterRoundVoice",params:[],type:"MessagesFilter"},{id:"-1253451181",predicate:"inputMessagesFilterRoundVideo",params:[],type:"MessagesFilter"},{id:"-1997373508",predicate:"sendMessageRecordRoundAction",params:[],type:"SendMessageAction"},{id:"608050278",predicate:"sendMessageUploadRoundAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:"-242427324",predicate:"upload.fileCdnRedirect",params:[{name:"dc_id",type:"int"},{name:"file_token",type:"bytes"},{name:"encryption_key",type:"bytes"},{name:"encryption_iv",type:"bytes"},{name:"file_hashes",type:"Vector"}],type:"upload.File"},{id:"-290921362",predicate:"upload.cdnFileReuploadNeeded",params:[{name:"request_token",type:"bytes"}],type:"upload.CdnFile"},{id:"-1449145777",predicate:"upload.cdnFile",params:[{name:"bytes",type:"bytes"}],type:"upload.CdnFile"},{id:"-914167110",predicate:"cdnPublicKey",params:[{name:"dc_id",type:"int"},{name:"public_key",type:"string"}],type:"CdnPublicKey"},{id:"1462101002",predicate:"cdnConfig",params:[{name:"public_keys",type:"Vector"}],type:"CdnConfig"},{id:"-283684427",predicate:"pageBlockChannel",params:[{name:"channel",type:"Chat"}],type:"PageBlock"},{id:"-892239370",predicate:"langPackString",params:[{name:"key",type:"string"},{name:"value",type:"string"}],type:"LangPackString"},{id:"1816636575",predicate:"langPackStringPluralized",params:[{name:"flags",type:"#"},{name:"key",type:"string"},{name:"zero_value",type:"flags.0?string"},{name:"one_value",type:"flags.1?string"},{name:"two_value",type:"flags.2?string"},{name:"few_value",type:"flags.3?string"},{name:"many_value",type:"flags.4?string"},{name:"other_value",type:"string"}],type:"LangPackString"},{id:"695856818",predicate:"langPackStringDeleted",params:[{name:"key",type:"string"}],type:"LangPackString"},{id:"-209337866",predicate:"langPackDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"strings",type:"Vector"}],type:"LangPackDifference"},{id:"-288727837",predicate:"langPackLanguage",params:[{name:"flags",type:"#"},{name:"official",type:"flags.0?true"},{name:"rtl",type:"flags.2?true"},{name:"beta",type:"flags.3?true"},{name:"name",type:"string"},{name:"native_name",type:"string"},{name:"lang_code",type:"string"},{name:"base_lang_code",type:"flags.1?string"},{name:"plural_code",type:"string"},{name:"strings_count",type:"int"},{name:"translated_count",type:"int"},{name:"translations_url",type:"string"}],type:"LangPackLanguage"},{id:"1180041828",predicate:"updateLangPackTooLong",params:[{name:"lang_code",type:"string"}],type:"Update"},{id:"1442983757",predicate:"updateLangPack",params:[{name:"difference",type:"LangPackDifference"}],type:"Update"},{id:"-859915345",predicate:"channelParticipantAdmin",params:[{name:"flags",type:"#"},{name:"can_edit",type:"flags.0?true"},{name:"self",type:"flags.1?true"},{name:"user_id",type:"int"},{name:"inviter_id",type:"flags.1?int"},{name:"promoted_by",type:"int"},{name:"date",type:"int"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"flags.2?string"}],type:"ChannelParticipant"},{id:"470789295",predicate:"channelParticipantBanned",params:[{name:"flags",type:"#"},{name:"left",type:"flags.0?true"},{name:"user_id",type:"int"},{name:"kicked_by",type:"int"},{name:"date",type:"int"},{name:"banned_rights",type:"ChatBannedRights"}],type:"ChannelParticipant"},{id:"338142689",predicate:"channelParticipantsBanned",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:"106343499",predicate:"channelParticipantsSearch",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:"-421545947",predicate:"channelAdminLogEventActionChangeTitle",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:"1427671598",predicate:"channelAdminLogEventActionChangeAbout",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:"1783299128",predicate:"channelAdminLogEventActionChangeUsername",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:"1129042607",predicate:"channelAdminLogEventActionChangePhoto",params:[{name:"prev_photo",type:"Photo"},{name:"new_photo",type:"Photo"}],type:"ChannelAdminLogEventAction"},{id:"460916654",predicate:"channelAdminLogEventActionToggleInvites",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:"648939889",predicate:"channelAdminLogEventActionToggleSignatures",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:"-370660328",predicate:"channelAdminLogEventActionUpdatePinned",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:"1889215493",predicate:"channelAdminLogEventActionEditMessage",params:[{name:"prev_message",type:"Message"},{name:"new_message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:"1121994683",predicate:"channelAdminLogEventActionDeleteMessage",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:"405815507",predicate:"channelAdminLogEventActionParticipantJoin",params:[],type:"ChannelAdminLogEventAction"},{id:"-124291086",predicate:"channelAdminLogEventActionParticipantLeave",params:[],type:"ChannelAdminLogEventAction"},{id:"-484690728",predicate:"channelAdminLogEventActionParticipantInvite",params:[{name:"participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:"-422036098",predicate:"channelAdminLogEventActionParticipantToggleBan",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:"-714643696",predicate:"channelAdminLogEventActionParticipantToggleAdmin",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:"995769920",predicate:"channelAdminLogEvent",params:[{name:"id",type:"long"},{name:"date",type:"int"},{name:"user_id",type:"int"},{name:"action",type:"ChannelAdminLogEventAction"}],type:"ChannelAdminLogEvent"},{id:"-309659827",predicate:"channels.adminLogResults",params:[{name:"events",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.AdminLogResults"},{id:"-368018716",predicate:"channelAdminLogEventsFilter",params:[{name:"flags",type:"#"},{name:"join",type:"flags.0?true"},{name:"leave",type:"flags.1?true"},{name:"invite",type:"flags.2?true"},{name:"ban",type:"flags.3?true"},{name:"unban",type:"flags.4?true"},{name:"kick",type:"flags.5?true"},{name:"unkick",type:"flags.6?true"},{name:"promote",type:"flags.7?true"},{name:"demote",type:"flags.8?true"},{name:"info",type:"flags.9?true"},{name:"settings",type:"flags.10?true"},{name:"pinned",type:"flags.11?true"},{name:"edit",type:"flags.12?true"},{name:"delete",type:"flags.13?true"}],type:"ChannelAdminLogEventsFilter"},{id:"511092620",predicate:"topPeerCategoryPhoneCalls",params:[],type:"TopPeerCategory"},{id:"-2143067670",predicate:"pageBlockAudio",params:[{name:"audio_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:"1558266229",predicate:"popularContact",params:[{name:"client_id",type:"long"},{name:"importers",type:"int"}],type:"PopularContact"},{id:"1200788123",predicate:"messageActionScreenshotTaken",params:[],type:"MessageAction"},{id:"-1634752813",predicate:"messages.favedStickersNotModified",params:[],type:"messages.FavedStickers"},{id:"-209768682",predicate:"messages.favedStickers",params:[{name:"hash",type:"int"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"}],type:"messages.FavedStickers"},{id:"-451831443",predicate:"updateFavedStickers",params:[],type:"Update"},{id:"-1987495099",predicate:"updateChannelReadMessagesContents",params:[{name:"channel_id",type:"int"},{name:"messages",type:"Vector"}],type:"Update"},{id:"-1040652646",predicate:"inputMessagesFilterMyMentions",params:[],type:"MessagesFilter"},{id:"1887741886",predicate:"updateContactsReset",params:[],type:"Update"},{id:"-1312568665",predicate:"channelAdminLogEventActionChangeStickerSet",params:[{name:"prev_stickerset",type:"InputStickerSet"},{name:"new_stickerset",type:"InputStickerSet"}],type:"ChannelAdminLogEventAction"},{id:"-85549226",predicate:"messageActionCustomAction",params:[{name:"message",type:"string"}],type:"MessageAction"},{id:"178373535",predicate:"inputPaymentCredentialsApplePay",params:[{name:"payment_data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:"-905587442",predicate:"inputPaymentCredentialsAndroidPay",params:[{name:"payment_token",type:"DataJSON"},{name:"google_transaction_id",type:"string"}],type:"InputPaymentCredentials"},{id:"-419271411",predicate:"inputMessagesFilterGeo",params:[],type:"MessagesFilter"},{id:"-530392189",predicate:"inputMessagesFilterContacts",params:[],type:"MessagesFilter"},{id:"1893427255",predicate:"updateChannelAvailableMessages",params:[{name:"channel_id",type:"int"},{name:"available_min_id",type:"int"}],type:"Update"},{id:"1599903217",predicate:"channelAdminLogEventActionTogglePreHistoryHidden",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:"-833715459",predicate:"inputMediaGeoLive",params:[{name:"flags",type:"#"},{name:"stopped",type:"flags.0?true"},{name:"geo_point",type:"InputGeoPoint"},{name:"period",type:"flags.1?int"}],type:"InputMedia"},{id:"2084316681",predicate:"messageMediaGeoLive",params:[{name:"geo",type:"GeoPoint"},{name:"period",type:"int"}],type:"MessageMedia"},{id:"1189204285",predicate:"recentMeUrlUnknown",params:[{name:"url",type:"string"}],type:"RecentMeUrl"},{id:"-1917045962",predicate:"recentMeUrlUser",params:[{name:"url",type:"string"},{name:"user_id",type:"int"}],type:"RecentMeUrl"},{id:"-1608834311",predicate:"recentMeUrlChat",params:[{name:"url",type:"string"},{name:"chat_id",type:"int"}],type:"RecentMeUrl"},{id:"-347535331",predicate:"recentMeUrlChatInvite",params:[{name:"url",type:"string"},{name:"chat_invite",type:"ChatInvite"}],type:"RecentMeUrl"},{id:"-1140172836",predicate:"recentMeUrlStickerSet",params:[{name:"url",type:"string"},{name:"set",type:"StickerSetCovered"}],type:"RecentMeUrl"},{id:"235081943",predicate:"help.recentMeUrls",params:[{name:"urls",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"help.RecentMeUrls"},{id:"-266911767",predicate:"channels.channelParticipantsNotModified",params:[],type:"channels.ChannelParticipants"},{id:"1951620897",predicate:"messages.messagesNotModified",params:[{name:"count",type:"int"}],type:"messages.Messages"},{id:"482797855",predicate:"inputSingleMedia",params:[{name:"flags",type:"#"},{name:"media",type:"InputMedia"},{name:"random_id",type:"long"},{name:"message",type:"string"},{name:"entities",type:"flags.0?Vector"}],type:"InputSingleMedia"},{id:"-892779534",predicate:"webAuthorization",params:[{name:"hash",type:"long"},{name:"bot_id",type:"int"},{name:"domain",type:"string"},{name:"browser",type:"string"},{name:"platform",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"region",type:"string"}],type:"WebAuthorization"},{id:"-313079300",predicate:"account.webAuthorizations",params:[{name:"authorizations",type:"Vector"},{name:"users",type:"Vector"}],type:"account.WebAuthorizations"},{id:"-1502174430",predicate:"inputMessageID",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:"-1160215659",predicate:"inputMessageReplyTo",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:"-2037963464",predicate:"inputMessagePinned",params:[],type:"InputMessage"},{id:"-1687559349",predicate:"messageEntityPhone",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"1280209983",predicate:"messageEntityCashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"-1410748418",predicate:"messageActionBotAllowed",params:[{name:"domain",type:"string"}],type:"MessageAction"},{id:"-55902537",predicate:"inputDialogPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputDialogPeer"},{id:"-445792507",predicate:"dialogPeer",params:[{name:"peer",type:"Peer"}],type:"DialogPeer"},{id:"223655517",predicate:"messages.foundStickerSetsNotModified",params:[],type:"messages.FoundStickerSets"},{id:"1359533640",predicate:"messages.foundStickerSets",params:[{name:"hash",type:"int"},{name:"sets",type:"Vector"}],type:"messages.FoundStickerSets"},{id:"1648543603",predicate:"fileHash",params:[{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"bytes"}],type:"FileHash"},{id:"-104284986",predicate:"webDocumentNoProxy",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:"1968737087",predicate:"inputClientProxy",params:[{name:"address",type:"string"},{name:"port",type:"int"}],type:"InputClientProxy"},{id:"-526508104",predicate:"help.proxyDataEmpty",params:[{name:"expires",type:"int"}],type:"help.ProxyData"},{id:"737668643",predicate:"help.proxyDataPromo",params:[{name:"expires",type:"int"},{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"help.ProxyData"},{id:"-483352705",predicate:"help.termsOfServiceUpdateEmpty",params:[{name:"expires",type:"int"}],type:"help.TermsOfServiceUpdate"},{id:"686618977",predicate:"help.termsOfServiceUpdate",params:[{name:"expires",type:"int"},{name:"terms_of_service",type:"help.TermsOfService"}],type:"help.TermsOfServiceUpdate"},{id:"859091184",predicate:"inputSecureFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"InputSecureFile"},{id:"1399317950",predicate:"inputSecureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputSecureFile"},{id:"-876089816",predicate:"inputSecureFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:"1679398724",predicate:"secureFileEmpty",params:[],type:"SecureFile"},{id:"-534283678",predicate:"secureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"dc_id",type:"int"},{name:"date",type:"int"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureFile"},{id:"-1964327229",predicate:"secureData",params:[{name:"data",type:"bytes"},{name:"data_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureData"},{id:"2103482845",predicate:"securePlainPhone",params:[{name:"phone",type:"string"}],type:"SecurePlainData"},{id:"569137759",predicate:"securePlainEmail",params:[{name:"email",type:"string"}],type:"SecurePlainData"},{id:"-1658158621",predicate:"secureValueTypePersonalDetails",params:[],type:"SecureValueType"},{id:"1034709504",predicate:"secureValueTypePassport",params:[],type:"SecureValueType"},{id:"115615172",predicate:"secureValueTypeDriverLicense",params:[],type:"SecureValueType"},{id:"-1596951477",predicate:"secureValueTypeIdentityCard",params:[],type:"SecureValueType"},{id:"-1717268701",predicate:"secureValueTypeInternalPassport",params:[],type:"SecureValueType"},{id:"-874308058",predicate:"secureValueTypeAddress",params:[],type:"SecureValueType"},{id:"-63531698",predicate:"secureValueTypeUtilityBill",params:[],type:"SecureValueType"},{id:"-1995211763",predicate:"secureValueTypeBankStatement",params:[],type:"SecureValueType"},{id:"-1954007928",predicate:"secureValueTypeRentalAgreement",params:[],type:"SecureValueType"},{id:"-1713143702",predicate:"secureValueTypePassportRegistration",params:[],type:"SecureValueType"},{id:"-368907213",predicate:"secureValueTypeTemporaryRegistration",params:[],type:"SecureValueType"},{id:"-1289704741",predicate:"secureValueTypePhone",params:[],type:"SecureValueType"},{id:"-1908627474",predicate:"secureValueTypeEmail",params:[],type:"SecureValueType"},{id:"411017418",predicate:"secureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?SecureFile"},{name:"reverse_side",type:"flags.2?SecureFile"},{name:"selfie",type:"flags.3?SecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"},{name:"hash",type:"bytes"}],type:"SecureValue"},{id:"-618540889",predicate:"inputSecureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?InputSecureFile"},{name:"reverse_side",type:"flags.2?InputSecureFile"},{name:"selfie",type:"flags.3?InputSecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"}],type:"InputSecureValue"},{id:"-316748368",predicate:"secureValueHash",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"}],type:"SecureValueHash"},{id:"-391902247",predicate:"secureValueErrorData",params:[{name:"type",type:"SecureValueType"},{name:"data_hash",type:"bytes"},{name:"field",type:"string"},{name:"text",type:"string"}],type:"SecureValueError"},{id:"12467706",predicate:"secureValueErrorFrontSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:"-2037765467",predicate:"secureValueErrorReverseSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:"-449327402",predicate:"secureValueErrorSelfie",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:"2054162547",predicate:"secureValueErrorFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:"1717706985",predicate:"secureValueErrorFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:"871426631",predicate:"secureCredentialsEncrypted",params:[{name:"data",type:"bytes"},{name:"hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureCredentialsEncrypted"},{id:"-1389486888",predicate:"account.authorizationForm",params:[{name:"flags",type:"#"},{name:"required_types",type:"Vector"},{name:"values",type:"Vector"},{name:"errors",type:"Vector"},{name:"users",type:"Vector"},{name:"privacy_policy_url",type:"flags.0?string"}],type:"account.AuthorizationForm"},{id:"-2128640689",predicate:"account.sentEmailCode",params:[{name:"email_pattern",type:"string"},{name:"length",type:"int"}],type:"account.SentEmailCode"},{id:"455635795",predicate:"messageActionSecureValuesSentMe",params:[{name:"values",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"MessageAction"},{id:"-648257196",predicate:"messageActionSecureValuesSent",params:[{name:"types",type:"Vector"}],type:"MessageAction"},{id:"1722786150",predicate:"help.deepLinkInfoEmpty",params:[],type:"help.DeepLinkInfo"},{id:"1783556146",predicate:"help.deepLinkInfo",params:[{name:"flags",type:"#"},{name:"update_app",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"}],type:"help.DeepLinkInfo"},{id:"289586518",predicate:"savedPhoneContact",params:[{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"date",type:"int"}],type:"SavedContact"},{id:"1304052993",predicate:"account.takeout",params:[{name:"id",type:"long"}],type:"account.Takeout"},{id:"700340377",predicate:"inputTakeoutFileLocation",params:[],type:"InputFileLocation"},{id:"-513517117",predicate:"updateDialogUnreadMark",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:"-253500010",predicate:"messages.dialogsNotModified",params:[{name:"count",type:"int"}],type:"messages.Dialogs"},{id:"-1625153079",predicate:"inputWebFileGeoPointLocation",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"access_hash",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"zoom",type:"int"},{name:"scale",type:"int"}],type:"InputWebFileLocation"},{id:"-1255369827",predicate:"contacts.topPeersDisabled",params:[],type:"contacts.TopPeers"},{id:"-1685456582",predicate:"inputReportReasonCopyright",params:[],type:"ReportReason"},{id:"-732254058",predicate:"passwordKdfAlgoUnknown",params:[],type:"PasswordKdfAlgo"},{id:"4883767",predicate:"securePasswordKdfAlgoUnknown",params:[],type:"SecurePasswordKdfAlgo"},{id:"-1141711456",predicate:"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:"-2042159726",predicate:"securePasswordKdfAlgoSHA512",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:"354925740",predicate:"secureSecretSettings",params:[{name:"secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_secret",type:"bytes"},{name:"secure_secret_id",type:"long"}],type:"SecureSecretSettings"},{id:"982592842",predicate:"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow",params:[{name:"salt1",type:"bytes"},{name:"salt2",type:"bytes"},{name:"g",type:"int"},{name:"p",type:"bytes"}],type:"PasswordKdfAlgo"},{id:"-1736378792",predicate:"inputCheckPasswordEmpty",params:[],type:"InputCheckPasswordSRP"},{id:"-763367294",predicate:"inputCheckPasswordSRP",params:[{name:"srp_id",type:"long"},{name:"A",type:"bytes"},{name:"M1",type:"bytes"}],type:"InputCheckPasswordSRP"},{id:"-2036501105",predicate:"secureValueError",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:"-1592506512",predicate:"secureValueErrorTranslationFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:"878931416",predicate:"secureValueErrorTranslationFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:"-2103600678",predicate:"secureRequiredType",params:[{name:"flags",type:"#"},{name:"native_names",type:"flags.0?true"},{name:"selfie_required",type:"flags.1?true"},{name:"translation_required",type:"flags.2?true"},{name:"type",type:"SecureValueType"}],type:"SecureRequiredType"},{id:"41187252",predicate:"secureRequiredTypeOneOf",params:[{name:"types",type:"Vector"}],type:"SecureRequiredType"},{id:"-1078332329",predicate:"help.passportConfigNotModified",params:[],type:"help.PassportConfig"},{id:"-1600596305",predicate:"help.passportConfig",params:[{name:"hash",type:"int"},{name:"countries_langs",type:"DataJSON"}],type:"help.PassportConfig"},{id:"488313413",predicate:"inputAppEvent",params:[{name:"time",type:"double"},{name:"type",type:"string"},{name:"peer",type:"long"},{name:"data",type:"JSONValue"}],type:"InputAppEvent"},{id:"-1059185703",predicate:"jsonObjectValue",params:[{name:"key",type:"string"},{name:"value",type:"JSONValue"}],type:"JSONObjectValue"},{id:"1064139624",predicate:"jsonNull",params:[],type:"JSONValue"},{id:"-952869270",predicate:"jsonBool",params:[{name:"value",type:"Bool"}],type:"JSONValue"},{id:"736157604",predicate:"jsonNumber",params:[{name:"value",type:"double"}],type:"JSONValue"},{id:"-1222740358",predicate:"jsonString",params:[{name:"value",type:"string"}],type:"JSONValue"},{id:"-146520221",predicate:"jsonArray",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:"-1715350371",predicate:"jsonObject",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:"1279515160",predicate:"updateUserPinnedMessage",params:[{name:"user_id",type:"int"},{name:"id",type:"int"}],type:"Update"},{id:"-519195831",predicate:"updateChatPinnedMessage",params:[{name:"chat_id",type:"int"},{name:"id",type:"int"},{name:"version",type:"int"}],type:"Update"},{id:"-1311015810",predicate:"inputNotifyBroadcasts",params:[],type:"InputNotifyPeer"},{id:"-703403793",predicate:"notifyBroadcasts",params:[],type:"NotifyPeer"},{id:"-311786236",predicate:"textSubscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:"-939827711",predicate:"textSuperscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:"55281185",predicate:"textMarked",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:"483104362",predicate:"textPhone",params:[{name:"text",type:"RichText"},{name:"phone",type:"string"}],type:"RichText"},{id:"136105807",predicate:"textImage",params:[{name:"document_id",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"RichText"},{id:"504660880",predicate:"pageBlockKicker",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:"878078826",predicate:"pageTableCell",params:[{name:"flags",type:"#"},{name:"header",type:"flags.0?true"},{name:"align_center",type:"flags.3?true"},{name:"align_right",type:"flags.4?true"},{name:"valign_middle",type:"flags.5?true"},{name:"valign_bottom",type:"flags.6?true"},{name:"text",type:"flags.7?RichText"},{name:"colspan",type:"flags.1?int"},{name:"rowspan",type:"flags.2?int"}],type:"PageTableCell"},{id:"-524237339",predicate:"pageTableRow",params:[{name:"cells",type:"Vector"}],type:"PageTableRow"},{id:"-1085412734",predicate:"pageBlockTable",params:[{name:"flags",type:"#"},{name:"bordered",type:"flags.0?true"},{name:"striped",type:"flags.1?true"},{name:"title",type:"RichText"},{name:"rows",type:"Vector"}],type:"PageBlock"},{id:"1869903447",predicate:"pageCaption",params:[{name:"text",type:"RichText"},{name:"credit",type:"RichText"}],type:"PageCaption"},{id:"-1188055347",predicate:"pageListItemText",params:[{name:"text",type:"RichText"}],type:"PageListItem"},{id:"635466748",predicate:"pageListItemBlocks",params:[{name:"blocks",type:"Vector"}],type:"PageListItem"},{id:"1577484359",predicate:"pageListOrderedItemText",params:[{name:"num",type:"string"},{name:"text",type:"RichText"}],type:"PageListOrderedItem"},{id:"-1730311882",predicate:"pageListOrderedItemBlocks",params:[{name:"num",type:"string"},{name:"blocks",type:"Vector"}],type:"PageListOrderedItem"},{id:"-1702174239",predicate:"pageBlockOrderedList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:"1987480557",predicate:"pageBlockDetails",params:[{name:"flags",type:"#"},{name:"open",type:"flags.0?true"},{name:"blocks",type:"Vector"},{name:"title",type:"RichText"}],type:"PageBlock"},{id:"-1282352120",predicate:"pageRelatedArticle",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"title",type:"flags.0?string"},{name:"description",type:"flags.1?string"},{name:"photo_id",type:"flags.2?long"},{name:"author",type:"flags.3?string"},{name:"published_date",type:"flags.4?int"}],type:"PageRelatedArticle"},{id:"370236054",predicate:"pageBlockRelatedArticles",params:[{name:"title",type:"RichText"},{name:"articles",type:"Vector"}],type:"PageBlock"},{id:"-1538310410",predicate:"pageBlockMap",params:[{name:"geo",type:"GeoPoint"},{name:"zoom",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:"-1366746132",predicate:"page",params:[{name:"flags",type:"#"},{name:"part",type:"flags.0?true"},{name:"rtl",type:"flags.1?true"},{name:"v2",type:"flags.2?true"},{name:"url",type:"string"},{name:"blocks",type:"Vector"},{name:"photos",type:"Vector"},{name:"documents",type:"Vector"}],type:"Page"},{id:"-610373422",predicate:"inputPrivacyKeyPhoneP2P",params:[],type:"InputPrivacyKey"},{id:"961092808",predicate:"privacyKeyPhoneP2P",params:[],type:"PrivacyKey"},{id:"894777186",predicate:"textAnchor",params:[{name:"text",type:"RichText"},{name:"name",type:"string"}],type:"RichText"},{id:"-1945767479",predicate:"help.supportName",params:[{name:"name",type:"string"}],type:"help.SupportName"},{id:"-206688531",predicate:"help.userInfoEmpty",params:[],type:"help.UserInfo"},{id:"32192344",predicate:"help.userInfo",params:[{name:"message",type:"string"},{name:"entities",type:"Vector"},{name:"author",type:"string"},{name:"date",type:"int"}],type:"help.UserInfo"},{id:"-202219658",predicate:"messageActionContactSignUp",params:[],type:"MessageAction"},{id:"-1398708869",predicate:"updateMessagePoll",params:[{name:"flags",type:"#"},{name:"poll_id",type:"long"},{name:"poll",type:"flags.0?Poll"},{name:"results",type:"PollResults"}],type:"Update"},{id:"1823064809",predicate:"pollAnswer",params:[{name:"text",type:"string"},{name:"option",type:"bytes"}],type:"PollAnswer"},{id:"-716006138",predicate:"poll",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"closed",type:"flags.0?true"},{name:"question",type:"string"},{name:"answers",type:"Vector"}],type:"Poll"},{id:"997055186",predicate:"pollAnswerVoters",params:[{name:"flags",type:"#"},{name:"chosen",type:"flags.0?true"},{name:"option",type:"bytes"},{name:"voters",type:"int"}],type:"PollAnswerVoters"},{id:"1465219162",predicate:"pollResults",params:[{name:"flags",type:"#"},{name:"min",type:"flags.0?true"},{name:"results",type:"flags.1?Vector"},{name:"total_voters",type:"flags.2?int"}],type:"PollResults"},{id:"112424539",predicate:"inputMediaPoll",params:[{name:"poll",type:"Poll"}],type:"InputMedia"},{id:"1272375192",predicate:"messageMediaPoll",params:[{name:"poll",type:"Poll"},{name:"results",type:"PollResults"}],type:"MessageMedia"},{id:"-264117680",predicate:"chatOnlines",params:[{name:"onlines",type:"int"}],type:"ChatOnlines"},{id:"1202287072",predicate:"statsURL",params:[{name:"url",type:"string"}],type:"StatsURL"},{id:"-525288402",predicate:"photoStrippedSize",params:[{name:"type",type:"string"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:"1605510357",predicate:"chatAdminRights",params:[{name:"flags",type:"#"},{name:"change_info",type:"flags.0?true"},{name:"post_messages",type:"flags.1?true"},{name:"edit_messages",type:"flags.2?true"},{name:"delete_messages",type:"flags.3?true"},{name:"ban_users",type:"flags.4?true"},{name:"invite_users",type:"flags.5?true"},{name:"pin_messages",type:"flags.7?true"},{name:"add_admins",type:"flags.9?true"}],type:"ChatAdminRights"},{id:"-1626209256",predicate:"chatBannedRights",params:[{name:"flags",type:"#"},{name:"view_messages",type:"flags.0?true"},{name:"send_messages",type:"flags.1?true"},{name:"send_media",type:"flags.2?true"},{name:"send_stickers",type:"flags.3?true"},{name:"send_gifs",type:"flags.4?true"},{name:"send_games",type:"flags.5?true"},{name:"send_inline",type:"flags.6?true"},{name:"embed_links",type:"flags.7?true"},{name:"send_polls",type:"flags.8?true"},{name:"change_info",type:"flags.10?true"},{name:"invite_users",type:"flags.15?true"},{name:"pin_messages",type:"flags.17?true"},{name:"until_date",type:"int"}],type:"ChatBannedRights"},{id:"1421875280",predicate:"updateChatDefaultBannedRights",params:[{name:"peer",type:"Peer"},{name:"default_banned_rights",type:"ChatBannedRights"},{name:"version",type:"int"}],type:"Update"},{id:"-433014407",predicate:"inputWallPaper",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputWallPaper"},{id:"1913199744",predicate:"inputWallPaperSlug",params:[{name:"slug",type:"string"}],type:"InputWallPaper"},{id:"-1150621555",predicate:"channelParticipantsContacts",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:"771095562",predicate:"channelAdminLogEventActionDefaultBannedRights",params:[{name:"prev_banned_rights",type:"ChatBannedRights"},{name:"new_banned_rights",type:"ChatBannedRights"}],type:"ChannelAdminLogEventAction"},{id:"-1895328189",predicate:"channelAdminLogEventActionStopPoll",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:"471437699",predicate:"account.wallPapersNotModified",params:[],type:"account.WallPapers"},{id:"1881892265",predicate:"account.wallPapers",params:[{name:"hash",type:"int"},{name:"wallpapers",type:"Vector"}],type:"account.WallPapers"},{id:"-557924733",predicate:"codeSettings",params:[{name:"flags",type:"#"},{name:"allow_flashcall",type:"flags.0?true"},{name:"current_number",type:"flags.1?true"},{name:"allow_app_hash",type:"flags.4?true"}],type:"CodeSettings"},{id:"-1590738760",predicate:"wallPaperSettings",params:[{name:"flags",type:"#"},{name:"blur",type:"flags.1?true"},{name:"motion",type:"flags.2?true"},{name:"background_color",type:"flags.0?int"},{name:"intensity",type:"flags.3?int"}],type:"WallPaperSettings"},{id:"-767099577",predicate:"autoDownloadSettings",params:[{name:"flags",type:"#"},{name:"disabled",type:"flags.0?true"},{name:"video_preload_large",type:"flags.1?true"},{name:"audio_preload_next",type:"flags.2?true"},{name:"phonecalls_less_data",type:"flags.3?true"},{name:"photo_size_max",type:"int"},{name:"video_size_max",type:"int"},{name:"file_size_max",type:"int"}],type:"AutoDownloadSettings"},{id:"1674235686",predicate:"account.autoDownloadSettings",params:[{name:"low",type:"AutoDownloadSettings"},{name:"medium",type:"AutoDownloadSettings"},{name:"high",type:"AutoDownloadSettings"}],type:"account.AutoDownloadSettings"},{id:"-709641735",predicate:"emojiKeyword",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:"594408994",predicate:"emojiKeywordDeleted",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:"1556570557",predicate:"emojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"keywords",type:"Vector"}],type:"EmojiKeywordsDifference"},{id:"-1519029347",predicate:"emojiURL",params:[{name:"url",type:"string"}],type:"EmojiURL"},{id:"-1275374751",predicate:"emojiLanguage",params:[{name:"lang_code",type:"string"}],type:"EmojiLanguage"},{id:"-1529000952",predicate:"inputPrivacyKeyForwards",params:[],type:"InputPrivacyKey"},{id:"1777096355",predicate:"privacyKeyForwards",params:[],type:"PrivacyKey"},{id:"1461304012",predicate:"inputPrivacyKeyProfilePhoto",params:[],type:"InputPrivacyKey"},{id:"-1777000467",predicate:"privacyKeyProfilePhoto",params:[],type:"PrivacyKey"},{id:"-1132476723",predicate:"fileLocationToBeDeprecated",params:[{name:"volume_id",type:"long"},{name:"local_id",type:"int"}],type:"FileLocation"},{id:"1075322878",predicate:"inputPhotoFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:"-667654413",predicate:"inputPhotoLegacyFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"}],type:"InputFileLocation"},{id:"668375447",predicate:"inputPeerPhotoFileLocation",params:[{name:"flags",type:"#"},{name:"big",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"volume_id",type:"long"},{name:"local_id",type:"int"}],type:"InputFileLocation"},{id:"230353641",predicate:"inputStickerSetThumb",params:[{name:"stickerset",type:"InputStickerSet"},{name:"volume_id",type:"long"},{name:"local_id",type:"int"}],type:"InputFileLocation"},{id:"-11252123",predicate:"folder",params:[{name:"flags",type:"#"},{name:"autofill_new_broadcasts",type:"flags.0?true"},{name:"autofill_public_groups",type:"flags.1?true"},{name:"autofill_new_correspondents",type:"flags.2?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"photo",type:"flags.3?ChatPhoto"}],type:"Folder"},{id:"1908216652",predicate:"dialogFolder",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"folder",type:"Folder"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"unread_muted_peers_count",type:"int"},{name:"unread_unmuted_peers_count",type:"int"},{name:"unread_muted_messages_count",type:"int"},{name:"unread_unmuted_messages_count",type:"int"}],type:"Dialog"},{id:"1684014375",predicate:"inputDialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"InputDialogPeer"},{id:"1363483106",predicate:"dialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"DialogPeer"},{id:"-70073706",predicate:"inputFolderPeer",params:[{name:"peer",type:"InputPeer"},{name:"folder_id",type:"int"}],type:"InputFolderPeer"},{id:"-373643672",predicate:"folderPeer",params:[{name:"peer",type:"Peer"},{name:"folder_id",type:"int"}],type:"FolderPeer"},{id:"422972864",predicate:"updateFolderPeers",params:[{name:"folder_peers",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:"756118935",predicate:"inputUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"int"}],type:"InputUser"},{id:"707290417",predicate:"inputChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"int"}],type:"InputChannel"},{id:"398123750",predicate:"inputPeerUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"int"}],type:"InputPeer"},{id:"-1667893317",predicate:"inputPeerChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"int"}],type:"InputPeer"},{id:"55761658",predicate:"inputPrivacyKeyPhoneNumber",params:[],type:"InputPrivacyKey"},{id:"-778378131",predicate:"privacyKeyPhoneNumber",params:[],type:"PrivacyKey"},{id:"-1472172887",predicate:"topPeerCategoryForwardUsers",params:[],type:"TopPeerCategory"},{id:"-68239120",predicate:"topPeerCategoryForwardChats",params:[],type:"TopPeerCategory"},{id:"-1569748965",predicate:"channelAdminLogEventActionChangeLinkedChat",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:"-398136321",predicate:"messages.searchCounter",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"filter",type:"MessagesFilter"},{name:"count",type:"int"}],type:"messages.SearchCounter"},{id:"280464681",predicate:"keyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.0?string"},{name:"url",type:"string"},{name:"button_id",type:"int"}],type:"KeyboardButton"},{id:"-802258988",predicate:"inputKeyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.1?string"},{name:"url",type:"string"},{name:"bot",type:"InputUser"}],type:"KeyboardButton"},{id:"-1831650802",predicate:"urlAuthResultRequest",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"bot",type:"User"},{name:"domain",type:"string"}],type:"UrlAuthResult"},{id:"-1886646706",predicate:"urlAuthResultAccepted",params:[{name:"url",type:"string"}],type:"UrlAuthResult"},{id:"-1445536993",predicate:"urlAuthResultDefault",params:[],type:"UrlAuthResult"},{id:"1283572154",predicate:"inputPrivacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:"-668769361",predicate:"inputPrivacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:"415136107",predicate:"privacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:"-1397881200",predicate:"privacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:"-1672577397",predicate:"messageEntityUnderline",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"-1090087980",predicate:"messageEntityStrike",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"34469328",predicate:"messageEntityBlockquote",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:"1786671974",predicate:"updatePeerSettings",params:[{name:"peer",type:"Peer"},{name:"settings",type:"PeerSettings"}],type:"Update"},{id:"-1078612597",predicate:"channelLocationEmpty",params:[],type:"ChannelLocation"},{id:"547062491",predicate:"channelLocation",params:[{name:"geo_point",type:"GeoPoint"},{name:"address",type:"string"}],type:"ChannelLocation"},{id:"-901375139",predicate:"peerLocated",params:[{name:"peer",type:"Peer"},{name:"expires",type:"int"},{name:"distance",type:"int"}],type:"PeerLocated"},{id:"-1263546448",predicate:"updatePeerLocated",params:[{name:"peers",type:"Vector"}],type:"Update"},{id:"241923758",predicate:"channelAdminLogEventActionChangeLocation",params:[{name:"prev_value",type:"ChannelLocation"},{name:"new_value",type:"ChannelLocation"}],type:"ChannelAdminLogEventAction"},{id:"-606798099",predicate:"inputReportReasonGeoIrrelevant",params:[],type:"ReportReason"},{id:"1401984889",predicate:"channelAdminLogEventActionToggleSlowMode",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:"1148485274",predicate:"auth.authorizationSignUpRequired",params:[{name:"flags",type:"#"},{name:"terms_of_service",type:"flags.0?help.TermsOfService"}],type:"auth.Authorization"},{id:"-666824391",predicate:"payments.paymentVerificationNeeded",params:[{name:"url",type:"string"}],type:"payments.PaymentResult"},{id:"42402760",predicate:"inputStickerSetAnimatedEmoji",params:[],type:"InputStickerSet"},{id:"967122427",predicate:"updateNewScheduledMessage",params:[{name:"message",type:"Message"}],type:"Update"},{id:"-1870238482",predicate:"updateDeleteScheduledMessages",params:[{name:"peer",type:"Peer"},{name:"messages",type:"Vector"}],type:"Update"},{id:"-797791052",predicate:"restrictionReason",params:[{name:"platform",type:"string"},{name:"reason",type:"string"},{name:"text",type:"string"}],type:"RestrictionReason"},{id:"1012306921",predicate:"inputTheme",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputTheme"},{id:"-175567375",predicate:"inputThemeSlug",params:[{name:"slug",type:"string"}],type:"InputTheme"},{id:"1211967244",predicate:"themeDocumentNotModified",params:[],type:"Theme"},{id:"-136770336",predicate:"theme",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"flags.2?Document"},{name:"installs_count",type:"int"}],type:"Theme"},{id:"-199313886",predicate:"account.themesNotModified",params:[],type:"account.Themes"},{id:"2137482273",predicate:"account.themes",params:[{name:"hash",type:"int"},{name:"themes",type:"Vector"}],type:"account.Themes"},{id:"-2112423005",predicate:"updateTheme",params:[{name:"theme",type:"Theme"}],type:"Update"},{id:"-786326563",predicate:"inputPrivacyKeyAddedByPhone",params:[],type:"InputPrivacyKey"},{id:"1124062251",predicate:"privacyKeyAddedByPhone",params:[],type:"PrivacyKey"}],methods:[{id:"-878758099",method:"invokeAfterMsg",params:[{name:"msg_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:"1036301552",method:"invokeAfterMsgs",params:[{name:"msg_ids",type:"Vector"},{name:"query",type:"!X"}],type:"X"},{id:"-1502141361",method:"auth.sendCode",params:[{name:"phone_number",type:"string"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:"-2131827673",method:"auth.signUp",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"auth.Authorization"},{id:"-1126886015",method:"auth.signIn",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"auth.Authorization"},{id:"1461180992",method:"auth.logOut",params:[],type:"Bool"},{id:"-1616179942",method:"auth.resetAuthorizations",params:[],type:"Bool"},{id:"-440401971",method:"auth.exportAuthorization",params:[{name:"dc_id",type:"int"}],type:"auth.ExportedAuthorization"},{id:"-470837741",method:"auth.importAuthorization",params:[{name:"id",type:"int"},{name:"bytes",type:"bytes"}],type:"auth.Authorization"},{id:"-841733627",method:"auth.bindTempAuthKey",params:[{name:"perm_auth_key_id",type:"long"},{name:"nonce",type:"long"},{name:"expires_at",type:"int"},{name:"encrypted_message",type:"bytes"}],type:"Bool"},{id:"1754754159",method:"account.registerDevice",params:[{name:"flags",type:"#"},{name:"no_muted",type:"flags.0?true"},{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"app_sandbox",type:"Bool"},{name:"secret",type:"bytes"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:"813089983",method:"account.unregisterDevice",params:[{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:"-2067899501",method:"account.updateNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"},{name:"settings",type:"InputPeerNotifySettings"}],type:"Bool"},{id:"313765169",method:"account.getNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"}],type:"PeerNotifySettings"},{id:"-612493497",method:"account.resetNotifySettings",params:[],type:"Bool"},{id:"2018596725",method:"account.updateProfile",params:[{name:"flags",type:"#"},{name:"first_name",type:"flags.0?string"},{name:"last_name",type:"flags.1?string"},{name:"about",type:"flags.2?string"}],type:"User"},{id:"1713919532",method:"account.updateStatus",params:[{name:"offline",type:"Bool"}],type:"Bool"},{id:"-1430579357",method:"account.getWallPapers",params:[{name:"hash",type:"int"}],type:"account.WallPapers"},{id:"-1374118561",method:"account.reportPeer",params:[{name:"peer",type:"InputPeer"},{name:"reason",type:"ReportReason"}],type:"Bool"},{id:"227648840",method:"users.getUsers",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:"-902781519",method:"users.getFullUser",params:[{name:"id",type:"InputUser"}],type:"UserFull"},{id:"749357634",method:"contacts.getContactIDs",params:[{name:"hash",type:"int"}],type:"Vector"},{id:"-995929106",method:"contacts.getStatuses",params:[],type:"Vector"},{id:"-1071414113",method:"contacts.getContacts",params:[{name:"hash",type:"int"}],type:"contacts.Contacts"},{id:"746589157",method:"contacts.importContacts",params:[{name:"contacts",type:"Vector"}],type:"contacts.ImportedContacts"},{id:"157945344",method:"contacts.deleteContacts",params:[{name:"id",type:"Vector"}],type:"Updates"},{id:"269745566",method:"contacts.deleteByPhones",params:[{name:"phones",type:"Vector"}],type:"Bool"},{id:"858475004",method:"contacts.block",params:[{name:"id",type:"InputUser"}],type:"Bool"},{id:"-448724803",method:"contacts.unblock",params:[{name:"id",type:"InputUser"}],type:"Bool"},{id:"-176409329",method:"contacts.getBlocked",params:[{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"contacts.Blocked"},{id:"1673946374",method:"messages.getMessages",params:[{name:"id",type:"Vector"}],type:"messages.Messages"},{id:"-1594999949",method:"messages.getDialogs",params:[{name:"flags",type:"#"},{name:"exclude_pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"offset_date",type:"int"},{name:"offset_id",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"messages.Dialogs"},{id:"-591691168",method:"messages.getHistory",params:[{name:"peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:"-2045448344",method:"messages.search",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"q",type:"string"},{name:"from_id",type:"flags.0?InputUser"},{name:"filter",type:"MessagesFilter"},{name:"min_date",type:"int"},{name:"max_date",type:"int"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:"238054714",method:"messages.readHistory",params:[{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"}],type:"messages.AffectedMessages"},{id:"469850889",method:"messages.deleteHistory",params:[{name:"flags",type:"#"},{name:"just_clear",type:"flags.0?true"},{name:"revoke",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"}],type:"messages.AffectedHistory"},{id:"-443640366",method:"messages.deleteMessages",params:[{name:"flags",type:"#"},{name:"revoke",type:"flags.0?true"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:"94983360",method:"messages.receivedMessages",params:[{name:"max_id",type:"int"}],type:"Vector"},{id:"-1551737264",method:"messages.setTyping",params:[{name:"peer",type:"InputPeer"},{name:"action",type:"SendMessageAction"}],type:"Bool"},{id:"1376532592",method:"messages.sendMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:"881978281",method:"messages.sendMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"media",type:"InputMedia"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:"-637606386",method:"messages.forwardMessages",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"with_my_score",type:"flags.8?true"},{name:"grouped",type:"flags.9?true"},{name:"from_peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"random_id",type:"Vector"},{name:"to_peer",type:"InputPeer"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:"-820669733",method:"messages.reportSpam",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:"913498268",method:"messages.getPeerSettings",params:[{name:"peer",type:"InputPeer"}],type:"PeerSettings"},{id:"-1115507112",method:"messages.report",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"reason",type:"ReportReason"}],type:"Bool"},{id:"1013621127",method:"messages.getChats",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:"998448230",method:"messages.getFullChat",params:[{name:"chat_id",type:"int"}],type:"messages.ChatFull"},{id:"-599447467",method:"messages.editChatTitle",params:[{name:"chat_id",type:"int"},{name:"title",type:"string"}],type:"Updates"},{id:"-900957736",method:"messages.editChatPhoto",params:[{name:"chat_id",type:"int"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:"-106911223",method:"messages.addChatUser",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"InputUser"},{name:"fwd_limit",type:"int"}],type:"Updates"},{id:"-530505962",method:"messages.deleteChatUser",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"InputUser"}],type:"Updates"},{id:"164303470",method:"messages.createChat",params:[{name:"users",type:"Vector"},{name:"title",type:"string"}],type:"Updates"},{id:"-304838614",method:"updates.getState",params:[],type:"updates.State"},{id:"630429265",method:"updates.getDifference",params:[{name:"flags",type:"#"},{name:"pts",type:"int"},{name:"pts_total_limit",type:"flags.0?int"},{name:"date",type:"int"},{name:"qts",type:"int"}],type:"updates.Difference"},{id:"-256159406",method:"photos.updateProfilePhoto",params:[{name:"id",type:"InputPhoto"}],type:"UserProfilePhoto"},{id:"1328726168",method:"photos.uploadProfilePhoto",params:[{name:"file",type:"InputFile"}],type:"photos.Photo"},{id:"-2016444625",method:"photos.deletePhotos",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:"-1291540959",method:"upload.saveFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:"-1319462148",method:"upload.getFile",params:[{name:"flags",type:"#"},{name:"precise",type:"flags.0?true"},{name:"location",type:"InputFileLocation"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.File"},{id:"-990308245",method:"help.getConfig",params:[],type:"Config"},{id:"531836966",method:"help.getNearestDc",params:[],type:"NearestDc"},{id:"1378703997",method:"help.getAppUpdate",params:[{name:"source",type:"string"}],type:"help.AppUpdate"},{id:"1295590211",method:"help.getInviteText",params:[],type:"help.InviteText"},{id:"-1848823128",method:"photos.getUserPhotos",params:[{name:"user_id",type:"InputUser"},{name:"offset",type:"int"},{name:"max_id",type:"long"},{name:"limit",type:"int"}],type:"photos.Photos"},{id:"651135312",method:"messages.getDhConfig",params:[{name:"version",type:"int"},{name:"random_length",type:"int"}],type:"messages.DhConfig"},{id:"-162681021",method:"messages.requestEncryption",params:[{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:"1035731989",method:"messages.acceptEncryption",params:[{name:"peer",type:"InputEncryptedChat"},{name:"g_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:"-304536635",method:"messages.discardEncryption",params:[{name:"chat_id",type:"int"}],type:"Bool"},{id:"2031374829",method:"messages.setEncryptedTyping",params:[{name:"peer",type:"InputEncryptedChat"},{name:"typing",type:"Bool"}],type:"Bool"},{id:"2135648522",method:"messages.readEncryptedHistory",params:[{name:"peer",type:"InputEncryptedChat"},{name:"max_date",type:"int"}],type:"Bool"},{id:"-1451792525",method:"messages.sendEncrypted",params:[{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:"-1701831834",method:"messages.sendEncryptedFile",params:[{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"},{name:"file",type:"InputEncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:"852769188",method:"messages.sendEncryptedService",params:[{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:"1436924774",method:"messages.receivedQueue",params:[{name:"max_qts",type:"int"}],type:"Vector"},{id:"1259113487",method:"messages.reportEncryptedSpam",params:[{name:"peer",type:"InputEncryptedChat"}],type:"Bool"},{id:"-562337987",method:"upload.saveBigFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"file_total_parts",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:"2018609336",method:"initConnection",params:[{name:"flags",type:"#"},{name:"api_id",type:"int"},{name:"device_model",type:"string"},{name:"system_version",type:"string"},{name:"app_version",type:"string"},{name:"system_lang_code",type:"string"},{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"proxy",type:"flags.0?InputClientProxy"},{name:"query",type:"!X"}],type:"X"},{id:"-1663104819",method:"help.getSupport",params:[],type:"help.Support"},{id:"916930423",method:"messages.readMessageContents",params:[{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:"655677548",method:"account.checkUsername",params:[{name:"username",type:"string"}],type:"Bool"},{id:"1040964988",method:"account.updateUsername",params:[{name:"username",type:"string"}],type:"User"},{id:"301470424",method:"contacts.search",params:[{name:"q",type:"string"},{name:"limit",type:"int"}],type:"contacts.Found"},{id:"-623130288",method:"account.getPrivacy",params:[{name:"key",type:"InputPrivacyKey"}],type:"account.PrivacyRules"},{id:"-906486552",method:"account.setPrivacy",params:[{name:"key",type:"InputPrivacyKey"},{name:"rules",type:"Vector"}],type:"account.PrivacyRules"},{id:"1099779595",method:"account.deleteAccount",params:[{name:"reason",type:"string"}],type:"Bool"},{id:"150761757",method:"account.getAccountTTL",params:[],type:"AccountDaysTTL"},{id:"608323678",method:"account.setAccountTTL",params:[{name:"ttl",type:"AccountDaysTTL"}],type:"Bool"},{id:"-627372787",method:"invokeWithLayer",params:[{name:"layer",type:"int"},{name:"query",type:"!X"}],type:"X"},{id:"-113456221",method:"contacts.resolveUsername",params:[{name:"username",type:"string"}],type:"contacts.ResolvedPeer"},{id:"-2108208411",method:"account.sendChangePhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:"1891839707",method:"account.changePhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"User"},{id:"71126828",method:"messages.getStickers",params:[{name:"emoticon",type:"string"},{name:"hash",type:"int"}],type:"messages.Stickers"},{id:"479598769",method:"messages.getAllStickers",params:[{name:"hash",type:"int"}],type:"messages.AllStickers"},{id:"954152242",method:"account.updateDeviceLocked",params:[{name:"period",type:"int"}],type:"Bool"},{id:"1738800940",method:"auth.importBotAuthorization",params:[{name:"flags",type:"int"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"bot_auth_token",type:"string"}],type:"auth.Authorization"},{id:"-1956073268",method:"messages.getWebPagePreview",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"MessageMedia"},{id:"-484392616",method:"account.getAuthorizations",params:[],type:"account.Authorizations"},{id:"-545786948",method:"account.resetAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:"1418342645",method:"account.getPassword",params:[],type:"account.Password"},{id:"-1663767815",method:"account.getPasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"account.PasswordSettings"},{id:"-1516564433",method:"account.updatePasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"new_settings",type:"account.PasswordInputSettings"}],type:"Bool"},{id:"-779399914",method:"auth.checkPassword",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"auth.Authorization"},{id:"-661144474",method:"auth.requestPasswordRecovery",params:[],type:"auth.PasswordRecovery"},{id:"1319464594",method:"auth.recoverPassword",params:[{name:"code",type:"string"}],type:"auth.Authorization"},{id:"-1080796745",method:"invokeWithoutUpdates",params:[{name:"query",type:"!X"}],type:"X"},{id:"234312524",method:"messages.exportChatInvite",params:[{name:"peer",type:"InputPeer"}],type:"ExportedChatInvite"},{id:"1051570619",method:"messages.checkChatInvite",params:[{name:"hash",type:"string"}],type:"ChatInvite"},{id:"1817183516",method:"messages.importChatInvite",params:[{name:"hash",type:"string"}],type:"Updates"},{id:"639215886",method:"messages.getStickerSet",params:[{name:"stickerset",type:"InputStickerSet"}],type:"messages.StickerSet"},{id:"-946871200",method:"messages.installStickerSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"archived",type:"Bool"}],type:"messages.StickerSetInstallResult"},{id:"-110209570",method:"messages.uninstallStickerSet",params:[{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:"-421563528",method:"messages.startBot",params:[{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"random_id",type:"long"},{name:"start_param",type:"string"}],type:"Updates"},{id:"-1877938321",method:"help.getAppChangelog",params:[{name:"prev_app_version",type:"string"}],type:"Updates"},{id:"-993483427",method:"messages.getMessagesViews",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"increment",type:"Bool"}],type:"Vector"},{id:"-871347913",method:"channels.readHistory",params:[{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Bool"},{id:"-2067661490",method:"channels.deleteMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:"-787622117",method:"channels.deleteUserHistory",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"}],type:"messages.AffectedHistory"},{id:"-32999408",method:"channels.reportSpam",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"id",type:"Vector"}],type:"Bool"},{id:"-1383294429",method:"channels.getMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:"306054633",method:"channels.getParticipants",params:[{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelParticipantsFilter"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"channels.ChannelParticipants"},{id:"1416484774",method:"channels.getParticipant",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"}],type:"channels.ChannelParticipant"},{id:"176122811",method:"channels.getChannels",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:"141781513",method:"channels.getFullChannel",params:[{name:"channel",type:"InputChannel"}],type:"messages.ChatFull"},{id:"1029681423",method:"channels.createChannel",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.0?true"},{name:"megagroup",type:"flags.1?true"},{name:"title",type:"string"},{name:"about",type:"string"},{name:"geo_point",type:"flags.2?InputGeoPoint"},{name:"address",type:"flags.2?string"}],type:"Updates"},{id:"-751007486",method:"channels.editAdmin",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"string"}],type:"Updates"},{id:"1450044624",method:"channels.editTitle",params:[{name:"channel",type:"InputChannel"},{name:"title",type:"string"}],type:"Updates"},{id:"-248621111",method:"channels.editPhoto",params:[{name:"channel",type:"InputChannel"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:"283557164",method:"channels.checkUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:"890549214",method:"channels.updateUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:"615851205",method:"channels.joinChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:"-130635115",method:"channels.leaveChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:"429865580",method:"channels.inviteToChannel",params:[{name:"channel",type:"InputChannel"},{name:"users",type:"Vector"}],type:"Updates"},{id:"-1072619549",method:"channels.deleteChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:"51854712",method:"updates.getChannelDifference",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelMessagesFilter"},{name:"pts",type:"int"},{name:"limit",type:"int"}],type:"updates.ChannelDifference"},{id:"-1444503762",method:"messages.editChatAdmin",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"InputUser"},{name:"is_admin",type:"Bool"}],type:"Bool"},{id:"363051235",method:"messages.migrateChat",params:[{name:"chat_id",type:"int"}],type:"Updates"},{id:"-1083038300",method:"messages.searchGlobal",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"q",type:"string"},{name:"offset_rate",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:"2016638777",method:"messages.reorderStickerSets",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"order",type:"Vector"}],type:"Bool"},{id:"864953444",method:"messages.getDocumentByHash",params:[{name:"sha256",type:"bytes"},{name:"size",type:"int"},{name:"mime_type",type:"string"}],type:"Document"},{id:"-1080395925",method:"messages.searchGifs",params:[{name:"q",type:"string"},{name:"offset",type:"int"}],type:"messages.FoundGifs"},{id:"-2084618926",method:"messages.getSavedGifs",params:[{name:"hash",type:"int"}],type:"messages.SavedGifs"},{id:"846868683",method:"messages.saveGif",params:[{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:"1364105629",method:"messages.getInlineBotResults",params:[{name:"flags",type:"#"},{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"geo_point",type:"flags.0?InputGeoPoint"},{name:"query",type:"string"},{name:"offset",type:"string"}],type:"messages.BotResults"},{id:"-346119674",method:"messages.setInlineBotResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"private",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"next_offset",type:"flags.2?string"},{name:"switch_pm",type:"flags.3?InlineBotSwitchPM"}],type:"Bool"},{id:"570955184",method:"messages.sendInlineBotResult",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"hide_via",type:"flags.11?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"random_id",type:"long"},{name:"query_id",type:"long"},{name:"id",type:"string"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:"-826838685",method:"channels.exportMessageLink",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"int"},{name:"grouped",type:"Bool"}],type:"ExportedMessageLink"},{id:"527021574",method:"channels.toggleSignatures",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:"1056025023",method:"auth.resendCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"auth.SentCode"},{id:"520357240",method:"auth.cancelCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"Bool"},{id:"-39416522",method:"messages.getMessageEditData",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"messages.MessageEditData"},{id:"1224152952",method:"messages.editMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.15?int"}],type:"Updates"},{id:"-2091549254",method:"messages.editInlineBotMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:"-2130010132",method:"messages.getBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"game",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"data",type:"flags.0?bytes"}],type:"messages.BotCallbackAnswer"},{id:"-712043766",method:"messages.setBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"Bool"},{id:"-728224331",method:"contacts.getTopPeers",params:[{name:"flags",type:"#"},{name:"correspondents",type:"flags.0?true"},{name:"bots_pm",type:"flags.1?true"},{name:"bots_inline",type:"flags.2?true"},{name:"phone_calls",type:"flags.3?true"},{name:"forward_users",type:"flags.4?true"},{name:"forward_chats",type:"flags.5?true"},{name:"groups",type:"flags.10?true"},{name:"channels",type:"flags.15?true"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"contacts.TopPeers"},{id:"451113900",method:"contacts.resetTopPeerRating",params:[{name:"category",type:"TopPeerCategory"},{name:"peer",type:"InputPeer"}],type:"Bool"},{id:"-462373635",method:"messages.getPeerDialogs",params:[{name:"peers",type:"Vector"}],type:"messages.PeerDialogs"},{id:"-1137057461",method:"messages.saveDraft",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"peer",type:"InputPeer"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:"1782549861",method:"messages.getAllDrafts",params:[],type:"Updates"},{id:"766298703",method:"messages.getFeaturedStickers",params:[{name:"hash",type:"int"}],type:"messages.FeaturedStickers"},{id:"1527873830",method:"messages.readFeaturedStickers",params:[{name:"id",type:"Vector"}],type:"Bool"},{id:"1587647177",method:"messages.getRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"hash",type:"int"}],type:"messages.RecentStickers"},{id:"958863608",method:"messages.saveRecentSticker",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:"-1986437075",method:"messages.clearRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"}],type:"Bool"},{id:"1475442322",method:"messages.getArchivedStickers",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"offset_id",type:"long"},{name:"limit",type:"int"}],type:"messages.ArchivedStickers"},{id:"457157256",method:"account.sendConfirmPhoneCode",params:[{name:"hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:"1596029123",method:"account.confirmPhone",params:[{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:"-122669393",method:"channels.getAdminedPublicChannels",params:[{name:"flags",type:"#"},{name:"by_location",type:"flags.0?true"},{name:"check_limit",type:"flags.1?true"}],type:"messages.Chats"},{id:"1706608543",method:"messages.getMaskStickers",params:[{name:"hash",type:"int"}],type:"messages.AllStickers"},{id:"-866424884",method:"messages.getAttachedStickers",params:[{name:"media",type:"InputStickeredMedia"}],type:"Vector"},{id:"-1907842680",method:"auth.dropTempAuthKeys",params:[{name:"except_auth_keys",type:"Vector"}],type:"Bool"},{id:"-1896289088",method:"messages.setGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Updates"},{id:"363700068",method:"messages.setInlineGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Bool"},{id:"-400399203",method:"messages.getGameHighScores",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:"258170395",method:"messages.getInlineGameHighScores",params:[{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:"218777796",method:"messages.getCommonChats",params:[{name:"user_id",type:"InputUser"},{name:"max_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Chats"},{id:"-341307408",method:"messages.getAllChats",params:[{name:"except_ids",type:"Vector"}],type:"messages.Chats"},{id:"-333262899",method:"help.setBotUpdatesStatus",params:[{name:"pending_updates_count",type:"int"},{name:"message",type:"string"}],type:"Bool"},{id:"852135825",method:"messages.getWebPage",params:[{name:"url",type:"string"},{name:"hash",type:"int"}],type:"WebPage"},{id:"-1489903017",method:"messages.toggleDialogPin",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:"991616823",method:"messages.reorderPinnedDialogs",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"folder_id",type:"int"},{name:"order",type:"Vector"}],type:"Bool"},{id:"-692498958",method:"messages.getPinnedDialogs",params:[{name:"folder_id",type:"int"}],type:"messages.PeerDialogs"},{id:"-1440257555",method:"bots.sendCustomRequest",params:[{name:"custom_method",type:"string"},{name:"params",type:"DataJSON"}],type:"DataJSON"},{id:"-434028723",method:"bots.answerWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"}],type:"Bool"},{id:"619086221",method:"upload.getWebFile",params:[{name:"location",type:"InputWebFileLocation"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.WebFile"},{id:"-1712285883",method:"payments.getPaymentForm",params:[{name:"msg_id",type:"int"}],type:"payments.PaymentForm"},{id:"-1601001088",method:"payments.getPaymentReceipt",params:[{name:"msg_id",type:"int"}],type:"payments.PaymentReceipt"},{id:"1997180532",method:"payments.validateRequestedInfo",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"msg_id",type:"int"},{name:"info",type:"PaymentRequestedInfo"}],type:"payments.ValidatedRequestedInfo"},{id:"730364339",method:"payments.sendPaymentForm",params:[{name:"flags",type:"#"},{name:"msg_id",type:"int"},{name:"requested_info_id",type:"flags.0?string"},{name:"shipping_option_id",type:"flags.1?string"},{name:"credentials",type:"InputPaymentCredentials"}],type:"payments.PaymentResult"},{id:"1151208273",method:"account.getTmpPassword",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"period",type:"int"}],type:"account.TmpPassword"},{id:"578650699",method:"payments.getSavedInfo",params:[],type:"payments.SavedInfo"},{id:"-667062079",method:"payments.clearSavedInfo",params:[{name:"flags",type:"#"},{name:"credentials",type:"flags.0?true"},{name:"info",type:"flags.1?true"}],type:"Bool"},{id:"-436833542",method:"messages.setBotShippingResults",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"Bool"},{id:"163765653",method:"messages.setBotPrecheckoutResults",params:[{name:"flags",type:"#"},{name:"success",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"}],type:"Bool"},{id:"-1680314774",method:"stickers.createStickerSet",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"user_id",type:"InputUser"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"stickers",type:"Vector"}],type:"messages.StickerSet"},{id:"-143257775",method:"stickers.removeStickerFromSet",params:[{name:"sticker",type:"InputDocument"}],type:"messages.StickerSet"},{id:"-4795190",method:"stickers.changeStickerPosition",params:[{name:"sticker",type:"InputDocument"},{name:"position",type:"int"}],type:"messages.StickerSet"},{id:"-2041315650",method:"stickers.addStickerToSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"sticker",type:"InputStickerSetItem"}],type:"messages.StickerSet"},{id:"1369162417",method:"messages.uploadMedia",params:[{name:"peer",type:"InputPeer"},{name:"media",type:"InputMedia"}],type:"MessageMedia"},{id:"1430593449",method:"phone.getCallConfig",params:[],type:"DataJSON"},{id:"1124046573",method:"phone.requestCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:"1003664544",method:"phone.acceptCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:"788404002",method:"phone.confirmCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_a",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:"399855457",method:"phone.receivedCall",params:[{name:"peer",type:"InputPhoneCall"}],type:"Bool"},{id:"-1295269440",method:"phone.discardCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"duration",type:"int"},{name:"reason",type:"PhoneCallDiscardReason"},{name:"connection_id",type:"long"}],type:"Updates"},{id:"1508562471",method:"phone.setCallRating",params:[{name:"flags",type:"#"},{name:"user_initiative",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"rating",type:"int"},{name:"comment",type:"string"}],type:"Updates"},{id:"662363518",method:"phone.saveCallDebug",params:[{name:"peer",type:"InputPhoneCall"},{name:"debug",type:"DataJSON"}],type:"Bool"},{id:"536919235",method:"upload.getCdnFile",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.CdnFile"},{id:"-1691921240",method:"upload.reuploadCdnFile",params:[{name:"file_token",type:"bytes"},{name:"request_token",type:"bytes"}],type:"Vector"},{id:"1375900482",method:"help.getCdnConfig",params:[],type:"CdnConfig"},{id:"-219008246",method:"langpack.getLangPack",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackDifference"},{id:"-269862909",method:"langpack.getStrings",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"keys",type:"Vector"}],type:"Vector"},{id:"-845657435",method:"langpack.getDifference",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"LangPackDifference"},{id:"1120311183",method:"langpack.getLanguages",params:[{name:"lang_pack",type:"string"}],type:"Vector"},{id:"1920559378",method:"channels.editBanned",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:"870184064",method:"channels.getAdminLog",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"q",type:"string"},{name:"events_filter",type:"flags.0?ChannelAdminLogEventsFilter"},{name:"admins",type:"flags.1?Vector"},{name:"max_id",type:"long"},{name:"min_id",type:"long"},{name:"limit",type:"int"}],type:"channels.AdminLogResults"},{id:"1302676017",method:"upload.getCdnFileHashes",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"int"}],type:"Vector"},{id:"-914493408",method:"messages.sendScreenshotNotification",params:[{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"int"},{name:"random_id",type:"long"}],type:"Updates"},{id:"-359881479",method:"channels.setStickers",params:[{name:"channel",type:"InputChannel"},{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:"567151374",method:"messages.getFavedStickers",params:[{name:"hash",type:"int"}],type:"messages.FavedStickers"},{id:"-1174420133",method:"messages.faveSticker",params:[{name:"id",type:"InputDocument"},{name:"unfave",type:"Bool"}],type:"Bool"},{id:"-357180360",method:"channels.readMessageContents",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"Bool"},{id:"-2020263951",method:"contacts.resetSaved",params:[],type:"Bool"},{id:"1180140658",method:"messages.getUnreadMentions",params:[{name:"peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"}],type:"messages.Messages"},{id:"-1355375294",method:"channels.deleteHistory",params:[{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Bool"},{id:"1036054804",method:"help.getRecentMeUrls",params:[{name:"referer",type:"string"}],type:"help.RecentMeUrls"},{id:"-356796084",method:"channels.togglePreHistoryHidden",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:"251759059",method:"messages.readMentions",params:[{name:"peer",type:"InputPeer"}],type:"messages.AffectedHistory"},{id:"-1144759543",method:"messages.getRecentLocations",params:[{name:"peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:"-872345397",method:"messages.sendMultiMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"multi_media",type:"Vector"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:"1347929239",method:"messages.uploadEncryptedFile",params:[{name:"peer",type:"InputEncryptedChat"},{name:"file",type:"InputEncryptedFile"}],type:"EncryptedFile"},{id:"405695855",method:"account.getWebAuthorizations",params:[],type:"account.WebAuthorizations"},{id:"755087855",method:"account.resetWebAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:"1747789204",method:"account.resetWebAuthorizations",params:[],type:"Bool"},{id:"-1028140917",method:"messages.searchStickerSets",params:[{name:"flags",type:"#"},{name:"exclude_featured",type:"flags.0?true"},{name:"q",type:"string"},{name:"hash",type:"int"}],type:"messages.FoundStickerSets"},{id:"-956147407",method:"upload.getFileHashes",params:[{name:"location",type:"InputFileLocation"},{name:"offset",type:"int"}],type:"Vector"},{id:"1031231713",method:"help.getProxyData",params:[],type:"help.ProxyData"},{id:"749019089",method:"help.getTermsOfServiceUpdate",params:[],type:"help.TermsOfServiceUpdate"},{id:"-294455398",method:"help.acceptTermsOfService",params:[{name:"id",type:"DataJSON"}],type:"Bool"},{id:"-1299661699",method:"account.getAllSecureValues",params:[],type:"Vector"},{id:"1936088002",method:"account.getSecureValue",params:[{name:"types",type:"Vector"}],type:"Vector"},{id:"-1986010339",method:"account.saveSecureValue",params:[{name:"value",type:"InputSecureValue"},{name:"secure_secret_id",type:"long"}],type:"SecureValue"},{id:"-1199522741",method:"account.deleteSecureValue",params:[{name:"types",type:"Vector"}],type:"Bool"},{id:"-1865902923",method:"users.setSecureValueErrors",params:[{name:"id",type:"InputUser"},{name:"errors",type:"Vector"}],type:"Bool"},{id:"-1200903967",method:"account.getAuthorizationForm",params:[{name:"bot_id",type:"int"},{name:"scope",type:"string"},{name:"public_key",type:"string"}],type:"account.AuthorizationForm"},{id:"-419267436",method:"account.acceptAuthorization",params:[{name:"bot_id",type:"int"},{name:"scope",type:"string"},{name:"public_key",type:"string"},{name:"value_hashes",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"Bool"},{id:"-1516022023",method:"account.sendVerifyPhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:"1305716726",method:"account.verifyPhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:"1880182943",method:"account.sendVerifyEmailCode",params:[{name:"email",type:"string"}],type:"account.SentEmailCode"},{id:"-323339813",method:"account.verifyEmail",params:[{name:"email",type:"string"},{name:"code",type:"string"}],type:"Bool"},{id:"1072547679",method:"help.getDeepLinkInfo",params:[{name:"path",type:"string"}],type:"help.DeepLinkInfo"},{id:"-2098076769",method:"contacts.getSaved",params:[],type:"Vector"},{id:"-2092831552",method:"channels.getLeftChannels",params:[{name:"offset",type:"int"}],type:"messages.Chats"},{id:"-262453244",method:"account.initTakeoutSession",params:[{name:"flags",type:"#"},{name:"contacts",type:"flags.0?true"},{name:"message_users",type:"flags.1?true"},{name:"message_chats",type:"flags.2?true"},{name:"message_megagroups",type:"flags.3?true"},{name:"message_channels",type:"flags.4?true"},{name:"files",type:"flags.5?true"},{name:"file_max_size",type:"flags.5?int"}],type:"account.Takeout"},{id:"489050862",method:"account.finishTakeoutSession",params:[{name:"flags",type:"#"},{name:"success",type:"flags.0?true"}],type:"Bool"},{id:"486505992",method:"messages.getSplitRanges",params:[],type:"Vector"},{id:"911373810",method:"invokeWithMessagesRange",params:[{name:"range",type:"MessageRange"},{name:"query",type:"!X"}],type:"X"},{id:"-1398145746",method:"invokeWithTakeout",params:[{name:"takeout_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:"-1031349873",method:"messages.markDialogUnread",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:"585256482",method:"messages.getDialogUnreadMarks",params:[],type:"Vector"},{id:"-2062238246",method:"contacts.toggleTopPeers",params:[{name:"enabled",type:"Bool"}],type:"Bool"},{id:"2119757468",method:"messages.clearAllDrafts",params:[],type:"Bool"},{id:"-1735311088",method:"help.getAppConfig",params:[],type:"JSONValue"},{id:"1862465352",method:"help.saveAppLog",params:[{name:"events",type:"Vector"}],type:"Bool"},{id:"-966677240",method:"help.getPassportConfig",params:[{name:"hash",type:"int"}],type:"help.PassportConfig"},{id:"1784243458",method:"langpack.getLanguage",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackLanguage"},{id:"-760547348",method:"messages.updatePinnedMessage",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"Updates"},{id:"-1881204448",method:"account.confirmPasswordEmail",params:[{name:"code",type:"string"}],type:"Bool"},{id:"2055154197",method:"account.resendPasswordEmail",params:[],type:"Bool"},{id:"-1043606090",method:"account.cancelPasswordEmail",params:[],type:"Bool"},{id:"-748624084",method:"help.getSupportName",params:[],type:"help.SupportName"},{id:"59377875",method:"help.getUserInfo",params:[{name:"user_id",type:"InputUser"}],type:"help.UserInfo"},{id:"1723407216",method:"help.editUserInfo",params:[{name:"user_id",type:"InputUser"},{name:"message",type:"string"},{name:"entities",type:"Vector"}],type:"help.UserInfo"},{id:"-1626880216",method:"account.getContactSignUpNotification",params:[],type:"Bool"},{id:"-806076575",method:"account.setContactSignUpNotification",params:[{name:"silent",type:"Bool"}],type:"Bool"},{id:"1398240377",method:"account.getNotifyExceptions",params:[{name:"flags",type:"#"},{name:"compare_sound",type:"flags.1?true"},{name:"peer",type:"flags.0?InputNotifyPeer"}],type:"Updates"},{id:"283795844",method:"messages.sendVote",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"options",type:"Vector"}],type:"Updates"},{id:"1941660731",method:"messages.getPollResults",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"Updates"},{id:"1848369232",method:"messages.getOnlines",params:[{name:"peer",type:"InputPeer"}],type:"ChatOnlines"},{id:"-2127811866",method:"messages.getStatsURL",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"params",type:"string"}],type:"StatsURL"},{id:"-554301545",method:"messages.editChatAbout",params:[{name:"peer",type:"InputPeer"},{name:"about",type:"string"}],type:"Bool"},{id:"-1517917375",method:"messages.editChatDefaultBannedRights",params:[{name:"peer",type:"InputPeer"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:"-57811990",method:"account.getWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"}],type:"WallPaper"},{id:"-578472351",method:"account.uploadWallPaper",params:[{name:"file",type:"InputFile"},{name:"mime_type",type:"string"},{name:"settings",type:"WallPaperSettings"}],type:"WallPaper"},{id:"1817860919",method:"account.saveWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"unsave",type:"Bool"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:"-18000023",method:"account.installWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:"-1153722364",method:"account.resetWallPapers",params:[],type:"Bool"},{id:"1457130303",method:"account.getAutoDownloadSettings",params:[],type:"account.AutoDownloadSettings"},{id:"1995661875",method:"account.saveAutoDownloadSettings",params:[{name:"flags",type:"#"},{name:"low",type:"flags.0?true"},{name:"high",type:"flags.1?true"},{name:"settings",type:"AutoDownloadSettings"}],type:"Bool"},{id:"899735650",method:"messages.getEmojiKeywords",params:[{name:"lang_code",type:"string"}],type:"EmojiKeywordsDifference"},{id:"352892591",method:"messages.getEmojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"EmojiKeywordsDifference"},{id:"1318675378",method:"messages.getEmojiKeywordsLanguages",params:[{name:"lang_codes",type:"Vector"}],type:"Vector"},{id:"-709817306",method:"messages.getEmojiURL",params:[{name:"lang_code",type:"string"}],type:"EmojiURL"},{id:"1749536939",method:"folders.editPeerFolders",params:[{name:"folder_peers",type:"Vector"}],type:"Updates"},{id:"472471681",method:"folders.deleteFolder",params:[{name:"folder_id",type:"int"}],type:"Updates"},{id:"1932455680",method:"messages.getSearchCounters",params:[{name:"peer",type:"InputPeer"},{name:"filters",type:"Vector"}],type:"Vector"},{id:"-170208392",method:"channels.getGroupsForDiscussion",params:[],type:"messages.Chats"},{id:"1079520178",method:"channels.setDiscussionGroup",params:[{name:"broadcast",type:"InputChannel"},{name:"group",type:"InputChannel"}],type:"Bool"},{id:"-482388461",method:"messages.requestUrlAuth",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"button_id",type:"int"}],type:"UrlAuthResult"},{id:"-148247912",method:"messages.acceptUrlAuth",params:[{name:"flags",type:"#"},{name:"write_allowed",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"button_id",type:"int"}],type:"UrlAuthResult"},{id:"1336717624",method:"messages.hidePeerSettingsBar",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:"-386636848",method:"contacts.addContact",params:[{name:"flags",type:"#"},{name:"add_phone_privacy_exception",type:"flags.0?true"},{name:"id",type:"InputUser"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"phone",type:"string"}],type:"Updates"},{id:"-130964977",method:"contacts.acceptContact",params:[{name:"id",type:"InputUser"}],type:"Updates"},{id:"-1892102881",method:"channels.editCreator",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"password",type:"InputCheckPasswordSRP"}],type:"Updates"},{id:"171270230",method:"contacts.getLocated",params:[{name:"geo_point",type:"InputGeoPoint"}],type:"Updates"},{id:"1491484525",method:"channels.editLocation",params:[{name:"channel",type:"InputChannel"},{name:"geo_point",type:"InputGeoPoint"},{name:"address",type:"string"}],type:"Bool"},{id:"-304832784",method:"channels.toggleSlowMode",params:[{name:"channel",type:"InputChannel"},{name:"seconds",type:"int"}],type:"Updates"},{id:"-490575781",method:"messages.getScheduledHistory",params:[{name:"peer",type:"InputPeer"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:"-1111817116",method:"messages.getScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:"-1120369398",method:"messages.sendScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:"1504586518",method:"messages.deleteScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:"473805619",method:"account.uploadTheme",params:[{name:"flags",type:"#"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.0?InputFile"},{name:"file_name",type:"string"},{name:"mime_type",type:"string"}],type:"Document"},{id:"729808255",method:"account.createTheme",params:[{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"InputDocument"}],type:"Theme"},{id:"999203330",method:"account.updateTheme",params:[{name:"flags",type:"#"},{name:"format",type:"string"},{name:"theme",type:"InputTheme"},{name:"slug",type:"flags.0?string"},{name:"title",type:"flags.1?string"},{name:"document",type:"flags.2?InputDocument"}],type:"Theme"},{id:"-229175188",method:"account.saveTheme",params:[{name:"theme",type:"InputTheme"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:"2061776695",method:"account.installTheme",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"format",type:"flags.1?string"},{name:"theme",type:"flags.1?InputTheme"}],type:"Bool"},{id:"-1919060949",method:"account.getTheme",params:[{name:"format",type:"string"},{name:"theme",type:"InputTheme"},{name:"document_id",type:"long"}],type:"Theme"},{id:"676939512",method:"account.getThemes",params:[{name:"format",type:"string"},{name:"hash",type:"int"}],type:"account.Themes"}]},Config.Schema.API.layer=105,Config.TLD=["abogado","ac","academy","accountants","active","actor","ad","adult","ae","aero","af","ag","agency","ai","airforce","al","allfinanz","alsace","am","amsterdam","an","android","ao","apartments","aq","aquarelle","ar","archi","army","arpa","as","asia","associates","at","attorney","au","auction","audio","autos","aw","ax","axa","az","ba","band","bank","bar","barclaycard","barclays","bargains","bayern","bb","bd","be","beer","berlin","best","bf","bg","bh","bi","bid","bike","bingo","bio","biz","bj","black","blackfriday","bloomberg","blue","bm","bmw","bn","bnpparibas","bo","boo","boutique","br","brussels","bs","bt","budapest","build","builders","business","buzz","bv","bw","by","bz","bzh","ca","cab","cal","camera","camp","cancerresearch","canon","capetown","capital","caravan","cards","care","career","careers","cartier","casa","cash","cat","catering","cc","cd","center","ceo","cern","cf","cg","ch","channel","chat","cheap","christmas","chrome","church","ci","citic","city","ck","cl","claims","cleaning","click","clinic","clothing","club","cm","cn","co","coach","codes","coffee","college","cologne","com","community","company","computer","condos","construction","consulting","contractors","cooking","cool","coop","country","cr","credit","creditcard","cricket","crs","cruises","cu","cuisinella","cv","cw","cx","cy","cymru","cz","dabur","dad","dance","dating","day","dclk","de","deals","degree","delivery","democrat","dental","dentist","desi","design","dev","diamonds","diet","digital","direct","directory","discount","dj","dk","dm","dnp","do","docs","domains","doosan","durban","dvag","dz","eat","ec","edu","education","ee","eg","email","emerck","energy","engineer","engineering","enterprises","equipment","er","es","esq","estate","et","eu","eurovision","eus","events","everbank","exchange","expert","exposed","fail","farm","fashion","feedback","fi","finance","financial","firmdale","fish","fishing","fit","fitness","fj","fk","flights","florist","flowers","flsmidth","fly","fm","fo","foo","forsale","foundation","fr","frl","frogans","fund","furniture","futbol","ga","gal","gallery","garden","gb","gbiz","gd","ge","gent","gf","gg","ggee","gh","gi","gift","gifts","gives","gl","glass","gle","global","globo","gm","gmail","gmo","gmx","gn","goog","google","gop","gov","gp","gq","gr","graphics","gratis","green","gripe","gs","gt","gu","guide","guitars","guru","gw","gy","hamburg","hangout","haus","healthcare","help","here","hermes","hiphop","hiv","hk","hm","hn","holdings","holiday","homes","horse","host","hosting","house","how","hr","ht","hu","ibm","id","ie","ifm","il","im","immo","immobilien","in","industries","info","ing","ink","institute","insure","int","international","investments","io","iq","ir","irish","is","it","iwc","jcb","je","jetzt","jm","jo","jobs","joburg","jp","juegos","kaufen","kddi","ke","kg","kh","ki","kim","kitchen","kiwi","km","kn","koeln","kp","kr","krd","kred","kw","ky","kyoto","kz","la","lacaixa","land","lat","latrobe","lawyer","lb","lc","lds","lease","legal","lgbt","li","lidl","life","lighting","limited","limo","link","lk","loans","london","lotte","lotto","lr","ls","lt","ltda","lu","luxe","luxury","lv","ly","ma","madrid","maison","management","mango","market","marketing","marriott","mc","md","me","media","meet","melbourne","meme","memorial","menu","mg","mh","miami","mil","mini","mk","ml","mm","mn","mo","mobi","moda","moe","monash","money","mormon","mortgage","moscow","motorcycles","mov","mp","mq","mr","ms","mt","mu","museum","mv","mw","mx","my","mz","na","nagoya","name","navy","nc","ne","net","network","neustar","new","nexus","nf","ng","ngo","nhk","ni","nico","ninja","nl","no","np","nr","nra","nrw","ntt","nu","nyc","nz","okinawa","om","one","ong","onl","ooo","org","organic","osaka","otsuka","ovh","pa","paris","partners","parts","party","pe","pf","pg","ph","pharmacy","photo","photography","photos","physio","pics","pictures","pink","pizza","pk","pl","place","plumbing","pm","pn","pohl","poker","porn","post","pr","praxi","press","pro","prod","productions","prof","properties","property","ps","pt","pub","pw","py","qa","qpon","quebec","re","realtor","recipes","red","rehab","reise","reisen","reit","ren","rentals","repair","report","republican","rest","restaurant","reviews","rich","rio","rip","ro","rocks","rodeo","rs","rsvp","ru","ruhr","rw","ryukyu","sa","saarland","sale","samsung","sarl","saxo","sb","sc","sca","scb","schmidt","schule","schwarz","science","scot","sd","se","services","sew","sexy","sg","sh","shiksha","shoes","shriram","si","singles","sj","sk","sky","sl","sm","sn","so","social","software","sohu","solar","solutions","soy","space","spiegel","sr","st","style","su","supplies","supply","support","surf","surgery","suzuki","sv","sx","sy","sydney","systems","sz","taipei","tatar","tattoo","tax","tc","td","technology","tel","temasek","tennis","tf","tg","th","tienda","tips","tires","tirol","tj","tk","tl","tm","tn","to","today","tokyo","tools","top","toshiba","town","toys","tp","tr","trade","training","travel","trust","tt","tui","tv","tw","tz","ua","ug","uk","university","uno","uol","us","uy","uz","va","vacations","vc","ve","vegas","ventures","versicherung","vet","vg","vi","viajes","video","villas","vision","vlaanderen","vn","vodka","vote","voting","voto","voyage","vu","wales","wang","watch","webcam","website","wed","wedding","wf","whoswho","wien","wiki","williamhill","wme","work","works","world","ws","wtc","wtf","佛山","集团","在线","한국","ভারত","八卦","موقع","公益","公司","移动","我爱你","москва","қаз","онлайн","сайт","срб","淡马锡","орг","삼성","சிங்கப்பூர்","商标","商店","商城","дети","мкд","中文网","中信","中国","中國","谷歌","భారత్","ලංකා","ભારત","भारत","网店","संगठन","网络","укр","香港","台湾","台灣","手机","мон","الجزائر","عمان","ایران","امارات","بازار","الاردن","بھارت","المغرب","السعودية","مليسيا","شبكة","გე","机构","组织机构","ไทย","سورية","рус","рф","تونس","みんな","グーグル","世界","ਭਾਰਤ","网址","游戏","vermögensberater","vermögensberatung","企业","مصر","قطر","广东","இலங்கை","இந்தியா","新加坡","فلسطين","政务","xxx","xyz","yachts","yandex","ye","yoga","yokohama","youtube","yt","za","zip","zm","zone","zuerich","zw"],Config.LatinizeMap={"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A","Ẳ":"A","Ẵ":"A","Ǎ":"A","Â":"A","Ấ":"A","Ậ":"A","Ầ":"A","Ẩ":"A","Ẫ":"A","Ä":"A","Ǟ":"A","Ȧ":"A","Ǡ":"A","Ạ":"A","Ȁ":"A","À":"A","Ả":"A","Ȃ":"A","Ā":"A","Ą":"A","Å":"A","Ǻ":"A","Ḁ":"A","Ⱥ":"A","Ã":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ḃ":"B","Ḅ":"B","Ɓ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ć":"C","Č":"C","Ç":"C","Ḉ":"C","Ĉ":"C","Ċ":"C","Ƈ":"C","Ȼ":"C","Ď":"D","Ḑ":"D","Ḓ":"D","Ḋ":"D","Ḍ":"D","Ɗ":"D","Ḏ":"D","Dz":"D","Dž":"D","Đ":"D","Ƌ":"D","DZ":"DZ","DŽ":"DZ","É":"E","Ĕ":"E","Ě":"E","Ȩ":"E","Ḝ":"E","Ê":"E","Ế":"E","Ệ":"E","Ề":"E","Ể":"E","Ễ":"E","Ḙ":"E","Ë":"E","Ė":"E","Ẹ":"E","Ȅ":"E","È":"E","Ẻ":"E","Ȇ":"E","Ē":"E","Ḗ":"E","Ḕ":"E","Ę":"E","Ɇ":"E","Ẽ":"E","Ḛ":"E","Ꝫ":"ET","Ḟ":"F","Ƒ":"F","Ǵ":"G","Ğ":"G","Ǧ":"G","Ģ":"G","Ĝ":"G","Ġ":"G","Ɠ":"G","Ḡ":"G","Ǥ":"G","Ḫ":"H","Ȟ":"H","Ḩ":"H","Ĥ":"H","Ⱨ":"H","Ḧ":"H","Ḣ":"H","Ḥ":"H","Ħ":"H","Í":"I","Ĭ":"I","Ǐ":"I","Î":"I","Ï":"I","Ḯ":"I","İ":"I","Ị":"I","Ȉ":"I","Ì":"I","Ỉ":"I","Ȋ":"I","Ī":"I","Į":"I","Ɨ":"I","Ĩ":"I","Ḭ":"I","Ꝺ":"D","Ꝼ":"F","Ᵹ":"G","Ꞃ":"R","Ꞅ":"S","Ꞇ":"T","Ꝭ":"IS","Ĵ":"J","Ɉ":"J","Ḱ":"K","Ǩ":"K","Ķ":"K","Ⱪ":"K","Ꝃ":"K","Ḳ":"K","Ƙ":"K","Ḵ":"K","Ꝁ":"K","Ꝅ":"K","Ĺ":"L","Ƚ":"L","Ľ":"L","Ļ":"L","Ḽ":"L","Ḷ":"L","Ḹ":"L","Ⱡ":"L","Ꝉ":"L","Ḻ":"L","Ŀ":"L","Ɫ":"L","Lj":"L","Ł":"L","LJ":"LJ","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ń":"N","Ň":"N","Ņ":"N","Ṋ":"N","Ṅ":"N","Ṇ":"N","Ǹ":"N","Ɲ":"N","Ṉ":"N","Ƞ":"N","Nj":"N","Ñ":"N","NJ":"NJ","Ó":"O","Ŏ":"O","Ǒ":"O","Ô":"O","Ố":"O","Ộ":"O","Ồ":"O","Ổ":"O","Ỗ":"O","Ö":"O","Ȫ":"O","Ȯ":"O","Ȱ":"O","Ọ":"O","Ő":"O","Ȍ":"O","Ò":"O","Ỏ":"O","Ơ":"O","Ớ":"O","Ợ":"O","Ờ":"O","Ở":"O","Ỡ":"O","Ȏ":"O","Ꝋ":"O","Ꝍ":"O","Ō":"O","Ṓ":"O","Ṑ":"O","Ɵ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Õ":"O","Ṍ":"O","Ṏ":"O","Ȭ":"O","Ƣ":"OI","Ꝏ":"OO","Ɛ":"E","Ɔ":"O","Ȣ":"OU","Ṕ":"P","Ṗ":"P","Ꝓ":"P","Ƥ":"P","Ꝕ":"P","Ᵽ":"P","Ꝑ":"P","Ꝙ":"Q","Ꝗ":"Q","Ŕ":"R","Ř":"R","Ŗ":"R","Ṙ":"R","Ṛ":"R","Ṝ":"R","Ȑ":"R","Ȓ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꜿ":"C","Ǝ":"E","Ś":"S","Ṥ":"S","Š":"S","Ṧ":"S","Ş":"S","Ŝ":"S","Ș":"S","Ṡ":"S","Ṣ":"S","Ṩ":"S","ẞ":"SS","Ť":"T","Ţ":"T","Ṱ":"T","Ț":"T","Ⱦ":"T","Ṫ":"T","Ṭ":"T","Ƭ":"T","Ṯ":"T","Ʈ":"T","Ŧ":"T","Ɐ":"A","Ꞁ":"L","Ɯ":"M","Ʌ":"V","Ꜩ":"TZ","Ú":"U","Ŭ":"U","Ǔ":"U","Û":"U","Ṷ":"U","Ü":"U","Ǘ":"U","Ǚ":"U","Ǜ":"U","Ǖ":"U","Ṳ":"U","Ụ":"U","Ű":"U","Ȕ":"U","Ù":"U","Ủ":"U","Ư":"U","Ứ":"U","Ự":"U","Ừ":"U","Ử":"U","Ữ":"U","Ȗ":"U","Ū":"U","Ṻ":"U","Ų":"U","Ů":"U","Ũ":"U","Ṹ":"U","Ṵ":"U","Ꝟ":"V","Ṿ":"V","Ʋ":"V","Ṽ":"V","Ꝡ":"VY","Ẃ":"W","Ŵ":"W","Ẅ":"W","Ẇ":"W","Ẉ":"W","Ẁ":"W","Ⱳ":"W","Ẍ":"X","Ẋ":"X","Ý":"Y","Ŷ":"Y","Ÿ":"Y","Ẏ":"Y","Ỵ":"Y","Ỳ":"Y","Ƴ":"Y","Ỷ":"Y","Ỿ":"Y","Ȳ":"Y","Ɏ":"Y","Ỹ":"Y","Ź":"Z","Ž":"Z","Ẑ":"Z","Ⱬ":"Z","Ż":"Z","Ẓ":"Z","Ȥ":"Z","Ẕ":"Z","Ƶ":"Z","IJ":"IJ","Œ":"OE","ᴀ":"A","ᴁ":"AE","ʙ":"B","ᴃ":"B","ᴄ":"C","ᴅ":"D","ᴇ":"E","ꜰ":"F","ɢ":"G","ʛ":"G","ʜ":"H","ɪ":"I","ʁ":"R","ᴊ":"J","ᴋ":"K","ʟ":"L","ᴌ":"L","ᴍ":"M","ɴ":"N","ᴏ":"O","ɶ":"OE","ᴐ":"O","ᴕ":"OU","ᴘ":"P","ʀ":"R","ᴎ":"N","ᴙ":"R","ꜱ":"S","ᴛ":"T","ⱻ":"E","ᴚ":"R","ᴜ":"U","ᴠ":"V","ᴡ":"W","ʏ":"Y","ᴢ":"Z","á":"a","ă":"a","ắ":"a","ặ":"a","ằ":"a","ẳ":"a","ẵ":"a","ǎ":"a","â":"a","ấ":"a","ậ":"a","ầ":"a","ẩ":"a","ẫ":"a","ä":"a","ǟ":"a","ȧ":"a","ǡ":"a","ạ":"a","ȁ":"a","à":"a","ả":"a","ȃ":"a","ā":"a","ą":"a","ᶏ":"a","ẚ":"a","å":"a","ǻ":"a","ḁ":"a","ⱥ":"a","ã":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ḃ":"b","ḅ":"b","ɓ":"b","ḇ":"b","ᵬ":"b","ᶀ":"b","ƀ":"b","ƃ":"b","ɵ":"o","ć":"c","č":"c","ç":"c","ḉ":"c","ĉ":"c","ɕ":"c","ċ":"c","ƈ":"c","ȼ":"c","ď":"d","ḑ":"d","ḓ":"d","ȡ":"d","ḋ":"d","ḍ":"d","ɗ":"d","ᶑ":"d","ḏ":"d","ᵭ":"d","ᶁ":"d","đ":"d","ɖ":"d","ƌ":"d","ı":"i","ȷ":"j","ɟ":"j","ʄ":"j","dz":"dz","dž":"dz","é":"e","ĕ":"e","ě":"e","ȩ":"e","ḝ":"e","ê":"e","ế":"e","ệ":"e","ề":"e","ể":"e","ễ":"e","ḙ":"e","ë":"e","ė":"e","ẹ":"e","ȅ":"e","è":"e","ẻ":"e","ȇ":"e","ē":"e","ḗ":"e","ḕ":"e","ⱸ":"e","ę":"e","ᶒ":"e","ɇ":"e","ẽ":"e","ḛ":"e","ꝫ":"et","ḟ":"f","ƒ":"f","ᵮ":"f","ᶂ":"f","ǵ":"g","ğ":"g","ǧ":"g","ģ":"g","ĝ":"g","ġ":"g","ɠ":"g","ḡ":"g","ᶃ":"g","ǥ":"g","ḫ":"h","ȟ":"h","ḩ":"h","ĥ":"h","ⱨ":"h","ḧ":"h","ḣ":"h","ḥ":"h","ɦ":"h","ẖ":"h","ħ":"h","ƕ":"hv","í":"i","ĭ":"i","ǐ":"i","î":"i","ï":"i","ḯ":"i","ị":"i","ȉ":"i","ì":"i","ỉ":"i","ȋ":"i","ī":"i","į":"i","ᶖ":"i","ɨ":"i","ĩ":"i","ḭ":"i","ꝺ":"d","ꝼ":"f","ᵹ":"g","ꞃ":"r","ꞅ":"s","ꞇ":"t","ꝭ":"is","ǰ":"j","ĵ":"j","ʝ":"j","ɉ":"j","ḱ":"k","ǩ":"k","ķ":"k","ⱪ":"k","ꝃ":"k","ḳ":"k","ƙ":"k","ḵ":"k","ᶄ":"k","ꝁ":"k","ꝅ":"k","ĺ":"l","ƚ":"l","ɬ":"l","ľ":"l","ļ":"l","ḽ":"l","ȴ":"l","ḷ":"l","ḹ":"l","ⱡ":"l","ꝉ":"l","ḻ":"l","ŀ":"l","ɫ":"l","ᶅ":"l","ɭ":"l","ł":"l","lj":"lj","ſ":"s","ẜ":"s","ẛ":"s","ẝ":"s","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ᵯ":"m","ᶆ":"m","ń":"n","ň":"n","ņ":"n","ṋ":"n","ȵ":"n","ṅ":"n","ṇ":"n","ǹ":"n","ɲ":"n","ṉ":"n","ƞ":"n","ᵰ":"n","ᶇ":"n","ɳ":"n","ñ":"n","nj":"nj","ó":"o","ŏ":"o","ǒ":"o","ô":"o","ố":"o","ộ":"o","ồ":"o","ổ":"o","ỗ":"o","ö":"o","ȫ":"o","ȯ":"o","ȱ":"o","ọ":"o","ő":"o","ȍ":"o","ò":"o","ỏ":"o","ơ":"o","ớ":"o","ợ":"o","ờ":"o","ở":"o","ỡ":"o","ȏ":"o","ꝋ":"o","ꝍ":"o","ⱺ":"o","ō":"o","ṓ":"o","ṑ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","õ":"o","ṍ":"o","ṏ":"o","ȭ":"o","ƣ":"oi","ꝏ":"oo","ɛ":"e","ᶓ":"e","ɔ":"o","ᶗ":"o","ȣ":"ou","ṕ":"p","ṗ":"p","ꝓ":"p","ƥ":"p","ᵱ":"p","ᶈ":"p","ꝕ":"p","ᵽ":"p","ꝑ":"p","ꝙ":"q","ʠ":"q","ɋ":"q","ꝗ":"q","ŕ":"r","ř":"r","ŗ":"r","ṙ":"r","ṛ":"r","ṝ":"r","ȑ":"r","ɾ":"r","ᵳ":"r","ȓ":"r","ṟ":"r","ɼ":"r","ᵲ":"r","ᶉ":"r","ɍ":"r","ɽ":"r","ↄ":"c","ꜿ":"c","ɘ":"e","ɿ":"r","ś":"s","ṥ":"s","š":"s","ṧ":"s","ş":"s","ŝ":"s","ș":"s","ṡ":"s","ṣ":"s","ṩ":"s","ʂ":"s","ᵴ":"s","ᶊ":"s","ȿ":"s","ɡ":"g","ß":"ss","ᴑ":"o","ᴓ":"o","ᴝ":"u","ť":"t","ţ":"t","ṱ":"t","ț":"t","ȶ":"t","ẗ":"t","ⱦ":"t","ṫ":"t","ṭ":"t","ƭ":"t","ṯ":"t","ᵵ":"t","ƫ":"t","ʈ":"t","ŧ":"t","ᵺ":"th","ɐ":"a","ᴂ":"ae","ǝ":"e","ᵷ":"g","ɥ":"h","ʮ":"h","ʯ":"h","ᴉ":"i","ʞ":"k","ꞁ":"l","ɯ":"m","ɰ":"m","ᴔ":"oe","ɹ":"r","ɻ":"r","ɺ":"r","ⱹ":"r","ʇ":"t","ʌ":"v","ʍ":"w","ʎ":"y","ꜩ":"tz","ú":"u","ŭ":"u","ǔ":"u","û":"u","ṷ":"u","ü":"u","ǘ":"u","ǚ":"u","ǜ":"u","ǖ":"u","ṳ":"u","ụ":"u","ű":"u","ȕ":"u","ù":"u","ủ":"u","ư":"u","ứ":"u","ự":"u","ừ":"u","ử":"u","ữ":"u","ȗ":"u","ū":"u","ṻ":"u","ų":"u","ᶙ":"u","ů":"u","ũ":"u","ṹ":"u","ṵ":"u","ᵫ":"ue","ꝸ":"um","ⱴ":"v","ꝟ":"v","ṿ":"v","ʋ":"v","ᶌ":"v","ⱱ":"v","ṽ":"v","ꝡ":"vy","ẃ":"w","ŵ":"w","ẅ":"w","ẇ":"w","ẉ":"w","ẁ":"w","ⱳ":"w","ẘ":"w","ẍ":"x","ẋ":"x","ᶍ":"x","ý":"y","ŷ":"y","ÿ":"y","ẏ":"y","ỵ":"y","ỳ":"y","ƴ":"y","ỷ":"y","ỿ":"y","ȳ":"y","ẙ":"y","ɏ":"y","ỹ":"y","ź":"z","ž":"z","ẑ":"z","ʑ":"z","ⱬ":"z","ż":"z","ẓ":"z","ȥ":"z","ẕ":"z","ᵶ":"z","ᶎ":"z","ʐ":"z","ƶ":"z","ɀ":"z","ff":"ff","ffi":"ffi","ffl":"ffl","fi":"fi","fl":"fl","ij":"ij","œ":"oe","st":"st","ₐ":"a","ₑ":"e","ᵢ":"i","ⱼ":"j","ₒ":"o","ᵣ":"r","ᵤ":"u","ᵥ":"v","ₓ":"x","Ё":"YO","Й":"I","Ц":"TS","У":"U","К":"K","Е":"E","Н":"N","Г":"G","Ш":"SH","Щ":"SCH","З":"Z","Х":"H","Ъ":"","ё":"yo","й":"i","ц":"ts","у":"u","к":"k","е":"e","н":"n","г":"g","ш":"sh","щ":"sch","з":"z","х":"h","ъ":"","Ф":"F","Ы":"I","В":"V","А":"A","П":"P","Р":"R","О":"O","Л":"L","Д":"D","Ж":"ZH","Э":"E","ф":"f","ы":"i","в":"v","а":"a","п":"p","р":"r","о":"o","л":"l","д":"d","ж":"zh","э":"e","Я":"Ya","Ч":"CH","С":"S","М":"M","И":"I","Т":"T","Ь":"","Б":"B","Ю":"YU","я":"ya","ч":"ch","с":"s","м":"m","и":"i","т":"t","ь":"","б":"b","ю":"yu"};var a="",r=!1,s={},o=!!(window.chrome&&chrome.storage&&chrome.storage.local),n=!o&&!!window.localStorage;function i(){return r?(r=!1,""):a}window.ConfigStorage={prefix:function(e){a=e},noPrefix:function(){r=!0},get:function(e,t){var a=!1;Array.isArray(e)||(e=Array.prototype.slice.call(arguments),t=e.pop(),a=1==e.length);var r,d,c,l=[],p=!0,h=i();for(d=0;d{e&&!n.default.getMessageIDInfo(e)[1]&&(this.maxSeenID=e)}),o.$rootScope.$on("apiUpdate",e=>{let t=e.detail;this.handleUpdate(t)}),o.$rootScope.$on("webpage_updated",e=>{e.detail.msgs(e=>{var t=this.messagesForHistory[e];t&&o.$rootScope.$broadcast("message_edit",{peerID:this.getMessagePeer(t),id:t.id,mid:e,justMedia:!0})})}),o.$rootScope.$on("draft_updated",e=>{let t=e.detail;var a=t.peerID,r=t.draft,s=this.getDialogByPeerID(a)[0];if(s){if(r&&r.date)d=r.date;else{var n=u.default.isChannel(a)?-a:0,d=this.getMessage(s.top_message).date;if(n){var c=i.default.getChat(n);(!d||c.date&&c.date>d)&&(d=c.date)}}s.pFlags.pinned||(s.index=this.generateDialogIndex(d)),this.pushDialogToStorage(s),o.$rootScope.$broadcast("dialog_draft",{peerID:a,draft:r,index:s.index})}})}getInputEntities(e){var t=o.copy(e);return t.forEach(e=>{"messageEntityMentionName"==e._&&(e._="inputMessageEntityMentionName",e.user_id=d.default.getUserInput(e.user_id))}),t}sendText(e,t,a={}){if("string"==typeof t){e=u.default.getPeerMigratedTo(e)||e;var r=a.entities||[];if(a.viaBotID||(t=c.RichTextProcessor.parseMarkdown(t,r)),t.length){var s,i=this.getInputEntities(r),m=this.tempID--,g=[l.nextRandomInt(4294967295),l.nextRandomInt(4294967295)],y=l.bigint(g[0]).shiftLeft(32).add(l.bigint(g[1])).toString(),_=this.historiesStorage[e],f=0,b={},x=a.replyToMsgID,D=u.default.isChannel(e),v=D&&u.default.isMegagroup(e),w=!(!D||v);void 0===_&&(_=this.historiesStorage[e]={count:null,history:[],pending:[]});var P=d.default.getSelf().id;e!=P&&(f|=2,b.out=!0,D||d.default.isBot(e)||(f|=1,b.unread=!0)),x&&(f|=8),w?(P=0,b.post=!0):f|=256,s={_:"message",id:m,from_id:P,to_id:u.default.getOutputPeer(e),flags:f,pFlags:b,date:o.tsNow(!0)+p.MTProto.serverTimeManager.serverTimeOffset,message:t,random_id:y,reply_to_msg_id:x,via_bot_id:a.viaBotID,reply_markup:a.reply_markup,entities:r,views:w&&1,pending:!0};var k=e=>{var t=this.messagesForHistory[m];e?(s.error=!0,t&&(t.error=!0)):(delete s.error,t&&delete t.error),o.$rootScope.$broadcast("messages_pending")};s.send=()=>{k(!1);var r={};this.pendingAfterMsgs[e]&&(r.afterMessageID=this.pendingAfterMsgs[e].messageID);var o,d=0;x&&(d|=1),w&&(d|=16),a.clearDraft&&(d|=128),a.viaBotID?o=p.MTProto.apiManager.invokeApi("messages.sendInlineBotResult",{flags:d,peer:u.default.getInputPeerByID(e),random_id:g,reply_to_msg_id:n.default.getMessageLocalID(x),query_id:a.queryID,id:a.resultID},r):(i.length&&(d|=8),o=p.MTProto.apiManager.invokeApi("messages.sendMessage",{flags:d,peer:u.default.getInputPeerByID(e),message:t,random_id:g,reply_to_msg_id:n.default.getMessageLocalID(x),entities:i},r)),o.then(e=>{"updateShortSentMessage"==e._?(s.flags=e.flags,s.date=e.date,s.id=e.id,s.media=e.media,s.entities=e.entities,e={_:"updates",users:[],chats:[],seq:0,updates:[{_:"updateMessageID",random_id:y,id:e.id},{_:D?"updateNewChannelMessage":"updateNewMessage",message:s,pts:e.pts,pts_count:e.pts_count}]}):e.updates&&e.updates.forEach(e=>{"updateDraftMessage"==e._&&(e.local=!0)}),h.default.processUpdateMessage(e)},()=>{k(!0)}).finally(()=>{this.pendingAfterMsgs[e]===r&&delete this.pendingAfterMsgs[e]}),this.pendingAfterMsgs[e]=r},this.saveMessages([s]),_.pending.unshift(m),o.$rootScope.$broadcast("history_append",{peerID:e,messageID:m,my:!0}),setTimeout(()=>s.send(),0),this.pendingByRandomID[y]=[e,m]}}}sendFile(e,t,a={}){e=u.default.getPeerMigratedTo(e)||e;var r,s,i=this.tempID--,m=[l.nextRandomInt(4294967295),l.nextRandomInt(4294967295)],g=l.bigint(m[0]).shiftLeft(32).add(l.bigint(m[1])).toString(),y=this.historiesStorage[e],b=0,x={},D=a.replyToMsgID,v=u.default.isChannel(e),w=v&&u.default.isMegagroup(e),P=!(!v||w);let k="mime_type"in t?t.mime_type:t.type,S=t instanceof File?t.name:"",C=!(t instanceof File||t instanceof Blob),F=a.caption||"";if(F){let e=a.entities||[];F=c.RichTextProcessor.parseMarkdown(F,e)}a.isMedia?C?(r="document",s=""):["image/jpeg","image/png","image/bmp"].indexOf(k)>=0?(r="photo",s="photo."+k.split("/")[1]):"audio/"==k.substr(0,6)||["video/ogg"].indexOf(k)>=0?(r="audio",s="audio."+("ogg"==k.split("/")[1]?"ogg":"mp3")):"video/"==k.substr(0,6)?(r="video",s="video.mp4"):(r="document",s="document."+k.split("/")[1]):(r="document",s="document."+k.split("/")[1]),void 0===y&&(y=this.historiesStorage[e]={count:null,history:[],pending:[]});var M=d.default.getSelf().id;e!=M&&(b|=2,x.out=!0,v||d.default.isBot(e)||(b|=1,x.unread=!0)),D&&(b|=8),P?(M=0,x.post=!0):b|=256;var E={_:"messageMediaPending",type:r,file_name:S||s,size:t.size,progress:{percent:1,total:t.size,done:0,cancel:()=>{}}},I={_:"message",id:i,from_id:M,to_id:u.default.getOutputPeer(e),flags:b,pFlags:x,date:o.tsNow(!0)+_.default.serverTimeOffset,message:F,media:C?{_:"messageMediaDocument",pFlags:{},flags:1,document:t}:E,random_id:g,reply_to_msg_id:D,views:P&&1,pending:!0},A=e=>{var t=this.messagesForHistory[i];e?(I.error=!0,t&&(t.error=!0)):(delete I.error,t&&delete t.error),o.$rootScope.$broadcast("messages_pending")},B=!1,T=null;let L=(t,a)=>p.MTProto.apiManager.invokeApi("messages.sendMedia",{flags:t,peer:u.default.getInputPeerByID(e),media:a,message:F,random_id:m,reply_to_msg_id:n.default.getMessageLocalID(D)}).then(e=>{h.default.processUpdateMessage(e)},e=>{if("photo"==r&&400==e.code&&("PHOTO_INVALID_DIMENSIONS"==e.type||"PHOTO_SAVE_FILE_INVALID"==e.type))return e.handled=!0,r="document",void I.send();A(!0)});I.send=()=>{let a=0;if(D&&(a|=1),P&&(a|=16),C){let{id:e,access_hash:r,file_reference:s}=t;L(a,{_:"inputMediaDocument",flags:0,id:{_:"inputDocument",id:e,access_hash:r,file_reference:s}})}else if(t instanceof File||t instanceof Blob){let n={},i=new Promise((e,t)=>{n.resolve=e,n.reject=t});Object.assign(i,n),this.sendFilePromise.then(()=>{B&&!I.error||(B=!1,T=f.default.uploadFile(t)),T&&T.then(e=>{var t;switch(e.name=s,B=!0,r){case"photo":t={_:"inputMediaUploadedPhoto",flags:0,file:e};break;case"document":default:t={_:"inputMediaUploadedDocument",file:e,mime_type:k,caption:"",attributes:[{_:"documentAttributeFilename",file_name:S}]}}L(a,t)},()=>{A(!0)}),T.notify=t=>{E.progress.done=t.done,E.progress.percent=Math.max(1,Math.floor(100*t.done/t.total)),o.$rootScope.$broadcast("history_update",{peerID:e})},E.progress.cancel=()=>{B||(i.resolve(),T.cancel(),this.cancelPendingMessage(g))},T.finally(()=>i.resolve())}),this.sendFilePromise=i}},this.saveMessages([I]),y.pending.unshift(i),o.$rootScope.$broadcast("history_append",{peerID:e,messageID:i,my:!0}),setTimeout(I.send.bind(this),0),this.pendingByRandomID[g]=[e,i]}cancelPendingMessage(e){var t=this.pendingByRandomID[e];if(console.log("pending",e,t),t){var a=t[0],r=t[1],s=this.historiesStorage[a],o=s.pending.indexOf(r);return h.default.processUpdateMessage({_:"updateShort",update:{_:"updateDeleteMessages",messages:[r]}}),-1!=o&&s.pending.splice(o,1),delete this.messagesForHistory[r],delete this.messagesStorage[r],!0}return!1}getConversation(e){return r(this,void 0,void 0,(function*(){var t=this.getDialogByPeerID(e);return t.length?t[0]:{peerID:e,top_message:0,index:this.generateDialogIndex(this.generateDialogPinnedDate()),pFlags:{}}}))}getConversations(e,t,a=20){var r=this.dialogsStorage,s="string"==typeof e&&e.length;if(s){if(!a||this.cachedResults.query!==e){this.cachedResults.query=e;var n=o.SearchIndexManager.search(e,this.dialogsIndex);this.cachedResults.dialogs=[],this.dialogsStorage.dialogs.forEach(e=>{n[e.peerID]&&this.cachedResults.dialogs.push(e)}),this.cachedResults.count=this.cachedResults.dialogs.length}r=this.cachedResults}else this.cachedResults.query=!1;var i=0;if(t>0)for(i=0;ir.dialogs[i].index);i++);return s||this.allDialogsLoaded||r.dialogs.length>=i+a?Promise.resolve({dialogs:r.dialogs.slice(i,i+a)}):this.getTopMessages(a).then(()=>{if(i=0,t>0)for(i=0;ir.dialogs[i].index);i++);return{dialogs:r.dialogs.slice(i,i+a)}})}getTopMessages(e){var t=this.dialogsStorage.dialogs,a=0,r=0,s=0;this.dialogsOffsetDate&&(a=this.dialogsOffsetDate+p.MTProto.serverTimeManager.serverTimeOffset,r=65536*this.dialogsOffsetDate,s|=1);return p.MTProto.apiManager.invokeApi("messages.getDialogs",{flags:s,offset_date:a,offset_id:n.default.getMessageLocalID(0),offset_peer:u.default.getInputPeerByID(0),limit:e,hash:0},{timeout:300}).then(e=>{a||p.telegramMeWebService.setAuthorized(!0),d.default.saveApiUsers(e.users),i.default.saveApiChats(e.chats),this.saveMessages(e.messages);var s=!!a,n=!1;let c=e.dialogs.length,l={};for(let t=c-1;t>=0;--t){let a=e.dialogs[t];this.saveConversation(a),r&&a.index>r&&(this.newDialogsToHandle[a.peerID]=a,n=!0),a.read_inbox_max_id||a.read_outbox_max_id||(l[a.peerID]=a),s||u.default.isChannel(u.default.getPeerID(a.peer))||(this.incrementMaxSeenID(a.top_message),s=!0)}Object.keys(l).length&&this.reloadConversation(Object.keys(l).map(e=>+e)).then(()=>{o.$rootScope.$broadcast("dialogs_multiupdate",l);for(let e in l)o.$rootScope.$broadcast("dialog_unread",{peerID:+e})}),(!e.dialogs.length||!e.count||t.length>=e.count)&&(this.allDialogsLoaded=!0),n&&!this.newDialogsHandlePromise?this.newDialogsHandlePromise=window.setTimeout(this.handleNewDialogs.bind(this),0):o.$rootScope.$broadcast("dialogs_multiupdate",{})})}generateDialogIndex(e){return void 0===e&&(e=o.tsNow(!0)+p.MTProto.serverTimeManager.serverTimeOffset),65536*e+(65535&++this.dialogsNum)}pushDialogToStorage(e,t){var a=this.dialogsStorage.dialogs,r=this.getDialogByPeerID(e.peerID)[1];if(void 0!==r&&a.splice(r,1),t&&!e.pFlags.pinned&&(!this.dialogsOffsetDate||t=a[0].index)a.unshift(e);else for(s=0;sa[s].index){a.splice(s,0,e);break}}getMessage(e){return this.messagesStorage[e]||{_:"messageEmpty",deleted:!0,pFlags:{out:!1,unread:!1}}}getMessagePeer(e){var t=e.to_id&&u.default.getPeerID(e.to_id)||0;return t<0?t:e.pFlags&&e.pFlags.out||2&e.flags?t:e.from_id}getDialogByPeerID(e){let t=this.dialogsStorage.dialogs.length;for(var a=0;au.default.getInputPeerByID(e));return console.log("will reloadConversation",e),p.MTProto.apiManager.invokeApi("messages.getPeerDialogs",{peers:t}).then(this.applyConversations.bind(this))}saveMessages(e,t={}){e.forEach(e=>{if(void 0===e.pFlags&&(e.pFlags={}),e.pFlags.out||(e.pFlags.out=!1),e.pFlags.unread||(e.pFlags.unread=!1),"messageEmpty"!=e._){var a=this.getMessagePeer(e),r="peerChannel"==e.to_id._,s=r?-a:0,o=r&&i.default.isBroadcast(s),l=n.default.getFullMessageID(e.id,s);e.mid=l;var h=this.getDialogByPeerID(a)[0];if(h&&l>0){let t=e.pFlags.out?"read_outbox_max_id":"read_inbox_max_id";e.pFlags.unread=l>h[t]}else t.isNew&&(e.pFlags.unread=!0);e.reply_to_msg_id&&(e.reply_to_mid=n.default.getFullMessageID(e.reply_to_msg_id,s)),e.date-=p.MTProto.serverTimeManager.serverTimeOffset,e.peerID=a,e.fromID=e.pFlags.post?a:e.from_id;var g=e.fwd_from;if(g){if(a==d.default.getSelf().id){if(g.saved_from_peer&&g.saved_from_msg_id){var y=u.default.getPeerID(g.saved_from_peer),_=n.default.getFullMessageID(g.saved_from_msg_id,u.default.isChannel(y)?-y:0);e.savedFrom=y+"_"+_}e.fromID=g.channel_id?-g.channel_id:g.from_id}else e.fwdFromID=g.channel_id?-g.channel_id:g.from_id,e.fwdPostID=g.channel_post;g.date-=p.MTProto.serverTimeManager.serverTimeOffset}e.via_bot_id>0&&(e.viaBotID=e.via_bot_id);var f={user_id:e.fromID,date:e.date};if(e.media)switch(e.media._){case"messageMediaEmpty":delete e.media;break;case"messageMediaPhoto":e.media.ttl_seconds?e.media={_:"messageMediaUnsupportedWeb"}:m.default.savePhoto(e.media.photo,f);break;case"messageMediaDocument":e.media.ttl_seconds?e.media={_:"messageMediaUnsupportedWeb"}:b.default.saveDoc(e.media.document,f);break;case"messageMediaWebPage":e.media.webpage.document&&b.default.saveDoc(e.media.webpage.document,f);break;case"messageMediaInvoice":e.media={_:"messageMediaUnsupportedWeb"};break;case"messageMediaGeoLive":e.media._="messageMediaGeo"}if(e.action){var x,D;switch(e.action._){case"messageActionChatEditPhoto":m.default.savePhoto(e.action.photo,f),o&&(e.action._="messageActionChannelEditPhoto");break;case"messageActionChatEditTitle":o&&(e.action._="messageActionChannelEditTitle");break;case"messageActionChatDeletePhoto":o&&(e.action._="messageActionChannelDeletePhoto");break;case"messageActionChatAddUser":1==e.action.users.length?(e.action.user_id=e.action.users[0],e.fromID==e.action.user_id&&(e.action._=r?"messageActionChatJoined":"messageActionChatReturn")):e.action.users.length>1&&(e.action._="messageActionChatAddUsers");break;case"messageActionChatDeleteUser":e.fromID==e.action.user_id&&(e.action._="messageActionChatLeave");break;case"messageActionChannelMigrateFrom":x=-e.action.chat_id,D=-s;break;case"messageActionChatMigrateTo":x=-s,D=-e.action.channel_id;break;case"messageActionHistoryClear":e.deleted=!0,e.clear_history=!0,e.pFlags.out=!1,e.pFlags.unread=!1;break;case"messageActionPhoneCall":delete e.fromID,e.action.type=(e.pFlags.out?"out_":"in_")+("phoneCallDiscardReasonMissed"==e.action.reason._||"phoneCallDiscardReasonBusy"==e.action.reason._?"missed":"ok")}x&&D&&!this.migratedFromTo[x]&&!this.migratedToFrom[D]&&this.migrateChecks(x,D)}if(e.message&&e.message.length){var v=c.RichTextProcessor.parseEntities(e.message),w=e.entities||[];e.totalEntities=c.RichTextProcessor.mergeEntities(v,w,!e.pending)}e.canBeEdited=this.canMessageBeEdited(e),t.isEdited||(this.messagesStorage[l]=e)}})}migrateChecks(e,t){if(!this.migratedFromTo[e]&&!this.migratedToFrom[t]&&i.default.hasChat(-t)){var a=i.default.getChat(-e);a&&a.migrated_to&&a.migrated_to.channel_id==-t&&(this.migratedFromTo[e]=t,this.migratedToFrom[t]=e,setTimeout(()=>{var a=this.getDialogByPeerID(e);a.length&&(this.dialogsStorage.dialogs.splice(a[1],1),o.$rootScope.$broadcast("dialog_drop",{peerID:e})),o.$rootScope.$broadcast("dialog_migrate",{migrateFrom:e,migrateTo:t})},100))}}canMessageBeEdited(e){return!("message"!=e._||e.deleted||e.fwd_from||e.via_bot_id||e.media&&-1==["messageMediaPhoto","messageMediaDocument","messageMediaWebPage","messageMediaPending"].indexOf(e.media._)||e.fromID&&d.default.isBot(e.fromID))&&(!e.media||"messageMediaDocument"!=e.media._||!e.media.document.sticker)}applyConversations(e){d.default.saveApiUsers(e.users),i.default.saveApiChats(e.chats),this.saveMessages(e.messages);var t={},a=!1;e.dialogs.forEach(e=>{var r=u.default.getPeerID(e.peer),s=e.top_message,n=this.pendingTopMsgs[r];if(n&&(!s||this.getMessage(n).date>this.getMessage(s).date)&&(e.top_message=s=n),s){var i=this.getDialogByPeerID(r).length>0;this.saveConversation(e),i?(this.clearDialogCache(s),o.$rootScope.$broadcast("dialog_top",e)):(t[r]=e,a=!0)}else{var d=this.getDialogByPeerID(r);d.length&&(this.dialogsStorage.dialogs.splice(d[1],1),o.$rootScope.$broadcast("dialog_drop",{peerID:r}))}if(void 0!==this.newUpdatesAfterReloadToHandle[r]){for(let e in this.newUpdatesAfterReloadToHandle[r]){let t=this.newUpdatesAfterReloadToHandle[r][e];this.handleUpdate(t)}delete this.newUpdatesAfterReloadToHandle[r]}}),a&&o.$rootScope.$broadcast("dialogs_multiupdate",t)}clearDialogCache(e){delete this.messagesForDialogs[e]}saveConversation(e){var t=u.default.getPeerID(e.peer);if(!t)return!1;var a=u.default.isChannel(t)?-t:0,r=u.default.getPeerSearchText(t);if(o.SearchIndexManager.indexObject(t,r,this.dialogsIndex),e.top_message)var s=n.default.getFullMessageID(e.top_message,a),c=this.getMessage(s);else{c={_:"message",id:s=this.tempID--,mid:s,from_id:d.default.getSelf().id,to_id:u.default.getOutputPeer(t),deleted:!0,flags:0,pFlags:{unread:!1,out:!0},date:0,message:""};this.saveMessages([c])}var l=c.date;if(!a&&t<0){var p=i.default.getChat(-t);if(p&&p.migrated_to&&p.pFlags.deactivated){var m=u.default.getPeerID(p.migrated_to);return this.migratedFromTo[t]=m,void(this.migratedToFrom[m]=t)}}e.top_message=s,e.read_inbox_max_id=n.default.getFullMessageID(e.read_inbox_max_id,a),e.read_outbox_max_id=n.default.getFullMessageID(e.read_outbox_max_id,a);var g=c.date;if(a){var y=i.default.getChat(a);(!g||y.date&&y.date>g)&&(g=y.date)}var _={};_&&_.date>g&&(g=_.date),e.pFlags.pinned&&(g=this.generateDialogPinnedDate()),e.index=this.generateDialogIndex(g),e.peerID=t,this.pushDialogToStorage(e,l);var f=c.pFlags.out?"read_outbox_max_id":"read_inbox_max_id";if(c.mid>0&&(c.mid>e[f]?c.pFlags.unread=!0:c.pFlags.unread=!1),void 0===this.historiesStorage[t]&&!c.deleted){var b={count:null,history:[],pending:[]};b[s>0?"history":"pending"].push(s),s<0&&c.pFlags.unread&&e.unread_count++,this.historiesStorage[t]=b,this.mergeReplyKeyboard(b,c)&&o.$rootScope.$broadcast("history_reply_markup",{peerID:t})}a&&e.pts&&h.default.addChannelState(a,e.pts),Config.Modes.packed&&!a&&e.unread_count>0&&this.maxSeenID&&e.top_message>this.maxSeenID&&c.pFlags.unread&&c.pFlags.out}handleNotifications(){clearTimeout(this.notificationsHandlePromise),this.notificationsHandlePromise=0;var e=o.$rootScope.idle.isIDLE?3e4:1e3;Object.keys(this.notificationsToHandle).forEach(t=>{let a=this.notificationsToHandle[t];a.isMutedPromise.then(t=>{var r=a.top_message;!t&&r.pFlags.unread&&setTimeout(()=>{r.pFlags.unread&&this.notifyAboutMessage(r,{fwd_count:a.fwd_count})},e)})}),this.notificationsToHandle={}}notifyAboutMessage(e,t={}){var a,r,s=this.getMessagePeer(e),n={},l="";if(e.fwdFromID&&t.fwd_count)l=t.fwd_count;else if(e.message)l={}.nopreview?"conversation_message_sent":c.RichTextProcessor.wrapPlainText(e.message);else if(e.media){var h="";switch(e.media._){case"messageMediaPhoto":l=o._("conversation_media_photo_raw"),h="рџ–ј";break;case"messageMediaDocument":switch(e.media.document.type){case"gif":l=o._("conversation_media_gif_raw"),h="рџЋ¬";break;case"sticker":l=o._("conversation_media_sticker");var m=e.media.document.stickerEmojiRaw;void 0!==m&&(l=c.RichTextProcessor.wrapPlainText(m)+" "+l);break;case"video":l=o._("conversation_media_video_raw"),h="рџ“№";break;case"round":l=o._("conversation_media_round_raw"),h="рџ“№";break;case"voice":case"audio":l=o._("conversation_media_audio_raw");break;default:e.media.document.file_name?l=c.RichTextProcessor.wrapPlainText("рџ“Ћ "+e.media.document.file_name):(l=o._("conversation_media_document_raw"),h="рџ“Ћ")}break;case"messageMediaGeo":case"messageMediaVenue":l=o._("conversation_media_location_raw"),h="рџ“Ќ";break;case"messageMediaContact":l=o._("conversation_media_contact_raw");break;case"messageMediaGame":l=c.RichTextProcessor.wrapPlainText("рџЋ® "+e.media.game.title);break;case"messageMediaUnsupported":l=o._("conversation_media_unsupported_raw");break;default:l=o._("conversation_media_attachment_raw")}""!=h&&e.media.caption&&(l=c.RichTextProcessor.wrapPlainText(h+" "+e.media.caption))}else if("messageService"==e._)switch(e.action._){case"messageActionChatCreate":l=o._("conversation_group_created_raw");break;case"messageActionChatEditTitle":l=o._("conversation_group_renamed_raw");break;case"messageActionChatEditPhoto":l=o._("conversation_group_photo_updated_raw");break;case"messageActionChatDeletePhoto":l=o._("conversation_group_photo_removed_raw");break;case"messageActionChatAddUser":case"messageActionChatAddUsers":l=o._("conversation_invited_user_message_raw");break;case"messageActionChatReturn":l=o._("conversation_returned_to_group_raw");break;case"messageActionChatJoined":l=o._("conversation_joined_group_raw");break;case"messageActionChatDeleteUser":l=o._("conversation_kicked_user_message_raw");break;case"messageActionChatLeave":l=o._("conversation_left_group_raw");break;case"messageActionChatJoinedByLink":l=o._("conversation_joined_by_link_raw");break;case"messageActionChannelCreate":l=o._("conversation_created_channel_raw");break;case"messageActionChannelEditTitle":l=o._("conversation_changed_channel_name_raw");break;case"messageActionChannelEditPhoto":l=o._("conversation_changed_channel_photo_raw");break;case"messageActionChannelDeletePhoto":l=o._("conversation_removed_channel_photo_raw");break;case"messageActionPinMessage":l=o._("conversation_pinned_message_raw");break;case"messageActionGameScore":l=e.action.score;break;case"messageActionPhoneCall":switch(e.action.type){case"out_missed":l=o._("message_service_phonecall_canceled_raw");break;case"in_missed":l=o._("message_service_phonecall_missed_raw");break;case"out_ok":l=o._("message_service_phonecall_outgoing_raw");break;case"in_ok":l=o._("message_service_phonecall_incoming_raw")}}if(s>0){var g=d.default.getUser(e.from_id),y=d.default.getUserPhoto(e.from_id);n.title=(g.first_name||"")+(g.first_name&&g.last_name?" ":"")+(g.last_name||""),n.title||(n.title=g.phone||o._("conversation_unknown_user_raw")),r=y,a=d.default.getUserString(s)}else{if(n.title=i.default.getChat(-s).title||o._("conversation_unknown_chat_raw"),e.from_id>0){g=d.default.getUser(e.from_id);n.title=(g.first_name||g.last_name||o._("conversation_unknown_user_raw"))+" @ "+n.title}r=i.default.getChatPhoto(-s),a=i.default.getChatString(-s)}n.title=c.RichTextProcessor.wrapPlainText(n.title),n.onclick=function(){o.$rootScope.$broadcast("history_focus",{peerString:a,messageID:16&e.flags?e.mid:0})},n.message=l,n.key="msg"+e.mid,n.tag=a,n.silent=e.pFlags.silent||!1,r.location&&!r.location.empty&&p.MTProto.apiFileManager.downloadSmallFile(r.location).then(t=>{e.pFlags.unread&&(n.image=t)})}mergeReplyKeyboard(e,t){if(!t.reply_markup&&!t.pFlags.out&&!t.action)return!1;if(t.reply_markup&&"replyInlineMarkup"==t.reply_markup._)return!1;var a=t.reply_markup,r=e.reply_markup;if(a)return!(r&&r.mid>=t.mid)&&(!(a.pFlags.selective&&!(16&t.flags))&&(e.maxOutID&&t.midr.mid||t.mid<0)&&t.message)return r.pFlags.hidden=!0,!0}else(!e.maxOutID||t.mid>e.maxOutID)&&(e.maxOutID=t.mid);return!(!t.action||"messageActionChatDeleteUser"!=t.action._||(r?t.action.user_id!=r.fromID:!d.default.isBot(t.action.user_id)))&&(e.reply_markup={_:"replyKeyboardHide",mid:t.mid,flags:0,pFlags:{}},!0)}getSearch(e=0,t="",a={_:"inputMessagesFilterEmpty"},r,s){var c,l=[],h=!t,m={peer:e,filter:a},g=h&&o.deepEqual(this.lastSearchFilter,m);if(h&&!g&&(this.lastSearchFilter=m,this.lastSearchResults=[]),console.log(o.dT(),"search",h,g,this.lastSearchResults,r),e&&!r&&!t){var y=this.historiesStorage[e];if(void 0!==y&&y.history.length){var f,b,x={},D=s||20;switch(a._){case"inputMessagesFilterPhotos":x.messageMediaPhoto=!0;break;case"inputMessagesFilterPhotoVideo":x.messageMediaPhoto=!0,x.messageMediaDocument=!0,f="video";break;case"inputMessagesFilterVideo":x.messageMediaDocument=!0,f="video";break;case"inputMessagesFilterDocument":x.messageMediaDocument=!0,f=!1;break;case"inputMessagesFilterVoice":x.messageMediaDocument=!0,f="voice";break;case"inputMessagesFilterRoundVideo":x.messageMediaDocument=!0,f="round";break;case"inputMessagesFilterMusic":x.messageMediaDocument=!0,f="audio";break;case"inputMessagesFilterUrl":x.url=!0;break;case"inputMessagesFilterMyMentions":x.mentioned=!0;break;default:return Promise.resolve({count:0,history:[]})}for(let e=0;e=D)break}}if(l.length=D));e++);}}if(l.length||1e3==s)return h&&(this.lastSearchResults=o.listMergeSorted(this.lastSearchResults,l)),Promise.resolve({count:0,history:l});if(e||!t)c=p.MTProto.apiManager.invokeApi("messages.search",{flags:0,peer:u.default.getInputPeerByID(e),q:t||"",filter:a||{_:"inputMessagesFilterEmpty"},min_date:0,max_date:0,limit:s||20,offset_id:n.default.getMessageLocalID(r)||0,add_offset:0,max_id:0,min_id:0},{timeout:300,noErrorBox:!0});else{var w=0,P=0,k=0,S=r&&this.getMessage(r);S&&S.date&&(w=S.date+_.default.serverTimeOffset,k=S.id,P=this.getMessagePeer(S)),c=p.MTProto.apiManager.invokeApi("messages.searchGlobal",{q:t,offset_date:w,offset_peer:u.default.getInputPeerByID(P),offset_id:n.default.getMessageLocalID(k),limit:s||20},{timeout:300,noErrorBox:!0})}return c.then(e=>{d.default.saveApiUsers(e.users),i.default.saveApiChats(e.chats),this.saveMessages(e.messages);var t=e.count||e.messages.length;return l=[],e.messages.forEach(e=>{var t=this.getMessagePeer(e);if(t<0){var a=i.default.getChat(-t);a.migrated_to&&this.migrateChecks(t,-a.migrated_to.channel_id)}l.push(e.mid)}),h&&(!r||g&&this.lastSearchResults.indexOf(r)>=0)&&(this.lastSearchResults=o.listMergeSorted(this.lastSearchResults,l)),{count:t,history:l}},e=>(400==e.code&&(e.handled=!0),Promise.reject(e)))}generateDialogPinnedDate(){return 2147483392+(255&this.pinnedIndex++)}handleNewMessages(){clearTimeout(this.newMessagesHandlePromise),this.newMessagesHandlePromise=0,o.$rootScope.$broadcast("history_multiappend",this.newMessagesToHandle),this.newMessagesToHandle={}}handleNewDialogs(){clearTimeout(this.newDialogsHandlePromise),this.newDialogsHandlePromise=0;var e=0;Object.keys(this.newDialogsToHandle).forEach(t=>{let a=this.newDialogsToHandle[t];a.reload?(this.reloadConversation(+t),delete this.newDialogsToHandle[t]):(this.pushDialogToStorage(a),u.default.isChannel(+t)||(e=Math.max(e,a.top_message||0)))}),0!=e&&this.incrementMaxSeenID(e),o.$rootScope.$broadcast("dialogs_multiupdate",this.newDialogsToHandle),this.newDialogsToHandle={}}readHistory(e,t=0){var a,r,s,n=u.default.isChannel(e),d=this.historiesStorage[e];if(!(s=this.getDialogByPeerID(e)[0])||!s.unread_count){if(!d||!d.history.length)return!1;var c,l,m=!1;for(r=d.history.length;r>=0;r--)if(c=d.history[r],(l=this.messagesStorage[c])&&!l.pFlags.out&&l.pFlags.unread){m=!0;break}if(!m)return!1}if(d.readPromise)return d.readPromise;if(a=n?p.MTProto.apiManager.invokeApi("channels.readHistory",{channel:i.default.getChannelInput(-e),max_id:t}):p.MTProto.apiManager.invokeApi("messages.readHistory",{peer:u.default.getInputPeerByID(e),max_id:t}).then(e=>{h.default.processUpdateMessage({_:"updateShort",update:{_:"updatePts",pts:e.pts,pts_count:e.pts_count}})}),d.readPromise=a.then(()=>{if(s){let a=-1;0!=t&&d&&d.history.length&&(a=d.history.findIndex(e=>e==t)),s.unread_count=-1==a?0:a,o.$rootScope.$broadcast("dialog_unread",{peerID:e,count:s.unread_count}),o.$rootScope.$broadcast("messages_read"),d&&d.history.length&&(console.warn("readPromise:",a,d.history[-1!=a?a:0]),s.read_inbox_max_id=d.history[-1!=a?a:0])}}).finally(()=>{delete d.readPromise}),d&&d.history.length)for(r=0;r{e=+e;let a=t.msgIDs[e];e>0?p.MTProto.apiManager.invokeApi("channels.readMessageContents",{channel:i.default.getChannelInput(e),id:a}).then(()=>{h.default.processUpdateMessage({_:"updateShort",update:{_:"updateChannelReadMessagesContents",channel_id:e,messages:a}})}):p.MTProto.apiManager.invokeApi("messages.readMessageContents",{id:a}).then(e=>{h.default.processUpdateMessage({_:"updateShort",update:{_:"updateReadMessagesContents",messages:a,pts:e.pts,pts_count:e.pts_count}})})})}handleUpdate(e){switch(console.log("AMM: handleUpdate:",e._),e._){case"updateMessageID":var t=e.random_id,a=this.pendingByRandomID[t];if(a){var r=a[0],s=a[1],c=u.default.isChannel(r)?-r:0,l=n.default.getFullMessageID(e.id,c);if(m=this.messagesStorage[l]){var h=(g=this.historiesStorage[r]).pending.indexOf(s);-1!=h&&g.pending.splice(h,1),delete this.messagesForHistory[s],delete this.messagesStorage[s],(S={})[s]=!0,o.$rootScope.$broadcast("history_delete",{peerID:r,msgs:S}),this.finalizePendingMessageCallbacks(s,l)}else this.pendingByMessageID[l]=t}break;case"updateNewMessage":case"updateNewChannelMessage":var m=e.message,g=(r=this.getMessagePeer(m),this.historiesStorage[r]);if(!(I=this.getDialogByPeerID(r)).length){this.newDialogsToHandle[r]={reload:!0},this.newDialogsHandlePromise||(this.newDialogsHandlePromise=window.setTimeout(this.handleNewDialogs.bind(this),0)),void 0===this.newUpdatesAfterReloadToHandle[r]&&(this.newUpdatesAfterReloadToHandle[r]=[]),this.newUpdatesAfterReloadToHandle[r].push(e);break}if("updateNewChannelMessage"==e._){var y=i.default.getChat(-r);if(y.pFlags&&(y.pFlags.left||y.pFlags.kicked))break}if(this.saveMessages([m],{isNew:!0}),void 0===g&&(g=this.historiesStorage[r]={count:null,history:[],pending:[]}),-1!=(O=m.mid>0?g.history:g.pending).indexOf(m.mid))return!1;var _,f=O[0];O.unshift(m.mid),m.mid>0&&m.midt-e),m.mid>0&&null!==g.count&&g.count++,this.mergeReplyKeyboard(g,m)&&o.$rootScope.$broadcast("history_reply_markup",{peerID:r}),!m.pFlags.out&&m.from_id&&d.default.forceUserOnline(m.from_id),(t=this.pendingByMessageID[m.mid])&&((_=this.finalizePendingMessage(t,m))&&o.$rootScope.$broadcast("history_update",{peerID:r}),delete this.pendingByMessageID[m.mid]),_||(void 0===this.newMessagesToHandle[r]&&(this.newMessagesToHandle[r]=[]),this.newMessagesToHandle[r].push(m.mid),this.newMessagesHandlePromise||(this.newMessagesHandlePromise=window.setTimeout(this.handleNewMessages.bind(this),0)));var b=!m.pFlags.out&&m.pFlags.unread;if((k=I[0]).top_message=m.mid,b&&k.unread_count++,k.pFlags.pinned&&k.index||(k.index=this.generateDialogIndex(m.date)),this.newDialogsToHandle[r]=k,this.newDialogsHandlePromise||(this.newDialogsHandlePromise=window.setTimeout(this.handleNewDialogs.bind(this),0)),b&&(o.$rootScope.selectedPeerID!=r||o.$rootScope.idle.isIDLE)){var x=16&m.flags?m.from_id:r,D=this.notificationsToHandle[x];void 0===D&&(D=this.notificationsToHandle[x]={isMutedPromise:Promise.resolve(),fwd_count:0,from_id:0}),D.from_id!=m.from_id&&(D.from_id=m.from_id,D.fwd_count=0),m.fwdFromID&&D.fwd_count++,D.top_message=m,this.notificationsHandlePromise||(this.notificationsHandlePromise=window.setTimeout(this.handleNotifications.bind(this),1e3))}break;case"updateDialogPinned":r=u.default.getPeerID(e.peer);if(!(I=this.getDialogByPeerID(r)).length||!e.pFlags.pinned){this.newDialogsToHandle[r]={reload:!0},this.newDialogsHandlePromise||(this.newDialogsHandlePromise=window.setTimeout(this.handleNewDialogs.bind(this),0));break}(k=I[0]).index=this.generateDialogIndex(this.generateDialogPinnedDate()),k.pFlags.pinned=!0;break;case"updatePinnedDialogs":var v={};if(!e.order){p.MTProto.apiManager.invokeApi("messages.getPinnedDialogs",{}).then(e=>{e.dialogs.reverse(),this.applyConversations(e),e.dialogs.forEach(e=>{v[e.peerID]=!0}),this.dialogsStorage.dialogs.forEach(e=>{var t=e.peerID;e.pFlags.pinned&&!v[t]&&(this.newDialogsToHandle[t]={reload:!0},this.newDialogsHandlePromise||(this.newDialogsHandlePromise=window.setTimeout(this.handleNewDialogs.bind(this),0)))})});break}e.order.reverse(),e.order.forEach(e=>{var t=u.default.getPeerID(e);v[t]=!0;var a=this.getDialogByPeerID(t);if(!a.length)return this.newDialogsToHandle[t]={reload:!0},void(this.newDialogsHandlePromise||(this.newDialogsHandlePromise=window.setTimeout(this.handleNewDialogs.bind(this),0)));var r=a[0];r.index=this.generateDialogIndex(this.generateDialogPinnedDate()),r.pFlags.pinned=!0,this.newDialogsToHandle[t]=r,this.newDialogsHandlePromise||(this.newDialogsHandlePromise=window.setTimeout(this.handleNewDialogs.bind(this),0))}),this.dialogsStorage.dialogs.forEach(e=>{var t=e.peerID;e.pFlags.pinned&&!v[t]&&(this.newDialogsToHandle[t]={reload:!0},this.newDialogsHandlePromise||(this.newDialogsHandlePromise=window.setTimeout(this.handleNewDialogs.bind(this),0)))});break;case"updateEditMessage":case"updateEditChannelMessage":m=e.message,r=this.getMessagePeer(m),c="peerChannel"==m.to_id._?-r:0,l=n.default.getFullMessageID(m.id,c);if(void 0===this.messagesStorage[l])break;this.saveMessages([m],{isEdited:!0}),o.safeReplaceObject(this.messagesStorage[l],m);var w=this.messagesForHistory[l];if(void 0!==w){delete this.messagesForHistory[l];var P=this.wrapForHistory(l);o.safeReplaceObject(w,P),this.messagesForHistory[l]=w}var k,S,C=(k=this.getDialogByPeerID(r)[0])&&k.top_message==l;if(m.clear_history)if(C)o.$rootScope.$broadcast("dialog_flush",{peerID:r});else(S={})[l]=!0,o.$rootScope.$broadcast("history_delete",{peerID:r,msgs:S});else if(o.$rootScope.$broadcast("message_edit",{peerID:r,id:m.id,mid:l}),C){var F={};F[r]=k,o.$rootScope.$broadcast("dialogs_multiupdate",F)}break;case"updateReadHistoryInbox":case"updateReadHistoryOutbox":case"updateReadChannelInbox":case"updateReadChannelOutbox":var M="updateReadHistoryOutbox"==e._||"updateReadChannelOutbox"==e._,E=(c=e.channel_id,n.default.getFullMessageID(e.max_id,c)),I=(r=c?-c:u.default.getPeerID(e.peer),this.getDialogByPeerID(r)),A=0,B=(O=(this.historiesStorage[r]||{}).history||[]).length,T=!1;for(r>0&&M&&d.default.forceUserOnline(r),j=0;jE)&&(m=this.messagesStorage[K]).pFlags.out==M){if(!m.pFlags.unread)break;m&&m.pFlags.unread&&(m.pFlags.unread=!1,this.messagesForHistory[K]&&(this.messagesForHistory[K].pFlags.unread=!1,T||(T=!0)),this.messagesForDialogs[K]&&(this.messagesForDialogs[K].pFlags.unread=!1),m.pFlags.out||I[0]&&(A=--I[0].unread_count))}if(I[0]){!M&&A&&I[0].top_message<=E&&(A=I[0].unread_count=0);let e=M?"read_outbox_max_id":"read_inbox_max_id";I[0][e]=E}console.warn(o.dT(),"cnt",r,A),o.$rootScope.$broadcast("dialog_unread",{peerID:r,count:A}),T&&o.$rootScope.$broadcast("messages_read");break;case"updateChannelReadMessagesContents":c=e.channel_id;var L=[];e.messages.forEach(e=>{L.push(n.default.getFullMessageID(e,c))}),e.messages=L;case"updateReadMessagesContents":var U=(R=e.messages).length;for(j=0;j{(!e.available_min_id||n.default.getMessageLocalID(t)<=e.available_min_id)&&R.push(t)}),e.messages=R;case"updateDeleteMessages":case"updateDeleteChannelMessages":{var j,N={};c=e.channel_id;let t;var V,z;for(j=0;j{let t=N[e];var a=this.historiesStorage[e];if(void 0!==a){for(var r=[],s=[],n=0;n0&&(a.count-=t.count,a.count<0&&(a.count=0));for(n=0;n0;!("channel"!=H._||!H.username&&(H.pFlags.left||H.pFlags.kicked))!=(void 0!==this.historiesStorage[r])&&(delete this.historiesStorage[r],o.$rootScope.$broadcast("history_forbidden",r)),$!=q&&(q?this.reloadConversation(-c):I[0]&&(this.dialogsStorage.dialogs.splice(I[1],1),o.$rootScope.$broadcast("dialog_drop",{peerID:r})));break;case"updateChannelReload":r=-(c=e.channel_id);(I=this.getDialogByPeerID(r))[0]&&this.dialogsStorage.dialogs.splice(I[1],1),delete this.historiesStorage[r],this.reloadConversation(-c).then(()=>{o.$rootScope.$broadcast("history_reload",r)});break;case"updateChannelMessageViews":var W=e.views;l=n.default.getFullMessageID(e.id,e.channel_id);(m=this.getMessage(l))&&m.views&&m.viewsthis.maxSeenID))return!1;y.default.set({max_seen_msg:e}),p.MTProto.apiManager.invokeApi("messages.receivedMessages",{max_id:e})}getHistory(e,t=0,a=0,r,s){this.migratedFromTo[e]&&(e=this.migratedFromTo[e]);var o=this.historiesStorage[e],i=0,d=!1,c=0,l=!1;s=s?Math.min(50,s):0,void 0===o&&(o=this.historiesStorage[e]={count:null,history:[],pending:[]}),t<0&&(t=0);var p=!1,h=e;if(this.migratedToFrom[e]&&(p=!0,t&&t1){var g=m.unread_count;(l=g>50)?m.read_inbox_max_id?(t=m.read_inbox_max_id,r=16,c=16,a=4):(a=20,i=g-(c=16)):(a=Math.max(10,s,g+2),c=g)}else"Mobile"in Config&&(a=20)}if(t>0)for(d=!0,i=0;io.history[i]){d=!1;break}if(!d&&(null!==o.count&&o.history.length==o.count||o.history.length>=i+(a||1))){r?(r=Math.min(i,r),i=Math.max(0,i-r),a+=r):a=a||(i?20:s||5);var y=o.history.slice(i,i+a);return!t&&o.pending.length&&(y=o.pending.slice().concat(y)),this.wrapHistoryResult(e,{count:o.count,history:y,unreadOffset:c,unreadSkip:l})}return r||a||(a=s||20),d&&(i=0),(r||l||t)&&-1==o.history.indexOf(t)?(r&&(i=-r,a+=r),this.requestHistory(h,t,a,i).then(a=>{o.count=a.count||a.messages.length,p&&o.count++;var r=[];return a.messages.forEach(e=>{r.push(e.mid)}),!t&&o.pending.length&&(r=o.pending.slice().concat(r)),this.wrapHistoryResult(e,{count:o.count,history:r,unreadOffset:c,unreadSkip:l})})):this.fillHistoryStorage(e,t,a,o).then(()=>{if(i=0,t>0)for(i=0;io.history[i]);i++);var r=o.history.slice(i,i+a);return!t&&o.pending.length&&(r=o.pending.slice().concat(r)),this.wrapHistoryResult(e,{count:o.count,history:r,unreadOffset:c,unreadSkip:l})})}fillHistoryStorage(e,t,a,r){var s=this.migratedFromTo[e]&&!t?1:0;return this.requestHistory(e,t,a,s).then(s=>{r.count=s.count||s.messages.length;var n=0;if(!t&&s.messages.length&&(t=s.messages[0].mid+1),t>0)for(n=0;nr.history[n]);n++);var i=r.history.length;r.history.splice(n,r.history.length-n),s.messages.forEach(t=>{this.mergeReplyKeyboard(r,t)&&o.$rootScope.$broadcast("history_reply_markup",{peerID:e}),r.history.push(t.mid)});var d=r.history.length;a-=d-i;var c=this.migratedFromTo[e],l=this.migratedToFrom[e],p=void 0!==c||void 0!==l;if(p&&(r.count=Math.max(r.count,d)+1),a>0){if(t=r.history[d-1],p){if(!s.messages.length){if(!l)return r.count=d,!0;t=0,e=l}return this.fillHistoryStorage(e,t,a,r)}if(d=0;a--)if((r=this.messagesStorage[t.history[a]])&&!r.pFlags.out&&r.pFlags.unread){t.unreadOffset=a+1;break}return Promise.resolve(t)}requestHistory(e,t,a,r=0){var s=u.default.isChannel(e);return console.trace("requestHistory",e,t,a,r),p.MTProto.apiManager.invokeApi("messages.getHistory",{peer:u.default.getInputPeerByID(e),offset_id:t?n.default.getMessageLocalID(t):0,offset_date:0,add_offset:r||0,limit:a||0,max_id:0,min_id:0,hash:0},{timeout:300,noErrorBox:!0}).then(t=>{d.default.saveApiUsers(t.users),i.default.saveApiChats(t.chats),this.saveMessages(t.messages),s&&h.default.addChannelState(-e,t.pts);var r=t.messages.length;return r&&t.messages[r-1].deleted&&(t.messages.splice(r-1,1),r--,t.count--),e<0||!d.default.isBot(e)||r==a&&a{var r=a.bot_info&&a.bot_info.description;if(r){var s={_:"messageService",id:this.tempID--,from_id:e,to_id:u.default.getOutputPeer(e),flags:0,pFlags:{},date:o.tsNow(!0)+p.MTProto.serverTimeManager.serverTimeOffset,action:{_:"messageActionBotIntro",description:r}};this.saveMessages([s]),t.messages.push(s),t.count&&t.count++}return t})},t=>{switch(t.type){case"CHANNEL_PRIVATE":var a=i.default.getChat(-e);a={_:"channelForbidden",access_hash:a.access_hash,title:a.title},h.default.processUpdateMessage({_:"updates",updates:[{_:"updateChannel",channel_id:-e}],chats:[a],users:[]})}return Promise.reject(t)})}wrapForDialog(e,t){var a=e&&void 0!==t,r=t&&t.unread_count;if(a&&void 0!==this.messagesForDialogs[e])return delete this.messagesForDialogs[e].typing,this.messagesForDialogs[e].unreadCount=r,this.messagesForDialogs[e];var s=o.copy(this.messagesStorage[e]);if(!s||!s.to_id){if(!t||!t.peerID)return s;s={_:"message",to_id:u.default.getOutputPeer(t.peerID),deleted:!0,date:o.tsNow(!0),pFlags:{out:!0}}}return s.peerID=this.getMessagePeer(s),s.peerData=u.default.getPeer(s.peerID),s.peerString=u.default.getPeerString(s.peerID),s.unreadCount=r,s.index=t&&t.index||65536*s.date,s.pinned=t&&t.pFlags.pinned||!1,"messageService"==s._&&s.action.user_id&&(s.action.user=d.default.getUser(s.action.user_id)),s.message&&s.message.length&&(s.richMessage=c.RichTextProcessor.wrapRichText(s.message.substr(0,128),{noLinks:!0,noLinebreaks:!0})),s.dateText=s.date,a&&(s.draft="",this.messagesForDialogs[e]=s),s}fetchSingleMessages(){if(this.fetchSingleMessagesPromise)return this.fetchSingleMessagesPromise;var e=this.needSingleMessages.slice();this.needSingleMessages=[];var t=n.default.splitMessageIDsByChannels(e);let a=[];return Object.keys(t.msgIDs).forEach(e=>{let r=t.msgIDs[e].map(e=>({_:"inputMessageID",id:e}));var s;s=(e=+e)>0?p.MTProto.apiManager.invokeApi("channels.getMessages",{channel:i.default.getChannelInput(e),id:r}):p.MTProto.apiManager.invokeApi("messages.getMessages",{id:r}),a.push(s.then(a=>{d.default.saveApiUsers(a.users),i.default.saveApiChats(a.chats),this.saveMessages(a.messages),o.$rootScope.$broadcast("messages_downloaded",t.mids[e])}))}),this.fetchSingleMessagesPromise=Promise.all(a).then(()=>{this.fetchSingleMessagesPromise=null,this.needSingleMessages.length&&this.fetchSingleMessages()}).catch(()=>{this.fetchSingleMessagesPromise=null,this.needSingleMessages.length&&this.fetchSingleMessages()})}wrapSingleMessage(e){this.messagesStorage[e]?o.$rootScope.$broadcast("messages_downloaded",e):-1==this.needSingleMessages.indexOf(e)&&(this.needSingleMessages.push(e),this.fetchSingleMessages())}}t.AppMessagesManager=x,t.default=new x},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=a(0),o=a(3),n=r(a(5));class i{constructor(){this.chats={},this.usernames={},this.channelAccess={},this.megagroups={},this.cachedPhotoLocations={},s.$rootScope.$on("apiUpdate",e=>{let t=e.detail;switch(t._){case"updateChannel":var a=t.channel_id;s.$rootScope.$broadcast("channel_settings",{channelID:a})}})}saveApiChats(e){e.forEach(this.saveApiChat.bind(this))}saveApiChat(e){if(s.isObject(e)){e.rTitle=e.title||"chat_title_deleted",e.rTitle=o.RichTextProcessor.wrapRichText(e.title,{noLinks:!0,noLinebreaks:!0})||"chat_title_deleted";var t=this.chats[e.id],a=s.SearchIndexManager.cleanSearchText(e.title||"").split(" "),r=a.shift(),n=a.pop();if(e.initials=r.charAt(0)+(n?n.charAt(0):r.charAt(1)),e.num=Math.abs(e.id>>1)%8+1,void 0===e.pFlags&&(e.pFlags={}),!e.pFlags.min||void 0===t){if("channel"==e._&&void 0===e.participants_count&&void 0!==t&&t.participants_count&&(e.participants_count=t.participants_count),e.username){var i=s.SearchIndexManager.cleanUsername(e.username);this.usernames[i]=e.id}void 0===t?t=this.chats[e.id]=e:(s.safeReplaceObject(t,e),s.$rootScope.$broadcast("chat_update",e.id)),void 0!==this.cachedPhotoLocations[e.id]&&s.safeReplaceObject(this.cachedPhotoLocations[e.id],e&&e.photo?e.photo:{empty:!0})}}}getChat(e){return this.chats[e]||{id:e,deleted:!0,access_hash:this.channelAccess[e]}}hasRights(e,t){if(!(e in this.chats))return!1;var a=this.getChat(e);if("chatForbidden"==a._||"channelForbidden"==a._||a.pFlags.kicked||a.pFlags.left)return!1;if(a.pFlags.creator)return!0;switch(t){case"send":if("channel"==a._&&!a.pFlags.megagroup&&!a.pFlags.editor)return!1;break;case"edit_title":case"edit_photo":case"invite":if("channel"==a._){if(!a.pFlags.megagroup)return!1;if(!(a.pFlags.editor||"invite"==t&&a.pFlags.democracy))return!1}else if(a.pFlags.admins_enabled&&!a.pFlags.admin)return!1}return!0}resolveUsername(e){return this.usernames[e]||0}saveChannelAccess(e,t){this.channelAccess[e]=t}saveIsMegagroup(e){this.megagroups[e]=!0}isChannel(e){var t=this.chats[e];return!((!t||"channel"!=t._&&"channelForbidden"!=t._)&&!this.channelAccess[e])}isMegagroup(e){if(this.megagroups[e])return!0;var t=this.chats[e];return!(!t||"channel"!=t._||!t.pFlags.megagroup)}isBroadcast(e){return this.isChannel(e)&&!this.isMegagroup(e)}getChatInput(e){return e||0}getChannelInput(e){return e?{_:"inputChannel",channel_id:e,access_hash:this.getChat(e).access_hash||this.channelAccess[e]||0}:{_:"inputChannelEmpty"}}hasChat(e,t){var a=this.chats[e];return s.isObject(a)&&(t||!a.pFlags.min)}getChatPhoto(e){var t=this.getChat(e);return void 0===this.cachedPhotoLocations[e]&&(this.cachedPhotoLocations[e]=t&&t.photo?t.photo:{empty:!0}),this.cachedPhotoLocations[e]}getChatString(e){var t=this.getChat(e);return this.isChannel(e)?(this.isMegagroup(e)?"s":"c")+e+"_"+t.access_hash:"g"+e}wrapForFull(e,t){var a=s.copy(t),r=this.getChat(e);return a.participants_count||(a.participants_count=r.participants_count),a.participants&&"chatParticipants"==a.participants._&&(a.participants.participants=this.wrapParticipants(e,a.participants.participants)),a.about&&(a.rAbout=o.RichTextProcessor.wrapRichText(a.about,{noLinebreaks:!0})),a.peerString=this.getChatString(e),a.chat=r,a}wrapParticipants(e,t){var a=this.getChat(e),r=n.default.getSelf().id;if(this.isChannel(e)){var s=a.pFlags.creator||a.pFlags.editor||a.pFlags.moderator;t.forEach(e=>{e.canLeave=r==e.user_id,e.canKick=s&&"channelParticipant"==e._,e.user=n.default.getUser(e.user_id)})}else{s=a.pFlags.creator||a.pFlags.admins_enabled&&a.pFlags.admin;t.forEach(e=>{e.canLeave=r==e.user_id,e.canKick=!e.canLeave&&(a.pFlags.creator||"chatParticipant"==e._&&(s||r==e.inviter_id)),e.user=n.default.getUser(e.user_id)})}return t}}t.AppChatsManager=i,t.default=new i},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=s(a(67)),n=a(0);const i=new class{constructor(){this.lottie=null,this.animations={},this.debug=!1}checkAnimations(e,t){let a=t?[t]:Object.keys(this.animations);t&&!this.animations[t]&&(console.warn("no animation group:",t),this.animations[t]=[]);for(let t of a){let a=this.animations[t];for(let t=a.length-1;t>=0;--t){let{animation:r,container:s,paused:o,autoplay:i}=a[t];n.isInDOM(s)?i&&(!n.isElementInViewport(s)||e?o||(this.debug&&console.log("pause animation",n.isElementInViewport(s),s),r.pause(),a[t].paused=!0):o&&(this.debug&&console.log("play animation",s),r.play(),a[t].paused=!1)):(this.debug&&console.log("destroy animation"),r.destroy(),a.splice(t,1))}}}loadAnimation(e,t=""){return r(this,void 0,void 0,(function*(){e.rendererSettings={clearCanvas:!0,progressiveLoad:!0,hideOnTransparent:!0},this.lottie||(this.lottie=o.default,this.lottie.setQuality(10));let a=this.lottie.loadAnimation(e);return this.animations[t]||(this.animations[t]=[]),this.animations[t].push({animation:a,container:e.container,paused:!e.autoplay,autoplay:e.autoplay}),e.autoplay&&this.checkAnimations(),a}))}getAnimation(e,t=""){let a=t?[t]:Object.keys(this.animations);for(let t of a){let a=this.animations[t].find(t=>t.container===e);if(a)return a.animation}return null}};window.LottieLoader=i,t.default=i},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=a(4),o=a(0),n=r(a(12)),i=r(a(10)),d=r(a(8)),c=r(a(5)),l=r(a(18)),p=a(3),h=a(9),m=r(a(33)),g=r(a(40));t.default=new class{constructor(){this.sidebarEl=document.querySelector(".profile-container"),this.profileContentEl=document.querySelector(".profile-content"),this.profileElements={avatar:this.profileContentEl.querySelector(".profile-avatar"),name:this.profileContentEl.querySelector(".profile-name"),subtitle:this.profileContentEl.querySelector(".profile-subtitle"),bio:this.profileContentEl.querySelector(".profile-row-bio"),username:this.profileContentEl.querySelector(".profile-row-username"),phone:this.profileContentEl.querySelector(".profile-row-phone"),notificationsCheckbox:this.profileContentEl.querySelector("#profile-notifications"),notificationsStatus:this.profileContentEl.querySelector(".profile-row-notifications > p")},this.sharedMedia={contentMembers:this.profileContentEl.querySelector("#content-members"),contentMedia:this.profileContentEl.querySelector("#content-media"),contentDocuments:this.profileContentEl.querySelector("#content-docs"),contentLinks:this.profileContentEl.querySelector("#content-links"),contentAudio:this.profileContentEl.querySelector("#content-audio")},this.sidebarScroll=null,this.loadSidebarMediaPromises={},this.sharedMediaTypes=["inputMessagesFilterContacts","inputMessagesFilterPhotoVideo","inputMessagesFilterDocument","inputMessagesFilterUrl","inputMessagesFilterVoice"],this.sharedMediaType="",this.sharedMediaSelected=null,this.lazyLoadQueueSidebar=new s.LazyLoadQueue,this.cleared={},this.historiesStorage={},this.log=h.logger("SR");let e=this.profileContentEl.querySelector(".profile-tabs-content"),t=this.profileContentEl.querySelector(".profile-tabs");s.horizontalMenu(t,e,(e,t)=>{this.sharedMediaType=this.sharedMediaTypes[e],this.sharedMediaSelected=t.firstElementChild},this.onSidebarScroll.bind(this)),t.children[1].click(),this.sidebarEl.querySelector(".sidebar-close-button").addEventListener("click",()=>{this.toggleSidebar(!1)}),this.sharedMedia.contentMedia.addEventListener("click",e=>{let t=e.target,a=+t.getAttribute("message-id");if(!a)return void this.log.warn("no messageID by click on target:",t);let r=n.default.getMessage(a);g.default.openMedia(r,!1)}),window.addEventListener("resize",()=>{setTimeout(()=>this.onSidebarScroll(),0)})}onSidebarScroll(){if(this.lazyLoadQueueSidebar.check(),this.sharedMediaSelected){let e=Array.from(this.sharedMediaSelected.childNodes).slice(-15);for(let t of e)if(o.isElementInViewport(t)){this.log("Will load more media"),this.loadSidebarMedia(!0);break}}}setScroll(e){this.sidebarScroll=e,this.sidebarScroll.onscroll=this.onSidebarScroll.bind(this)}toggleSidebar(e){this.log("sidebarEl",this.sidebarEl,e,o.isElementInViewport(this.sidebarEl)),this.sidebarEl.style.width=void 0===e?o.isElementInViewport(this.sidebarEl)?"0%":"25%":e?"25%":"0%"}loadSidebarMedia(e=!1){let t=o.$rootScope.selectedPeerID,a=e?[this.sharedMediaType]:this.sharedMediaTypes;this.historiesStorage[t]||(this.historiesStorage[t]={});let r=this.historiesStorage[t];return a.map(e=>{if(this.loadSidebarMediaPromises[e])return this.loadSidebarMediaPromises[e];r[e]||(r[e]=[]);let a=r[e],d=a[a.length-1]||0,c=!d&&n.default.historiesStorage[t]?n.default.historiesStorage[t].history.slice():[];return d=!d&&c.length?c[c.length-1]:d,this.log("search house of glass pre",e,c,d),this.loadSidebarMediaPromises[e]=n.default.getSearch(t,"",{_:e},d,50).then(r=>{c=c.concat(r.history),a.push(...c),this.log("search house of glass",e,r,c,this.cleared),o.$rootScope.selectedPeerID==t?(this.cleared[e]&&(c=a,delete this.cleared[e]),c.forEach(a=>{let r=n.default.getMessage(a);if(r.media)switch(e){case"inputMessagesFilterPhotoVideo":{let e=r.media.photo||r.media.document||r.media.webpage.document;if(!e){this.log("no media!",r);break}if("document"==e._&&"video"!=e.type){this.log("broken video",e);break}let s=document.createElement("div"),n=e.sizes||e.thumbs;n&&n[0].bytes&&i.default.setAttachmentPreview(n[0].bytes,s,!1,!0);let d=()=>i.default.preloadPhoto(e,i.default.choosePhotoSize(e,380,0)).then(e=>{o.$rootScope.selectedPeerID==t?s.style.backgroundImage="url("+URL.createObjectURL(e)+")":this.log.warn("peer changed")});s.setAttribute("message-id",""+a),this.lazyLoadQueueSidebar.push({div:s,load:d}),this.sharedMedia.contentMedia.append(s);break}case"inputMessagesFilterDocument":{if(!r.media.document)break;let e=r.media.document;if(e.attributes&&e.attributes.find(e=>"documentAttributeSticker"==e._))break;let t=s.wrapDocument(r.media.document,!0);this.sharedMedia.contentDocuments.append(t);break}}}),this.onSidebarScroll()):this.log.warn("peer changed")}).then(()=>{this.loadSidebarMediaPromises[e]=null})})}fillProfileElements(){let e=o.$rootScope.selectedPeerID;this.profileContentEl.parentElement.scrollTop=0,this.profileElements.bio.style.display="none",this.profileElements.phone.style.display="none",this.profileElements.username.style.display="none",this.profileElements.notificationsCheckbox.setAttribute("checked","checked"),this.profileElements.notificationsStatus.innerText="Enabled",Object.keys(this.sharedMedia).forEach(e=>{this.sharedMedia[e].innerHTML=""}),this.sharedMediaTypes.forEach(e=>{this.cleared[e]=!0});let t=(e,t)=>{t.style.display="",t.childElementCount>1&&t.firstElementChild.remove();let a=document.createElement("p");a.innerHTML=e,t.prepend(a)};if(d.default.getPeerUsername(o.$rootScope.selectedPeerID)&&t(d.default.getPeerUsername(o.$rootScope.selectedPeerID),this.profileElements.username),o.$rootScope.selectedPeerID>0){let a=c.default.getUser(o.$rootScope.selectedPeerID);a.phone&&t(a.phone,this.profileElements.phone),l.default.getProfile(o.$rootScope.selectedPeerID,!0).then(a=>{o.$rootScope.selectedPeerID==e?(a.rAbout&&t(a.rAbout,this.profileElements.bio),this.log("userFull",a),a.pinned_msg_id&&(m.default.pinnedMsgID=a.pinned_msg_id,n.default.wrapSingleMessage(a.pinned_msg_id))):this.log.warn("peer changed")})}else{let a=d.default.getPeer(o.$rootScope.selectedPeerID);l.default.getChatFull(a.id).then(a=>{o.$rootScope.selectedPeerID==e?(this.log("chatInfo res 2:",a),a.about&&t(p.RichTextProcessor.wrapRichText(a.about),this.profileElements.bio)):this.log.warn("peer changed")})}let a=n.default.getDialogByPeerID(o.$rootScope.selectedPeerID);if(a.length){let e=!1;if((a=a[0]).notify_settings&&a.notify_settings.mute_until&&(e=new Date(1e3*a.notify_settings.mute_until)>new Date)&&(this.profileElements.notificationsCheckbox.removeAttribute("checked"),this.profileElements.notificationsStatus.innerText="Disabled"),o.$rootScope.selectedPeerID<0){d.default.isChannel(o.$rootScope.selectedPeerID)&&!d.default.isMegagroup(o.$rootScope.selectedPeerID)?(m.default.btnMute.classList.remove("tgico-mute","tgico-unmute"),m.default.btnMute.classList.add(e?"tgico-unmute":"tgico-mute"),m.default.btnMute.style.display=""):m.default.btnMute.style.display="none"}else m.default.btnMute.style.display="none"}this.loadSidebarMedia()}}},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t.default=e,t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const n=a(4),i=a(0),d=a(68),c=s(a(11)),l=a(3),p=a(1),h=o(a(14)),m=o(a(7)),g=o(a(30)),y=o(a(15));t.default=()=>Promise.resolve().then(()=>s(a(69))).then(e=>{console.log("included services",e);let{appImManager:t,appMessagesManager:a,appDialogsManager:s,apiUpdatesManager:o,appUsersManager:u}=e,_=document.getElementById("chats-container"),f=document.createElement("div");f.classList.add("preloader"),n.putPreloader(f),_.append(f);let b=document.body.getElementsByClassName("page-chats")[0];b.style.display="";const x=Math.round(document.body.scrollHeight/70*1.5);let D=n.scrollable(_),v=n.scrollable(document.body.querySelector(".profile-container")),w=n.scrollable(document.getElementById("bubbles"));o.attach();let P,k=0,S=()=>r(void 0,void 0,void 0,(function*(){if(P)return P;_.append(f);try{P=a.getConversations("",k,x);let e=yield P;console.log("loaded "+x+" dialogs by offset:",k,e),e&&e.dialogs&&e.dialogs.length&&(k=e.dialogs[e.dialogs.length-1].index,e.dialogs.forEach(e=>{s.addDialog(e)}))}catch(e){console.error(e)}f.remove(),P=void 0})),C=()=>{if(!P){let e=Array.from(s.chatList.childNodes).slice(-5);for(let t of e)if(i.isElementInViewport(t)){S();break}}};D.onscroll=C,window.addEventListener("resize",()=>{setTimeout(C,0)}),document.addEventListener("user_update",e=>{let r=e.detail,o=u.getUser(r),n=a.getDialogByPeerID(o.id)[0];if(n&&!u.isBot(n.peerID)&&n.peerID!=t.myID){let e="userStatusOnline"==o.status._,t=s.getDialogDom(n.peerID);t&&(e?t.avatarDiv.classList.add("is-online"):t.avatarDiv.classList.remove("is-online"))}t.peerID==o.id&&t.setPeerStatus()}),document.addEventListener("history_multiappend",e=>{s.sortDom()}),document.addEventListener("dialog_top",e=>{let t=e.detail;s.setLastMessage(t),s.sortDom()}),document.addEventListener("history_delete",e=>{let a=e.detail;t.deleteMessagesByIDs(Object.keys(a.msgs).map(e=>+e))}),document.addEventListener("dialogs_multiupdate",e=>{let t=e.detail;for(let e in t){let a=t[e];console.log("updating dialog:",a),a.peerID in s.doms?s.setLastMessage(a):s.addDialog(a)}s.sortDom()}),document.addEventListener("dialog_unread",e=>{let r=e.detail,o=a.getDialogByPeerID(r.peerID)[0];o&&(s.setUnreadMessages(o),o.peerID==t.peerID&&t.updateUnreadByDialog(o))});let F=document.getElementById("input-message");F.addEventListener("keydown",(function(e){if("Enter"==e.key){if(e.shiftKey)return;A()}})),F.addEventListener("input",(function(e){this.innerText.trim()||M(Array.from(F.childNodes)).trim()?B.classList.contains("tgico-send")||(B.classList.add("tgico-send"),B.classList.remove("tgico-microphone2")):(this.innerHTML="",B.classList.remove("tgico-send"),B.classList.add("tgico-microphone2"))}));let M=e=>e.reduce((e,t)=>"object"==typeof t&&t.textContent?e+t.textContent:t.innerText?e+t.innerText:"IMG"==t.tagName&&t.classList&&t.classList.contains("emoji")?e+t.getAttribute("emoji"):e,"");F.addEventListener("copy",(function(e){const t=document.getSelection();let a=t.getRangeAt(0),r=a.commonAncestorContainer,s="",o=Array.from(r.childNodes).slice(a.startOffset,a.endOffset);s=o.length?M(o):t.toString(),console.log("messageInput copy",s,r.childNodes,a),event.clipboardData.setData("text/plain",s),event.preventDefault()})),F.addEventListener("paste",(function(e){e.preventDefault();let t=(e.originalEvent||e).clipboardData.getData("text/plain");t=l.RichTextProcessor.wrapRichText(t),window.document.execCommand("insertHTML",!1,t)}));let E=document.getElementById("input-file");E.addEventListener("change",e=>{var r=e.target.files[0];r&&(console.log("selected file:",r,typeof r),E.value="",a.sendFile(t.peerID,r,{isMedia:!0}))},!1),b.querySelector("#attach-file").addEventListener("click",()=>{E.click()});let I=document.getElementsByClassName("input-message-container")[0],A=(n.scrollable(I),()=>{let e=M(Array.from(F.childNodes));t.scroll.scrollTop=t.scroll.scrollHeight,a.sendText(t.peerID,e),F.innerText="",B.classList.remove("tgico-send"),B.classList.add("tgico-microphone2")}),B=document.getElementById("btn-send");B.addEventListener("click",()=>{B.classList.contains("tgico-send")&&A()}),fetch("assets/img/camomile.jpg").then(e=>e.blob()).then(e=>{let t=new Image,a=URL.createObjectURL(e);t.src=a,t.onload=()=>{let e="chat-background-canvas";var r=document.getElementById(e);URL.revokeObjectURL(a),d.stackBlurImage(t,e,15,0),r.toBlob(e=>{let t=URL.createObjectURL(e);[".chat-container"].forEach(e=>{document.querySelector(e).style.backgroundImage="url("+t+")"})},"image/jpeg",1)}});let T=null,L=0,U=b.querySelector(".toggle-emoticons"),O=null;U.onmouseover=e=>{clearTimeout(L),L=setTimeout(()=>{if(T)T.classList.add("active"),O.check();else{let e=((e,t,a,s,o,d)=>{let y=e.querySelector(".emoji-dropdown");y.classList.add("active");let u=new n.LazyLoadQueue,_=e.querySelector(".emoji-container .tabs-container"),f=e.querySelector(".emoji-dropdown .emoji-tabs");n.horizontalMenu(f,_,e=>{h.default.checkAnimations(!0,"emoticons-dropdown"),1==e&&D&&D()},()=>{h.default.checkAnimations(!1,"emoticons-dropdown"),u.check()}),f.children[0].click();let b=(e,t,a)=>{e.addEventListener("click",(function(e){let r=e.target;r=i.findUpTag(r,"LI");let s=i.whichChild(r),o=t[s-1]||0;a.scrollTop=o}))},x=(e,t,a,r)=>{r.scroll();let s=r.scrollTop;for(let r=0;rr[e].sort()),e.pop(),delete r["Skin Tones"],console.time("emojiParse");for(let e in r){let a=document.createElement("div");a.classList.add("emoji-category"),r[e].forEach(e=>{let t=e.unified,r=document.createElement("span"),s=l.RichTextProcessor.wrapRichText(t);s.includes("emoji")?(r.innerHTML=s,a.appendChild(r)):console.log(e,t,s,r,t.length,(new TextEncoder).encode(t))}),t[e]=a}console.timeEnd("emojiParse");let o=[0],i=document.getElementById("content-emoji");e.forEach(e=>{let a=t[e];a||console.error("no div by category:",e),i.append(a),o.push((o[o.length-1]||0)+a.scrollHeight)}),i.addEventListener("click",(function(e){let t=e.target;if("SPAN"!=t.tagName||t.classList.contains("emoji")){if("DIV"==t.tagName)return}else t=t.firstElementChild;s.innerHTML+=t.outerHTML,d.classList.add("tgico-send"),d.classList.remove("tgico-microphone2")}));let p=1,h=i.nextElementSibling,m=n.scrollable(i);m.onscroll=e=>{p=x(h,o,p,m)},b(h,o,m)}let D=()=>{let e=document.getElementById("content-stickers"),s=e.nextElementSibling,d=s.firstElementChild,c=(n.scrollable(s,!0,!1),document.createElement("div"));c.classList.add("stickers-categories"),e.append(c),c.addEventListener("mouseover",e=>{let t=e.target;if("CANVAS"==t.tagName){let e=h.default.getAnimation(t.parentElement,"emoticons-dropdown");e&&(e.currentFrame==e.totalFrames-1?e.goToAndPlay(0,!0):e.play())}}),c.addEventListener("click",e=>{let r=e.target,s=(r=i.findUpTag(r,"DIV")).getAttribute("file-id"),n=g.default.getSticker(s);n?(a.sendFile(t.peerID,n,{isMedia:!0}),y.classList.remove("active"),o.classList.remove("active")):console.warn("got no sticker by id:",s)});let l=[],_=(e,t,a)=>{t.forEach(t=>{let a=document.createElement("div");n.wrapSticker(t,a,void 0,u,"emoticons-dropdown",!0),e.append(a)}),setTimeout(()=>u.check(),0),l.length=0,Array.from(c.children).forEach((e,t)=>{l[t]=(l[t-1]||0)+e.scrollHeight})};p.MTProto.apiManager.invokeApi("messages.getRecentStickers",{flags:0,hash:0}).then(e=>{let t=e,a=document.createElement("div");a.classList.add("sticker-category"),c.prepend(a),_(a,t.stickers)}),p.MTProto.apiManager.invokeApi("messages.getAllStickers",{hash:0}).then(e=>{e.sets.forEach(e=>r(void 0,void 0,void 0,(function*(){let t=document.createElement("div");t.classList.add("sticker-category");let a=document.createElement("li");a.classList.add("btn-icon"),d.append(a),c.append(t);let s=yield g.default.getStickerSet(e);if(s.set.thumb){let e=s.set.thumb;g.default.getStickerSetThumb(s.set).then(t=>r(void 0,void 0,void 0,(function*(){if(1==e.w&&1==e.h){const e=new FileReader;e.addEventListener("loadend",e=>r(void 0,void 0,void 0,(function*(){const t=e.srcElement.result;let r=yield m.default.gzipUncompress(t,!0);yield h.default.loadAnimation({container:a,loop:!0,autoplay:!1,animationData:JSON.parse(r)},"emoticons-dropdown")}))),e.readAsArrayBuffer(t)}else{let e=new Image;e.src=URL.createObjectURL(t),a.append(e)}})))}else n.wrapSticker(s.documents[0],a,void 0,void 0,"emoticons-dropdown");_(t,s.documents)})))});let f=0,v=n.scrollable(e);v.onscroll=e=>{u.check(),h.default.checkAnimations(),f=x(d,l,f,v)},b(d,l,v),D=null};return{dropdown:y,lazyLoadQueue:u}})(b,t,a,F,U,B);T=e.dropdown,O=e.lazyLoadQueue,U.onmouseout=T.onmouseout=e=>{clearTimeout(L),L=setTimeout(()=>{T.classList.remove("active"),U.classList.remove("active"),h.default.checkAnimations(!0,"emoticons-dropdown")},200)},T.onmouseover=e=>{clearTimeout(L)}}U.classList.add("active"),h.default.checkAnimations(!1,"emoticons-dropdown")},0)},S().then(e=>{C(),t.setScroll(w),y.default.setScroll(v)})})},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(a(62)),o=r(a(27));class n{constructor(){this.sslSubdomains=["pluto","venus","aurora","vesta","flora"],this.dcOptions=Config.Modes.test?[{id:1,host:"149.154.175.10",port:80},{id:2,host:"149.154.167.40",port:80},{id:3,host:"149.154.175.117",port:80}]:[{id:1,host:"149.154.175.50",port:80},{id:2,host:"149.154.167.50",port:80},{id:3,host:"149.154.175.100",port:80},{id:4,host:"149.154.167.91",port:80},{id:5,host:"149.154.171.5",port:80}],this.chosenServers={websocket:{},https:{},http:{}},this.chosenUploadServers={websocket:{},https:{},http:{}}}chooseServer(e,t,a="websocket"){let r=t&&("websocket"!=a||Config.Modes.multipleConnections)?this.chosenUploadServers[a]:this.chosenServers[a];if(!(e in r)){let n="";if("websocket"==a){return n="wss://"+this.sslSubdomains[e-1]+".web.telegram.org/"+(Config.Modes.test?"apiws_test":"apiws"),r[e]=new s.default(e,n)}if(Config.Modes.ssl||!Config.Modes.http||"https"==a){return n="https://"+(this.sslSubdomains[e-1]+(t?"-1":""))+".web.telegram.org/"+(Config.Modes.test?"apiw_test1":"apiw1"),r[e]=new o.default(e,n)}for(let t of this.dcOptions)if(t.id==e)return n="http://"+t.host+(80!=t.port?":"+t.port:"")+"/apiw1",r[e]=new o.default(e,n);return console.error("No chosenServer!",e),null}return r[e]}}t.DcConfigurator=n,t.default=new n},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=a(0),o=r(a(31)),n=r(a(13)),i=r(a(10)),d=a(1),c=r(a(5)),l=a(3),p=r(a(8)),h=r(a(32)),m=r(a(6));class g{constructor(){this.botInfos={},this.usersFull={},this.chatsFull={},this.chatFullPromises={},this.chatParticipantsPromises={},s.$rootScope.$on("apiUpdate",e=>{let t=e.detail;switch(t._){case"updateChatParticipants":var a=t.participants;void 0!==(i=this.chatsFull[a.id])&&(i.participants=t.participants,s.$rootScope.$broadcast("chat_full_update",t.chat_id));break;case"updateChatParticipantAdd":if(void 0!==(i=this.chatsFull[t.chat_id])){for(var r=0,n=(a=i.participants.participants||[]).length;r{let t=e.detail;var a=this.chatsFull[t],r=n.default.getChat(t);if(r.photo&&a){var o="chatPhotoEmpty"==r.photo._;if(console.log("chat_update:",a),a.chat_photo&&o!=("photoEmpty"==a.chat_photo._))return delete this.chatsFull[t],void s.$rootScope.$broadcast("chat_full_update",t);if(!o){var d=r.photo.photo_small,c=i.default.choosePhotoSize(a.chat_photo,0,0);JSON.stringify(d)!==JSON.stringify(c.location)&&(delete this.chatsFull[t],s.$rootScope.$broadcast("chat_full_update",t))}}})}saveBotInfo(e){var t=e&&e.user_id;if(!t)return!1;var a={};return e.commands.forEach(e=>{a[e.command]=e.description}),this.botInfos[t]={id:t,version:e.version,shareText:e.share_text,description:e.description,commands:a}}getProfile(e,t){return this.usersFull[e]?Promise.resolve(this.usersFull[e]):d.MTProto.apiManager.invokeApi("users.getFullUser",{id:c.default.getUserInput(e)}).then(a=>(t&&t.phone_number?(a.user.phone=t.phone_number,(t.first_name||t.last_name)&&(a.user.first_name=t.first_name,a.user.last_name=t.last_name),c.default.saveApiUser(a.user)):c.default.saveApiUser(a.user,!0),a.profile_photo&&i.default.savePhoto(a.profile_photo,{user_id:e}),void 0!==a.about&&(a.rAbout=l.RichTextProcessor.wrapRichText(a.about,{noLinebreaks:!0})),a.bot_info&&(a.bot_info=this.saveBotInfo(a.bot_info)),this.usersFull[e]=a))}getPeerBots(e){var t=[];return e>=0&&!c.default.isBot(e)||p.default.isChannel(e)&&!p.default.isMegagroup(e)?Promise.resolve(t):e>=0?this.getProfile(e).then(e=>{var a=e.bot_info;return a&&"botInfoEmpty"!=a._&&t.push(a),t}):this.getChatFull(-e).then(e=>(e.bot_info.forEach(e=>{t.push(this.saveBotInfo(e))}),t))}getChatFull(e){if(n.default.isChannel(e))return this.getChannelFull(e);if(void 0!==this.chatsFull[e]){var t=n.default.getChat(e);if(t.version==this.chatsFull[e].participants.version||t.pFlags.left)return Promise.resolve(this.chatsFull[e])}return void 0!==this.chatFullPromises[e]?this.chatFullPromises[e]:this.chatFullPromises[e]=d.MTProto.apiManager.invokeApi("messages.getFullChat",{chat_id:n.default.getChatInput(e)}).then(t=>{n.default.saveApiChats(t.chats),c.default.saveApiUsers(t.users);var a=t.full_chat;return a&&a.chat_photo&&a.chat_photo.id&&i.default.savePhoto(a.chat_photo),delete this.chatFullPromises[e],this.chatsFull[e]=a,s.$rootScope.$broadcast("chat_full_update",e),a})}getChatInviteLink(e,t){return this.getChatFull(e).then(a=>{return!t&&a.exported_invite&&"chatInviteExported"==a.exported_invite._?a.exported_invite.link:(n.default.isChannel(e)?d.MTProto.apiManager.invokeApi("channels.exportInvite",{channel:n.default.getChannelInput(e)}):d.MTProto.apiManager.invokeApi("messages.exportChatInvite",{chat_id:n.default.getChatInput(e)})).then(t=>(void 0!==this.chatsFull[e]&&(this.chatsFull[e].exported_invite=t),t.link))})}getChannelParticipants(e,t,a,r){a=a||200,r=r||0;var o=[e,(t=t||{_:"channelParticipantsRecent"})._,r,a].join("_"),i=this.chatParticipantsPromises[o];if("channelParticipantsRecent"==t._){var l=n.default.getChat(e);if(l&&l.pFlags&&(l.pFlags.kicked||l.pFlags.broadcast&&!l.pFlags.creator&&!l.admin_rights))return Promise.reject()}var p=s=>{var o=0;if(s){var i=[];s.forEach(e=>{i.push(e.user_id)}),i.sort(),i.forEach(e=>{o=(20261*o+2147483648+e)%2147483648})}return d.MTProto.apiManager.invokeApi("channels.getParticipants",{channel:n.default.getChannelInput(e),filter:t,offset:r,limit:a,hash:o}).then(e=>"channels.channelParticipantsNotModified"==e._?s:(c.default.saveApiUsers(e.users),e.participants))},h=a=>{var o=n.default.getChat(e);if("channelParticipantsRecent"==t._&&!r&&!o.pFlags.kicked&&!o.pFlags.left){a=s.copy(a);for(var i,d=c.default.getSelf().id,l=!1,p=0,h=a.length;pm-6e4)return g;let e=g.then(e=>p(e).then(h));return this.chatParticipantsPromises[o]=[m,e],e}var y=p().then(h);return this.chatParticipantsPromises[o]=[m,y],y}getChannelFull(e,t){return void 0===this.chatsFull[e]||t?void 0!==this.chatFullPromises[e]?this.chatFullPromises[e]:this.chatFullPromises[e]=d.MTProto.apiManager.invokeApi("channels.getFullChannel",{channel:n.default.getChannelInput(e)}).then(t=>{n.default.saveApiChats(t.chats),c.default.saveApiUsers(t.users);var a=t.full_chat;return a&&a.chat_photo.id&&i.default.savePhoto(a.chat_photo),a.pinned_msg_id&&(a.pinned_msg_id=o.default.getFullMessageID(a.pinned_msg_id,e)),delete this.chatFullPromises[e],this.chatsFull[e]=a,s.$rootScope.$broadcast("chat_full_update",e),a},t=>{switch(t.type){case"CHANNEL_PRIVATE":var a=n.default.getChat(e);a={_:"channelForbidden",access_hash:a.access_hash,title:a.title},h.default.processUpdateMessage({_:"updates",updates:[{_:"updateChannel",channel_id:e}],chats:[a],users:[]})}return Promise.reject(t)}):Promise.resolve(this.chatsFull[e])}invalidateChannelParticipants(e){delete this.chatsFull[e],delete this.chatFullPromises[e];for(let t in this.chatParticipantsPromises)+t.split("_")[0]==e&&delete this.chatParticipantsPromises[t];s.$rootScope.$broadcast("chat_full_update",e)}getChannelPinnedMessage(e){return this.getChannelFull(e).then(t=>{var a=t&&t.pinned_msg_id;return!!a&&m.default.get("pinned_hidden"+e).then(e=>o.default.getMessageLocalID(a)!=e&&a)})}hideChannelPinnedMessage(e,t){var a={};a["pinned_hidden"+e]=o.default.getMessageLocalID(t),m.default.set(a),s.$rootScope.$broadcast("peer_pinned_message",-e)}}t.AppProfileManager=g,t.default=new g},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=a(1),n=a(0),i=s(a(33)),d=s(a(8)),c=s(a(12)),l=s(a(5)),p=s(a(15)),h=a(3),m=a(4);class g{constructor(){this.pinnedChatList=document.getElementById("dialogs-pinned"),this.chatList=document.getElementById("dialogs"),this.topbar=null,this.chatInput=null,this.myID=0,this.doms={},o.MTProto.apiManager.getUserID().then(e=>{this.myID=e}),n.$rootScope.$on("user_auth",e=>{let t=e.detail;this.myID=t?t.id:0}),this.topbar=document.getElementById("topbar"),this.chatInput=document.getElementById("chat-input"),this.setListClickListener(this.pinnedChatList),this.setListClickListener(this.chatList)}setListClickListener(e,t){e.addEventListener("click",e=>{let a=e.target,r="LI"!=a.tagName?n.findUpTag(a,"LI"):a;if(r){this.topbar.style.display=this.chatInput.style.display="",t&&t();let e=+r.getAttribute("data-peerID"),a=+r.getAttribute("data-mid");i.default.setPeer(e,a)}else p.default.toggleSidebar(!1),this.topbar.style.display=this.chatInput.style.display="none"})}loadDialogPhoto(e,t,a=!1){return r(this,void 0,void 0,(function*(){let r,s;if("string"!=typeof t&&(r=d.default.getInputPeerByID(t),s=d.default.getPeerPhoto(t)),t==this.myID&&(a||n.$rootScope.selectedPeerID==this.myID))return e.firstChild&&e.firstChild.remove(),e.style.fontSize="",e.classList.add("tgico-savedmessages"),!0;e.firstChild&&e.firstChild.remove(),e.classList.remove("tgico-savedmessages"),e.style.fontSize="";let i=("string"!=typeof t?d.default.getPeerTitle(t):t).split(" "),c=(2==i.length?i[0][0]+i[1][0]:i[0][0]).toUpperCase();if(e.innerText=c.toUpperCase(),!s||s.empty||!s.photo_small)return!0;let l=yield o.MTProto.apiFileManager.downloadSmallFile({_:"inputPeerPhotoFileLocation",dc_id:s.dc_id,flags:0,peer:r,volume_id:s.photo_small.volume_id,local_id:s.photo_small.local_id}),p=new Image;return p.src=URL.createObjectURL(l),e.innerHTML="",e.style.fontSize="0",e.append(p),!0}))}sortDom(){c.default.dialogsStorage.dialogs.filter(e=>!e.pFlags.pinned).sort((e,t)=>{let a=c.default.getMessage(e.top_message).date;return c.default.getMessage(t.top_message).date-a}).forEach(e=>{let t=this.getDialogDom(e.peerID);t&&this.chatList.append(t.listEl)})}setLastMessage(e,t,a){if(t||(t=c.default.getMessage(e.top_message)),"messageEmpty"==t._)return;a||(a=this.getDialogDom(e.peerID));let r=e.peer,s=e.peerID;{let e="";if(t.media)switch(t.media._){case"messageMediaPhoto":e+="Photo"+(t.message?", ":"")+"";break;case"messageMediaDocument":let a=t.media.document,r=!1;for(let t of a.attributes){if(r)break;switch(t._){case"documentAttributeSticker":e+=h.RichTextProcessor.wrapRichText(t.alt)+"Sticker",r=!0;break;case"documentAttributeFilename":e+=""+t.file_name+"",r=!0}}if("video"==a.type?(e+="Video",r=!0):"voice"==a.type&&(e+="Voice message",r=!0),r)break;default:console.warn("Got unknown lastMessage.media type!",t)}if(a.lastMessageSpan.innerHTML=e+(t.message?h.RichTextProcessor.wrapRichText(t.message.replace(/\n/g," "),{noLinebreakers:!0}):""),"peerUser"!=r._&&s!=-t.from_id){let e=l.default.getUser(t.from_id);if(e&&e.id){let t=document.createElement("b");t.innerText=(e.first_name||e.last_name||e.username)+": ",a.lastMessageSpan.prepend(t)}else console.log("no sender",t,s)}}let o="",n=t.date,i=Date.now()/1e3,d=new Date(1e3*t.date);if(i-n<86400)o=("0"+d.getHours()).slice(-2)+":"+("0"+d.getMinutes()).slice(-2);else if(i-n<604800){o=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][new Date(1e3*n).getDay()]}else{o=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][d.getMonth()]+" "+("0"+d.getDate()).slice(-2)}a.lastTimeSpan.innerHTML=o,a.listEl.setAttribute("data-mid",t.mid),this.doms[s]&&this.setUnreadMessages(e)}setUnreadMessages(e){let t=this.getDialogDom(e.peerID);228260936==e.peerID&&console.log("dialog setUnreadMessages",e),t.statusSpan.innerHTML="";let a=c.default.getMessage(e.top_message);if("messageEmpty"!=a._&&a.from_id==this.myID&&a.peerID!=this.myID&&e.read_outbox_max_id){let e=a.pFlags&&a.pFlags.unread;console.log("outgoing",e,a),e?(t.statusSpan.classList.remove("tgico-checks"),t.statusSpan.classList.add("tgico-check")):(t.statusSpan.classList.remove("tgico-check"),t.statusSpan.classList.add("tgico-checks"))}else t.statusSpan.classList.remove("tgico-check","tgico-checks");t.unreadMessagesSpan.innerHTML="",e.unread_count?(t.unreadMessagesSpan.innerHTML=e.unread_count,t.unreadMessagesSpan.classList.remove("tgico-pinnedchat"),t.unreadMessagesSpan.classList.add(new Date(1e3*e.notify_settings.mute_until)>new Date?"unread-muted":"unread")):e.pFlags.pinned&&(t.unreadMessagesSpan.classList.remove("unread","unread-muted"),t.unreadMessagesSpan.classList.add("tgico-pinnedchat"))}getDialogDom(e){return this.doms[e]}addDialog(e,t,a=!0){let r=e.peerID;if(r in this.doms&&!t)return;let s=d.default.getPeerTitle(r),o=document.createElement("div");if(o.classList.add("user-avatar"),a&&r!=this.myID){switch(e.peer._){case"peerUser":let e=l.default.getUser(r);e.status&&"userStatusOnline"==e.status._&&o.classList.add("is-online")}}let n=document.createElement("div");n.classList.add("user-caption");let i=document.createElement("span");i.classList.add("user-title"),r==this.myID&&(s="Saved Messages"),this.loadDialogPhoto(o,e.peerID,!0),i.innerText=s;let c=document.createElement("span");c.classList.add("user-last-message");let p=document.createElement("li");p.classList.add("rp"),p.append(o,n),p.setAttribute("data-peerID",""+r),m.ripple(p);let h=document.createElement("span");h.classList.add("message-status");let g=document.createElement("span");g.classList.add("message-time");let y=document.createElement("span"),u=document.createElement("p"),_=document.createElement("span");_.append(h,g),u.append(i,_);let f=document.createElement("p");f.append(c,y),n.append(u,f);let b={avatarDiv:o,captionDiv:n,titleSpan:i,statusSpan:h,lastTimeSpan:g,unreadMessagesSpan:y,lastMessageSpan:c,listEl:p};return t?t.append(p):((e.pFlags.pinned?this.pinnedChatList:this.chatList).append(p),this.doms[e.peerID]=b,this.setLastMessage(e)),{dom:b,dialog:e}}setTyping(e,t){let a=this.getDialogDom(e.peerID),r="",s=document.createElement("i");e.peerID<0&&(r=(t.first_name||t.last_name||t.username)+" "),r+="typing...",s.innerText=r,a.lastMessageSpan.innerHTML="",a.lastMessageSpan.append(s),a.lastMessageSpan.classList.add("user-typing")}unsetTyping(e){let t=this.getDialogDom(e.peerID);t.lastMessageSpan.classList.remove("user-typing"),this.setLastMessage(e,null,t)}}t.AppDialogsManager=g,t.default=new g},,,function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const n=s(a(6)),i=a(2),d=s(a(24)),c=a(1),l=s(a(36)),p=a(0),h=o(a(11)),m=s(a(17)),g=s(a(27)),y=a(9);class u{constructor(){this.cachedNetworkers={},this.cachedUploadNetworkers={},this.cachedExportPromise={},this.gettingNetworkers={},this.baseDcID=0,this.telegramMeNotified=!1,this.log=y.logger("API")}telegramMeNotify(e){this.telegramMeNotified!==e&&(this.telegramMeNotified=e,c.telegramMeWebService.setAuthorized(this.telegramMeNotified))}setUserAuth(e){var t=Object.assign({dcID:this.baseDcID},e);n.default.set({dc:this.baseDcID,user_auth:t}),this.telegramMeNotify(!0),p.$rootScope.$broadcast("user_auth",t)}logOut(){return r(this,void 0,void 0,(function*(){let e=[],t=h.Modes.test?"t_dc":"dc";for(let a=1;a<=5;a++)e.push(t+a+"_auth_key");let a=yield n.default.get(e),r=[];for(let e=0;e(n.default.remove("dc","user_auth"),this.baseDcID=0,this.telegramMeNotify(!1),this.mtpClearStorage()),t=>(e.push("dc","user_auth"),n.default.remove(e),this.baseDcID=0,t.handled=!0,this.telegramMeNotify(!1),this.mtpClearStorage()))}))}mtpClearStorage(){for(var e=["user_auth","t_user_auth","dc","t_dc"],t=1;t<=5;t++)e.push("dc"+t+"_auth_key"),e.push("dc"+t+"_auth_keyID"),e.push("dc"+t+"_server_salt"),e.push("t_dc"+t+"_auth_key"),e.push("t_dc"+t+"_auth_keyID"),e.push("t_dc"+t+"_server_salt");n.default.noPrefix(),n.default.get(e).then(t=>{n.default.clear().then(()=>{var a={};return e.forEach((e,r)=>{var s=t[r];!1!==s&&void 0!==s&&(a[e]=s)}),n.default.noPrefix(),n.default.set(a)})})}getNetworker(e,t={}){return r(this,void 0,void 0,(function*(){let a=(t.fileUpload||t.fileDownload)&&(m.default.chooseServer(e,!0)instanceof g.default||h.Modes.multipleConnections),s=a?this.cachedUploadNetworkers:this.cachedNetworkers;if(!e)throw new Error("get Networker without dcID");if(void 0!==s[e])return s[e];let o=e+"-"+ +a;return this.gettingNetworkers[o]?this.gettingNetworkers[o]:this.gettingNetworkers[o]=new Promise((a,c)=>r(this,void 0,void 0,(function*(){var r="dc"+e+"_auth_key",p="dc"+e+"_auth_keyID",h="dc"+e+"_server_salt";let m=yield n.default.get([r,p,h]),[g,y,u]=m;if(g&&!y&&u&&(this.log.warn("Updating to new version (+akID)"),yield n.default.remove(r,p,h),g=u=""),g&&512==g.length){u&&16==u.length||(u="AAAAAAAAAAAAAAAA");var _=i.bytesFromHex(g),f=new Uint8Array(i.bytesFromHex(y)),b=i.bytesFromHex(u);a(s[e]=d.default.getNetworker(e,_,f,b,t))}else try{let o=yield l.default.auth(e),c={[r]:i.bytesToHex(o.authKey),[p]:o.authKeyID.hex,[h]:i.bytesToHex(o.serverSalt)};n.default.set(c),a(s[e]=d.default.getNetworker(e,o.authKey,o.authKeyID,o.serverSalt,t))}catch(e){this.log("Get networker error",e,e.stack),c(e)}delete this.gettingNetworkers[o]})))}))}invokeApi(e,t={},a={}){return this.log("Invoke api",e,t,a),new Promise((r,s)=>{let o=t=>{t?p.isObject(t)||(t={message:t}):t={type:"ERROR_EMPTY"},s(t),a.ignoreErrors||(406==t.code&&(t.handled=!0),a.noErrorBox||(t.input=e,t.stack=c||t.originalError&&t.originalError.stack||t.stack||(new Error).stack,setTimeout(()=>{t.handled||(401==t.code&&this.logOut().finally(()=>{"http:"!=location.protocol||h.Modes.http||-1==h.App.domains.indexOf(location.hostname)?location.hash="/login":location.href=location.href.replace(/^http:/,"https:")}),t.handled=!0)},100)))};var i,d,c=(new Error).stack||"empty stack",l=s=>(d=s).wrapApiCall(e,t,a).then(r,c=>{if(this.log.error("Error",c.code,c.type,this.baseDcID,i),401==c.code&&this.baseDcID==i)n.default.remove("dc","user_auth"),this.telegramMeNotify(!1),o(c);else if(401==c.code&&this.baseDcID&&i!=this.baseDcID){if(void 0===this.cachedExportPromise[i]){let e=new Promise((e,t)=>{this.invokeApi("auth.exportAuthorization",{dc_id:i},{noErrorBox:!0}).then(a=>{this.invokeApi("auth.importAuthorization",{id:a.id,bytes:a.bytes},{dcID:i,noErrorBox:!0}).then(e,t)},t)});this.cachedExportPromise[i]=e}this.cachedExportPromise[i].then(()=>{(d=s).wrapApiCall(e,t,a).then(r,o)},o)}else if(303==c.code){var h=c.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2];h!=i&&(a.dcID?a.dcID=h:n.default.set({dc:this.baseDcID=h}),this.getNetworker(h,a).then(s=>{s.wrapApiCall(e,t,a).then(r,o)},o))}else if(a.rawError||420!=c.code)if(a.rawError||500!=c.code&&"MSG_WAIT_FAILED"!=c.type)o(c);else{var m=p.tsNow();if(a.stopTime){if(m>=a.stopTime)return o(c)}else a.stopTime=m+1e3*(void 0!==a.timeout?a.timeout:10);a.waitTime=a.waitTime?Math.min(60,1.5*a.waitTime):1,setTimeout(()=>{l(d)},1e3*a.waitTime)}else{var g=c.type.match(/^FLOOD_WAIT_(\d+)/)[1]||10;if(g>(a.timeout||60))return o(c);setTimeout(()=>{l(d)},1e3*(g+5))}});(i=a.dcID||this.baseDcID)?this.getNetworker(i,a).then(l,o):n.default.get("dc").then(e=>{this.getNetworker(this.baseDcID=i=e||h.App.baseDcID,a).then(l,o)})})}getUserID(){return n.default.get("user_auth").then(e=>(this.telegramMeNotify(e&&e.id>0||!1),e.id||0))}}t.ApiManager=u,t.default=new u},,function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=a(0),s=a(60);class o{constructor(){this.updatesProcessor=null,this.offlineInited=!1,this.akStopped=!1}startAll(){this.akStopped&&(this.akStopped=!1,this.updatesProcessor&&this.updatesProcessor({_:"new_session_created"},!0))}stopAll(){this.akStopped=!0}setUpdatesProcessor(e){this.updatesProcessor=e}getNetworker(e,t,a,o,n){return console.log(r.dT(),"NetworkerFactory: creating new instance of MTPNetworker:",e,n),new s.MTPNetworker(e,t,a,o,n)}}t.NetworkerFactory=o,t.default=new o},function(e,t,a){"use strict"; +/*! + * Webogram v0.7.0 - messaging web application for MTProto + * https://github.com/zhukov/webogram + * Copyright (C) 2014 Igor Zhukov + * https://github.com/zhukov/webogram/blob/master/LICENSE + */var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const s=a(2),o=a(0),n=r(a(11));t.TLSerialization=class{constructor(e={}){this.maxLength=2048,this.offset=0,this.mtproto=!1,this.debug=!1,this.maxLength=e.startMaxLength||2048,this.mtproto=e.mtproto||!1,this.createBuffer()}createBuffer(){this.buffer=new ArrayBuffer(this.maxLength),this.intView=new Int32Array(this.buffer),this.byteView=new Uint8Array(this.buffer)}getArray(){let e=new ArrayBuffer(this.offset),t=new Int32Array(e);return t.set(this.intView.subarray(0,this.offset/4)),t}getBuffer(){return this.getArray().buffer}getBytes(e){if(e){let e=new ArrayBuffer(this.offset),t=new Uint8Array(e);return t.set(this.byteView.subarray(0,this.offset)),t}let t=[];for(var a=0;a>>",e.toString(16),e,t),this.checkLength(4),this.intView[this.offset/4]=e,this.offset+=4}storeInt(e,t){this.writeInt(e,(t||"")+":int")}storeBool(e,t){e?this.writeInt(2574415285,(t||"")+":bool"):this.writeInt(3162085175,(t||"")+":bool")}storeLongP(e,t,a){this.writeInt(t,(a||"")+":long[low]"),this.writeInt(e,(a||"")+":long[high]")}storeLong(e,t){if(Array.isArray(e))return 2==e.length?this.storeLongP(e[0],e[1],t):this.storeIntBytes(e,64,t);"string"!=typeof e&&(e=e?e.toString():"0");var a=s.bigStringInt(e).divideAndRemainder(s.bigint(4294967296));this.writeInt(s.intToUint(a[1].intValue()),(t||"")+":long[low]"),this.writeInt(s.intToUint(a[0].intValue()),(t||"")+":long[high]")}storeDouble(e,t){var a=new ArrayBuffer(8),r=new Int32Array(a);new Float64Array(a)[0]=e,this.writeInt(r[0],(t||"")+":double[low]"),this.writeInt(r[1],(t||"")+":double[high]")}storeString(e,t){this.debug&&console.log(">>>",e,(t||"")+":string"),void 0===e&&(e="");var a=unescape(encodeURIComponent(e));this.checkLength(a.length+8);var r=a.length;r<=253?this.byteView[this.offset++]=r:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&r,this.byteView[this.offset++]=(65280&r)>>8,this.byteView[this.offset++]=(16711680&r)>>16);for(var s=0;s>>",s.bytesToHex(e),(t||"")+":bytes");var a=e.byteLength||e.length;for(this.checkLength(a+8),a<=253?this.byteView[this.offset++]=a:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&a,this.byteView[this.offset++]=(65280&a)>>8,this.byteView[this.offset++]=(16711680&a)>>16),this.byteView.set(e,this.offset),this.offset+=a;this.offset%4;)this.byteView[this.offset++]=0}storeIntBytes(e,t,a){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var r=e.length;if(t%32||8*r!=t)throw new Error("Invalid bits: "+t+", "+e.length);this.debug&&console.log(">>>",s.bytesToHex(e),(a||"")+":int"+t),this.checkLength(r),this.byteView.set(e,this.offset),this.offset+=r}storeRawBytes(e,t){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var a=e.length;this.debug&&console.log(">>>",s.bytesToHex(e),t||""),this.checkLength(a),this.byteView.set(e,this.offset),this.offset+=a}storeMethod(e,t){var a,r,o,i,d,c=this.mtproto?n.Schema.MTProto:n.Schema.API,l=!1;for(o=0;othis.byteView.byteLength)throw new Error("Invalid raw bytes length: "+e+", buffer len: "+this.byteView.byteLength);if(t){let t=new Uint8Array(e);return t.set(this.byteView.subarray(this.offset,this.offset+e)),this.offset+=e,t}for(var r=[],o=0;o0)for(var c=e.substr(7,e.length-8),l=0;l=97&&e.charAt(0)<=122){for(l=0;l{e&&(this.timeOffset=e)})}generateID(){var e=o.tsNow(),t=[Math.floor(e/1e3)+this.timeOffset,e%1e3<<21|n.nextRandomInt(65535)<<3|4];return(this.lastMessageID[0]>t[0]||this.lastMessageID[0]==t[0]&&this.lastMessageID[1]>=t[1])&&(t=[this.lastMessageID[0],this.lastMessageID[1]+4]),this.lastMessageID=t,n.longFromInts(t[0],t[1])}applyServerTime(e,t){var a=e-Math.floor((t||o.tsNow())/1e3),r=Math.abs(this.timeOffset-a)>10;return s.default.set({server_time_offset:a}),this.lastMessageID=[0,0],this.timeOffset=a,console.log(n.dT(),"Apply server time",e,t,a,r),r}}t.TimeManager=i,t.default=new i},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(a(35)),o=a(2);class n extends s.default{constructor(e,t){super(e,t),this.send=e=>fetch(this.url,{method:"POST",body:e}).then(e=>{if(console.log("http response",e),200!=e.status)throw e.arrayBuffer().then(e=>{console.log("not 200",new TextDecoder("utf-8").decode(new Uint8Array(o.bytesFromArrayBuffer(e))))}),e;return e.arrayBuffer().then(e=>new Uint8Array(o.bytesFromArrayBuffer(e)))})}}t.default=n},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=a(2),n=s(a(66)),i=s(a(29)),d=s(a(22)),c=a(9);class l{constructor(){this.cachedFs=!1,this.cachedFsPromise=!1,this.cachedSavePromises={},this.cachedDownloadPromises={},this.cachedDownloads={},this.downloadPulls={},this.downloadActives={},this.index=0,this.log=c.logger("AFM")}downloadRequest(e,t,a){void 0===this.downloadPulls[e]&&(this.downloadPulls[e]=[],this.downloadActives[e]=0);var r=this.downloadPulls[e];let s=new Promise((e,s)=>{r.push({cb:t,deferred:{resolve:e,reject:s},activeDelta:a})});return setTimeout(()=>{this.downloadCheck(e)},0),s}downloadCheck(e){var t=this.downloadPulls[e],a="upload"==e?11:5;if(this.downloadActives[e]>=a||!t||!t.length)return!1;var r=t.shift(),s=r.activeDelta||1;this.downloadActives[e]+=s,this.index++,r.cb().then(t=>{this.downloadActives[e]-=s,this.downloadCheck(e),r.deferred.resolve(t)},t=>{this.log.error("downloadCheck error:",t),this.downloadActives[e]-=s,this.downloadCheck(e),r.deferred.reject(t)})}getFileName(e){switch(e._){case"inputDocumentFileLocation":var t=(e.file_name||"").split("."),a=t[t.length-1]||"";1==e.stickerType?a+="webp":2==e.stickerType&&(a+="tgs");var r=e.version?"v"+e.version:"";return(t[0]?t[0]+"_":"")+e.id+r+(a?"."+a:a);default:e.volume_id||e.file_reference||this.log.trace("Empty location",e);a="jpg";return 1==e.stickerType?a="webp":2==e.stickerType&&(a+="tgs"),e.volume_id?e.volume_id+"_"+e.local_id+"."+a:e.id+"_"+e.access_hash+"."+a}}getTempFileName(e){var t=e.size||-1;return"_temp"+o.nextRandomInt(4294967295)+"_"+t}getCachedFile(e){if(!e)return!1;var t=this.getFileName(e);return this.cachedDownloads[t]||!1}getFileStorage(){return!Config.Modes.memory_only&&n.default.isAvailable(),n.default}saveSmallFile(e,t){var a=this.getFileName(e);return this.cachedSavePromises[a]||(this.cachedSavePromises[a]=this.getFileStorage().saveFile(a,t).then(e=>this.cachedDownloads[a]=e,e=>{delete this.cachedSavePromises[a]})),this.cachedSavePromises[a]}downloadSmallFile(e,t={}){if(!i.default.isAvailable())return Promise.reject({type:"BROWSER_BLOB_NOT_SUPPORTED"});let a=t.dcID||e.dc_id,r=t.mimeType||"image/jpeg";var s=this.getFileName(e),o=this.cachedSavePromises[s]||this.cachedDownloadPromises[s];if(o)return o;var n=this.getFileStorage();return this.cachedDownloadPromises[s]=n.getFile(s).then(e=>this.cachedDownloads[s]=e,()=>{var t=this.downloadRequest(a,()=>{var t=e;t._&&"fileLocation"!=t._||(t=Object.assign({},e,{_:"inputFileLocation"}));let r={flags:0,location:t,offset:0,limit:1048576};return this.log("next small promise",r),d.default.invokeApi("upload.getFile",r,{dcID:a,fileDownload:!0,noErrorBox:!0})},a);return n.getFileWriter(s,r).then(e=>t.then(t=>(function(e){return Promise.resolve(e)})(t.bytes).then(t=>i.default.write(e,t).then(()=>this.cachedDownloads[s]=e.finalize()))))})}getDownloadedFile(e,t){var a=this.getFileStorage(),r=this.getFileName(e);return a.getFile(r,t)}downloadFile(e,t,a,s={}){return r(this,arguments,void 0,(function*(){if(!i.default.isAvailable())return Promise.reject({type:"BROWSER_BLOB_NOT_SUPPORTED"});var o=this.getFileName(t),n=s.toFileEntry||null,c=this.cachedSavePromises[o]||this.cachedDownloadPromises[o],l=this.getFileStorage();if(this.log("downloadFile",l.name,o,o.length,t,arguments),c){if(n)return c.then(e=>i.default.copy(e,n));if(this.log("downloadFile cachedPromise"),!a)return c;{let e=yield c;if(!(e.size{}},h=new Promise((e,t)=>{p.resolve=e,p.reject=t});Object.assign(h,p);var m,g=!1,y=!1,u=s.mimeType||"image/jpeg",_=e=>{h.reject(e),_=()=>{},!m||e&&"DOWNLOAD_CANCELED"==e.type||m.truncate(0)};return l.getFile(o,a).then(e=>r(this,void 0,void 0,(function*(){if(this.log("is that i wanted"),e.size{h.resolve()},_):h.resolve(this.cachedDownloads[o]=e)}))).catch(()=>{this.log("not i wanted");var r=n?i.default.getFileWriter(n):l.getFileWriter(o,u),c=e=>Promise.resolve(e);r.then(r=>{m=r;var l,p,u=s.limitPart||524288,f=0,b=Promise.resolve();if(r.length){if((f=r.length)>=a)return void(n?h.resolve():h.resolve(this.cachedDownloads[o]=r.finalize()));r.seek(f),h.notify({done:f,total:a}),this.log("deferred notify 1:",{done:f,total:a})}for(l=f;l{s.resolve=e,s.reject=t}),Object.assign(p,s),this.log("offset:",f),((s,l,p,m)=>this.downloadRequest(e,()=>g?Promise.resolve():d.default.invokeApi("upload.getFile",{flags:0,location:t,offset:l,limit:u},{dcID:e,fileDownload:!0,singleInRequest:"safari"in window}),e).then(e=>{m.then(()=>g?Promise.resolve():c(e.bytes).then(e=>i.default.write(r,e).then(()=>{p.resolve()},_).then(()=>{s?(y=!0,n?h.resolve():h.resolve(this.cachedDownloads[o]=r.finalize())):(this.log("deferred notify 2:",{done:l+u,total:a}),h.notify({done:l+u,total:a}))})))}))(l+u>=a,l,p,b),b=p}})}),h.cancel=()=>{g||y||(g=!0,delete this.cachedDownloadPromises[o],_({type:"DOWNLOAD_CANCELED"}))},n||(this.cachedDownloadPromises[o]=h),h}))}deleteFile(e){return e="string"==typeof e?e:this.getFileName(e),this.log("will delete file:",e),delete this.cachedDownloadPromises[e],delete this.cachedDownloads[e],delete this.cachedSavePromises[e],this.getFileStorage().deleteFile(e)}uploadFile(e){var t=e.size,a=t>=10485760,r=!1,s=!1,n=0,i=262144,c=2;t>67108864?(i=524288,c=4):t<102400&&(i=32768,c=1);var l=Math.ceil(t/i),p=[o.nextRandomInt(4294967295),o.nextRandomInt(4294967295)],h=0,m={_:a?"inputFileBig":"inputFile",id:p,parts:l,name:e instanceof File?e.name:"",md5_checksum:""};let g={notify:e=>{}},y=new Promise((e,t)=>{if(l>3e3)return t({type:"FILE_TOO_BIG"});g.resolve=e,g.reject=t});if(Object.assign(y,g),l>3e3)return y;let u=e=>{this.log.error("Up Error",e),y.reject(e),r=!0,u=()=>{}},_=a?"upload.saveBigFilePart":"upload.saveFilePart";for(let o=0;onew Promise((c,h)=>{var f=new FileReader,b=e.slice(o,o+i);f.onloadend=e=>{r?h():e.target.readyState==FileReader.DONE?(this.log("Starting to upload file, isBig:",a,p,g,e.target.result),d.default.invokeApi(_,{file_id:p,file_part:g,file_total_parts:l,bytes:e.target.result},{startMaxLength:i+256,fileUpload:!0,singleInRequest:!0}).then(e=>{n++,c(),this.log("Progress",n*i/t),n>=l?(y.resolve(m),s=!0):y.notify({done:n*i,total:t})},u)):this.log.error("wrong readyState!")},f.readAsArrayBuffer(b)}),c)}return y.cancel=()=>{this.log("cancel upload",r,s),r||s||(r=!0,u({type:"UPLOAD_CANCELED"}))},y}}t.ApiFileManager=l,t.default=new l},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=a(2);t.default=new class{constructor(){this.isSafari="safari"in window,this.safariVersion=parseFloat(this.isSafari&&(navigator.userAgent.match(/Version\/(\d+\.\d+).* Safari/)||[])[1]),this.safariWithDownload=this.isSafari&&this.safariVersion>=11,this.buggyUnknownBlob=this.isSafari&&!this.safariWithDownload,this.blobSupported=!0;try{r.blobConstruct([],"")}catch(e){this.blobSupported=!1}}isAvailable(){return this.blobSupported}copy(e,t){return this.getFileWriter(t).then(t=>this.write(t,e).then(()=>t,e=>{try{t.truncate(0)}catch(e){}return Promise.reject(e)}))}write(e,t){return new Promise((a,s)=>{if(e.onwriteend=function(e){a()},e.onerror=function(e){s(e)},t.file)t.file(t=>{e.write(t)},s);else if(t instanceof Blob)e.write(t);else try{var o=r.blobConstruct([r.bytesToArrayBuffer(t)]);e.write(o)}catch(e){s(e)}})}chooseSaveFile(e,t,a){return Promise.reject()}getFileWriter(e){return new Promise((t,a)=>{e.createWriter(t,a)})}getFakeFileWriter(e,t){var a=[],s={write:e=>{if(!this.blobSupported)return s.onerror&&s.onerror(new Error("Blob not supported by browser")),!1;a.push(e),setTimeout(()=>{s.onwriteend&&s.onwriteend()},0)},truncate:()=>{a=[]},finalize:()=>{var s=r.blobConstruct(a,e);return t&&t(s),s}};return s}getUrl(e,t){var a=r.blobSafeMimeType(t);return void 0!==e.toURL?e.toURL(a):e instanceof Blob?URL.createObjectURL(e):"data:"+a+";base64,"+r.bytesToBase64(e)}getByteArray(e){return e instanceof Blob?new Promise((t,a)=>{try{var r=new FileReader;r.onloadend=e=>{t(new Uint8Array(e.target.result))},r.onerror=e=>{a(e)},r.readAsArrayBuffer(e)}catch(e){a(e)}}):e.file?new Promise((t,a)=>{e.file(e=>{this.getByteArray(e).then(t,a)},a)}):Promise.resolve(e)}getDataUrl(e){return new Promise((t,a)=>{try{var r=new FileReader;r.onloadend=()=>{t(r.result)},r.readAsDataURL(e)}catch(e){a(e)}})}getFileCorrectUrl(e,t){return this.buggyUnknownBlob&&e instanceof Blob&&!(t=e.type||e.mimeType||t||"").match(/image\/(jpeg|gif|png|bmp)|video\/quicktime/)?this.getDataUrl(e):Promise.resolve(this.getUrl(e,t))}download(e,t,a){if(window.navigator&&void 0!==navigator.msSaveBlob)return window.navigator.msSaveBlob(e,a),!1;if(window.navigator&&"getDeviceStorage"in navigator){var r="sdcard";switch(t.split("/")[0]){case"video":r="videos";break;case"audio":r="music";break;case"image":r="pictures"}var s=navigator.getDeviceStorage(r).addNamed(e,"telegram/"+a);return s.onsuccess=function(){console.log("Device storage save result",this.result)},void(s.onerror=()=>{})}var o;this.isSafari&&!this.safariWithDownload&&(o=window.open()),this.getFileCorrectUrl(e,t).then(e=>{if(o)try{return void(o.location.href=e)}catch(e){}var t=document.createElementNS("http://www.w3.org/1999/xhtml","a");t.href=e,this.safariWithDownload||(t.target="_blank"),t.download=a,t.dataset&&(t.dataset.downloadurl=["video/quicktime",a,e].join(":")),t.style.position="absolute",t.style.top="1px",t.style.left="1px",document.body.append(t);try{var r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!1,window,0,0,0,0,0,!1,!1,!1,!1,0,null),t.dispatchEvent(r)}catch(a){console.error("Download click error",a);try{t.click()}catch(t){window.open(e,"_blank")}}setTimeout(()=>{t.remove()},100)})}}},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=s(a(6)),n=a(1);t.default=new class{constructor(){this.documents={},this.stickerSets={},o.default.get("stickerSets").then(e=>{e&&(this.stickerSets=e)})}saveSticker(e){e.file_reference=Array.from(e.file_reference),this.documents[e.id]=e}getSticker(e){return this.documents[e]}getStickerSet(e){return r(this,void 0,void 0,(function*(){if(this.stickerSets[e.id])return this.stickerSets[e.id];let t=n.MTProto.apiManager.invokeApi("messages.getStickerSet",{stickerset:{_:"inputStickerSetID",id:e.id,access_hash:e.access_hash}}),a=yield t;return this.saveStickerSet(a),a}))}saveStickerSet(e){return r(this,void 0,void 0,(function*(){let t=e.set.id;this.stickerSets[t]={set:e.set,packs:e.packs,documents:e.documents},e.documents.forEach(this.saveSticker.bind(this)),yield o.default.set({stickerSets:this.stickerSets})}))}getStickerSetThumb(e){return r(this,void 0,void 0,(function*(){let t=e.thumb,a=e.thumb_dc_id,r=n.MTProto.apiFileManager.downloadSmallFile({_:"inputStickerSetThumb",stickerset:{_:"inputStickerSetID",id:e.id,access_hash:e.access_hash},volume_id:t.location.volume_id,local_id:t.location.local_id},{dcID:a});return yield r}))}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class r{constructor(){this.channelLocals={},this.channelsByLocals={},this.channelCurLocal=0,this.fullMsgIDModulus=4294967296}getFullMessageID(e,t){if(!t||e<=0)return e;e=this.getMessageLocalID(e);var a=this.channelLocals[t];return a||(a=++this.channelCurLocal*this.fullMsgIDModulus,this.channelsByLocals[a]=t,this.channelLocals[t]=a),a+e}getMessageIDInfo(e){if(e{this.myID=e})}popPendingSeqUpdate(){var e=this.updatesState.seq+1,t=this.updatesState.pendingSeqUpdates[e];if(!t)return!1;for(var a=t.updates,r=0,s=a.length;r=this.updatesState.syncPending.seqAwaiting&&(this.updatesState.syncPending.ptsAwaiting?delete this.updatesState.syncPending.seqAwaiting:(clearTimeout(this.updatesState.syncPending.timeout),this.updatesState.syncPending=!1)),!0}popPendingPtsUpdate(e){var t=e?this.getChannelState(e):this.updatesState;if(!t.pendingPtsUpdates.length)return!1;t.pendingPtsUpdates.sort((e,t)=>e.pts-t.pts);for(var a,r=t.pts,s=!1,n=0,i=0,d=t.pendingPtsUpdates.length;i=a.pts&&(s=a.pts,n=i);if(!s)return!1;for(console.log(o.dT(),"pop pending pts updates",s,t.pendingPtsUpdates.slice(0,n+1)),t.pts=s,i=0;i<=n;i++)a=t.pendingPtsUpdates[i],this.saveUpdate(a);return t.pendingPtsUpdates.splice(0,n+1),!t.pendingPtsUpdates.length&&t.syncPending&&(t.syncPending.seqAwaiting?delete t.syncPending.ptsAwaiting:(clearTimeout(t.syncPending.timeout),t.syncPending=!1)),!0}forceGetDifference(){this.updatesState.syncLoading||this.getDifference()}processUpdateMessage(e){var t={date:e.date,seq:e.seq,seqStart:e.seq_start};switch(e._){case"updatesTooLong":case"new_session_created":this.forceGetDifference();break;case"updateShort":this.processUpdate(e.update,t);break;case"updateShortMessage":case"updateShortChatMessage":var a=2&e.flags,r=e.from_id||(a?this.myID:e.user_id),s=e.chat_id?-e.chat_id:a?e.user_id:this.myID;this.processUpdate({_:"updateNewMessage",message:{_:"message",flags:e.flags,pFlags:e.pFlags,id:e.id,from_id:r,to_id:n.default.getOutputPeer(s),date:e.date,message:e.message,fwd_from:e.fwd_from,reply_to_msg_id:e.reply_to_msg_id,entities:e.entities},pts:e.pts,pts_count:e.pts_count},t);break;case"updatesCombined":case"updates":i.default.saveApiUsers(e.users),d.default.saveApiChats(e.chats),e.updates.forEach(e=>{this.processUpdate(e,t)});break;default:console.warn(o.dT(),"Unknown update message",e)}}getDifference(){let e=this.updatesState;e.syncLoading||(e.syncLoading=!0,e.pendingSeqUpdates={},e.pendingPtsUpdates=[]),e.syncPending&&(clearTimeout(e.syncPending.timeout),e.syncPending=!1),s.MTProto.apiManager.invokeApi("updates.getDifference",{pts:e.pts,date:e.date,qts:-1},{timeout:2147483647}).then(t=>{if("updates.differenceEmpty"==t._)return console.log(o.dT(),"apply empty diff",t.seq),e.date=t.date,e.seq=t.seq,e.syncLoading=!1,o.$rootScope.$broadcast("stateSynchronized"),!1;i.default.saveApiUsers(t.users),d.default.saveApiChats(t.chats),t.other_updates.forEach(e=>{switch(e._){case"updateChannelTooLong":case"updateNewChannelMessage":case"updateEditChannelMessage":return void this.processUpdate(e)}this.saveUpdate(e)}),t.new_messages.forEach(t=>{this.saveUpdate({_:"updateNewMessage",message:t,pts:e.pts,pts_count:0})});var a=t.intermediate_state||t.state;e.seq=a.seq,e.pts=a.pts,e.date=a.date,"updates.differenceSlice"==t._?this.getDifference():(o.$rootScope.$broadcast("stateSynchronized"),e.syncLoading=!1)},()=>{e.syncLoading=!1})}getChannelDifference(e){var t=this.getChannelState(e);t.syncLoading||(t.syncLoading=!0,t.pendingPtsUpdates=[]),t.syncPending&&(clearTimeout(t.syncPending.timeout),t.syncPending=!1),s.MTProto.apiManager.invokeApi("updates.getChannelDifference",{channel:d.default.getChannelInput(e),filter:{_:"channelMessagesFilterEmpty"},pts:t.pts,limit:30},{timeout:2147483647}).then(a=>(t.pts=a.pts,"updates.channelDifferenceEmpty"==a._?(console.log(o.dT(),"apply channel empty diff",a),t.syncLoading=!1,o.$rootScope.$broadcast("stateSynchronized"),!1):"updates.channelDifferenceTooLong"==a._?(console.log(o.dT(),"channel diff too long",a),t.syncLoading=!1,delete this.channelStates[e],this.saveUpdate({_:"updateChannelReload",channel_id:e}),!1):(i.default.saveApiUsers(a.users),d.default.saveApiChats(a.chats),console.log(o.dT(),"applying",a.other_updates.length,"channel other updates"),a.other_updates.forEach(e=>{this.saveUpdate(e)}),console.log(o.dT(),"applying",a.new_messages.length,"channel new messages"),a.new_messages.forEach(e=>{this.saveUpdate({_:"updateNewChannelMessage",message:e,pts:t.pts,pts_count:0})}),console.log(o.dT(),"apply channel diff",t.pts),void("updates.channelDifference"!=a._||a.pFlags.final?(console.log(o.dT(),"finished channel get diff"),o.$rootScope.$broadcast("stateSynchronized"),t.syncLoading=!1):this.getChannelDifference(e)))),()=>{t.syncLoading=!1})}addChannelState(e,t){if(!t)throw new Error("Add channel state without pts "+e);return!(e in this.channelStates)&&(this.channelStates[e]={pts:t,pendingPtsUpdates:[],syncPending:!1,syncLoading:!1},!0)}getChannelState(e,t){return void 0===this.channelStates[e]&&this.addChannelState(e,t),this.channelStates[e]}processUpdate(e,t={}){var a=!1;switch(e._){case"updateNewChannelMessage":case"updateEditChannelMessage":a=-n.default.getPeerID(e.message.to_id);break;case"updateDeleteChannelMessages":a=e.channel_id;break;case"updateChannelTooLong":if(!((a=e.channel_id)in this.channelStates))return!1}var r,s,c=a?this.getChannelState(a,e.pts):this.updatesState;if(c.syncLoading)return!1;if("updateChannelTooLong"==e._)return(!c.lastPtsUpdateTime||c.lastPtsUpdateTime0&&!i.default.hasUser(p)&&(m="toPeer User")||p<0&&!d.default.hasChat(-p)&&(m="toPeer Chat"))return console.warn(o.dT(),"Not enough data for message update",p,m,l),a&&d.default.hasChat(a)?this.getChannelDifference(a):this.forceGetDifference(),!1}else if(a&&!d.default.hasChat(a))return!1;if(e.pts){if(c.pts+(e.pts_count||0){a?this.getChannelDifference(a):this.getDifference()},5e3)}),c.syncPending.ptsAwaiting=!0,!1;if(e.pts>c.pts)c.pts=e.pts,r=!0,c.lastPtsUpdateTime=o.tsNow();else if(e.pts_count)return!1;a&&t.date&&this.updatesState.date0){var g=t.seq,y=t.seqStart||g;if(y!=c.seq+1&&y>c.seq)return console.warn(o.dT(),"Seq hole",c,c.syncPending&&c.syncPending.seqAwaiting),void 0===c.pendingSeqUpdates[y]&&(c.pendingSeqUpdates[y]={seq:g,date:t.date,updates:[]}),c.pendingSeqUpdates[y].updates.push(e),c.syncPending||(c.syncPending={timeout:setTimeout(()=>{this.getDifference()},5e3)}),(!c.syncPending.seqAwaiting||c.syncPending.seqAwaiting{this.updatesState.seq=e.seq,this.updatesState.pts=e.pts,this.updatesState.date=e.date,setTimeout(()=>{this.updatesState.syncLoading=!1},1e3)})}}t.ApiUpdatesManager=c,t.default=new c},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=a(1),n=a(0),i=s(a(5)),d=s(a(12)),c=s(a(8)),l=s(a(18)),p=a(4),h=s(a(19)),m=a(3),g=s(a(10)),y=s(a(15)),u=a(9),_=s(a(14)),f=s(a(40)),b=s(a(41)),x=s(a(13));console.log("appImManager included!");let D=!1;class v{constructor(e){this.node=e,this.previousScrollHeightMinusTop=0,this.readyFor="up",this.container=e.parentElement}restore(){this.container.scrollTop=this.node.scrollHeight-this.previousScrollHeightMinusTop}prepareFor(e){this.readyFor=e||"up",this.previousScrollHeightMinusTop=this.node.scrollHeight-this.container.scrollTop}}class w{constructor(){this.pageEl=document.querySelector(".page-chats"),this.btnMute=this.pageEl.querySelector(".tool-mute"),this.avatarEl=document.getElementById("im-avatar"),this.titleEl=document.getElementById("im-title"),this.subtitleEl=document.getElementById("im-subtitle"),this.chatInner=document.getElementById("bubbles-inner"),this.searchBtn=this.pageEl.querySelector(".chat-search-button"),this.getHistoryTimeout=0,this.myID=0,this.peerID=0,this.bubbles={},this.dateMessages={},this.unreaded=[],this.unreadOut=[],this.offline=!1,this.updateStatusInterval=0,this.pinnedMsgID=0,this.pinnedMessageContainer=this.pageEl.querySelector(".pinned-message"),this.pinnedMessageContent=this.pinnedMessageContainer.querySelector(".pinned-message-subtitle"),this.firstTopMsgID=0,this.loadMediaQueue=[],this.loadMediaQueuePromise=null,this.scroll=null,this.scrollPosition=null,this.preloader=null,this.typingTimeouts={},this.typingUsers={},this.log=u.logger("IM"),this.preloader=new p.ProgressivePreloader(null,!1),o.MTProto.apiManager.getUserID().then(e=>{this.myID=e}),n.$rootScope.$on("user_auth",e=>{let t=e.detail;this.myID=t?t.id:0}),n.$rootScope.$on("history_append",e=>{let t=e.detail;this.renderMessagesByIDs([t.messageID])}),n.$rootScope.$on("history_multiappend",e=>{let t=e.detail;if(!(this.peerID in t))return;let a=t[this.peerID];this.renderMessagesByIDs(a)}),n.$rootScope.$on("message_sent",e=>{let{tempID:t,mid:a}=e.detail,r=this.bubbles[t];r&&(this.bubbles[a]=r,delete this.bubbles[t]);let s=this.unreadOut.length;for(let e=0;e{let t=e.detail;if(this.pinnedMsgID==t){let e=d.default.getMessage(t);this.log("setting pinned message",e),this.pinnedMessageContainer.setAttribute("data-mid",t),this.pinnedMessageContainer.style.display="",this.pinnedMessageContent.innerHTML=m.RichTextProcessor.wrapPlainText(e.message)}}),n.$rootScope.$on("apiUpdate",e=>{let t=e.detail;switch(t._){case"updateUserTyping":case"updateChatUserTyping":if(this.myID==t.user_id)return;var a="updateUserTyping"==t._?t.user_id:-t.chat_id;this.typingUsers[t.user_id]=a,i.default.hasUser(t.user_id)||t.chat_id&&x.default.hasChat(t.chat_id)&&!x.default.isChannel(t.chat_id)&&l.default.getChatFull(t.chat_id),i.default.forceUserOnline(t.user_id);let e=d.default.getDialogByPeerID(a)[0],r=this.peerID==a;this.typingTimeouts[a]?clearTimeout(this.typingTimeouts[a]):e&&(h.default.setTyping(e,i.default.getUser(t.user_id)),r&&this.setPeerStatus()),this.typingTimeouts[a]=setTimeout(()=>{this.typingTimeouts[a]=0,delete this.typingUsers[t.user_id],e&&h.default.unsetTyping(e),this.setPeerStatus()},6e3)}}),window.addEventListener("blur",()=>{_.default.checkAnimations(!0),this.offline=!0,this.updateStatus(),clearInterval(this.updateStatusInterval),window.addEventListener("focus",()=>{_.default.checkAnimations(!1),this.offline=!1,this.updateStatus(),this.updateStatusInterval=window.setInterval(()=>this.updateStatus(),5e4)},{once:!0})}),this.pageEl.querySelector(".person").addEventListener("click",e=>{y.default.toggleSidebar(!0)}),this.chatInner.addEventListener("click",e=>{let t=e.target;if("IMG"==t.tagName||"VIDEO"==t.tagName){let e=+t.getAttribute("message-id"),a=d.default.getMessage(e);if(!a)return void this.log.warn("no message by messageID:",e);f.default.openMedia(a,!0)}}),this.searchBtn.addEventListener("click",e=>{this.peerID&&b.default.beginSearch(this.peerID)}),this.pinnedMessageContainer.addEventListener("click",e=>{e.preventDefault(),e.cancelBubble=!0;let t=+this.pinnedMessageContainer.getAttribute("data-mid");this.setPeer(this.peerID,t)}),this.updateStatusInterval=window.setInterval(()=>this.updateStatus(),5e4),this.updateStatus(),setInterval(()=>this.setPeerStatus(),6e4),this.loadMediaQueueProcess()}loadMediaQueuePush(e){this.loadMediaQueue.push(e),this.loadMediaQueueProcess()}loadMediaQueueProcess(){return r(this,void 0,void 0,(function*(){if(this.loadMediaQueuePromise)return this.loadMediaQueuePromise;let e=this.loadMediaQueue.splice(-5,5).reverse().map(e=>e());if(e.length){this.log("Will load more media:",e.length);try{this.loadMediaQueuePromise=Promise.all(e),yield this.loadMediaQueuePromise}catch(e){this.log.error("loadMediaQueue error:",e)}}return this.loadMediaQueuePromise=null,this.loadMediaQueue.length?this.loadMediaQueueProcess():this.loadMediaQueuePromise}))}updateStatus(){return this.myID?(i.default.setUserStatus(this.myID,this.offline),o.MTProto.apiManager.invokeApi("account.updateStatus",{offline:this.offline},{noErrorBox:!0})):Promise.resolve()}onScroll(){let e=[];for(let t=this.unreaded.length-1;t>=0;--t){let a=this.unreaded[t],r=this.bubbles[a];n.isElementInViewport(r)&&(e.push(a),this.unreaded.splice(t,1))}if(_.default.checkAnimations(),e.length){let t=Math.max(...e);d.default.readHistory(this.peerID,t)}if(this.scroll.scrollHeight-(this.scroll.scrollTop+this.scroll.offsetHeight)==0?this.scroll.parentElement.classList.add("scrolled-down"):this.scroll.parentElement.classList.contains("scrolled-down")&&this.scroll.parentElement.classList.remove("scrolled-down"),!this.getHistoryPromise&&!this.getHistoryTimeout){let e=Object.keys(this.bubbles).map(e=>+e).sort();this.getHistoryTimeout=setTimeout(()=>{this.getHistoryTimeout=0;let t=!1;for(let a=0;a<10;++a){let r=e[a];if(!(r in this.bubbles)||r<=0)continue;let s=this.bubbles[r];if(n.isElementInViewport(s)){t=!0,this.log("Will load more (up) history by id:",e[0],"maxID:",e[e.length-1],e,s),!D&&this.getHistory(e[0],!0).then(()=>{this.onScroll()}).catch(e=>{this.log.warn("Could not load more history, err:",e)});break}}let a=d.default.getDialogByPeerID(this.peerID)[0];if(!t&&-1===e.indexOf(a.top_message)){let a=e.slice(-10);for(let e of a){if(!(e in this.bubbles)||e<=0)continue;let r=this.bubbles[e];if(n.isElementInViewport(r)){t=!0,this.log("Will load more (down) history by maxID:",a[a.length-1],a,r),!D&&this.getHistory(a[a.length-1],!1,!0).then(()=>{this.onScroll()}).catch(e=>{this.log.warn("Could not load more history, err:",e)});break}}}},0)}}setScroll(e){this.scroll=e,this.scrollPosition=new v(this.chatInner),this.scroll.onscroll=this.onScroll.bind(this)}setPeerStatus(){if(this.myID)if(this.subtitleEl.innerText=y.default.profileElements.subtitle.innerText="",this.subtitleEl.classList.remove("online"),y.default.profileElements.subtitle.classList.remove("online"),this.peerID<0){let e=c.default.getPeer(this.peerID),t=c.default.isChannel(this.peerID)&&!c.default.isMegagroup(this.peerID);this.log("setPeerStatus",e),l.default.getChatFull(e.id).then(e=>{this.log("chatInfo res:",e),e.pinned_msg_id&&(this.pinnedMsgID=e.pinned_msg_id,d.default.wrapSingleMessage(e.pinned_msg_id));let a=e.participants_count||e.participants.participants.length,r=n.numberWithCommas(a)+" "+(t?"subscribers":"members");this.subtitleEl.innerText=y.default.profileElements.subtitle.innerText=r})}else if(!i.default.isBot(this.peerID)){let e=i.default.getUser(this.peerID);if(e&&e.status&&this.myID!=this.peerID){let t="";switch(e.status._){case"userStatusRecently":t+="last seen recently";break;case"userStatusOffline":t="last seen ";let a=e.status.was_online,r=Date.now()/1e3;if(r-a<60)t+=" just now";else if(r-a<3600)t+=((r-a)/60|0)+" minutes ago";else if(r-a<86400)t+=((r-a)/3600|0)+" hours ago";else{let e=new Date(1e3*a);t+=("0"+e.getDate()).slice(-2)+"."+("0"+(e.getMonth()+1)).slice(-2)+" at "+("0"+e.getHours()).slice(-2)+":"+("0"+e.getMinutes()).slice(-2)}break;case"userStatusOnline":this.subtitleEl.classList.add("online"),y.default.profileElements.subtitle.classList.add("online"),t="online"}y.default.profileElements.subtitle.innerText=t,this.typingUsers[this.peerID]==this.peerID?this.subtitleEl.innerText="typing...":this.subtitleEl.innerText=t}}}cleanup(){this.peerID=n.$rootScope.selectedPeerID=0,this.lastContainerDiv&&this.lastContainerDiv.remove(),this.firstContainerDiv&&this.firstContainerDiv.remove(),this.lastContainerDiv=void 0,this.firstContainerDiv=void 0;for(let e in this.bubbles){this.bubbles[e].remove()}this.bubbles={},this.dateMessages={},this.unreaded=[],this.unreadOut=[],this.loadMediaQueue=[],console.time("chatInner clear"),this.chatInner.innerHTML="",console.timeEnd("chatInner clear")}setPeer(e,t=0){let a=this.peerID==e;if(a&&!D&&!t)return Promise.resolve(!0);if(a&&t==this.lastDialog.top_message&&this.bubbles[t])return this.scroll.scrollTop=this.scroll.scrollHeight,Promise.resolve(!0);if(this.cleanup(),this.peerID=n.$rootScope.selectedPeerID=e,!d.default.getDialogByPeerID(this.peerID).length)return this.log.error("No dialog by peerID:",this.peerID),Promise.reject();if(this.pinnedMessageContainer.style.display="none",this.preloader.attach(this.chatInner),this.lastDialog){h.default.getDialogDom(this.lastDialog.peerID).listEl.classList.remove("active")}let r=this.lastDialog=d.default.getDialogByPeerID(this.peerID)[0];this.log("setPeer peerID:",this.peerID,r),h.default.loadDialogPhoto(this.avatarEl,r.peerID),h.default.loadDialogPhoto(y.default.profileElements.avatar,r.peerID),this.firstTopMsgID=r.top_message||0;let s=h.default.getDialogDom(this.peerID);return s||(this.log.warn("No rendered dialog by peerID:",this.peerID),h.default.addDialog(r),s=h.default.getDialogDom(this.peerID)),s.listEl.classList.add("active"),this.setPeerStatus(),this.titleEl.innerText=y.default.profileElements.name.innerText=s.titleSpan.innerText,y.default.toggleSidebar(!0),Promise.all([this.getHistory(t).then(()=>(this.log("setPeer removing preloader"),t?(this.renderMessage(d.default.getMessage(t)),this.bubbles[t].scrollIntoView()):r.top_message&&this.renderMessage(d.default.getMessage(r.top_message)),this.scroll&&this.onScroll(),this.preloader.detach(),!0)),y.default.fillProfileElements()]).catch(e=>{this.log.error(e)})}updateUnreadByDialog(e){let t=e.read_outbox_max_id;for(let e=this.unreadOut.length-1;e>=0;--e){let a=this.unreadOut[e];if(a<=t){let t=this.bubbles[a];t.classList.remove("sent"),t.classList.add("read"),this.unreadOut.splice(e,1)}}}deleteMessagesByIDs(e){e.forEach(e=>{if(!(e in this.bubbles))return;let t=this.bubbles[e],a=t.parentNode;delete this.bubbles[e],t.remove(),a.childNodes.length||a.remove()}),_.default.checkAnimations()}renderMessagesByIDs(e){this.bubbles[this.firstTopMsgID]&&e.forEach(e=>{let t=d.default.getMessage(e);this.log("got new message to append:",t),this.renderMessage(t)})}renderMessage(e,t=!1,a){let r=this.peerID,s=e.fromID==this.myID,o=document.createElement("div");o.classList.add("message"),this.log("message to render:",e);let n=new Date(1e3*e.date),i=("0"+n.getHours()).slice(-2)+":"+("0"+n.getMinutes()).slice(-2),l=document.createElement("span");l.classList.add("time");let y=document.createElement("div");y.classList.add("inner","tgico"),y.innerText=i;let u=document.createElement("div");u.classList.add("bubble"),this.bubbles[+e.mid]=u;let _=m.RichTextProcessor.wrapRichText(e.message,{entities:e.totalEntities});if(e.totalEntities){let t=e.totalEntities.filter(e=>"messageEntityEmoji"==e._),a=e.message.length;if(t.reduce((e,t)=>e+t.length,0)==a&&t.length<=3){let e=document.createElement("div");e.classList.add("attachment"),e.innerHTML=_,o.classList.add("message-empty"),u.classList.add("emoji-"+t.length+"x","emoji-big"),u.append(e)}else o.innerHTML=_}else o.innerHTML=_;if(l.appendChild(y),o.append(l),u.prepend(o),s){e.pFlags.unread&&this.unreadOut.push(e.mid);let t=e.pFlags.unread?"sent":"read";u.classList.add(t)}else this.log("not our message",e,e.pFlags.unread),e.pFlags.unread&&this.unreaded.push(e.mid);if(e.media){let t=document.createElement("div");t.classList.add("attachment"),e.message||o.classList.add("message-empty");let a=!1;switch(e.media._){case"messageMediaPhoto":{let a=e.media.photo;this.log("messageMediaPhoto",a),u.classList.add("photo");let s=g.default.setAttachmentSize(a.id,t),o=()=>g.default.preloadPhoto(a.id,s).then(a=>{if(this.peerID!=r)return void this.log.warn("peer changed");t.firstElementChild&&t.firstElementChild.remove();let s=new Image;s.src=URL.createObjectURL(a),s.setAttribute("message-id",e.mid),t.append(s)});u.classList.add("hide-name"),this.loadMediaQueuePush(o);break}case"messageMediaWebPage":{a=!0;let t=e.media.webpage;if(this.log("messageMediaWebPage",t),"webPageEmpty"==t._)break;u.classList.add("webpage");let s=document.createElement("div");s.classList.add("box","web");let o=document.createElement("div");o.classList.add("quote");let n=document.createElement("a");n.classList.add("name");let i=document.createElement("div");i.classList.add("title");let d=document.createElement("div");d.classList.add("text");let c=!1,l=null;(t.photo||t.document)&&(l=document.createElement("div")).classList.add("preview");let h=null;if(t.document)if("gif"==(h=t.document).type||"video"==h.type){g.default.setAttachmentSize(h,l),u.classList.add("video");let t=()=>p.wrapVideo(h,l,()=>this.peerID!=r?(this.log.warn("peer changed"),!1):(c=!0,!0),e.mid);this.loadMediaQueuePush(t)}else h=null;if(t.photo&&!h){g.default.savePhoto(t.photo);let e=g.default.setAttachmentSize(t.photo.id,l),a=()=>g.default.preloadPhoto(t.photo.id,e).then(e=>{if(this.peerID!=r)return void this.log.warn("peer changed");if(c)return;u.classList.add("photo"),l.firstElementChild&&l.firstElementChild.remove();let t=new Image;t.src=URL.createObjectURL(e),l.append(t)});this.loadMediaQueuePush(a)}l&&o.append(l),n.setAttribute("target","_blank"),n.href=t.url||"#",n.innerText=t.site_name||"",t.description&&(d.innerHTML=m.RichTextProcessor.wrapRichText(t.description)),o.append(n,i,d),s.append(o),u.prepend(s);break}case"messageMediaDocument":{let s=e.media.document;if(this.log("messageMediaDocument",s),s.sticker&&s.size<=1e6){u.classList.add("sticker"),s.animated&&u.classList.add("sticker-animated"),g.default.setAttachmentSize(s,t),g.default.setAttachmentSize(s,u);let e=()=>p.wrapSticker(s,t,()=>this.peerID==r||(this.log.warn("peer changed, canceling sticker attach"),!1));this.loadMediaQueuePush(e);break}if("video/mp4"==s.mime_type){this.log("never get free 2",s),u.classList.add("video"),g.default.setAttachmentSize(s,t);let a=()=>p.wrapVideo(s,t,()=>this.peerID==r||(this.log.warn("peer changed"),!1),e.mid);this.loadMediaQueuePush(a);break}{let e=p.wrapDocument(s);o.classList.remove("message-empty"),o.append(e),a=!0;break}}default:o.classList.remove("message-empty"),o.innerHTML="unrecognized media type: "+e.media._,o.append(l),this.log.warn("unrecognized media type:",e.media._,e)}a||u.append(t)}if(e.fwd_from){let t=e.fwd_from;c.default.getPeerTitle(t.from_id)}if(this.peerID<0&&!s||e.fwd_from){let t=c.default.getPeerTitle(e.fwdFromID||e.fromID);if(e.fwdFromID){if(u.classList.add("forwarded"),!u.classList.contains("sticker")){let e=document.createElement("div");e.classList.add("name"),e.innerText="Forwarded from "+t,u.append(e)}}else{let a=document.createElement("div");if(a.classList.add("user-avatar"),this.log("exec loadDialogPhoto",e),e.fromID?h.default.loadDialogPhoto(a,e.fromID):!t&&e.fwd_from&&e.fwd_from.from_name&&(t=e.fwd_from.from_name,h.default.loadDialogPhoto(a,t)),e.reply_to_mid){let t=document.createElement("div");t.classList.add("box");let a=document.createElement("div");a.classList.add("quote");let r=document.createElement("a");r.classList.add("name");let s=document.createElement("div");s.classList.add("text");let o=d.default.getMessage(e.reply_to_mid),n=c.default.getPeerTitle(o.fromID)||"";r.innerText=n,s.innerHTML=m.RichTextProcessor.wrapRichText(o.message,{entities:o.totalEntities}),a.append(r,s),t.append(a),u.append(t)}if(!u.classList.contains("sticker")){let e=document.createElement("div");e.classList.add("name"),e.innerText=t,u.append(e)}u.append(a)}}let f=s?"out":"in",b=t?this.firstContainerDiv:this.lastContainerDiv;b&&b.classList.contains(f)||((b=document.createElement("div")).classList.add(f),this.firstContainerDiv||(this.firstContainerDiv=b),t?this.firstContainerDiv=b:this.lastContainerDiv=b),t?(a||this.scrollPosition.prepareFor("up"),b.prepend(u),this.chatInner.prepend(b)):(a||this.scrollPosition.prepareFor("down"),b.append(u),this.chatInner.append(b));let x=new Date(n.getFullYear(),n.getMonth(),n.getDate()),D=x.getTime();if(D in this.dateMessages){let e=this.dateMessages[D];e.firstTimestamp>n.getTime()&&b.insertBefore(e.div,u)}else{const e=["January","February","March","April","May","June","July","August","September","October","November","December"];let t=x.getFullYear()==(new Date).getFullYear()?e[x.getMonth()]+" "+x.getDate():x.toISOString().split("T")[0].split("-").reverse().join("."),a=document.createElement("div");a.classList.add("service"),a.innerHTML=`
${t}
`,this.log("need to render date message",D,t),this.dateMessages[D]={div:a,firstTimestamp:n.getTime()},b.insertBefore(a,u)}a||this.scrollPosition.restore()}getHistory(e=0,t=!1,a=!1){let r=this.peerID;!e&&this.lastDialog.top_message&&(e=this.lastDialog.top_message);let s=Object.keys(this.bubbles).length>0?20:this.chatInner.parentElement.parentElement.scrollHeight/30*1.25|0;console.time("render getHistory"),console.time("render history total");let o=0;return a&&(o=s,s=0,e+=1),this.getHistoryPromise=d.default.getHistory(this.peerID,e,s,o).then(s=>{if(this.log("getHistory result by maxID:",e,t,a,s),console.timeEnd("render getHistory"),this.peerID!=r)return this.log.warn("peer changed"),console.timeEnd("render history total"),Promise.reject();if(!s||!s.history)return console.timeEnd("render history total"),!0;let o=s.history.slice();t&&o.reverse(),console.time("render history"),a||this.scrollPosition.prepareFor(t?"up":"down");for(let e=o.length-1;e>=0;--e){let a=o[e],r=d.default.getMessage(a);this.renderMessage(r,t,!0)}return a||this.scrollPosition.restore(),console.timeEnd("render history"),this.getHistoryPromise=void 0,console.timeEnd("render history total"),!0})}}t.AppImManager=w,t.default=new w},,function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=class{constructor(e,t){this.dcID=e,this.url=t}}},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=a(25),n=s(a(17)),i=a(2),d=s(a(37)),c=a(0),l=s(a(26)),p=a(23),h=s(a(7)),m=a(1);class g{constructor(){this.cached={}}mtpSendPlainRequest(e,t){var a=t.byteLength,r=new o.TLSerialization;r.storeLongP(0,0,"auth_key_id"),r.storeLong(l.default.generateID(),"msg_id"),r.storeInt(a,"request_length");let s=r.getBytes(!0),d=new Uint8Array(s.byteLength+a);d.set(s),d.set(t,s.length);let c=n.default.chooseServer(e),p={code:406,type:"NETWORK_BAD_RESPONSE",transport:c};return console.log(i.dT(),"mtpSendPlainRequest: creating requestPromise"),c.send(d).then(e=>{if(console.log(i.dT(),"mtpSendPlainRequest: in good sector",e),!e||!e.byteLength)return Promise.reject(p);try{let t=new o.TLDeserialization(e,{mtproto:!0}),a=t.fetchLong("auth_key_id");0!=a&&console.error("auth_key_id != 0",a);let r=t.fetchLong("msg_id");0==r&&console.error("msg_id == 0",r);let s=t.fetchInt("msg_len");return s||console.error("no msg_len",s),t}catch(e){throw console.error("mtpSendPlainRequest: deserialization went bad",e),Object.assign(p,{originalError:e})}},e=>(e.message||e.type||(e=Object.assign(p,{originalError:e})),Promise.reject(e)))}mtpSendReqPQ(e){return r(this,void 0,void 0,(function*(){var t=new o.TLSerialization({mtproto:!0});t.storeMethod("req_pq_multi",{nonce:e.nonce}),d.default.prepare().then(()=>{}),console.log(i.dT(),"Send req_pq",e.nonce.hex);try{var a=yield this.mtpSendPlainRequest(e.dcID,t.getBytes(!0))}catch(e){throw console.error(i.dT(),"req_pq error",e.message),e}var r=a.fetchObject("ResPQ");if("resPQ"!=r._)throw new Error("[MT] resPQ response invalid: "+r._);if(!i.bytesCmp(e.nonce,r.nonce))throw console.log(e.nonce,r.nonce),new Error("[MT] resPQ nonce mismatch");e.serverNonce=new Uint8Array(r.server_nonce),e.pq=r.pq,e.fingerprints=r.server_public_key_fingerprints,console.log(i.dT(),"Got ResPQ",i.bytesToHex(e.serverNonce),i.bytesToHex(e.pq),e.fingerprints);let s=yield d.default.select(e.fingerprints);if(!s)throw new Error("[MT] No public key found");e.publicKey=s,console.log(i.dT(),"PQ factorization start",e.pq);try{var n=yield h.default.factorize(e.pq)}catch(e){throw console.error("worker error factorize",e),e}return e.p=n[0],e.q=n[1],console.log(i.dT(),"PQ factorization done",n),this.mtpSendReqDhParams(e)}))}mtpSendReqDhParams(e){return r(this,void 0,void 0,(function*(){e.newNonce=new Uint8Array(32).randomize();let t={_:"p_q_inner_data",pq:e.pq,p:e.p,q:e.q,nonce:e.nonce,server_nonce:e.serverNonce,new_nonce:e.newNonce},a=new o.TLSerialization({mtproto:!0});a.storeObject(t,"P_Q_inner_data","DECRYPTED_DATA");let r=a.getBytes(!0),s=(yield h.default.sha1Hash(r)).concat(r),n=yield h.default.rsaEncrypt(e.publicKey,s),d={nonce:e.nonce,server_nonce:e.serverNonce,p:e.p,q:e.q,public_key_fingerprint:e.publicKey.fingerprint,encrypted_data:n};var c=new o.TLSerialization({mtproto:!0});c.storeMethod("req_DH_params",d);let l=c.getBytes(!0);console.log(i.dT(),"Send req_DH_params",d);try{var p=yield this.mtpSendPlainRequest(e.dcID,l)}catch(e){throw console.log(i.dT(),"Send req_DH_params FAIL!",e),e}var m=p.fetchObject("Server_DH_Params","RESPONSE");if(console.log(i.dT(),"Sent req_DH_params, response:",m),"server_DH_params_fail"!=m._&&"server_DH_params_ok"!=m._)throw new Error("[MT] Server_DH_Params response invalid: "+m._);if(!i.bytesCmp(e.nonce,m.nonce))throw new Error("[MT] Server_DH_Params nonce mismatch");if(!i.bytesCmp(e.serverNonce,m.server_nonce))throw new Error("[MT] Server_DH_Params server_nonce mismatch");if("server_DH_params_fail"==m._){var g=(yield h.default.sha1Hash(e.newNonce)).slice(-16);if(!i.bytesCmp(g,m.new_nonce_hash))throw new Error("[MT] server_DH_params_fail new_nonce_hash mismatch");throw new Error("[MT] server_DH_params_fail")}try{yield this.mtpDecryptServerDhDataAnswer(e,m.encrypted_answer)}catch(e){throw console.error(i.dT(),"mtpDecryptServerDhDataAnswer FAILED!",e),e}return this.mtpSendSetClientDhParams(e)}))}mtpDecryptServerDhDataAnswer(e,t){return r(this,void 0,void 0,(function*(){e.localTime=c.tsNow(),e.tmpAesKey=(yield h.default.sha1Hash(e.newNonce.concat(e.serverNonce))).concat((yield h.default.sha1Hash(e.serverNonce.concat(e.newNonce))).slice(0,12)),e.tmpAesIv=(yield h.default.sha1Hash(e.serverNonce.concat(e.newNonce))).slice(12).concat(yield h.default.sha1Hash(e.newNonce.concat(e.newNonce)),e.newNonce.slice(0,4));var a=new Uint8Array(yield h.default.aesDecrypt(t,e.tmpAesKey,e.tmpAesIv)),r=a.slice(0,20),s=a.slice(20),n=new o.TLDeserialization(s,{mtproto:!0}),d=n.fetchObject("Server_DH_inner_data");if("server_DH_inner_data"!=d._)throw new Error("[MT] server_DH_inner_data response invalid: "+d);if(!i.bytesCmp(e.nonce,d.nonce))throw new Error("[MT] server_DH_inner_data nonce mismatch");if(!i.bytesCmp(e.serverNonce,d.server_nonce))throw new Error("[MT] server_DH_inner_data serverNonce mismatch");console.log(i.dT(),"Done decrypting answer"),e.g=d.g,e.dhPrime=d.dh_prime,e.gA=d.g_a,e.serverTime=d.server_time,e.retry=0,this.mtpVerifyDhParams(e.g,e.dhPrime,e.gA);var p=n.getOffset();if(!i.bytesCmp(r,yield h.default.sha1Hash(s.slice(0,p))))throw new Error("[MT] server_DH_inner_data SHA1-hash mismatch");l.default.applyServerTime(e.serverTime,e.localTime)}))}mtpVerifyDhParams(e,t,a){console.log(i.dT(),"Verifying DH params");var r=i.bytesToHex(t);if(3!=e||"c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b"!==r)throw new Error("[MT] DH params are not verified: unknown dhPrime");console.log(i.dT(),"dhPrime cmp OK");var s=new p.BigInteger(i.bytesToHex(a),16),o=new p.BigInteger(r,16);if(s.compareTo(p.BigInteger.ONE)<=0)throw new Error("[MT] DH params are not verified: gA <= 1");if(s.compareTo(o.subtract(p.BigInteger.ONE))>=0)throw new Error("[MT] DH params are not verified: gA >= dhPrime - 1");console.log(i.dT(),"1 < gA < dhPrime-1 OK");var n=new p.BigInteger("");n.fromInt(2);var d=n.pow(1984);if(s.compareTo(d)<0)throw new Error("[MT] DH params are not verified: gA < 2^{2048-64}");if(s.compareTo(o.subtract(d))>=0)throw new Error("[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}");return console.log(i.dT(),"2^{2048-64} < gA < dhPrime-2^{2048-64} OK"),!0}mtpSendSetClientDhParams(e){return r(this,void 0,void 0,(function*(){var t=i.bytesFromHex(e.g.toString(16));e.b=new Array(256),m.MTProto.secureRandom.nextBytes(e.b);try{var a=yield h.default.modPow(t,e.b,e.dhPrime)}catch(e){throw e}var r=new o.TLSerialization({mtproto:!0});r.storeObject({_:"client_DH_inner_data",nonce:e.nonce,server_nonce:e.serverNonce,retry_id:[0,e.retry++],g_b:a},"Client_DH_Inner_Data");var s=(yield h.default.sha1Hash(r.getBuffer())).concat(r.getBytes()),n=yield h.default.aesEncrypt(s,e.tmpAesKey,e.tmpAesIv),d=new o.TLSerialization({mtproto:!0});d.storeMethod("set_client_DH_params",{nonce:e.nonce,server_nonce:e.serverNonce,encrypted_data:n}),console.log(i.dT(),"Send set_client_DH_params");try{var c=yield this.mtpSendPlainRequest(e.dcID,d.getBytes(!0))}catch(e){throw e}let l=c.fetchObject("Set_client_DH_params_answer");if("dh_gen_ok"!=l._&&"dh_gen_retry"!=l._&&"dh_gen_fail"!=l._)throw new Error("[MT] Set_client_DH_params_answer response invalid: "+l._);if(!i.bytesCmp(e.nonce,l.nonce))throw new Error("[MT] Set_client_DH_params_answer nonce mismatch");if(!i.bytesCmp(e.serverNonce,l.server_nonce))throw new Error("[MT] Set_client_DH_params_answer server_nonce mismatch");try{var p=yield h.default.modPow(e.gA,e.b,e.dhPrime)}catch(e){throw p}let g=yield h.default.sha1Hash(p),y=g.slice(0,8),u=g.slice(-8);switch(console.log(i.dT(),"Got Set_client_DH_params_answer",l._,p),l._){case"dh_gen_ok":var _=(yield h.default.sha1Hash(e.newNonce.concat([1],y))).slice(-16);if(!i.bytesCmp(_,l.new_nonce_hash1))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash1 mismatch");var f=i.bytesXor(e.newNonce.slice(0,8),e.serverNonce.slice(0,8));return console.log("Auth successfull!",u,p,f),e.authKeyID=u,e.authKey=p,e.serverSalt=f,e;case"dh_gen_retry":var b=(yield h.default.sha1Hash(e.newNonce.concat([2],y))).slice(-16);if(!i.bytesCmp(b,l.new_nonce_hash2))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch");return this.mtpSendSetClientDhParams(e);case"dh_gen_fail":var x=(yield h.default.sha1Hash(e.newNonce.concat([3],y))).slice(-16);if(!i.bytesCmp(x,l.new_nonce_hash3))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch");throw new Error("[MT] Set_client_DH_params_answer fail")}}))}auth(e){return r(this,void 0,void 0,(function*(){if(e in this.cached)return this.cached[e];let t=new Uint8Array(16).randomize();if(!n.default.chooseServer(e))return Promise.reject(new Error("[MT] No server found for dc "+e));try{let a=this.mtpSendReqPQ({dcID:e,nonce:t});return this.cached[e]=a,yield a}catch(t){throw delete this.cached[e],t}}))}}t.Authorizer=g,t.default=new g},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=a(25),n=a(2),i=s(a(7));class d{constructor(){this.publisKeysHex=[{modulus:"c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f",exponent:"010001"},{modulus:"aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927",exponent:"010001"},{modulus:"bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff",exponent:"010001"},{modulus:"b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1",exponent:"010001"},{modulus:"be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01",exponent:"010001"}],this.publicKeysParsed={},this.prepared=!1,this.preparePromise=null}prepare(){return this.preparePromise?this.preparePromise:this.prepared?Promise.resolve():this.preparePromise=Promise.all(this.publisKeysHex.map(e=>{let t=new o.TLSerialization;t.storeBytes(n.bytesFromHex(e.modulus),"n"),t.storeBytes(n.bytesFromHex(e.exponent),"e");let a=t.getBuffer();return i.default.sha1Hash(a).then(t=>{let a=n.bytesFromArrayBuffer(t).slice(-8);a.reverse(),this.publicKeysParsed[n.bytesToHex(a)]={modulus:e.modulus,exponent:e.exponent}})})).then(()=>{this.prepared=!0,console.log("[MT] Prepared keys"),this.preparePromise=null})}select(e){return r(this,void 0,void 0,(function*(){var t,a,r;for(yield this.prepare(),r=0;r{e&&(this.serverTimeOffset=e,this.timeParams.serverTimeOffset=e)})}}t.ServerTimeManager=n,t.default=new n},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(a(28)),o=a(3);t.default=new class{constructor(){this.docs={}}saveDoc(e,t){if(this.docs[e.id]=e,t&&Object.assign(e,t),e.thumb&&"photoCachedSize"==e.thumb._&&(s.default.saveSmallFile(e.thumb.location,e.thumb.bytes),e.thumb.size=e.thumb.bytes.length,delete e.thumb.bytes,e.thumb._="photoSize"),e.thumb&&"photoSizeEmpty"==e.thumb._&&delete e.thumb,e.attributes.forEach(t=>{switch(t._){case"documentAttributeFilename":e.file_name=t.file_name;break;case"documentAttributeAudio":e.duration=t.duration,e.audioTitle=t.title,e.audioPerformer=t.performer,e.type=t.pFlags.voice?"voice":"audio";break;case"documentAttributeVideo":e.duration=t.duration,e.w=t.w,e.h=t.h,e.thumbs&&t.pFlags.round_message?e.type="round":e.thumbs&&(e.type="video");break;case"documentAttributeSticker":e.sticker=!0,void 0!==t.alt&&(e.stickerEmojiRaw=t.alt,e.stickerEmoji=o.RichTextProcessor.wrapRichText(e.stickerEmojiRaw,{noLinks:!0,noLinebreaks:!0})),t.stickerset&&("inputStickerSetEmpty"==t.stickerset._?delete t.stickerset:"inputStickerSetID"==t.stickerset._&&(e.stickerSetInput=t.stickerset)),e.thumbs&&"image/webp"==e.mime_type?e.type="sticker":"application/x-tgsticker"==e.mime_type&&(e.type="sticker",e.animated=!0);break;case"documentAttributeImageSize":e.w=t.w,e.h=t.h;break;case"documentAttributeAnimated":"image/gif"!=e.mime_type&&"video/mp4"!=e.mime_type||!e.thumbs||(e.type="gif"),e.animated=!0}}),!e.mime_type)switch(e.type){case"gif":e.mime_type="video/mp4";break;case"video":case"round":e.mime_type="video/mp4";break;case"sticker":e.mime_type="image/webp";break;case"audio":e.mime_type="audio/mpeg";break;case"voice":e.mime_type="audio/ogg";break;default:e.mime_type="application/octet-stream"}e.file_name||(e.file_name=""),"documentEmpty"==e._&&(e.size=0)}getDoc(e){return this.docs[e]||{_:"documentEmpty"}}hasDoc(e){return void 0!==this.docs[e]}getFileName(e){if(e.file_name)return e.file_name;var t="."+e.mime_type.split("/")[1];return".octet-stream"==t&&(t=""),"t_"+(e.type||"file")+e.id+t}updateDocDownloaded(e){var t=this.docs[e],a={_:"inputDocumentFileLocation",id:e,access_hash:t.access_hash,version:t.version,file_name:this.getFileName(t)};void 0===t.downloaded&&s.default.getDownloadedFile(a,t.size).then(()=>{t.downloaded=!0},()=>{t.downloaded=!1})}downloadDoc(e,t){let a;var r={_:"inputDocumentFileLocation",id:(a="string"==typeof e?this.docs[e]:e).id,access_hash:a.access_hash,file_reference:a.file_reference,thumb_size:"",version:a.version,file_name:this.getFileName(a)};if("documentEmpty"==a._)return Promise.reject();if(a.downloaded&&!t){var o=s.default.getCachedFile(r);if(o)return Promise.resolve(o)}var n=s.default.downloadFile(a.dc_id,r,a.size,{mimeType:a.mime_type||"application/octet-stream",toFileEntry:t});return n.then(e=>(e&&(a.downloaded=!0),e),e=>{console.log("document download failed",e)}),n}}},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=a(4),o=r(a(8)),n=r(a(19)),i=r(a(10)),d=r(a(15)),c=a(0),l=r(a(12)),p=a(3);t.default=new class{constructor(){this.overlaysDiv=document.querySelector(".overlays"),this.author={avatarEl:this.overlaysDiv.querySelector(".user-avatar"),nameEl:this.overlaysDiv.querySelector(".media-viewer-name"),date:this.overlaysDiv.querySelector(".media-viewer-date")},this.buttons={delete:this.overlaysDiv.querySelector(".media-viewer-delete-button"),forward:this.overlaysDiv.querySelector(".media-viewer-forward-button"),download:this.overlaysDiv.querySelector(".media-viewer-download-button"),close:this.overlaysDiv.querySelector(".media-viewer-close-button"),prev:this.overlaysDiv.querySelector(".media-viewer-switcher-left"),next:this.overlaysDiv.querySelector(".media-viewer-switcher-right")},this.content={container:this.overlaysDiv.querySelector(".media-viewer-media"),caption:this.overlaysDiv.querySelector(".media-viewer-caption")},this.reverse=!1,this.currentMessageID=0,this.higherMsgID=0,this.lowerMsgID=0,this.preloader=null,this.preloader=new s.ProgressivePreloader,this.buttons.close.addEventListener("click",()=>{this.overlaysDiv.classList.remove("active"),this.content.container.innerHTML=""}),this.buttons.prev.addEventListener("click",()=>{let e=this.reverse?this.lowerMsgID:this.higherMsgID;e?this.openMedia(l.default.getMessage(e),this.reverse):this.buttons.prev.style.display="none"}),this.buttons.next.addEventListener("click",()=>{let e=this.reverse?this.higherMsgID:this.lowerMsgID;e?this.openMedia(l.default.getMessage(e),this.reverse):this.buttons.next.style.display="none"})}openMedia(e,t=!1){console.log("openMedia doc:",e);let a=e.media.photo||e.media.document||e.media.webpage.document,r="video/mp4"==a.mime_type;this.currentMessageID=e.mid,this.reverse=t;let h=this.content.container;h.firstElementChild&&h.firstElementChild.remove();let m=new Date(1e3*a.date),g=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][m.getMonth()]+" "+m.getDate()+" at "+m.getHours()+":"+("0"+m.getMinutes()).slice(-2);this.author.date.innerText=g;let y=o.default.getPeerTitle(e.fromID);if(this.author.nameEl.innerText=y,e.message?this.content.caption.innerHTML=p.RichTextProcessor.wrapRichText(e.message,{entities:e.totalEntities}):this.content.caption.innerHTML="",n.default.loadDialogPhoto(this.author.avatarEl,e.fromID),this.overlaysDiv.classList.add("active"),r)i.default.setAttachmentSize(a,h),this.preloader.attach(h),console.log("will wrap video"),s.wrapVideo(a,h,()=>this.currentMessageID==e.mid||(console.warn("media viewer changed photo"),!1),e.mid,!1,this.preloader);else{let t=i.default.setAttachmentSize(a.id,h,i.default.windowW,i.default.windowH);this.preloader.attach(h),i.default.preloadPhoto(a.id,t).then(t=>{if(this.currentMessageID!=e.mid)return void console.warn("media viewer changed photo");console.log("indochina",t),h.firstElementChild&&h.firstElementChild.remove();let a=new Image;a.src=URL.createObjectURL(t),h.append(a),h.style.width="",h.style.height="",this.preloader.detach()})}let u=d.default.historiesStorage[c.$rootScope.selectedPeerID].inputMessagesFilterPhotoVideo.slice(),_=u.findIndex(t=>t==e.mid),f=e=>{let t=l.default.getMessage(e);return!(!t.media||!t.media.photo)};this.higherMsgID=u.slice(0,_).reverse().find(f),this.lowerMsgID=u.slice(_+1).find(f),this.reverse?(this.buttons.prev.style.display=void 0!==this.lowerMsgID?"":"none",this.buttons.next.style.display=void 0!==this.higherMsgID?"":"none"):(this.buttons.prev.style.display=void 0!==this.higherMsgID?"":"none",this.buttons.next.style.display=void 0!==this.lowerMsgID?"":"none")}}},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=a(9),o=a(4),n=r(a(12)),i=r(a(19));t.default=new class{constructor(){this.sidebarEl=document.querySelector(".page-chats .chats-container"),this.searchInput=document.getElementById("global-search"),this.toolsBtn=this.sidebarEl.querySelector(".sidebar-tools-button"),this.searchContainer=this.sidebarEl.querySelector("#search-container"),this.listsContainer=null,this.searchMessagesList=null,this.log=s.logger("SL"),this.peerID=0,this.searchPromise=null,this.listsContainer=o.scrollable(this.searchContainer),this.searchMessagesList=document.createElement("ul"),this.searchContainer.append(this.listsContainer),i.default.setListClickListener(this.searchMessagesList),this.searchInput.addEventListener("focus",e=>{this.toolsBtn.classList.remove("tgico-menu"),this.toolsBtn.classList.add("tgico-back"),this.searchContainer.classList.add("active"),this.searchInput.value||(this.searchMessagesList.innerHTML=""),this.searchInput.addEventListener("blur",e=>{this.searchInput.value||(this.toolsBtn.classList.add("tgico-menu"),this.toolsBtn.classList.remove("tgico-back"),this.searchContainer.classList.remove("active")),this.peerID=0},{once:!0})}),this.searchInput.addEventListener("input",e=>{let t=this.searchInput.value;this.log("input",t),this.listsContainer.contains(this.searchMessagesList)&&this.listsContainer.removeChild(this.searchMessagesList),t.trim()&&n.default.getSearch(this.peerID,t,null,0,20).then(e=>{if(this.searchInput.value!=t)return;this.log("input search result:",e);let{count:a,history:r}=e;this.searchMessagesList.innerHTML="",r.forEach(e=>{let t=n.default.getMessage(e),a=n.default.getDialogByPeerID(t.peerID)[0];if(!a)return void this.log.warn("no original dialog by message:",e);let{dialog:r,dom:s}=i.default.addDialog(a,this.searchMessagesList,!1);i.default.setLastMessage(r,t,s)}),this.listsContainer.append(this.searchMessagesList)})}),this.toolsBtn.addEventListener("click",()=>{this.toolsBtn.classList.contains("tgico-back")&&(this.searchInput.value="",this.toolsBtn.classList.add("tgico-menu"),this.toolsBtn.classList.remove("tgico-back"),this.searchContainer.classList.remove("active"))})}beginSearch(e){e&&(this.peerID=e),this.searchInput.focus()}}},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=a(1),o=a(4),n=a(3),i=a(0),d=r(a(70));let c=!1;const l=r(a(74));t.default=()=>{const e=document.body.getElementsByClassName("page-sign")[0];e.style.display="";let t=e.querySelector("button");if(c)return t.textContent="NEXT",void t.removeAttribute("disabled");c=!0;const a=l.default;let r="";var p=e.querySelector('input[name="countryCode"]'),h=p.parentElement,m=document.createElement("div");m.classList.add("select-wrapper","z-depth-4");var g=document.createElement("ul");m.appendChild(g);o.scrollable(m);let y=!1;p.addEventListener("focus",(function(e){y||(a.forEach(e=>{y=!0;let t=i.countryCodeEmoji(e.code),a=[];e.phoneCode.split(" and ").forEach(r=>{let s=document.createElement("li");var o=document.createElement("span");let i=n.RichTextProcessor.wrapRichText(t);s.appendChild(o),o.outerHTML=i,s.append(e.name);var d=document.createElement("span");d.classList.add("phone-code"),d.innerText="+"+r,s.appendChild(d),a.push(s),g.append(s)}),e.li=a}),g.addEventListener("mousedown",(function(e){let t=e.target;"LI"!=t.tagName&&(t=i.findUpTag(t,"LI"));let a=t.childNodes[1].textContent,s=t.querySelector(".phone-code").innerText;p.value=a,r=a,u.value=s,setTimeout(()=>u.focus(),0),console.log("clicked",e,a,s)}))),h.appendChild(m)})),p.addEventListener("blur",(function(e){h.removeChild(m),e.cancelBubble=!0}),{capture:!0}),p.addEventListener("keyup",(function(e){if(e.ctrlKey||"Control"==e.key)return!1;let t=this.value.toLowerCase(),s=[];if(a.forEach(e=>{let a=-1!==e.name.toLowerCase().indexOf(t);e.li.forEach(e=>e.style.display=a?"":"none"),a&&s.push(e)}),1==s.length&&1==s[0].li.length){if(s[0].name==r)return!1;console.log("clicking",s[0]);var o=document.createEvent("MouseEvents");return o.initEvent("mousedown",!0,!0),s[0].li[0].dispatchEvent(o),!1}0==s.length&&a.forEach(e=>{e.li.forEach(e=>e.style.display="")})})),e.querySelector(".arrow-down").addEventListener("mousedown",(function(e){e.cancelBubble=!0,e.preventDefault(),p.matches(":focus")?p.blur():p.focus()}));let u=e.querySelector('input[name="phone"]');u.addEventListener("input",(function(e){this.classList.remove("error"),this.value="+"+this.value.replace(/[^0-9\s]/g,"");let s=a.slice().sort((e,t)=>t.phoneCode.length-e.phoneCode.length),o=this.value.slice(1,7).replace(/\D/g,""),n=s.find(e=>e.phoneCode.split(" and ").find(e=>0==o.indexOf(e)));console.log(o,n);let i=n?n.name:"";i!=p.value&&(p.value=i,r=i),this.value.length>=9&&(t.style.display="")})),u.addEventListener("keypress",(function(e){return this.value.length>=9&&"Enter"==e.key?t.click():/\D/.test(e.key)?(e.preventDefault(),!1):void 0})),t.addEventListener("click",(function(t){this.setAttribute("disabled","true"),this.textContent="PLEASE WAIT...",o.putPreloader(this);let a=u.value;s.MTProto.apiManager.invokeApi("auth.sendCode",{phone_number:a,api_id:Config.App.id,api_hash:Config.App.hash,settings:{_:"codeSettings",flags:0}}).then(t=>{console.log("got code",t),e.style.display="none",d.default(Object.assign(t,{phone_number:a}))}).catch(e=>{switch(this.removeAttribute("disabled"),this.innerText="NEXT",e.type){case"PHONE_NUMBER_INVALID":u.classList.add("error");break;default:this.innerText=e.type}})}));o.getNearestDc().then(e=>{let t=a.find(t=>t.code==e.country);return t&&(p.value.length||u.value.length||(p.value=t.name,r=t.name,u.value="+"+t.phoneCode.split(" and ").shift())),console.log("woohoo",e,t)})}},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),a(44),a(46),a(52);const s=r(a(6)),o=r(a(16)),n=r(a(42)),i=a(4);console.log("pineapples in my head"),document.addEventListener("DOMContentLoaded",(function(){Array.from(document.getElementsByClassName("rp")).forEach(i.ripple),s.default.get("user_auth").then(e=>{e.id||0?o.default():(n.default(),console.log("need auth"))})}))},function(e,t,a){var r=a(45);"string"==typeof r&&(r=[[e.i,r,""]]);var s={insert:"head",singleton:!1};a(21)(r,s);r.locals&&(e.exports=r.locals)},function(e,t,a){(e.exports=a(20)(!1)).push([e.i,'.materialize-red{background-color:#e51c23 !important}.materialize-red-text{color:#e51c23 !important}.materialize-red.lighten-5{background-color:#fdeaeb !important}.materialize-red-text.text-lighten-5{color:#fdeaeb !important}.materialize-red.lighten-4{background-color:#f8c1c3 !important}.materialize-red-text.text-lighten-4{color:#f8c1c3 !important}.materialize-red.lighten-3{background-color:#f3989b !important}.materialize-red-text.text-lighten-3{color:#f3989b !important}.materialize-red.lighten-2{background-color:#ee6e73 !important}.materialize-red-text.text-lighten-2{color:#ee6e73 !important}.materialize-red.lighten-1{background-color:#ea454b !important}.materialize-red-text.text-lighten-1{color:#ea454b !important}.materialize-red.darken-1{background-color:#d0181e !important}.materialize-red-text.text-darken-1{color:#d0181e !important}.materialize-red.darken-2{background-color:#b9151b !important}.materialize-red-text.text-darken-2{color:#b9151b !important}.materialize-red.darken-3{background-color:#a21318 !important}.materialize-red-text.text-darken-3{color:#a21318 !important}.materialize-red.darken-4{background-color:#8b1014 !important}.materialize-red-text.text-darken-4{color:#8b1014 !important}.red{background-color:#F44336 !important}.red-text{color:#F44336 !important}.red.lighten-5{background-color:#FFEBEE !important}.red-text.text-lighten-5{color:#FFEBEE !important}.red.lighten-4{background-color:#FFCDD2 !important}.red-text.text-lighten-4{color:#FFCDD2 !important}.red.lighten-3{background-color:#EF9A9A !important}.red-text.text-lighten-3{color:#EF9A9A !important}.red.lighten-2{background-color:#E57373 !important}.red-text.text-lighten-2{color:#E57373 !important}.red.lighten-1{background-color:#EF5350 !important}.red-text.text-lighten-1{color:#EF5350 !important}.red.darken-1{background-color:#E53935 !important}.red-text.text-darken-1{color:#E53935 !important}.red.darken-2{background-color:#D32F2F !important}.red-text.text-darken-2{color:#D32F2F !important}.red.darken-3{background-color:#C62828 !important}.red-text.text-darken-3{color:#C62828 !important}.red.darken-4{background-color:#B71C1C !important}.red-text.text-darken-4{color:#B71C1C !important}.red.accent-1{background-color:#FF8A80 !important}.red-text.text-accent-1{color:#FF8A80 !important}.red.accent-2{background-color:#FF5252 !important}.red-text.text-accent-2{color:#FF5252 !important}.red.accent-3{background-color:#FF1744 !important}.red-text.text-accent-3{color:#FF1744 !important}.red.accent-4{background-color:#D50000 !important}.red-text.text-accent-4{color:#D50000 !important}.pink{background-color:#e91e63 !important}.pink-text{color:#e91e63 !important}.pink.lighten-5{background-color:#fce4ec !important}.pink-text.text-lighten-5{color:#fce4ec !important}.pink.lighten-4{background-color:#f8bbd0 !important}.pink-text.text-lighten-4{color:#f8bbd0 !important}.pink.lighten-3{background-color:#f48fb1 !important}.pink-text.text-lighten-3{color:#f48fb1 !important}.pink.lighten-2{background-color:#f06292 !important}.pink-text.text-lighten-2{color:#f06292 !important}.pink.lighten-1{background-color:#ec407a !important}.pink-text.text-lighten-1{color:#ec407a !important}.pink.darken-1{background-color:#d81b60 !important}.pink-text.text-darken-1{color:#d81b60 !important}.pink.darken-2{background-color:#c2185b !important}.pink-text.text-darken-2{color:#c2185b !important}.pink.darken-3{background-color:#ad1457 !important}.pink-text.text-darken-3{color:#ad1457 !important}.pink.darken-4{background-color:#880e4f !important}.pink-text.text-darken-4{color:#880e4f !important}.pink.accent-1{background-color:#ff80ab !important}.pink-text.text-accent-1{color:#ff80ab !important}.pink.accent-2{background-color:#ff4081 !important}.pink-text.text-accent-2{color:#ff4081 !important}.pink.accent-3{background-color:#f50057 !important}.pink-text.text-accent-3{color:#f50057 !important}.pink.accent-4{background-color:#c51162 !important}.pink-text.text-accent-4{color:#c51162 !important}.purple{background-color:#9c27b0 !important}.purple-text{color:#9c27b0 !important}.purple.lighten-5{background-color:#f3e5f5 !important}.purple-text.text-lighten-5{color:#f3e5f5 !important}.purple.lighten-4{background-color:#e1bee7 !important}.purple-text.text-lighten-4{color:#e1bee7 !important}.purple.lighten-3{background-color:#ce93d8 !important}.purple-text.text-lighten-3{color:#ce93d8 !important}.purple.lighten-2{background-color:#ba68c8 !important}.purple-text.text-lighten-2{color:#ba68c8 !important}.purple.lighten-1{background-color:#ab47bc !important}.purple-text.text-lighten-1{color:#ab47bc !important}.purple.darken-1{background-color:#8e24aa !important}.purple-text.text-darken-1{color:#8e24aa !important}.purple.darken-2{background-color:#7b1fa2 !important}.purple-text.text-darken-2{color:#7b1fa2 !important}.purple.darken-3{background-color:#6a1b9a !important}.purple-text.text-darken-3{color:#6a1b9a !important}.purple.darken-4{background-color:#4a148c !important}.purple-text.text-darken-4{color:#4a148c !important}.purple.accent-1{background-color:#ea80fc !important}.purple-text.text-accent-1{color:#ea80fc !important}.purple.accent-2{background-color:#e040fb !important}.purple-text.text-accent-2{color:#e040fb !important}.purple.accent-3{background-color:#d500f9 !important}.purple-text.text-accent-3{color:#d500f9 !important}.purple.accent-4{background-color:#a0f !important}.purple-text.text-accent-4{color:#a0f !important}.deep-purple{background-color:#673ab7 !important}.deep-purple-text{color:#673ab7 !important}.deep-purple.lighten-5{background-color:#ede7f6 !important}.deep-purple-text.text-lighten-5{color:#ede7f6 !important}.deep-purple.lighten-4{background-color:#d1c4e9 !important}.deep-purple-text.text-lighten-4{color:#d1c4e9 !important}.deep-purple.lighten-3{background-color:#b39ddb !important}.deep-purple-text.text-lighten-3{color:#b39ddb !important}.deep-purple.lighten-2{background-color:#9575cd !important}.deep-purple-text.text-lighten-2{color:#9575cd !important}.deep-purple.lighten-1{background-color:#7e57c2 !important}.deep-purple-text.text-lighten-1{color:#7e57c2 !important}.deep-purple.darken-1{background-color:#5e35b1 !important}.deep-purple-text.text-darken-1{color:#5e35b1 !important}.deep-purple.darken-2{background-color:#512da8 !important}.deep-purple-text.text-darken-2{color:#512da8 !important}.deep-purple.darken-3{background-color:#4527a0 !important}.deep-purple-text.text-darken-3{color:#4527a0 !important}.deep-purple.darken-4{background-color:#311b92 !important}.deep-purple-text.text-darken-4{color:#311b92 !important}.deep-purple.accent-1{background-color:#b388ff !important}.deep-purple-text.text-accent-1{color:#b388ff !important}.deep-purple.accent-2{background-color:#7c4dff !important}.deep-purple-text.text-accent-2{color:#7c4dff !important}.deep-purple.accent-3{background-color:#651fff !important}.deep-purple-text.text-accent-3{color:#651fff !important}.deep-purple.accent-4{background-color:#6200ea !important}.deep-purple-text.text-accent-4{color:#6200ea !important}.indigo{background-color:#3f51b5 !important}.indigo-text{color:#3f51b5 !important}.indigo.lighten-5{background-color:#e8eaf6 !important}.indigo-text.text-lighten-5{color:#e8eaf6 !important}.indigo.lighten-4{background-color:#c5cae9 !important}.indigo-text.text-lighten-4{color:#c5cae9 !important}.indigo.lighten-3{background-color:#9fa8da !important}.indigo-text.text-lighten-3{color:#9fa8da !important}.indigo.lighten-2{background-color:#7986cb !important}.indigo-text.text-lighten-2{color:#7986cb !important}.indigo.lighten-1{background-color:#5c6bc0 !important}.indigo-text.text-lighten-1{color:#5c6bc0 !important}.indigo.darken-1{background-color:#3949ab !important}.indigo-text.text-darken-1{color:#3949ab !important}.indigo.darken-2{background-color:#303f9f !important}.indigo-text.text-darken-2{color:#303f9f !important}.indigo.darken-3{background-color:#283593 !important}.indigo-text.text-darken-3{color:#283593 !important}.indigo.darken-4{background-color:#1a237e !important}.indigo-text.text-darken-4{color:#1a237e !important}.indigo.accent-1{background-color:#8c9eff !important}.indigo-text.text-accent-1{color:#8c9eff !important}.indigo.accent-2{background-color:#536dfe !important}.indigo-text.text-accent-2{color:#536dfe !important}.indigo.accent-3{background-color:#3d5afe !important}.indigo-text.text-accent-3{color:#3d5afe !important}.indigo.accent-4{background-color:#304ffe !important}.indigo-text.text-accent-4{color:#304ffe !important}.blue{background-color:#2196F3 !important}.blue-text{color:#2196F3 !important}.blue.lighten-5{background-color:#E3F2FD !important}.blue-text.text-lighten-5{color:#E3F2FD !important}.blue.lighten-4{background-color:#BBDEFB !important}.blue-text.text-lighten-4{color:#BBDEFB !important}.blue.lighten-3{background-color:#90CAF9 !important}.blue-text.text-lighten-3{color:#90CAF9 !important}.blue.lighten-2{background-color:#64B5F6 !important}.blue-text.text-lighten-2{color:#64B5F6 !important}.blue.lighten-1{background-color:#42A5F5 !important}.blue-text.text-lighten-1{color:#42A5F5 !important}.blue.darken-1{background-color:#1E88E5 !important}.blue-text.text-darken-1{color:#1E88E5 !important}.blue.darken-2{background-color:#1976D2 !important}.blue-text.text-darken-2{color:#1976D2 !important}.blue.darken-3{background-color:#1565C0 !important}.blue-text.text-darken-3{color:#1565C0 !important}.blue.darken-4{background-color:#0D47A1 !important}.blue-text.text-darken-4{color:#0D47A1 !important}.blue.accent-1{background-color:#82B1FF !important}.blue-text.text-accent-1{color:#82B1FF !important}.blue.accent-2{background-color:#448AFF !important}.blue-text.text-accent-2{color:#448AFF !important}.blue.accent-3{background-color:#2979FF !important}.blue-text.text-accent-3{color:#2979FF !important}.blue.accent-4{background-color:#2962FF !important}.blue-text.text-accent-4{color:#2962FF !important}.light-blue{background-color:#03a9f4 !important}.light-blue-text{color:#03a9f4 !important}.light-blue.lighten-5{background-color:#e1f5fe !important}.light-blue-text.text-lighten-5{color:#e1f5fe !important}.light-blue.lighten-4{background-color:#b3e5fc !important}.light-blue-text.text-lighten-4{color:#b3e5fc !important}.light-blue.lighten-3{background-color:#81d4fa !important}.light-blue-text.text-lighten-3{color:#81d4fa !important}.light-blue.lighten-2{background-color:#4fc3f7 !important}.light-blue-text.text-lighten-2{color:#4fc3f7 !important}.light-blue.lighten-1{background-color:#29b6f6 !important}.light-blue-text.text-lighten-1{color:#29b6f6 !important}.light-blue.darken-1{background-color:#039be5 !important}.light-blue-text.text-darken-1{color:#039be5 !important}.light-blue.darken-2{background-color:#0288d1 !important}.light-blue-text.text-darken-2{color:#0288d1 !important}.light-blue.darken-3{background-color:#0277bd !important}.light-blue-text.text-darken-3{color:#0277bd !important}.light-blue.darken-4{background-color:#01579b !important}.light-blue-text.text-darken-4{color:#01579b !important}.light-blue.accent-1{background-color:#80d8ff !important}.light-blue-text.text-accent-1{color:#80d8ff !important}.light-blue.accent-2{background-color:#40c4ff !important}.light-blue-text.text-accent-2{color:#40c4ff !important}.light-blue.accent-3{background-color:#00b0ff !important}.light-blue-text.text-accent-3{color:#00b0ff !important}.light-blue.accent-4{background-color:#0091ea !important}.light-blue-text.text-accent-4{color:#0091ea !important}.cyan{background-color:#00bcd4 !important}.cyan-text{color:#00bcd4 !important}.cyan.lighten-5{background-color:#e0f7fa !important}.cyan-text.text-lighten-5{color:#e0f7fa !important}.cyan.lighten-4{background-color:#b2ebf2 !important}.cyan-text.text-lighten-4{color:#b2ebf2 !important}.cyan.lighten-3{background-color:#80deea !important}.cyan-text.text-lighten-3{color:#80deea !important}.cyan.lighten-2{background-color:#4dd0e1 !important}.cyan-text.text-lighten-2{color:#4dd0e1 !important}.cyan.lighten-1{background-color:#26c6da !important}.cyan-text.text-lighten-1{color:#26c6da !important}.cyan.darken-1{background-color:#00acc1 !important}.cyan-text.text-darken-1{color:#00acc1 !important}.cyan.darken-2{background-color:#0097a7 !important}.cyan-text.text-darken-2{color:#0097a7 !important}.cyan.darken-3{background-color:#00838f !important}.cyan-text.text-darken-3{color:#00838f !important}.cyan.darken-4{background-color:#006064 !important}.cyan-text.text-darken-4{color:#006064 !important}.cyan.accent-1{background-color:#84ffff !important}.cyan-text.text-accent-1{color:#84ffff !important}.cyan.accent-2{background-color:#18ffff !important}.cyan-text.text-accent-2{color:#18ffff !important}.cyan.accent-3{background-color:#00e5ff !important}.cyan-text.text-accent-3{color:#00e5ff !important}.cyan.accent-4{background-color:#00b8d4 !important}.cyan-text.text-accent-4{color:#00b8d4 !important}.teal{background-color:#009688 !important}.teal-text{color:#009688 !important}.teal.lighten-5{background-color:#e0f2f1 !important}.teal-text.text-lighten-5{color:#e0f2f1 !important}.teal.lighten-4{background-color:#b2dfdb !important}.teal-text.text-lighten-4{color:#b2dfdb !important}.teal.lighten-3{background-color:#80cbc4 !important}.teal-text.text-lighten-3{color:#80cbc4 !important}.teal.lighten-2{background-color:#4db6ac !important}.teal-text.text-lighten-2{color:#4db6ac !important}.teal.lighten-1{background-color:#26a69a !important}.teal-text.text-lighten-1{color:#26a69a !important}.teal.darken-1{background-color:#00897b !important}.teal-text.text-darken-1{color:#00897b !important}.teal.darken-2{background-color:#00796b !important}.teal-text.text-darken-2{color:#00796b !important}.teal.darken-3{background-color:#00695c !important}.teal-text.text-darken-3{color:#00695c !important}.teal.darken-4{background-color:#004d40 !important}.teal-text.text-darken-4{color:#004d40 !important}.teal.accent-1{background-color:#a7ffeb !important}.teal-text.text-accent-1{color:#a7ffeb !important}.teal.accent-2{background-color:#64ffda !important}.teal-text.text-accent-2{color:#64ffda !important}.teal.accent-3{background-color:#1de9b6 !important}.teal-text.text-accent-3{color:#1de9b6 !important}.teal.accent-4{background-color:#00bfa5 !important}.teal-text.text-accent-4{color:#00bfa5 !important}.green{background-color:#4CAF50 !important}.green-text{color:#4CAF50 !important}.green.lighten-5{background-color:#E8F5E9 !important}.green-text.text-lighten-5{color:#E8F5E9 !important}.green.lighten-4{background-color:#C8E6C9 !important}.green-text.text-lighten-4{color:#C8E6C9 !important}.green.lighten-3{background-color:#A5D6A7 !important}.green-text.text-lighten-3{color:#A5D6A7 !important}.green.lighten-2{background-color:#81C784 !important}.green-text.text-lighten-2{color:#81C784 !important}.green.lighten-1{background-color:#66BB6A !important}.green-text.text-lighten-1{color:#66BB6A !important}.green.darken-1{background-color:#43A047 !important}.green-text.text-darken-1{color:#43A047 !important}.green.darken-2{background-color:#388E3C !important}.green-text.text-darken-2{color:#388E3C !important}.green.darken-3{background-color:#2E7D32 !important}.green-text.text-darken-3{color:#2E7D32 !important}.green.darken-4{background-color:#1B5E20 !important}.green-text.text-darken-4{color:#1B5E20 !important}.green.accent-1{background-color:#B9F6CA !important}.green-text.text-accent-1{color:#B9F6CA !important}.green.accent-2{background-color:#69F0AE !important}.green-text.text-accent-2{color:#69F0AE !important}.green.accent-3{background-color:#00E676 !important}.green-text.text-accent-3{color:#00E676 !important}.green.accent-4{background-color:#00C853 !important}.green-text.text-accent-4{color:#00C853 !important}.light-green{background-color:#8bc34a !important}.light-green-text{color:#8bc34a !important}.light-green.lighten-5{background-color:#f1f8e9 !important}.light-green-text.text-lighten-5{color:#f1f8e9 !important}.light-green.lighten-4{background-color:#dcedc8 !important}.light-green-text.text-lighten-4{color:#dcedc8 !important}.light-green.lighten-3{background-color:#c5e1a5 !important}.light-green-text.text-lighten-3{color:#c5e1a5 !important}.light-green.lighten-2{background-color:#aed581 !important}.light-green-text.text-lighten-2{color:#aed581 !important}.light-green.lighten-1{background-color:#9ccc65 !important}.light-green-text.text-lighten-1{color:#9ccc65 !important}.light-green.darken-1{background-color:#7cb342 !important}.light-green-text.text-darken-1{color:#7cb342 !important}.light-green.darken-2{background-color:#689f38 !important}.light-green-text.text-darken-2{color:#689f38 !important}.light-green.darken-3{background-color:#558b2f !important}.light-green-text.text-darken-3{color:#558b2f !important}.light-green.darken-4{background-color:#33691e !important}.light-green-text.text-darken-4{color:#33691e !important}.light-green.accent-1{background-color:#ccff90 !important}.light-green-text.text-accent-1{color:#ccff90 !important}.light-green.accent-2{background-color:#b2ff59 !important}.light-green-text.text-accent-2{color:#b2ff59 !important}.light-green.accent-3{background-color:#76ff03 !important}.light-green-text.text-accent-3{color:#76ff03 !important}.light-green.accent-4{background-color:#64dd17 !important}.light-green-text.text-accent-4{color:#64dd17 !important}.lime{background-color:#cddc39 !important}.lime-text{color:#cddc39 !important}.lime.lighten-5{background-color:#f9fbe7 !important}.lime-text.text-lighten-5{color:#f9fbe7 !important}.lime.lighten-4{background-color:#f0f4c3 !important}.lime-text.text-lighten-4{color:#f0f4c3 !important}.lime.lighten-3{background-color:#e6ee9c !important}.lime-text.text-lighten-3{color:#e6ee9c !important}.lime.lighten-2{background-color:#dce775 !important}.lime-text.text-lighten-2{color:#dce775 !important}.lime.lighten-1{background-color:#d4e157 !important}.lime-text.text-lighten-1{color:#d4e157 !important}.lime.darken-1{background-color:#c0ca33 !important}.lime-text.text-darken-1{color:#c0ca33 !important}.lime.darken-2{background-color:#afb42b !important}.lime-text.text-darken-2{color:#afb42b !important}.lime.darken-3{background-color:#9e9d24 !important}.lime-text.text-darken-3{color:#9e9d24 !important}.lime.darken-4{background-color:#827717 !important}.lime-text.text-darken-4{color:#827717 !important}.lime.accent-1{background-color:#f4ff81 !important}.lime-text.text-accent-1{color:#f4ff81 !important}.lime.accent-2{background-color:#eeff41 !important}.lime-text.text-accent-2{color:#eeff41 !important}.lime.accent-3{background-color:#c6ff00 !important}.lime-text.text-accent-3{color:#c6ff00 !important}.lime.accent-4{background-color:#aeea00 !important}.lime-text.text-accent-4{color:#aeea00 !important}.yellow{background-color:#ffeb3b !important}.yellow-text{color:#ffeb3b !important}.yellow.lighten-5{background-color:#fffde7 !important}.yellow-text.text-lighten-5{color:#fffde7 !important}.yellow.lighten-4{background-color:#fff9c4 !important}.yellow-text.text-lighten-4{color:#fff9c4 !important}.yellow.lighten-3{background-color:#fff59d !important}.yellow-text.text-lighten-3{color:#fff59d !important}.yellow.lighten-2{background-color:#fff176 !important}.yellow-text.text-lighten-2{color:#fff176 !important}.yellow.lighten-1{background-color:#ffee58 !important}.yellow-text.text-lighten-1{color:#ffee58 !important}.yellow.darken-1{background-color:#fdd835 !important}.yellow-text.text-darken-1{color:#fdd835 !important}.yellow.darken-2{background-color:#fbc02d !important}.yellow-text.text-darken-2{color:#fbc02d !important}.yellow.darken-3{background-color:#f9a825 !important}.yellow-text.text-darken-3{color:#f9a825 !important}.yellow.darken-4{background-color:#f57f17 !important}.yellow-text.text-darken-4{color:#f57f17 !important}.yellow.accent-1{background-color:#ffff8d !important}.yellow-text.text-accent-1{color:#ffff8d !important}.yellow.accent-2{background-color:#ff0 !important}.yellow-text.text-accent-2{color:#ff0 !important}.yellow.accent-3{background-color:#ffea00 !important}.yellow-text.text-accent-3{color:#ffea00 !important}.yellow.accent-4{background-color:#ffd600 !important}.yellow-text.text-accent-4{color:#ffd600 !important}.amber{background-color:#ffc107 !important}.amber-text{color:#ffc107 !important}.amber.lighten-5{background-color:#fff8e1 !important}.amber-text.text-lighten-5{color:#fff8e1 !important}.amber.lighten-4{background-color:#ffecb3 !important}.amber-text.text-lighten-4{color:#ffecb3 !important}.amber.lighten-3{background-color:#ffe082 !important}.amber-text.text-lighten-3{color:#ffe082 !important}.amber.lighten-2{background-color:#ffd54f !important}.amber-text.text-lighten-2{color:#ffd54f !important}.amber.lighten-1{background-color:#ffca28 !important}.amber-text.text-lighten-1{color:#ffca28 !important}.amber.darken-1{background-color:#ffb300 !important}.amber-text.text-darken-1{color:#ffb300 !important}.amber.darken-2{background-color:#ffa000 !important}.amber-text.text-darken-2{color:#ffa000 !important}.amber.darken-3{background-color:#ff8f00 !important}.amber-text.text-darken-3{color:#ff8f00 !important}.amber.darken-4{background-color:#ff6f00 !important}.amber-text.text-darken-4{color:#ff6f00 !important}.amber.accent-1{background-color:#ffe57f !important}.amber-text.text-accent-1{color:#ffe57f !important}.amber.accent-2{background-color:#ffd740 !important}.amber-text.text-accent-2{color:#ffd740 !important}.amber.accent-3{background-color:#ffc400 !important}.amber-text.text-accent-3{color:#ffc400 !important}.amber.accent-4{background-color:#ffab00 !important}.amber-text.text-accent-4{color:#ffab00 !important}.orange{background-color:#ff9800 !important}.orange-text{color:#ff9800 !important}.orange.lighten-5{background-color:#fff3e0 !important}.orange-text.text-lighten-5{color:#fff3e0 !important}.orange.lighten-4{background-color:#ffe0b2 !important}.orange-text.text-lighten-4{color:#ffe0b2 !important}.orange.lighten-3{background-color:#ffcc80 !important}.orange-text.text-lighten-3{color:#ffcc80 !important}.orange.lighten-2{background-color:#ffb74d !important}.orange-text.text-lighten-2{color:#ffb74d !important}.orange.lighten-1{background-color:#ffa726 !important}.orange-text.text-lighten-1{color:#ffa726 !important}.orange.darken-1{background-color:#fb8c00 !important}.orange-text.text-darken-1{color:#fb8c00 !important}.orange.darken-2{background-color:#f57c00 !important}.orange-text.text-darken-2{color:#f57c00 !important}.orange.darken-3{background-color:#ef6c00 !important}.orange-text.text-darken-3{color:#ef6c00 !important}.orange.darken-4{background-color:#e65100 !important}.orange-text.text-darken-4{color:#e65100 !important}.orange.accent-1{background-color:#ffd180 !important}.orange-text.text-accent-1{color:#ffd180 !important}.orange.accent-2{background-color:#ffab40 !important}.orange-text.text-accent-2{color:#ffab40 !important}.orange.accent-3{background-color:#ff9100 !important}.orange-text.text-accent-3{color:#ff9100 !important}.orange.accent-4{background-color:#ff6d00 !important}.orange-text.text-accent-4{color:#ff6d00 !important}.deep-orange{background-color:#ff5722 !important}.deep-orange-text{color:#ff5722 !important}.deep-orange.lighten-5{background-color:#fbe9e7 !important}.deep-orange-text.text-lighten-5{color:#fbe9e7 !important}.deep-orange.lighten-4{background-color:#ffccbc !important}.deep-orange-text.text-lighten-4{color:#ffccbc !important}.deep-orange.lighten-3{background-color:#ffab91 !important}.deep-orange-text.text-lighten-3{color:#ffab91 !important}.deep-orange.lighten-2{background-color:#ff8a65 !important}.deep-orange-text.text-lighten-2{color:#ff8a65 !important}.deep-orange.lighten-1{background-color:#ff7043 !important}.deep-orange-text.text-lighten-1{color:#ff7043 !important}.deep-orange.darken-1{background-color:#f4511e !important}.deep-orange-text.text-darken-1{color:#f4511e !important}.deep-orange.darken-2{background-color:#e64a19 !important}.deep-orange-text.text-darken-2{color:#e64a19 !important}.deep-orange.darken-3{background-color:#d84315 !important}.deep-orange-text.text-darken-3{color:#d84315 !important}.deep-orange.darken-4{background-color:#bf360c !important}.deep-orange-text.text-darken-4{color:#bf360c !important}.deep-orange.accent-1{background-color:#ff9e80 !important}.deep-orange-text.text-accent-1{color:#ff9e80 !important}.deep-orange.accent-2{background-color:#ff6e40 !important}.deep-orange-text.text-accent-2{color:#ff6e40 !important}.deep-orange.accent-3{background-color:#ff3d00 !important}.deep-orange-text.text-accent-3{color:#ff3d00 !important}.deep-orange.accent-4{background-color:#dd2c00 !important}.deep-orange-text.text-accent-4{color:#dd2c00 !important}.brown{background-color:#795548 !important}.brown-text{color:#795548 !important}.brown.lighten-5{background-color:#efebe9 !important}.brown-text.text-lighten-5{color:#efebe9 !important}.brown.lighten-4{background-color:#d7ccc8 !important}.brown-text.text-lighten-4{color:#d7ccc8 !important}.brown.lighten-3{background-color:#bcaaa4 !important}.brown-text.text-lighten-3{color:#bcaaa4 !important}.brown.lighten-2{background-color:#a1887f !important}.brown-text.text-lighten-2{color:#a1887f !important}.brown.lighten-1{background-color:#8d6e63 !important}.brown-text.text-lighten-1{color:#8d6e63 !important}.brown.darken-1{background-color:#6d4c41 !important}.brown-text.text-darken-1{color:#6d4c41 !important}.brown.darken-2{background-color:#5d4037 !important}.brown-text.text-darken-2{color:#5d4037 !important}.brown.darken-3{background-color:#4e342e !important}.brown-text.text-darken-3{color:#4e342e !important}.brown.darken-4{background-color:#3e2723 !important}.brown-text.text-darken-4{color:#3e2723 !important}.blue-grey{background-color:#607d8b !important}.blue-grey-text{color:#607d8b !important}.blue-grey.lighten-5{background-color:#eceff1 !important}.blue-grey-text.text-lighten-5{color:#eceff1 !important}.blue-grey.lighten-4{background-color:#cfd8dc !important}.blue-grey-text.text-lighten-4{color:#cfd8dc !important}.blue-grey.lighten-3{background-color:#b0bec5 !important}.blue-grey-text.text-lighten-3{color:#b0bec5 !important}.blue-grey.lighten-2{background-color:#90a4ae !important}.blue-grey-text.text-lighten-2{color:#90a4ae !important}.blue-grey.lighten-1{background-color:#78909c !important}.blue-grey-text.text-lighten-1{color:#78909c !important}.blue-grey.darken-1{background-color:#546e7a !important}.blue-grey-text.text-darken-1{color:#546e7a !important}.blue-grey.darken-2{background-color:#455a64 !important}.blue-grey-text.text-darken-2{color:#455a64 !important}.blue-grey.darken-3{background-color:#37474f !important}.blue-grey-text.text-darken-3{color:#37474f !important}.blue-grey.darken-4{background-color:#263238 !important}.blue-grey-text.text-darken-4{color:#263238 !important}.grey{background-color:#9e9e9e !important}.grey-text{color:#9e9e9e !important}.grey.lighten-5{background-color:#fafafa !important}.grey-text.text-lighten-5{color:#fafafa !important}.grey.lighten-4{background-color:#f5f5f5 !important}.grey-text.text-lighten-4{color:#f5f5f5 !important}.grey.lighten-3{background-color:#eee !important}.grey-text.text-lighten-3{color:#eee !important}.grey.lighten-2{background-color:#e0e0e0 !important}.grey-text.text-lighten-2{color:#e0e0e0 !important}.grey.lighten-1{background-color:#bdbdbd !important}.grey-text.text-lighten-1{color:#bdbdbd !important}.grey.darken-1{background-color:#757575 !important}.grey-text.text-darken-1{color:#757575 !important}.grey.darken-2{background-color:#616161 !important}.grey-text.text-darken-2{color:#616161 !important}.grey.darken-3{background-color:#424242 !important}.grey-text.text-darken-3{color:#424242 !important}.grey.darken-4{background-color:#212121 !important}.grey-text.text-darken-4{color:#212121 !important}.black{background-color:#000 !important}.black-text{color:#000 !important}.white{background-color:#fff !important}.white-text{color:#fff !important}.transparent{background-color:rgba(0,0,0,0) !important}.transparent-text{color:rgba(0,0,0,0) !important}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:0.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}button,input,optgroup,select,textarea{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}ul:not(.browser-default){padding-left:0;list-style-type:none}ul:not(.browser-default)>li{list-style-type:none}a{color:#039be5;text-decoration:none;-webkit-tap-highlight-color:transparent}.valign-wrapper{display:flex;align-items:center}.clearfix{clear:both}.z-depth-0{box-shadow:none !important}.z-depth-1{box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2)}.z-depth-1-half{box-shadow:0 3px 3px 0 rgba(0,0,0,0.14),0 1px 7px 0 rgba(0,0,0,0.12),0 3px 1px -1px rgba(0,0,0,0.2)}.z-depth-2{box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3)}.z-depth-3{box-shadow:0 8px 17px 2px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.2)}.z-depth-4{box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -7px rgba(0,0,0,0.2)}.z-depth-5{box-shadow:0 24px 38px 3px rgba(0,0,0,0.14),0 9px 46px 8px rgba(0,0,0,0.12),0 11px 15px -7px rgba(0,0,0,0.2)}.hoverable{transition:box-shadow .25s}.hoverable:hover{box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.divider{height:1px;overflow:hidden;background-color:#e0e0e0}blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #ee6e73}i{line-height:inherit}i.left{float:left;margin-right:15px}i.right{float:right;margin-left:15px}i.tiny{font-size:1rem}i.small{font-size:2rem}i.medium{font-size:4rem}i.large{font-size:6rem}img.responsive-img,video.responsive-video{max-width:100%;height:auto}.pagination li{display:inline-block;border-radius:2px;text-align:center;vertical-align:top;height:30px}.pagination li a{color:#444;display:inline-block;font-size:1.2rem;padding:0 10px;line-height:30px}.pagination li.active a{color:#fff}.pagination li.active{background-color:#ee6e73}.pagination li.disabled a{cursor:default;color:#999}.pagination li i{font-size:2rem}.pagination li.pages ul li{display:inline-block;float:none}@media only screen and (max-width: 992px){.pagination{width:100%}.pagination li.prev,.pagination li.next{width:10%}.pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}}.breadcrumb{font-size:18px;color:rgba(255,255,255,0.7)}.breadcrumb i,.breadcrumb [class^="mdi-"],.breadcrumb [class*="mdi-"],.breadcrumb i.material-icons{display:inline-block;float:left;font-size:24px}.breadcrumb:before{content:\'\\E5CC\';color:rgba(255,255,255,0.7);vertical-align:top;display:inline-block;font-family:\'Material Icons\';font-weight:normal;font-style:normal;font-size:25px;margin:0 10px 0 8px;-webkit-font-smoothing:antialiased}.breadcrumb:first-child:before{display:none}.breadcrumb:last-child{color:#fff}.parallax-container{position:relative;overflow:hidden;height:500px}.parallax-container .parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.parallax-container .parallax img{opacity:0;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;transform:translate3d(0, 0, 0);transform:translateX(-50%)}.pin-top,.pin-bottom{position:relative}.pinned{position:fixed !important}ul.staggered-list li{opacity:0}.fade-in{opacity:0;transform-origin:0 50%}@media only screen and (max-width: 600px){.hide-on-small-only,.hide-on-small-and-down{display:none !important}}@media only screen and (max-width: 992px){.hide-on-med-and-down{display:none !important}}@media only screen and (min-width: 601px){.hide-on-med-and-up{display:none !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.hide-on-med-only{display:none !important}}@media only screen and (min-width: 993px){.hide-on-large-only{display:none !important}}@media only screen and (min-width: 1201px){.hide-on-extra-large-only{display:none !important}}@media only screen and (min-width: 1201px){.show-on-extra-large{display:block !important}}@media only screen and (min-width: 993px){.show-on-large{display:block !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.show-on-medium{display:block !important}}@media only screen and (max-width: 600px){.show-on-small{display:block !important}}@media only screen and (min-width: 601px){.show-on-medium-and-up{display:block !important}}@media only screen and (max-width: 992px){.show-on-medium-and-down{display:block !important}}@media only screen and (max-width: 600px){.center-on-small-only{text-align:center}}.page-footer{padding-top:20px;color:#fff;background-color:#ee6e73}.page-footer .footer-copyright{overflow:hidden;min-height:50px;display:flex;align-items:center;justify-content:space-between;padding:10px 0px;color:rgba(255,255,255,0.8);background-color:rgba(51,51,51,0.08)}table,th,td{border:none}table{width:100%;display:table;border-collapse:collapse;border-spacing:0}table.striped tr{border-bottom:none}table.striped>tbody>tr:nth-child(odd){background-color:rgba(242,242,242,0.5)}table.striped>tbody>tr>td{border-radius:0}table.highlight>tbody>tr{transition:background-color .25s ease}table.highlight>tbody>tr:hover{background-color:rgba(242,242,242,0.5)}table.centered thead tr th,table.centered tbody tr td{text-align:center}tr{border-bottom:1px solid rgba(0,0,0,0.12)}td,th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width: 992px){table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}table.responsive-table td:empty:before{content:\'\\00a0\'}table.responsive-table th,table.responsive-table td{margin:0;vertical-align:top}table.responsive-table th{text-align:left}table.responsive-table thead{display:block;float:left}table.responsive-table thead tr{display:block;padding:0 10px 0 0}table.responsive-table thead tr th::before{content:"\\00a0"}table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}table.responsive-table tbody tr{display:inline-block;vertical-align:top}table.responsive-table th{display:block;text-align:right}table.responsive-table td{display:block;min-height:1.25em;text-align:left}table.responsive-table tr{border-bottom:none;padding:0 10px}table.responsive-table thead{border:0;border-right:1px solid rgba(0,0,0,0.12)}}.collection{margin:.5rem 0 1rem 0;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.collection .collection-item.avatar{min-height:84px;padding-left:72px;position:relative}.collection .collection-item.avatar:not(.circle-clipper)>.circle,.collection .collection-item.avatar :not(.circle-clipper)>.circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.collection .collection-item.avatar .title{font-size:16px}.collection .collection-item.avatar p{margin:0}.collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.collection .collection-item:last-child{border-bottom:none}.collection .collection-item.active{background-color:#26a69a;color:#eafaf9}.collection .collection-item.active .secondary-content{color:#fff}.collection a.collection-item{display:block;transition:.25s;color:#26a69a}.collection a.collection-item:not(.active):hover{background-color:#ddd}.collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.collection.with-header .collection-item{padding-left:30px}.collection.with-header .collection-item.avatar{padding-left:72px}.secondary-content{float:right;color:#26a69a}.collapsible .collection{margin:0;border:none}.video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.video-container iframe,.video-container object,.video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.progress{position:relative;height:4px;display:block;width:100%;background-color:#acece6;border-radius:2px;margin:.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:#26a69a;transition:width .3s linear}.progress .indeterminate{background-color:#26a69a}.progress .indeterminate:before{content:\'\';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate:after{content:\'\';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation-delay:1.15s}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}.hide{display:none !important}.left-align{text-align:left}.right-align{text-align:right}.center,.center-align{text-align:center}.left{float:left !important}.right{float:right !important}.no-select{user-select:none}.circle{border-radius:50%}.center-block{display:block;margin-left:auto;margin-right:auto}.truncate{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-padding{padding:0 !important}.container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width: 601px){.container{width:85%}}@media only screen and (min-width: 993px){.container{width:70%}}.col .row{margin-left:-.75rem;margin-right:-.75rem}.section{padding-top:1rem;padding-bottom:1rem}.section.no-pad{padding:0}.section.no-pad-bot{padding-bottom:0}.section.no-pad-top{padding-top:0}.row{margin-left:auto;margin-right:auto;margin-bottom:20px}.row:after{content:"";display:table;clear:both}.row .col{float:left;box-sizing:border-box;padding:0 .75rem;min-height:1px}.row .col[class*="push-"],.row .col[class*="pull-"]{position:relative}.row .col.s1{width:8.33333%;margin-left:auto;left:auto;right:auto}.row .col.s2{width:16.66667%;margin-left:auto;left:auto;right:auto}.row .col.s3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.s4{width:33.33333%;margin-left:auto;left:auto;right:auto}.row .col.s5{width:41.66667%;margin-left:auto;left:auto;right:auto}.row .col.s6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.s7{width:58.33333%;margin-left:auto;left:auto;right:auto}.row .col.s8{width:66.66667%;margin-left:auto;left:auto;right:auto}.row .col.s9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.s10{width:83.33333%;margin-left:auto;left:auto;right:auto}.row .col.s11{width:91.66667%;margin-left:auto;left:auto;right:auto}.row .col.s12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-s1{margin-left:8.33333%}.row .col.pull-s1{right:8.33333%}.row .col.push-s1{left:8.33333%}.row .col.offset-s2{margin-left:16.66667%}.row .col.pull-s2{right:16.66667%}.row .col.push-s2{left:16.66667%}.row .col.offset-s3{margin-left:25%}.row .col.pull-s3{right:25%}.row .col.push-s3{left:25%}.row .col.offset-s4{margin-left:33.33333%}.row .col.pull-s4{right:33.33333%}.row .col.push-s4{left:33.33333%}.row .col.offset-s5{margin-left:41.66667%}.row .col.pull-s5{right:41.66667%}.row .col.push-s5{left:41.66667%}.row .col.offset-s6{margin-left:50%}.row .col.pull-s6{right:50%}.row .col.push-s6{left:50%}.row .col.offset-s7{margin-left:58.33333%}.row .col.pull-s7{right:58.33333%}.row .col.push-s7{left:58.33333%}.row .col.offset-s8{margin-left:66.66667%}.row .col.pull-s8{right:66.66667%}.row .col.push-s8{left:66.66667%}.row .col.offset-s9{margin-left:75%}.row .col.pull-s9{right:75%}.row .col.push-s9{left:75%}.row .col.offset-s10{margin-left:83.33333%}.row .col.pull-s10{right:83.33333%}.row .col.push-s10{left:83.33333%}.row .col.offset-s11{margin-left:91.66667%}.row .col.pull-s11{right:91.66667%}.row .col.push-s11{left:91.66667%}.row .col.offset-s12{margin-left:100%}.row .col.pull-s12{right:100%}.row .col.push-s12{left:100%}@media only screen and (min-width: 601px){.row .col.m1{width:8.33333%;margin-left:auto;left:auto;right:auto}.row .col.m2{width:16.66667%;margin-left:auto;left:auto;right:auto}.row .col.m3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.m4{width:33.33333%;margin-left:auto;left:auto;right:auto}.row .col.m5{width:41.66667%;margin-left:auto;left:auto;right:auto}.row .col.m6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.m7{width:58.33333%;margin-left:auto;left:auto;right:auto}.row .col.m8{width:66.66667%;margin-left:auto;left:auto;right:auto}.row .col.m9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.m10{width:83.33333%;margin-left:auto;left:auto;right:auto}.row .col.m11{width:91.66667%;margin-left:auto;left:auto;right:auto}.row .col.m12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-m1{margin-left:8.33333%}.row .col.pull-m1{right:8.33333%}.row .col.push-m1{left:8.33333%}.row .col.offset-m2{margin-left:16.66667%}.row .col.pull-m2{right:16.66667%}.row .col.push-m2{left:16.66667%}.row .col.offset-m3{margin-left:25%}.row .col.pull-m3{right:25%}.row .col.push-m3{left:25%}.row .col.offset-m4{margin-left:33.33333%}.row .col.pull-m4{right:33.33333%}.row .col.push-m4{left:33.33333%}.row .col.offset-m5{margin-left:41.66667%}.row .col.pull-m5{right:41.66667%}.row .col.push-m5{left:41.66667%}.row .col.offset-m6{margin-left:50%}.row .col.pull-m6{right:50%}.row .col.push-m6{left:50%}.row .col.offset-m7{margin-left:58.33333%}.row .col.pull-m7{right:58.33333%}.row .col.push-m7{left:58.33333%}.row .col.offset-m8{margin-left:66.66667%}.row .col.pull-m8{right:66.66667%}.row .col.push-m8{left:66.66667%}.row .col.offset-m9{margin-left:75%}.row .col.pull-m9{right:75%}.row .col.push-m9{left:75%}.row .col.offset-m10{margin-left:83.33333%}.row .col.pull-m10{right:83.33333%}.row .col.push-m10{left:83.33333%}.row .col.offset-m11{margin-left:91.66667%}.row .col.pull-m11{right:91.66667%}.row .col.push-m11{left:91.66667%}.row .col.offset-m12{margin-left:100%}.row .col.pull-m12{right:100%}.row .col.push-m12{left:100%}}@media only screen and (min-width: 993px){.row .col.l1{width:8.33333%;margin-left:auto;left:auto;right:auto}.row .col.l2{width:16.66667%;margin-left:auto;left:auto;right:auto}.row .col.l3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.l4{width:33.33333%;margin-left:auto;left:auto;right:auto}.row .col.l5{width:41.66667%;margin-left:auto;left:auto;right:auto}.row .col.l6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.l7{width:58.33333%;margin-left:auto;left:auto;right:auto}.row .col.l8{width:66.66667%;margin-left:auto;left:auto;right:auto}.row .col.l9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.l10{width:83.33333%;margin-left:auto;left:auto;right:auto}.row .col.l11{width:91.66667%;margin-left:auto;left:auto;right:auto}.row .col.l12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-l1{margin-left:8.33333%}.row .col.pull-l1{right:8.33333%}.row .col.push-l1{left:8.33333%}.row .col.offset-l2{margin-left:16.66667%}.row .col.pull-l2{right:16.66667%}.row .col.push-l2{left:16.66667%}.row .col.offset-l3{margin-left:25%}.row .col.pull-l3{right:25%}.row .col.push-l3{left:25%}.row .col.offset-l4{margin-left:33.33333%}.row .col.pull-l4{right:33.33333%}.row .col.push-l4{left:33.33333%}.row .col.offset-l5{margin-left:41.66667%}.row .col.pull-l5{right:41.66667%}.row .col.push-l5{left:41.66667%}.row .col.offset-l6{margin-left:50%}.row .col.pull-l6{right:50%}.row .col.push-l6{left:50%}.row .col.offset-l7{margin-left:58.33333%}.row .col.pull-l7{right:58.33333%}.row .col.push-l7{left:58.33333%}.row .col.offset-l8{margin-left:66.66667%}.row .col.pull-l8{right:66.66667%}.row .col.push-l8{left:66.66667%}.row .col.offset-l9{margin-left:75%}.row .col.pull-l9{right:75%}.row .col.push-l9{left:75%}.row .col.offset-l10{margin-left:83.33333%}.row .col.pull-l10{right:83.33333%}.row .col.push-l10{left:83.33333%}.row .col.offset-l11{margin-left:91.66667%}.row .col.pull-l11{right:91.66667%}.row .col.push-l11{left:91.66667%}.row .col.offset-l12{margin-left:100%}.row .col.pull-l12{right:100%}.row .col.push-l12{left:100%}}@media only screen and (min-width: 1201px){.row .col.xl1{width:8.33333%;margin-left:auto;left:auto;right:auto}.row .col.xl2{width:16.66667%;margin-left:auto;left:auto;right:auto}.row .col.xl3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.xl4{width:33.33333%;margin-left:auto;left:auto;right:auto}.row .col.xl5{width:41.66667%;margin-left:auto;left:auto;right:auto}.row .col.xl6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.xl7{width:58.33333%;margin-left:auto;left:auto;right:auto}.row .col.xl8{width:66.66667%;margin-left:auto;left:auto;right:auto}.row .col.xl9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.xl10{width:83.33333%;margin-left:auto;left:auto;right:auto}.row .col.xl11{width:91.66667%;margin-left:auto;left:auto;right:auto}.row .col.xl12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-xl1{margin-left:8.33333%}.row .col.pull-xl1{right:8.33333%}.row .col.push-xl1{left:8.33333%}.row .col.offset-xl2{margin-left:16.66667%}.row .col.pull-xl2{right:16.66667%}.row .col.push-xl2{left:16.66667%}.row .col.offset-xl3{margin-left:25%}.row .col.pull-xl3{right:25%}.row .col.push-xl3{left:25%}.row .col.offset-xl4{margin-left:33.33333%}.row .col.pull-xl4{right:33.33333%}.row .col.push-xl4{left:33.33333%}.row .col.offset-xl5{margin-left:41.66667%}.row .col.pull-xl5{right:41.66667%}.row .col.push-xl5{left:41.66667%}.row .col.offset-xl6{margin-left:50%}.row .col.pull-xl6{right:50%}.row .col.push-xl6{left:50%}.row .col.offset-xl7{margin-left:58.33333%}.row .col.pull-xl7{right:58.33333%}.row .col.push-xl7{left:58.33333%}.row .col.offset-xl8{margin-left:66.66667%}.row .col.pull-xl8{right:66.66667%}.row .col.push-xl8{left:66.66667%}.row .col.offset-xl9{margin-left:75%}.row .col.pull-xl9{right:75%}.row .col.push-xl9{left:75%}.row .col.offset-xl10{margin-left:83.33333%}.row .col.pull-xl10{right:83.33333%}.row .col.push-xl10{left:83.33333%}.row .col.offset-xl11{margin-left:91.66667%}.row .col.pull-xl11{right:91.66667%}.row .col.push-xl11{left:91.66667%}.row .col.offset-xl12{margin-left:100%}.row .col.pull-xl12{right:100%}.row .col.push-xl12{left:100%}}a{text-decoration:none}html{line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-weight:normal;color:rgba(0,0,0,0.87)}@media only screen and (min-width: 0){html{font-size:14px}}@media only screen and (min-width: 992px){html{font-size:14.5px}}@media only screen and (min-width: 1200px){html{font-size:15px}}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.3}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:4.2rem;line-height:110%;margin:2.8rem 0 1.68rem 0}h2{font-size:3.56rem;line-height:110%;margin:2.37333rem 0 1.424rem 0}h3{font-size:2.92rem;line-height:110%;margin:1.94667rem 0 1.168rem 0}h4{font-size:2.28rem;line-height:110%;margin:1.52rem 0 .912rem 0}h5{font-size:1.64rem;line-height:110%;margin:1.09333rem 0 .656rem 0}h6{font-size:1.15rem;line-height:110%;margin:.76667rem 0 .46rem 0}em{font-style:italic}strong{font-weight:500}small{font-size:75%}.light{font-weight:300}.thin{font-weight:200}@media only screen and (min-width: 360px){.flow-text{font-size:1.2rem}}@media only screen and (min-width: 390px){.flow-text{font-size:1.224rem}}@media only screen and (min-width: 420px){.flow-text{font-size:1.248rem}}@media only screen and (min-width: 450px){.flow-text{font-size:1.272rem}}@media only screen and (min-width: 480px){.flow-text{font-size:1.296rem}}@media only screen and (min-width: 510px){.flow-text{font-size:1.32rem}}@media only screen and (min-width: 540px){.flow-text{font-size:1.344rem}}@media only screen and (min-width: 570px){.flow-text{font-size:1.368rem}}@media only screen and (min-width: 600px){.flow-text{font-size:1.392rem}}@media only screen and (min-width: 630px){.flow-text{font-size:1.416rem}}@media only screen and (min-width: 660px){.flow-text{font-size:1.44rem}}@media only screen and (min-width: 690px){.flow-text{font-size:1.464rem}}@media only screen and (min-width: 720px){.flow-text{font-size:1.488rem}}@media only screen and (min-width: 750px){.flow-text{font-size:1.512rem}}@media only screen and (min-width: 780px){.flow-text{font-size:1.536rem}}@media only screen and (min-width: 810px){.flow-text{font-size:1.56rem}}@media only screen and (min-width: 840px){.flow-text{font-size:1.584rem}}@media only screen and (min-width: 870px){.flow-text{font-size:1.608rem}}@media only screen and (min-width: 900px){.flow-text{font-size:1.632rem}}@media only screen and (min-width: 930px){.flow-text{font-size:1.656rem}}@media only screen and (min-width: 960px){.flow-text{font-size:1.68rem}}@media only screen and (max-width: 360px){.flow-text{font-size:1.2rem}}.preloader-wrapper{display:inline-block;position:relative;width:50px;height:50px}.preloader-wrapper.small{width:36px;height:36px}.preloader-wrapper.big{width:64px;height:64px}.preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{transform:rotate(360deg)}}.spinner-layer{position:absolute;width:100%;height:100%;opacity:0;border-color:#26a69a}.spinner-blue,.spinner-blue-only{border-color:#4285f4}.spinner-red,.spinner-red-only{border-color:#db4437}.spinner-yellow,.spinner-yellow-only{border-color:#f4b400}.spinner-green,.spinner-green-only{border-color:#0f9d58}.active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer,.active .spinner-layer.spinner-blue-only,.active .spinner-layer.spinner-red-only,.active .spinner-layer.spinner-yellow-only,.active .spinner-layer.spinner-green-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gap-patch .circle{width:1000%;left:-450%}.circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent !important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.circle-clipper.left .circle{left:0;border-right-color:transparent !important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.circle-clipper.right .circle{left:-100%;border-left-color:transparent !important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes left-spin{from{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes right-spin{from{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}#spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}\n',""])},function(e,t,a){var r=a(47);"string"==typeof r&&(r=[[e.i,r,""]]);var s={insert:"head",singleton:!1};a(21)(r,s);r.locals&&(e.exports=r.locals)},function(e,t,a){t=e.exports=a(20)(!1);var r=a(34),s=r(a(48)),o=r(a(49)),n=r(a(50)),i=r(a(51));t.push([e.i,'.chats-container .input-search{position:relative;width:100%;margin-left:1rem}.chats-container .input-search input{background-color:rgba(112,117,121,0.08);border:2px solid transparent;height:3rem;border-radius:22px;box-sizing:border-box;padding:0 1.5rem 0 3rem;-webkit-transition:all .15s ease-out;transition:all .15s ease-out;width:100%}.chats-container .input-search input:focus{background-color:rgba(112,117,121,0);border:2px solid #4EA4F6}.chats-container .input-search input:focus+.tgico{color:#4EA4F6;opacity:1}.chats-container .input-search .tgico{position:absolute;left:1rem;top:50%;transform:translateY(-50%);text-align:center;font-size:1.65rem;color:#707579;opacity:.6;-webkit-transition:all .15s ease-out;transition:all .15s ease-out}.chats-container ul{margin:0;padding:0 .5rem}.chats-container #dialogs-pinned{border-bottom:1px solid #DADCE0}.chats-container #dialogs-pinned:empty{display:none}.chats-container li{padding:0 .5rem;height:70px;max-height:70px;overflow:hidden;border-radius:8px;background-color:#fff;display:grid;align-items:center;grid-template-columns:60px calc(100% - 60px);position:relative;cursor:pointer}.chats-container li:hover{background:rgba(112,117,121,0.08)}.chats-container li.active{background:rgba(110,115,119,0.1)}.chats-container p{margin:0;display:flex;justify-content:space-between;height:1.7rem}.chats-container p span:not(.tgico-pinnedchat):not(.emoji):last-child{font-size:.9rem}.chats-container span{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;margin:.1rem 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chats-container .user-caption{max-width:100%;max-height:100%;overflow:hidden;color:#9e9e9e}.chats-container .user-title{max-width:80%}.chats-container .user-last-message{max-width:80%}.chats-container .user-last-message i{font-style:normal;color:#1da1f1}.chats-container .user-last-message .emoji{font-size:1.2rem;width:20px;height:20px;margin:0 .125rem}.chats-container .message-status{margin-right:.25rem}.chats-container .message-status[class*=" tgico-"]{color:#4DCD5E;font-size:1.15rem}.chats-container .unread,.chats-container .unread-muted{border-radius:12px;min-width:24px;padding:0 8px;height:24px;text-align:center;line-height:24px;color:#fff;font-weight:500}.chats-container .tgico-pinnedchat{border-radius:50%;width:24px;height:24px;line-height:24px;font-size:1.5rem;color:#fff;text-align:center}.chats-container .unread:empty,.chats-container .unread-muted:empty{visibility:hidden}.chats-container .unread{background:#4DCD5E}.chats-container .unread-muted,.chats-container .tgico-pinnedchat{background:#cecece}.chat-container{display:flex;width:100%;align-items:center;height:100vh;overflow:hidden;flex-direction:column;position:relative;background-image:url('+s+");background-size:cover;background-position:center center}.chat-container #im-title{cursor:pointer}.chat-container #chat-background-canvas{display:none}.chat-container #topbar{width:100%;background-color:#fff;box-sizing:border-box;user-select:none;display:flex;align-items:center;box-shadow:0 1px 2px 0 rgba(16,35,47,0.07);padding:.5rem 1rem;flex:0 0 auto;min-height:60px;max-height:60px}.chat-container #topbar>*{margin:0 2px}.chat-container #topbar .chat-info{flex-grow:1}.chat-container #topbar .content{padding-left:1rem;flex:1}.chat-container #topbar .person{display:flex;align-items:center;cursor:pointer}.chat-container #topbar .person:hover{background-color:transparent}.chat-container #topbar .person .user-avatar{width:44px;height:44px;line-height:44px}.chat-container #topbar .person .bottom{font-size:14px;line-height:18px;color:#9e9e9e}.chat-container #topbar .person .bottom .online{color:#1da1f1}.chat-container #topbar .pinned-message{cursor:pointer;display:flex;flex-direction:row;align-items:center;overflow:hidden;box-sizing:border-box;width:150px;margin-right:1rem;max-height:35px}.chat-container #topbar .pinned-message:hover{background-color:rgba(112,117,121,0.08)}.chat-container #topbar .pinned-message .pinned-message-border{height:32px;border-radius:1px;min-width:2px;background:#4ea4f6}.chat-container #topbar .pinned-message .pinned-message-content{margin-left:8px;flex-grow:1;flex-shrink:1;overflow:hidden;pointer-events:none}.chat-container #topbar .pinned-message .pinned-message-title{color:#4ea4f6}.chat-container #topbar .pinned-message .pinned-message-title,.chat-container #topbar .pinned-message .pinned-message-subtitle{font-size:14px;line-height:18px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.chat-container #topbar .pinned-message .pinned-message-subtitle{white-space:nowrap}.chat-container #bubbles{width:100%;height:100%;max-height:100%;flex:1 1 auto;overflow:hidden}.chat-container #bubbles:not(.scrolled-down){-webkit-mask-image:-webkit-linear-gradient(bottom, transparent, #000 20px);mask-image:linear-gradient(0deg, transparent 0, #000 20px)}.chat-container #bubbles .preloader{width:100%;height:100%}.chat-container #bubbles .preloader svg{width:50px;height:50px}.chat-container #bubbles #bubbles-inner{max-width:700px;width:100%;display:flex;flex-direction:column;flex-shrink:1;padding:9px;margin:0 auto;box-sizing:border-box;min-height:100%;justify-content:flex-end}.chat-container #bubbles #bubbles-inner>*{display:flex;padding:5px 0}.chat-container #bubbles .service{justify-content:center;align-self:center;margin:1rem 0}.chat-container #bubbles .service .service-msg{color:#fff;background-color:rgba(0,0,0,0.22);padding:0 8px;line-height:24px;font-size:15px;border-radius:12px;user-select:none}.chat-container #bubbles .bubble{max-width:85%;border-radius:12px;box-shadow:0 1px 2px 0 rgba(16,35,47,0.15);position:relative;display:flex;flex-direction:column-reverse;font-size:0;width:max-content;height:fit-content}.chat-container #bubbles .bubble.photo,.chat-container #bubbles .bubble.video{width:min-content}.chat-container #bubbles .bubble img,.chat-container #bubbles .bubble video{object-fit:contain}.chat-container #bubbles .bubble .emoji{height:18px;width:18px;margin:0 .05rem}.chat-container #bubbles .bubble.emoji-big{font-size:0;background:none !important;box-shadow:none;line-height:1;user-select:none}.chat-container #bubbles .bubble.emoji-big .attachment{padding-top:.5rem;padding-bottom:1.5rem}.chat-container #bubbles .bubble.emoji-big .attachment span.emoji{height:auto;width:auto}.chat-container #bubbles .bubble.emoji-1x{font-size:96px}.chat-container #bubbles .bubble.emoji-1x img.emoji{height:64px;width:64px}.chat-container #bubbles .bubble.emoji-2x{font-size:64px}.chat-container #bubbles .bubble.emoji-2x img.emoji{height:48px;width:48px}.chat-container #bubbles .bubble.emoji-3x{font-size:52px}.chat-container #bubbles .bubble.emoji-3x img.emoji{height:32px;width:32px}.chat-container #bubbles .bubble.sticker{cursor:pointer;background:none !important;box-shadow:none;max-width:300px;max-height:300px}.chat-container #bubbles .bubble.sticker .message.message-empty{display:none}.chat-container #bubbles .bubble.sticker:hover .message.message-empty{display:block}.chat-container #bubbles .bubble .message:not(.message-empty)+.attachment{border-bottom-left-radius:0;border-bottom-right-radius:0}.chat-container #bubbles .bubble:not(.emoji-big) .attachment{font-size:0}.chat-container #bubbles .bubble .attachment{max-width:100%;border-radius:inherit;overflow:hidden;display:flex;justify-content:center}.chat-container #bubbles .bubble .attachment img,.chat-container #bubbles .bubble .attachment video{width:auto;height:auto;max-width:100%;cursor:pointer}.chat-container #bubbles .bubble:not(.sticker) .attachment{max-width:380px}.chat-container #bubbles .bubble.video .attachment img{width:100%;height:100%}.chat-container #bubbles .bubble .box{font-size:.95rem;margin:.25rem;padding:.25rem;margin-bottom:-5px;border-radius:4px;transition:anim(background-color)}.chat-container #bubbles .bubble .box.web{margin-top:-5px;margin-bottom:5px;max-width:320px}.chat-container #bubbles .bubble .box.web .preview{max-height:100%;max-width:100%;border-radius:4px;margin-bottom:6px;overflow:hidden;user-select:none;cursor:pointer}.chat-container #bubbles .bubble .box.web .preview img,.chat-container #bubbles .bubble .box.web .preview video{max-width:100%;width:100%;height:100%}.chat-container #bubbles .bubble .box.web .title{line-height:1.4;font-weight:500}.chat-container #bubbles .bubble .box.web .name{display:block}.chat-container #bubbles .bubble .box.web .name:hover{text-decoration:underline}.chat-container #bubbles .bubble .box.web .text{overflow:hidden;text-overflow:ellipsis;line-height:1.2}.chat-container #bubbles .bubble .box .quote{padding-left:.5rem}.chat-container #bubbles .bubble .box .name{font-weight:500}.chat-container #bubbles .bubble .box:not(.web){margin-bottom:0;margin-top:0;cursor:pointer}.chat-container #bubbles .bubble .message{font-size:1rem;padding:0 .6rem .2675rem .6rem;padding-top:0;overflow:hidden;text-overflow:ellipsis;max-width:100%}.chat-container #bubbles .bubble .message *{overflow:hidden;text-overflow:ellipsis}.chat-container #bubbles .bubble .message:last-child{padding-top:.2675rem}.chat-container #bubbles .bubble .message.message-empty{position:absolute;bottom:.1rem;right:.1rem;border-radius:12px;background-color:rgba(0,0,0,0.3);padding:.0rem .3rem}.chat-container #bubbles .bubble .message.message-empty .time{color:#fff}.chat-container #bubbles .bubble .message .emoji{font-size:1.2rem}.chat-container #bubbles .bubble .time{font-size:.8rem;user-select:none;float:right;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;height:20px;line-height:20px}.chat-container #bubbles .bubble .time .inner{position:absolute;bottom:0;right:0;font-size:.75rem}.chat-container #bubbles .bubble .user-avatar{position:absolute;left:-2.5rem;width:32px;height:32px;line-height:32px;bottom:0;font-size:.85rem}.chat-container #bubbles .bubble.hide-name .name,.chat-container #bubbles .bubble.emoji-big .name{display:none}.chat-container #bubbles .bubble .name{cursor:pointer}.chat-container #bubbles .bubble.forwarded .attachment{border-top-left-radius:0;border-top-right-radius:0}.chat-container #bubbles .bubble>.name{padding:.2675rem .6rem 0 .6rem;font-weight:500;color:#1da1f1;font-size:.9rem}.chat-container #bubbles .bubble:not(.sticker):not(.emoji-big):last-child:after{position:absolute;bottom:-1px;width:11px;height:20px;background-repeat:no-repeat repeat;content:'';background-size:11px 20px}.chat-container #bubbles .bubble+.bubble{margin-top:5px}.chat-container #bubbles .in,.chat-container #bubbles .out{flex-direction:column}.chat-container #bubbles .in{align-items:flex-start}.chat-container #bubbles .in a{color:#1da1f1}.chat-container #bubbles .in .box:hover{background-color:rgba(112,117,121,0.08)}.chat-container #bubbles .in .quote{border-left:2px #1da1f1 solid}.chat-container #bubbles .in .quote .name{color:#1da1f1}.chat-container #bubbles .in .quote *{overflow:hidden;text-overflow:ellipsis}.chat-container #bubbles .in .time{color:rgba(112,117,121,0.6);width:2rem}.chat-container #bubbles .in .time .inner{line-height:19px;padding:0 .35rem}.chat-container #bubbles .in .bubble{background-color:#ffffff;border-radius:6px 12px 12px 6px}.chat-container #bubbles .in .bubble:first-child{border-radius:12px 12px 12px 6px}.chat-container #bubbles .in .bubble:last-child{border-radius:6px 12px 12px 0px}.chat-container #bubbles .in .bubble:last-child:after{left:-8.4px;background-image:url("+o+')}.chat-container #bubbles .in .bubble:first-child:last-child{border-radius:12px 12px 12px 0px}.chat-container #bubbles .out{align-items:flex-end}.chat-container #bubbles .out a{color:#50af4f}.chat-container #bubbles .out .box:hover{background-color:rgba(77,205,94,0.12)}.chat-container #bubbles .out .quote{border-left:2px #50af4f solid}.chat-container #bubbles .out .quote .name{color:#50af4f}.chat-container #bubbles .out .time{color:#50af4f;width:48px;display:inline-block}.chat-container #bubbles .out .time .inner{display:flex;align-items:center;padding:0 .25rem}.chat-container #bubbles .out .bubble .time .tgico:after{font-size:1.1rem;vertical-align:middle;margin-left:.1rem}.chat-container #bubbles .out .bubble.forwarded .name{color:#50af4f}.chat-container #bubbles .out .bubble.read .time .tgico:after{content:""}.chat-container #bubbles .out .bubble.sent .time .tgico:after{content:""}.chat-container #bubbles .out .bubble{background-color:#eeffde;border-radius:12px 6px 6px 12px}.chat-container #bubbles .out .bubble:first-child{border-radius:12px 12px 6px 12px}.chat-container #bubbles .out .bubble:last-child{border-radius:12px 6px 0px 12px}.chat-container #bubbles .out .bubble:last-child:after{right:-8.4px;background-image:url('+n+")}.chat-container #bubbles .out .bubble:first-child:last-child{border-radius:12px 12px 0px 12px}.chat-container #bubbles .out .user-avatar{left:auto;right:-2.5rem}.chat-container #chat-input{display:flex;align-items:center;width:100%;max-width:700px;padding-top:.35rem;padding-bottom:1rem;justify-content:space-between;flex:0 0 auto;position:relative}.chat-container #chat-input .input-message{display:flex;align-items:center;width:calc(100% - 3.75rem);justify-content:space-between;background-color:#fff;border-radius:12px;border-bottom-right-radius:0;box-shadow:0 1px 2px 0 rgba(16,35,47,0.07);margin-right:.5rem;padding:0 .5rem;min-height:3.25rem;max-height:30rem;caret-color:#4EA4F6;flex:1;position:relative}.chat-container #chat-input .input-message:after{position:absolute;bottom:-1px;width:11px;height:20px;background-repeat:no-repeat repeat;content:'';background-size:11px 20px;right:-9px;background-image:url("+o+');transform:scaleX(-1)}.chat-container #chat-input .input-message .input-message-container{width:1%;max-height:inherit;flex:1 1 auto}.chat-container #chat-input .input-message .btn-icon{display:block;color:#9e9e9e;font-size:1.5rem;line-height:1.5rem;flex:0 0 auto}.chat-container #chat-input .input-message .btn-icon.active{color:#4ea4f6}.chat-container #chat-input .input-message .emoji{font-size:24px;height:24px;width:24px}.chat-container #chat-input #input-message{background:none;border:none;width:100%;padding:.5rem .5rem;font-size:.95rem;max-height:30rem;overflow-y:auto;resize:none;border:none;outline:none;cursor:text}.chat-container #chat-input [contenteditable=true]:empty:before{content:attr(data-placeholder);color:#9e9e9e;display:block}.chat-container #chat-input .btn-circle{flex:0 0 auto;font-size:1.5rem;line-height:1.5rem;height:3.25rem;width:3.25rem;color:#9e9e9e;background-color:#fff}.chat-container #chat-input .btn-circle.tgico-send{color:#4ea4f6}.chat-container #chat-input .os-scrollbar-handle{background:rgba(0,0,0,0.2)}.emoji-dropdown{position:absolute;left:0;top:calc(-420px + -0.75rem);display:flex;flex-direction:column;width:420px;height:420px;background:#fff;box-shadow:0px 5px 10px 5px rgba(16,35,47,0.14);border-radius:12px;z-index:2;display:flex;overflow:hidden;transition:all 0.2s ease-out;transform:scale(0);transform-origin:0 100%}.emoji-dropdown.active{transition:all 0.2s ease-in;transform:scale(1)}.emoji-dropdown>.menu-horizontal{padding:0 3rem}.emoji-dropdown .emoji-container{width:100%;max-width:100%;overflow:hidden;height:100%}.emoji-dropdown .tabs-container{height:100%}.emoji-dropdown .tabs-container .emoji-category{font-size:2.25rem;line-height:2.25rem;margin-top:1px}.emoji-dropdown .tabs-container .emoji-category>*{margin:0;padding:5px 5px;line-height:inherit;border-radius:8px;cursor:pointer;user-select:none;width:44px;height:44px}.emoji-dropdown .tabs-container .emoji-category>* .emoji{width:100%;height:100%}.emoji-dropdown .tabs-container .emoji-category>*:hover{background-color:rgba(112,117,121,0.08)}.emoji-dropdown .tabs-container .emoji-category,.emoji-dropdown .tabs-container .sticker-category{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap}.emoji-dropdown .tabs-container .emoji-category::after,.emoji-dropdown .tabs-container .sticker-category::after{content:"";flex:auto}.emoji-dropdown .tabs-container .sticker-category>div{width:80px;height:80px;display:flex;align-items:center;cursor:pointer;user-select:none;padding:1px 2.5px;justify-content:center;border-radius:12px}.emoji-dropdown .tabs-container .sticker-category>div:hover{background-color:rgba(112,117,121,0.08)}.emoji-dropdown .tabs-container .sticker-category>div>*{max-width:100%;max-height:100%}.emoji-dropdown .tabs-container>div{min-height:100%;flex-direction:column;height:100%}.emoji-dropdown .tabs-container>div>div:first-of-type{flex:1;padding:0;padding-top:10px}.emoji-dropdown .tabs-container .scrollable{padding:0 10px}.emoji-dropdown .emoji-padding .menu-horizontal{border-top:1px solid #dadce0}.emoji-dropdown .emoji-padding .menu-horizontal,.emoji-dropdown .stickers-padding .menu-horizontal{height:50px;border-bottom:none;padding:0;width:100%}.emoji-dropdown .emoji-padding .menu-horizontal li,.emoji-dropdown .stickers-padding .menu-horizontal li{padding:0;width:50px;height:50px;line-height:50px;display:flex;align-items:center}.emoji-dropdown .emoji-padding .menu-horizontal li.active:after,.emoji-dropdown .stickers-padding .menu-horizontal li.active:after{display:none}.emoji-dropdown .stickers-padding .menu-wrapper{padding:0;height:50px;max-width:100%;border-top:1px solid #dadce0}.emoji-dropdown .stickers-padding .menu-wrapper .menu-horizontal{width:100%;height:100%}.emoji-dropdown .stickers-padding li{flex:0 0 auto}.emoji-dropdown .stickers-padding li.active:not(.tgico-recent){background-color:rgba(112,117,121,0.08)}.emoji-dropdown .stickers-padding li>*{padding:.75rem;max-width:100%;max-height:100%;width:100%;height:100%}.sidebar{background-color:#fff;overflow:hidden}.sidebar-left{border-right:1px solid #DADCE0}.sidebar-right{border-left:1px solid #DADCE0}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem 1.25rem;min-height:60px}.sidebar-header .sidebar-title{flex:1;padding-left:2rem;font-weight:500;font-size:1.4rem}.sidebar-header .btn-icon+.btn-icon{margin-left:.5rem}.sidebar-menu-button>div{display:none}.profile-content .profile-name{text-align:center;font-size:23px;font-weight:500;margin:3px 0}.profile-content .profile-subtitle{text-align:center;color:#707579;font-size:14px;margin:0 0 18px}.profile-content .profile-subtitle.online{color:#1da1f1}.profile-content .profile-row{display:flex;width:100%;flex-direction:column;padding-left:80px;padding-top:2px;padding-right:12px;font-size:15px;position:relative;margin:1.75rem 0}.profile-content .profile-row:before{position:absolute;left:24px;font-size:24px;color:#707579}.profile-content .profile-row p{margin:0}.profile-content .profile-row .profile-row-label{color:#9e9e9e;font-size:14px;margin-top:1px}.profile-content .profile-row-bio .emoji{width:24px;height:24px}.profile-content .user-avatar{width:120px;height:120px;margin:0 auto 20px;font-size:4rem !important}.profile-content [type="checkbox"]+span{padding-left:54px;margin-left:-54px}.profile-content .content-container{width:100%;max-width:100%;overflow:hidden}.profile-content .profile-tabs{margin-top:40px}.profile-content .profile-tabs-content #content-media{display:grid;grid-template-columns:1fr 1fr 1fr;grid-auto-rows:max-content;grid-gap:3.5px;place-items:start}.profile-content .profile-tabs-content #content-media>div{width:100%;cursor:pointer;background-repeat:no-repeat;background-size:cover;background-position:center center}.profile-content .profile-tabs-content #content-media>div::before{content:"";display:inline-block;width:1px;height:0;padding-bottom:100%}.profile-content .profile-tabs-content #content-docs{padding:15px}.profile-content .profile-tabs-content #content-docs .document{padding-left:5rem;padding-right:1rem;height:54px}.profile-content .profile-tabs-content #content-docs .document+.document{margin-top:1.5rem}.profile-content .profile-tabs-content #content-docs .document-name{font-weight:normal;width:100%;max-width:100%;overflow:hidden;text-overflow:ellipsis}.chats-container{display:flex;flex-direction:column}.chats-container .sidebar-content{width:100%;max-height:100%;overflow:hidden;display:flex;position:relative}.chats-container #chats-container{max-height:100%;overflow:hidden}.chats-container #search-container{display:none;width:100%;max-height:100%;height:100%;overflow:hidden;position:absolute;left:0;top:0;z-index:3;background:#fff}.chats-container #search-container.active{display:block}html,body{height:100%;width:100%}button,input,optgroup,select,textarea,html{font-family:"Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif}.whole{height:100vh;min-height:100vh;width:100%;min-width:100%}h1,h2,h3,h4,h5,h6{letter-spacing:-.66px;font-weight:500}input{caret-color:#4EA4F6}.subtitle{font-size:1rem;color:#9e9e9e;line-height:1.25}.page-sign .input-wrapper,.page-authCode .input-wrapper,.page-signUp .input-wrapper,.page-password .input-wrapper{margin-top:3rem}.page-authCode .phone-wrapper{display:flex;align-items:center;justify-content:center;margin:1.52rem 0 0.912rem 0}.page-authCode .phone-wrapper h4{margin:0}.page-authCode .phone-wrapper h4[contenteditable="true"]{padding:0 1rem;border:none;outline:none;padding:0 1rem;border-bottom:2px solid #4EA4F6}.page-authCode .phone-wrapper .phone.error{border-color:#E53935 !important}.btn-icon{text-align:center;font-size:1.65rem;line-height:1.65rem;border-radius:50%;-webkit-transition:background-color .15s ease-out;transition:background-color .15s ease-out;color:#707579;cursor:pointer;background:none;border:none;padding:.5rem;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center}.btn-icon.active{color:#4ea4f6}.btn-icon:hover{background-color:rgba(112,117,121,0.08)}.user-avatar{color:#fff;width:52px;height:52px;line-height:52px;border-radius:50%;background-color:#4EA4F6;text-align:center;font-size:1.25em;position:relative;user-select:none;display:flex;align-items:center;justify-content:center}.user-avatar img{width:100%;height:100%;border-radius:inherit;user-select:none}.user-avatar[class*=" tgico-"]{line-height:52px;font-size:1.5rem}.user-avatar path{fill:white}.user-avatar.is-online:after{position:absolute;content:" ";display:block;border-radius:50%;border:2px solid white;background-color:#4DCD5E;left:70%;top:79%;width:12px;height:12px}.user-title,b,.user-last-message b{color:#000;font-weight:normal}.rp{position:relative}.c-ripple{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background:transparent}.c-ripple__circle{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);opacity:0;width:0;height:0;border-radius:50%;background:rgba(112,117,121,0.08)}.c-ripple.active .c-ripple__circle{animation:a-ripple 750ms ease-in-out}@-webkit-keyframes a-ripple{0%{opacity:0}25%{opacity:1}100%{width:200%;padding-bottom:200%;opacity:0}}@keyframes a-ripple{0%{opacity:0}25%{opacity:1}100%{width:200%;padding-bottom:200%;opacity:0}}.document{padding-left:4.5rem;display:flex;flex-direction:column;height:70px;justify-content:center;cursor:pointer;position:relative}.document .document-ico{position:absolute;left:0;width:54px;height:54px;color:#fff;font-weight:500;letter-spacing:1px;text-align:center;font-size:1.1rem;padding-top:1.5rem;background-size:contain;background-image:url('+i+')}.document .document-name{white-space:nowrap;font-weight:500;line-height:1.3}.document .document-size{white-space:nowrap;color:#707579;font-size:14px;padding-right:32px;line-height:1.3}.page-signUp .auth-image{border-radius:50%;cursor:pointer;position:relative;overflow:hidden}.page-signUp .auth-image canvas{max-width:100%;max-height:100%;width:100%;height:100%;background-color:#4EA4F6}.page-signUp .auth-image svg{position:absolute;width:36px;height:36px;top:50%;left:50%;transform:translateY(-50%) translateX(-50%);z-index:2}.input-wrapper{width:350px;margin:0 auto}.input-field{position:relative}.input-field .arrow-down{position:absolute;content:" ";top:50%;bottom:0;right:15px;cursor:pointer;height:0;width:0;border:solid #bdbdbd;border-radius:1px;border-width:0 2px 2px 0;display:inline-block;padding:4px;vertical-align:middle;z-index:2;margin-top:-7px;transform:rotate(45deg);-webkit-transform:rotate(45deg);transition:.2s all}.input-field label{position:absolute;color:#9e9e9e;left:12.5px;right:auto;z-index:2;top:50%;transform:translateY(-50%);background-color:#fff;font-size:0.85rem;transition:.2s all;display:inline-block;cursor:text}.input-field input{border:1px solid #DADCE0;border-radius:8px;padding:0 12.5px;box-sizing:border-box;font-size:0.85rem;width:100%;height:45px;transition:.2s border-color;position:relative;z-index:1}.input-field input:focus{border-color:#4EA4F6;border-width:1.5px;padding:0 12px}.input-field input:disabled{background-color:#fff;color:#000}.input-field input.error{border-color:#E53935;transition:.2s border-width}.input-field input.error+label{color:#E53935 !important}.input-field input:focus ~ .arrow-down{margin-top:-2px;transform:rotate(225deg);-webkit-transform:rotate(225deg);border-color:#4EA4F6}.input-field input:focus+label{color:#4EA4F6}.input-field input:focus+label,.input-field input:valid+label,.input-field input:disabled+label{top:-8.5px;transform:none;padding:0 5px;left:7.5px}.checkbox-field{margin:1rem 0;display:block;text-align:left;padding:0 1rem;position:relative}[type="checkbox"]{position:absolute;opacity:0;pointer-events:none;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="checkbox"]+span{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type="checkbox"]+span:before,[type="checkbox"]+span:after{content:\'\';left:0;position:absolute;-webkit-transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s}[type="checkbox"]+span:before{border-radius:2px;z-index:1}[type="checkbox"]+span:after{height:18px;width:18px;z-index:0;border:2px solid #4EA4F6;border-radius:3px;top:50%;transform:translateY(-50%)}[type="checkbox"]:not(:checked)+span:before{width:0;height:0;border:2px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(45deg);transform:rotateZ(45deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:checked+span:before{top:4px;left:-1px;width:8px;height:14px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(45deg);transform:rotateZ(45deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:not(:checked)+span:after{background-color:transparent}[type="checkbox"]:checked+span:after{background-color:#4EA4F6}.input-wrapper>* ~ *{margin-top:1.2rem}.select-wrapper{max-height:300px;height:auto;position:absolute;width:100%;top:calc(100% + 10px);left:0;overflow-y:auto;background-color:#fff;z-index:3;border-radius:8px}.select-wrapper ul{margin:10px 0}.select-wrapper li{align-items:center;padding:0 12.5px;justify-content:space-between;height:50px;cursor:pointer;font-weight:500;text-align:left;display:grid;grid-template-columns:15% 65% 20%}.select-wrapper li:hover{background-color:rgba(112,117,121,0.08)}.select-wrapper .emoji{height:24px;width:24px;font-size:24px;line-height:1}.phone-code{color:#9e9e9e;text-align:right}::placeholder{color:#9e9e9e;opacity:1}:-ms-input-placeholder{color:#9e9e9e}::-ms-input-placeholder{color:#9e9e9e}input:focus,button:focus{outline:none}.auth-image{width:133px;height:133px;margin-left:auto;margin-right:auto;margin-bottom:1rem}.phone-edit{display:inline-block;width:24px;height:24px;margin-left:.4rem;opacity:.5;transition:.2s;cursor:pointer;font-size:1.5rem}.phone-edit:hover{opacity:1}.btn-primary{background:#4EA4F6;color:#fff;border-radius:8px;width:100%;text-align:center;font-size:0.85rem;height:45px;border:none;font-weight:500;cursor:pointer;overflow:hidden;position:relative}.btn-primary:hover{background:#2790f4}.btn-primary svg,.btn-primary use{height:calc(100% - 20px);right:12.5px;left:auto;margin:auto 0}.preloader-circular{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;position:absolute;top:0;bottom:0;left:0;right:0;margin:auto}.preloader-path{stroke-dasharray:1, 200;stroke-dashoffset:0;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round;stroke:white;stroke-width:3}.preloader-container{position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;width:50px;height:50px}.preloader-container .preloader-circular{cursor:pointer;background-color:rgba(0,0,0,0.5);border-radius:50%;animation:rotate 2s linear infinite;width:100%;height:100%}.preloader-container .preloader-path-new{stroke-dasharray:5, 200;stroke-dashoffset:0;stroke-linecap:round;stroke:white;stroke-width:1.5}.preloader-container.preloader-swing{cursor:default}.preloader-container.preloader-swing .preloader-circular{cursor:default}.preloader-container.preloader-swing .preloader-path-new{stroke-dasharray:1, 200;stroke-dashoffset:0;animation:dashNew 1.5s ease-in-out infinite}.preloader-container .preloader-close{cursor:pointer;position:absolute;top:0;left:0;bottom:0;right:0;margin:auto;color:#fff;stroke:#fff;width:34%;height:34%}.preloader-container .preloader-close:hover{background:none}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1, 200;stroke-dashoffset:0}50%{stroke-dasharray:89, 200;stroke-dashoffset:-35px}100%{stroke-dasharray:89, 200;stroke-dashoffset:-124px}}@keyframes dashNew{0%{stroke-dasharray:1, 200;stroke-dashoffset:0}50%{stroke-dasharray:89, 200;stroke-dashoffset:-35px}100%{stroke-dasharray:89, 200;stroke-dashoffset:-286%}}.emoji{display:inline-block;width:100%;height:100%;max-width:100%;max-height:100%;vertical-align:middle;line-height:1em;font-size:1em;font-family:apple color emoji,segoe ui emoji,noto color emoji,android emoji,emojisymbols,emojione mozilla,twemoji mozilla,segoe ui symbol}.popup{position:fixed;left:0;top:0;height:100%;max-width:none;width:100%;z-index:3;background-color:rgba(0,0,0,0.35);margin:0;padding:0;box-shadow:none;opacity:0;visibility:hidden;-webkit-transition:opacity 0.3s 0s, visibility 0s 0.3s;-moz-transition:opacity 0.3s 0s, visibility 0s 0.3s;transition:opacity 0.3s 0s, visibility 0s 0.3s;overflow:auto;display:flex;align-items:center;justify-content:center}.popup.is-visible{opacity:1;visibility:visible;-webkit-transition:opacity 0.3s 0s, visibility 0s 0s;-moz-transition:opacity 0.3s 0s, visibility 0s 0s;transition:opacity 0.3s 0s, visibility 0s 0s}.popup-container{position:relative;border-radius:8px;background-color:#fff;padding:1rem;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px);backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;transition-property:transform;-webkit-transition-duration:0.3s;-moz-transition-duration:0.3s;transition-duration:0.3s}.popup-close{height:18px;cursor:pointer;z-index:3;text-align:center;justify-self:center;line-height:1}.popup-close svg{max-width:100%;max-height:100%}.popup-close path{fill:#707579;transition:.2s all}.popup-close:hover path{fill:#000}.popup.is-visible .popup-container{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}.btn-circle{border-radius:50%;width:44px;height:44px}.btn-circle path{fill:white}.popup-header{display:flex;margin-bottom:2rem}.popup-avatar .popup-container{max-width:600px;max-height:600px}.popup-avatar .popup-container>button{position:absolute;bottom:15px;right:15px}.popup-avatar h6{font-size:1.1rem;text-align:left;margin:0;margin-left:1.5rem}.popup-avatar .crop{max-width:200%;max-height:200%;padding:0 2.75rem 2.75rem;border-radius:8px}.popup-avatar .crop img{border-radius:8px}.overlay::selection{background:transparent}.crop-component::selection{background:transparent}.crop-image,.overlay>img{width:auto;height:auto;display:block;object-fit:contain;object-position:center}.crop-image{display:block;position:relative;pointer-events:none}.crop-component{position:relative;z-index:999;background-color:white;margin:0 auto;overflow:hidden}.crop-component>img{max-width:100%}.crop-component .crop-overlay-color{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.7);border-radius:8px}.overlay{position:absolute;left:50%;top:50%;z-index:999;margin-left:-100px;margin-top:-100px;width:200px;height:200px;overflow:hidden;box-sizing:content-box;border-radius:50%}.overlay:hover,.overlay:active{cursor:move}.overlay>img{position:absolute;display:block}.overlays{top:0;left:0;width:100%;height:100%;position:fixed !important;background-color:rgba(0,0,0,0.2);z-index:3;display:none}.overlays.active{display:block}.media-viewer{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.9);display:flex;align-items:center;justify-content:center}.media-viewer .media-viewer-author{position:absolute;top:0;left:0;height:60px;padding:8px 8px 8px 80px;display:flex;flex-direction:column;justify-content:center;color:#8b8b8b}.media-viewer .media-viewer-author .user-avatar{width:44px;height:44px;position:absolute;top:8px;left:20px}.media-viewer .media-viewer-author .media-viewer-name{font-weight:500}.media-viewer .media-viewer-author .media-viewer-date{font-size:15px}.media-viewer .media-viewer-buttons{position:absolute;top:0;right:0;display:flex;flex-flow:row nowrap;padding:8px}.media-viewer .media-viewer-buttons .btn-icon{margin:0 .25rem}.media-viewer .media-viewer-content{display:flex;flex-direction:column;justify-content:center;height:100%}.media-viewer .media-viewer-content .media-viewer-stub{flex:1}.media-viewer .media-viewer-content .media-viewer-container{align-self:center;position:relative}.media-viewer .media-viewer-content .media-viewer-media{display:flex;align-items:center;justify-content:center}.media-viewer .media-viewer-content .media-viewer-media>img,.media-viewer .media-viewer-content .media-viewer-media>video{max-height:calc(100vh - 100px);max-width:calc(100vw - 16px)}.media-viewer .media-viewer-content .media-viewer-switcher-left,.media-viewer .media-viewer-content .media-viewer-switcher-right{position:absolute;left:0;top:0;width:10rem;height:100%;cursor:pointer}.media-viewer .media-viewer-content .media-viewer-switcher-left:hover>span,.media-viewer .media-viewer-content .media-viewer-switcher-right:hover>span{opacity:1}.media-viewer .media-viewer-content .media-viewer-switcher-right{left:auto;right:0}.media-viewer .media-viewer-content .media-viewer-prev-button,.media-viewer .media-viewer-content .media-viewer-next-button{cursor:pointer;position:absolute;color:#fff;font-size:3rem;left:2rem;top:50%;transform:translateY(-50%) rotate(90deg);opacity:0;transition:.2s opacity;z-index:3}.media-viewer .media-viewer-content .media-viewer-next-button{left:auto;right:2rem;transform:translateY(-50%) rotate(-90deg)}.media-viewer .media-viewer-content .media-viewer-caption{flex:1;text-align:center;display:flex;flex-direction:column;justify-content:center;align-items:center;color:#707579}div.scrollable-y::-webkit-scrollbar{width:10px}div.scrollable-y::-webkit-scrollbar-thumb{border:2px solid rgba(0,0,0,0);background-clip:padding-box}::-webkit-scrollbar-thumb{opacity:0;transition:.2s ease-in-out}div.scrollable.active::-webkit-scrollbar-thumb{border-radius:8px;background-color:rgba(0,0,0,0.4);opacity:1}::-webkit-scrollbar-button{width:0;height:0;display:none}::-webkit-scrollbar-corner{background-color:transparent}.scrollable{width:100%;height:100%;overflow-y:hidden;overflow-x:hidden;max-height:100%}.scrollable.scrollable-x{overflow-x:auto;overflow-x:overlay}.scrollable.scrollable-y{overflow-y:auto;overflow-y:overlay}div.scrollable-x::-webkit-scrollbar{height:4px}.menu-horizontal{width:100%;color:#707579;margin-top:0px;margin-bottom:0;border-bottom:1px solid #dadce0;display:flex;justify-content:space-around;align-items:center}.menu-horizontal>li{display:inline-block;padding:.75rem 1rem;cursor:pointer;text-align:center;flex:1;user-select:none}.menu-horizontal>li.active{position:relative;color:#4ea4f6}.menu-horizontal>li.active:after{content:\'\';position:absolute;background:#4ea4f6;left:24px;right:24px;bottom:-1px;height:4px;border-top-left-radius:2px;border-top-right-radius:2px}.tabs-container{min-width:100%;display:flex;overflow-x:hidden}.tabs-container.animated{transition:.2s margin-left}.tabs-container>div{width:100%;max-width:100%;overflow:hidden;display:none}.tabs-container>div.active{display:flex}.tabs-container>div>div{width:100%;padding:7.5px;max-width:100%;overflow:hidden}.justify-start{justify-content:flex-start}.page-chats{display:flex;max-height:100vh;min-height:100vh}.page-chats>div{height:100%;position:relative;min-height:100%;max-height:100%}.page-chats .chats-container{width:25%}.page-chats .chat-container{background-color:#e6ebee;width:100%;flex:1}.page-chats .profile-container{width:0%;transition:.2s ease-in-out}.page-chats .profile-container>div{min-width:25vw}.page-chats .preloader{width:50px;height:50px;position:absolute;top:50%;left:50%;transform:translateY(-50%) translateX(-50%)}.page-chats .preloader .preloader-path{stroke:#4EA4F6}.page-password #password{padding-right:2.5rem}.page-password #password[type="password"]{font-size:2.25rem;padding-left:10px}.page-password .toggle-visible{position:absolute;right:.25rem;z-index:2;top:50%;transform:translateY(-50%);font-size:1.25rem;color:#9e9e9e;cursor:pointer;transition:.2s;padding:.5rem}.page-password .toggle-visible:hover{color:#000}\n',""])},function(e,t){e.exports="assets/img/camomile.jpg"},function(e,t){e.exports="assets/img/msg-tail-left.svg"},function(e,t){e.exports="assets/img/msg-tail-right.svg"},function(e,t){e.exports="assets/img/doc-in.svg"},function(e,t,a){var r=a(53);"string"==typeof r&&(r=[[e.i,r,""]]);var s={insert:"head",singleton:!1};a(21)(r,s);r.locals&&(e.exports=r.locals)},function(e,t,a){t=e.exports=a(20)(!1);var r=a(34),s=r(a(54)),o=r(a(55)),n=r(a(56)),i=r(a(57));t.push([e.i,'@font-face{font-family:"tgico";src:url('+s+");src:url("+s+') format("embedded-opentype"),url('+o+') format("truetype"),url('+n+') format("woff"),url('+i+') format("svg");font-weight:normal;font-style:normal;font-display:block}[class^="tgico-"],.tgico:before,.tgico:after,[class*=" tgico-"]:before,[class*=" tgico-"]:after{font-family:"tgico" !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tgico-check:before{content:""}.tgico-settings:before{content:"\\e901"}.tgico-smallscreen:before{content:"\\e902"}.tgico-smile:before{content:"\\e903"}.tgico-sport:before{content:"\\e904"}.tgico-stop:before{content:"\\e905"}.tgico-unarchive:before{content:"\\e906"}.tgico-unlock:before{content:"\\e907"}.tgico-unmute:before{content:"\\e908"}.tgico-unpin:before{content:"\\e909"}.tgico-unread:before{content:"\\e90a"}.tgico-up:before{content:"\\e90b"}.tgico-username:before{content:"\\e90c"}.tgico-user:before{content:"\\e90d"}.tgico-play:before{content:"\\e90e"}.tgico-poll:before{content:"\\e90f"}.tgico-radiooff:before{content:"\\e910"}.tgico-radioon:before{content:"\\e911"}.tgico-recent:before{content:"\\e912"}.tgico-reply:before{content:"\\e913"}.tgico-revote:before{content:"\\e914"}.tgico-savedmessages:before{content:"\\e915"}.tgico-search:before{content:"\\e916"}.tgico-send:before{content:"\\e917"}.tgico-send2:before{content:"\\e918"}.tgico-sending:before{content:"\\e919"}.tgico-sendingerror:before{content:"\\e91a"}.tgico-mute:before{content:"\\e91b"}.tgico-newchannel:before{content:"\\e91c"}.tgico-newchat_filled:before{content:"\\e91d"}.tgico-newgroup:before{content:"\\e91e"}.tgico-newprivate:before{content:"\\e91f"}.tgico-next:before{content:"\\e920"}.tgico-nosound:before{content:"\\e921"}.tgico-pause:before{content:"\\e922"}.tgico-permissions:before{content:"\\e923"}.tgico-phone:before{content:"\\e924"}.tgico-photo:before{content:"\\e925"}.tgico-pin:before{content:"\\e926"}.tgico-pinnedchat:before{content:"\\e927"}.tgico-largepause:before{content:"\\e928"}.tgico-largeplay:before{content:"\\e929"}.tgico-livelocation:before{content:"\\e92a"}.tgico-location:before{content:"\\e92b"}.tgico-lock:before{content:"\\e92c"}.tgico-logout:before{content:"\\e92d"}.tgico-menu:before{content:"\\e92e"}.tgico-message:before{content:"\\e92f"}.tgico-microphone:before{content:"\\e930"}.tgico-microphone2:before{content:"\\e931"}.tgico-minus:before{content:"\\e932"}.tgico-more:before{content:"\\e933"}.tgico-download:before{content:"\\e934"}.tgico-eats:before{content:"\\e935"}.tgico-edit:before{content:"\\e936"}.tgico-eye1:before{content:"\\e937"}.tgico-eye2:before{content:"\\e938"}.tgico-flag:before{content:"\\e939"}.tgico-forward:before{content:"\\e93a"}.tgico-FullScreen:before{content:"\\e93b"}.tgico-group:before{content:"\\e93c"}.tgico-help:before{content:"\\e93d"}.tgico-info:before{content:"\\e93e"}.tgico-lamp:before{content:"\\e93f"}.tgico-language:before{content:"\\e940"}.tgico-checkboxempty:before{content:"\\e941"}.tgico-checkboxon:before{content:"\\e942"}.tgico-close:before{content:"\\e943"}.tgico-colorize:before{content:"\\e944"}.tgico-copy:before{content:"\\e945"}.tgico-data:before{content:"\\e946"}.tgico-delete_filled:before{content:"\\e947"}.tgico-delete:before{content:"\\e948"}.tgico-deleteuser:before{content:"\\e949"}.tgico-document:before{content:"\\e94a"}.tgico-down:before{content:"\\e94b"}.tgico-attach:before{content:"\\e94c"}.tgico-avatar_archivedchats:before{content:"\\e94d"}.tgico-avatar_deletedaccount:before{content:"\\e94e"}.tgico-avatar_savedmessages:before{content:"\\e94f"}.tgico-back:before{content:"\\e950"}.tgico-camera:before{content:"\\e951"}.tgico-cameraadd:before{content:"\\e952"}.tgico-car:before{content:"\\e953"}.tgico-channel:before{content:"\\e954"}.tgico-channelviews:before{content:"\\e955"}.tgico-chatsplaceholder:before{content:"\\e956"}.tgico-check1:before{content:"\\e957"}.tgico-checkbox:before{content:"\\e958"}.tgico-checkboxblock:before{content:"\\e959"}.tgico-checks:before{content:""}.tgico-activesessions:before{content:"\\e95b"}.tgico-add:before{content:"\\e95c"}.tgico-addmember_filled:before{content:"\\e95d"}.tgico-adduser:before{content:"\\e95e"}.tgico-admin:before{content:"\\e95f"}.tgico-animals:before{content:"\\e960"}.tgico-archive:before{content:"\\e961"}\n',""])},function(e,t){e.exports="assets/fonts/tgico.eot"},function(e,t){e.exports="assets/fonts/tgico.ttf"},function(e,t){e.exports="assets/fonts/tgico.woff"},function(e,t){e.exports="assets/fonts/tgico.svg"},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=s(a(22)),n=a(2),i=s(a(7)),d=a(65);class c{getState(e={}){return o.default.invokeApi("account.getPassword",{},e).then(e=>e)}check(e,t,a={}){return this.computeCheck(t,e).then(e=>o.default.invokeApi("auth.checkPassword",{password:e},a))}requestRecovery(e={}){return o.default.invokeApi("auth.requestPasswordRecovery",{},e)}recover(e,t={}){return o.default.invokeApi("auth.recoverPassword",{code:e},t)}makePasswordHash(e,t,a){var r=unescape(encodeURIComponent(e));const s=new TextEncoder("utf-8").encode(r);let o=n.bufferConcats(t,s,t);return i.default.sha256Hash(o).then(e=>(console.log("encoded 1",n.bytesToHex(new Uint8Array(e))),e=n.bufferConcats(a,e,a),i.default.sha256Hash(e).then(e=>(console.log("encoded 2",e,n.bytesToHex(new Uint8Array(e))),i.default.pbkdf2(new Uint8Array(e),t,1e5).then(e=>(console.log("encoded 3",e,n.bytesToHex(new Uint8Array(e))),e=n.bufferConcats(a,e,a),i.default.sha256Hash(e).then(e=>(console.log("got password hash:",e,n.bytesToHex(new Uint8Array(e))),e))))))))}computeCheck(e,t){return r(this,void 0,void 0,(function*(){let a=t.current_algo,s=d.str2bigInt(n.bytesToHex(a.p),16),o=d.str2bigInt(n.bytesToHex(t.srp_B),16),c=d.int2bigInt(a.g,32,256);console.log("p",d.bigInt2str(s,16)),console.log("B",d.bigInt2str(o,16));let l=yield this.makePasswordHash(e,new Uint8Array(a.salt1),new Uint8Array(a.salt2)),p=d.str2bigInt(n.bytesToHex(new Uint8Array(l)),16);console.warn("computed pw_hash:",l,p,n.bytesToHex(new Uint8Array(l)));var h=function(e,t,a=0){return Array(t).fill(a).concat(e).slice(-t)};let m=h(n.bytesFromHex(d.bigInt2str(s,16)),256),g=h(n.bytesFromHex(d.bigInt2str(c,16)),256),y=h(n.bytesFromHex(d.bigInt2str(o,16)),256);console.log(n.bytesToHex(m)),console.log(n.bytesToHex(g)),console.log(n.bytesToHex(y));let u=d.powMod(c,p,s);console.log("g_x",d.bigInt2str(u,16));let _=yield i.default.sha256Hash(n.bufferConcat(m,g));_=d.str2bigInt(n.bytesToHex(new Uint8Array(_)),16),console.log("k",d.bigInt2str(_,16));let f=d.mod(d.mult(_,u),s);console.log("kg_x",d.bigInt2str(f,16));let b,x=(e,t)=>{let a=d.sub(t,e);return!(d.negative(a)||d.bitSize(a)<1984||d.bitSize(e)<1984||Math.floor((d.bitSize(e)+7)/8)>256)},{a:D,a_for_hash:v,u:w}=yield(()=>r(this,void 0,void 0,(function*(){for(;;){let e=d.str2bigInt(n.bytesToHex(t.secure_random),16),a=d.powMod(c,e,s);if(x(a,s)){let t=n.bytesFromHex(d.bigInt2str(a,16)),r=yield i.default.sha256Hash(n.bufferConcat(new Uint8Array(t),new Uint8Array(y))),s=d.str2bigInt(n.bytesToHex(new Uint8Array(r)),16);if(!d.isZero(s)&&!d.negative(s))return{a:e,a_for_hash:t,u:s}}}})))();console.log("a",d.bigInt2str(D,16)),console.log("a_for_hash",n.bytesToHex(v)),console.log("u",d.bigInt2str(w,16)),console.log("B - kg_x",d.bigInt2str(d.sub(o,f),16)),d.greater(o,f)?b=o:(console.log("negative"),b=d.add(o,s)),b=d.mod(d.sub(b,f),s);let P=d.mult(w,p),k=d.add(D,P),S=d.powMod(b,k,s),C=yield i.default.sha256Hash(h(n.bytesFromHex(d.bigInt2str(S,16)),256)),F=yield i.default.sha256Hash(m),M=yield i.default.sha256Hash(g);F=n.bytesXor(new Uint8Array(F),new Uint8Array(M));let E=n.bufferConcats(F,yield i.default.sha256Hash(a.salt1),yield i.default.sha256Hash(a.salt2),v,y,C),I=yield i.default.sha256Hash(E),A={_:"inputCheckPasswordSRP",srp_id:t.srp_id,A:new Uint8Array(v),M1:new Uint8Array(I)};return console.log("out",n.bytesToHex(A.A),n.bytesToHex(A.M1)),A}))}}t.PasswordManager=c,t.default=new c},,function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});const n=a(0),i=a(2),d=a(1),c=a(25),l=s(a(7)),p=s(a(6)),h=o(a(11)),m=s(a(26)),g=s(a(24)),y=s(a(17)),u=s(a(27)),_=a(9);t.MTPNetworker=class{constructor(e,t,a,r,s={}){this.dcID=e,this.authKey=t,this.authKeyID=a,this.serverSalt=r,this.options=s,this.lastServerMessages=[],this.sentMessages={},this.pendingMessages={},this.pendingAcks=[],this.pendingResends=[],this.connectionInited=!1,this.longPollPending=0,this.seqNo=0,this.prevSessionID=[],this.sessionID=[],this.sleepAfter=0,this.offline=!1,this.checkConnectionPeriod=0,this.nextReq=0,this.onOnlineCb=this.checkConnection.bind(this),this.debug=!1,this.lastResendReq=null,this.authKeyUint8=i.convertToUint8Array(this.authKey),this.upload=this.options.fileUpload||this.options.fileDownload||!1,this.log=_.logger("NET-"+e+(this.upload?"-U":"")),this.log("constructor",this.authKey,this.authKeyID,this.serverSalt),this.updateSession(),g.default.offlineInited||(g.default.offlineInited=!0),h.Navigator.mobile&&this.setupMobileSleep(),this.transport=y.default.chooseServer(this.dcID,this.upload),this.transport instanceof u.default?(window.setInterval(this.checkLongPoll.bind(this),1e4),this.checkLongPoll()):this.transport.networker=this}updateSession(){this.seqNo=0,this.prevSessionID=this.sessionID,this.sessionID=new Array(8),d.MTProto.secureRandom.nextBytes(this.sessionID)}setupMobileSleep(){}updateSentMessage(e){var t=this.sentMessages[e];if(!t)return!1;var a=this;if(t.container){var r=[];t.inner.forEach(e=>{var t=a.updateSentMessage(e);t&&r.push(t.msg_id)}),t.inner=r}return t.msg_id=m.default.generateID(),t.seq_no=this.generateSeqNo(t.notContentRelated||t.container),this.sentMessages[t.msg_id]=t,delete a.sentMessages[e],t}generateSeqNo(e){var t=2*this.seqNo;return e||(t++,this.seqNo++),t}wrapMtpCall(e,t={},a={}){var r=new c.TLSerialization({mtproto:!0});r.storeMethod(e,t);var s=m.default.generateID(),o=this.generateSeqNo(),n={msg_id:s,seq_no:o,body:r.getBytes()};return h.Modes.debug&&this.log("MT call",e,t,s,o),this.pushMessage(n,a)}wrapMtpMessage(e={},t={}){var a=new c.TLSerialization({mtproto:!0});a.storeObject(e,"Object");var r=m.default.generateID(),s=this.generateSeqNo(t.notContentRelated),o={msg_id:r,seq_no:s,body:a.getBytes()};return h.Modes.debug&&this.log("MT message",e,r,s),this.pushMessage(o,t)}wrapApiCall(e,t={},a={}){let r=new c.TLSerialization(a);if(!this.connectionInited){this.log("Wrap api call !this.connectionInited");let e=h.Schema.API.methods.find(e=>"invokeWithLayer"==e.method);if(!e)throw new Error("no invokeWithLayer!");r.storeInt(+e.id>>>0,"invokeWithLayer"),r.storeInt(h.Schema.API.layer,"layer");let t=h.Schema.API.methods.find(e=>"initConnection"==e.method);if(!t)throw new Error("no initConnection!");r.storeInt(+t.id>>>0,"initConnection"),r.storeInt(0,"flags"),r.storeInt(h.App.id,"api_id"),r.storeString(navigator.userAgent||"Unknown UserAgent","device_model"),r.storeString(navigator.platform||"Unknown Platform","system_version"),r.storeString(h.App.version,"app_version"),r.storeString(navigator.language||"en","system_lang_code"),r.storeString("","lang_pack"),r.storeString(navigator.language||"en","lang_code")}a.afterMessageID&&(this.log("Api call options.afterMessageID!"),r.storeInt(3416209197,"invokeAfterMsg"),r.storeLong(a.afterMessageID,"msg_id")),a.resultType=r.storeMethod(e,t);var s={msg_id:m.default.generateID(),seq_no:this.generateSeqNo(),body:r.getBytes(!0),isAPI:!0};return h.Modes.debug,this.log("Api call",e,s,t,a),this.pushMessage(s,a)}checkLongPoll(){var e=this.cleanupSent();if(this.longPollPending&&n.tsNow(){e&&(a!=t.dcID||t.upload||t.sleepAfter&&n.tsNow()>t.sleepAfter)||t.sendLongPoll()})}sendLongPoll(){this.longPollPending=n.tsNow()+25e3,this.wrapMtpCall("http_wait",{max_delay:500,wait_after:150,max_wait:25e3},{noResponse:!0,longPoll:!0}).then(()=>{this.longPollPending=0,setTimeout(this.checkLongPoll.bind(this),0)},e=>{this.log("Long-poll failed",e)})}pushMessage(e,t={}){return new Promise((a,r)=>{this.sentMessages[e.msg_id]=Object.assign(e,t,{deferred:{resolve:a,reject:r}}),this.pendingMessages[e.msg_id]=0,t&&t.noSchedule||this.scheduleRequest(),n.isObject(t)&&(t.messageID=e.msg_id)})}pushResend(e,t=0){var a=t?n.tsNow()+t:0,r=this.sentMessages[e];if(r.container)for(var s=0;s{var t=new Uint8Array(32),a=new Uint8Array(32),r=new Uint8Array(e[0]),s=new Uint8Array(e[1]);return t.set(r.subarray(0,8)),t.set(s.subarray(8,24),8),t.set(r.subarray(24,32),24),a.set(s.subarray(0,8)),a.set(r.subarray(8,24),8),a.set(s.subarray(24,32),24),[t,a]})}checkConnection(e){this.log("Check connection",e),clearTimeout(this.checkConnectionTimeout),this.checkConnectionTimeout=0;var t=new c.TLSerialization({mtproto:!0}),a=[i.nextRandomInt(4294967295),i.nextRandomInt(4294967295)];t.storeMethod("ping",{ping_id:a});var r={msg_id:m.default.generateID(),seq_no:this.generateSeqNo(!0),body:t.getBytes()},s=this;this.sendEncryptedRequest(r,{timeout:15e3}).then(e=>{s.toggleOffline(!1)},()=>{this.log("Delay ",1e3*s.checkConnectionPeriod),s.checkConnectionTimeout=setTimeout(s.checkConnection.bind(s),1e3*s.checkConnectionPeriod|0),s.checkConnectionPeriod=Math.min(60,1.5*s.checkConnectionPeriod)})}toggleOffline(e){if(void 0!==this.offline&&this.offline==e)return!1;this.offline=e,this.transport instanceof u.default?this.offline?(clearTimeout(this.nextReqTimeout),this.nextReqTimeout=0,this.nextReq=0,this.checkConnectionPeriod<1.5&&(this.checkConnectionPeriod=0),this.checkConnectionTimeout=setTimeout(this.checkConnection.bind(this),1e3*this.checkConnectionPeriod|0),this.checkConnectionPeriod=Math.min(30,1.5*(1+this.checkConnectionPeriod)),document.body.addEventListener("online",this.onOnlineCb,!1),document.body.addEventListener("focus",this.onOnlineCb,!1)):(this.checkLongPoll(),this.scheduleRequest(),document.body.removeEventListener("online",this.onOnlineCb),document.body.removeEventListener("focus",this.onOnlineCb),clearTimeout(this.checkConnectionTimeout),this.checkConnectionTimeout=0):this.log("toggle ",e,this.dcID)}performScheduledRequest(){if(this.offline||g.default.akStopped)return this.log("Cancel scheduled"),!1;if(this.nextReq=0,this.pendingAcks.length){var e=this.pendingAcks.slice();this.wrapMtpMessage({_:"msgs_ack",msg_ids:e},{notContentRelated:!0,noSchedule:!0})}if(this.pendingResends.length){var t=this.pendingResends.slice(),a={noSchedule:!0,notContentRelated:!0,messageID:""};this.wrapMtpMessage({_:"msg_resend_req",msg_ids:t},a),this.lastResendReq={req_msg_id:a.messageID,resend_msg_ids:t}}var r,s=[],o=0,i=n.tsNow(),d=!1,l=!1,p=!1,y=0,_=this;for(let e in this.pendingMessages){let t=this.pendingMessages[e];if(!t||t>=i){if(r=this.sentMessages[e]){var f=r.body.length+32;if(!r.notContentRelated&&p)continue;if(!r.notContentRelated&&o&&o+f>655360){this.log.warn("lengthOverflow",r),p=!0;continue}if(r.singleInRequest&&++y>1)continue;s.push(r),o+=f,r.isAPI?d=!0:r.longPoll&&(l=!0)}delete _.pendingMessages[e]}}if(d&&!l&&this.transport instanceof u.default){var b=new c.TLSerialization({mtproto:!0});b.storeMethod("http_wait",{max_delay:500,wait_after:150,max_wait:3e3}),s.push({msg_id:m.default.generateID(),seq_no:this.generateSeqNo(),body:b.getBytes()})}if(!s.length)return;var x=[];if(s.length>1){var D=new c.TLSerialization({mtproto:!0,startMaxLength:o+64});D.storeInt(1945237724,"CONTAINER[id]"),D.storeInt(s.length,"CONTAINER[count]");var v=[];s.forEach((e,t)=>{D.storeLong(e.msg_id,"CONTAINER["+t+"][msg_id]"),v.push(e.msg_id),D.storeInt(e.seq_no,"CONTAINER["+t+"][seq_no]"),D.storeInt(e.body.length,"CONTAINER["+t+"][bytes]"),D.storeRawBytes(e.body,"CONTAINER["+t+"][body]"),e.noResponse&&x.push(e.msg_id)});var w={msg_id:m.default.generateID(),seq_no:this.generateSeqNo(!0),container:!0,inner:v};r=Object.assign({body:D.getBytes(!0)},w),this.sentMessages[r.msg_id]=w,h.Modes.debug,this.log("Container",v,r.msg_id,r.seq_no)}else r.noResponse&&x.push(r.msg_id),this.sentMessages[r.msg_id]=r;this.pendingAcks=[];let P=this.sendEncryptedRequest(r);this.transport instanceof u.default?P.then(e=>{_.toggleOffline(!1),_.parseResponse(e).then(e=>{h.Modes.debug&&this.log("Server response",_.dcID,e),_.processMessage(e.response,e.messageID,e.sessionID),x.forEach(e=>{if(_.sentMessages[e]){var t=_.sentMessages[e].deferred;delete _.sentMessages[e],t.resolve()}}),_.transport instanceof u.default&&(_.checkLongPoll(),this.checkConnectionPeriod=Math.max(1.1,Math.sqrt(this.checkConnectionPeriod)))})},e=>{this.log.error("Encrypted request failed",e,r),r.container?(r.inner.forEach(e=>{_.pendingMessages[e]=0}),delete _.sentMessages[r.msg_id]):_.pendingMessages[r.msg_id]=0,x.forEach(e=>{if(_.sentMessages[e]){var t=_.sentMessages[e].deferred;delete _.sentMessages[e],delete _.pendingMessages[e],t.reject()}}),_.toggleOffline(!0)}):x.length&&this.log.error("noResponseMsgs length!",x),(p||y>1)&&this.scheduleRequest()}getEncryptedMessage(e){return r(this,void 0,void 0,(function*(){let t=yield this.getMsgKey(e,!0),a=yield this.getAesKeyIv(t,!0);return{bytes:yield l.default.aesEncrypt(e,a[0],a[1]),msgKey:t}}))}getDecryptedMessage(e,t){return this.getAesKeyIv(e,!1).then(e=>l.default.aesDecrypt(t,e[0],e[1]))}sendEncryptedRequest(e,t={}){var a=this;this.debug&&this.log("Send encrypted",e,t,this.authKeyID);var r=new c.TLSerialization({startMaxLength:e.body.length+2048});r.storeIntBytes(this.serverSalt,64,"salt"),r.storeIntBytes(this.sessionID,64,"session_id"),r.storeLong(e.msg_id,"message_id"),r.storeInt(e.seq_no,"seq_no"),r.storeInt(e.body.length,"message_data_length"),r.storeRawBytes(e.body,"message_data");var s=r.getBuffer(),o=16-r.offset%16+16*(1+i.nextRandomInt(5)),n=new Array(o);d.MTProto.secureRandom.nextBytes(n);var l=i.bufferConcat(s,n);return this.getEncryptedMessage(l).then(e=>{this.debug&&this.log("Got encrypted out message",e);let t=new c.TLSerialization({startMaxLength:e.bytes.byteLength+256});t.storeIntBytes(a.authKeyID,64,"auth_key_id"),t.storeIntBytes(e.msgKey,128,"msg_key"),t.storeRawBytes(e.bytes,"encrypted_data");let r=t.getBytes(!0),s={code:406,type:"NETWORK_BAD_RESPONSE",transport:this.transport},o=this.transport.send(r);return this.transport instanceof u.default?o.then(e=>e&&e.byteLength?e:Promise.reject(s),e=>(e.message||e.type||(e=Object.assign(s,{type:"NETWORK_BAD_REQUEST",originalError:e})),Promise.reject(e))):o})}parseResponse(e){this.debug&&this.log("Start parsing response");let t=this,a=new c.TLDeserialization(e),r=a.fetchIntBytes(64,!0,"auth_key_id");if(!i.bytesCmp(r,this.authKeyID))throw new Error("[MT] Invalid server auth_key_id: "+r.hex);let s=a.fetchIntBytes(128,!0,"msg_key"),o=a.fetchRawBytes(e.byteLength-a.getOffset(),!0,"encrypted_data");return t.getDecryptedMessage(s,o).then(e=>t.getMsgKey(e,!1).then(a=>{if(!i.bytesCmp(s,a))throw this.log.warn("[MT] msg_keys",s,a),this.updateSession(),new Error("[MT] server msgKey mismatch, updating session");let r=new c.TLDeserialization(e,{mtproto:!0});r.fetchIntBytes(64,!1,"salt");let o=r.fetchIntBytes(64,!1,"session_id"),n=r.fetchLong("message_id");if(!(i.bytesCmp(o,t.sessionID)||t.prevSessionID&&i.bytesCmp(o,t.prevSessionID)))throw this.log.warn("Sessions",o,t.sessionID,t.prevSessionID,e),new Error("[MT] Invalid server session_id: "+i.bytesToHex(o));let d=r.fetchInt("seq_no"),l=e.byteLength,p=r.fetchInt("message_data[length]"),h=r.getOffset();if(p%4||p>l-h)throw new Error("[MT] Invalid body length: "+p);let m=r.fetchRawBytes(p,!0,"message_data"),g=l-(h=r.getOffset());if(g<12||g>1024)throw new Error("[MT] Invalid padding length: "+g);return(r=new c.TLDeserialization(m,{mtproto:!0})).override={mt_message:function(e,a){e.msg_id=this.fetchLong(a+"[msg_id]"),e.seqno=this.fetchInt(a+"[seqno]"),e.bytes=this.fetchInt(a+"[bytes]");var r=this.getOffset();try{e.body=this.fetchObject("Object",a+"[body]")}catch(a){t.log.error("parse error",a.message,a.stack),e.body={_:"parse_error",error:a}}this.offset!=r+e.bytes&&(this.offset=r+e.bytes)}.bind(r),mt_rpc_result:function(e,a){e.req_msg_id=this.fetchLong(a+"[req_msg_id]");var r=t.sentMessages[e.req_msg_id],s=r&&r.resultType||"Object";e.req_msg_id&&!r||(e.result=this.fetchObject(s,a+"[result]"))}.bind(r)},{response:r.fetchObject("","INPUT"),messageID:n,sessionID:o,seqNo:d}}))}applyServerSalt(e){var t=i.longToBytes(e);return p.default.set({["dc"+this.dcID+"_server_salt"]:i.bytesToHex(t)}),this.serverSalt=t,!0}scheduleRequest(e=0){if(!(this.transport instanceof u.default))return this.performScheduledRequest();this.offline&&this.checkConnection("forced schedule");var t=n.tsNow()+e;if(e&&this.nextReq&&this.nextReq<=t)return!1;clearTimeout(this.nextReqTimeout),this.nextReqTimeout=0,e>0?this.nextReqTimeout=window.setTimeout(this.performScheduledRequest.bind(this),e||0):setTimeout(this.performScheduledRequest.bind(this),0),this.nextReq=t}ackMessage(e){this.pendingAcks.push(e),this.scheduleRequest(3e4)}reqResendMessage(e){this.log("Req resend",e),this.pendingResends.push(e),this.scheduleRequest(100)}cleanupSent(){var e=this,t=!1;return Object.keys(this.sentMessages).forEach(a=>{let r=this.sentMessages[a];if(r.notContentRelated&&void 0===e.pendingMessages[a])delete e.sentMessages[a];else if(r.container){for(var s=0;s100&&this.lastServerMessages.shift(),this.processMessage(e.body,e.msg_id,a);break;case"new_session_created":this.ackMessage(t),this.log("new_session_created in my head"),this.processMessageAck(e.first_msg_id),this.applyServerSalt(e.server_salt),p.default.get("dc").then(t=>{t==this.dcID&&!this.upload&&g.default.updatesProcessor&&g.default.updatesProcessor(e,!0)});break;case"msgs_ack":for(s=0;s5?"[.."+e.result.length+"..]":e.result),this.debug&&this.log("Rpc response",_,l)}l.deferred.resolve(e.result)}l.isAPI&&!this.connectionInited&&(this.connectionInited=!0,this.log("Rpc set connectionInited to:",this.connectionInited,this))}delete this.sentMessages[c]}break;default:this.ackMessage(t),this.debug&&this.log("Update",e),null!==g.default.updatesProcessor&&g.default.updatesProcessor(e,!0)}}}},function(e,t,a){e.exports=function(){return new Worker(a.p+"6b540956a47ff257d3ee.worker.js")}},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(a(35)),o=r(a(63)),n=r(a(64)),i=a(9);class d{init(){const e=new Uint8Array(64);for(e.randomize();;){let t=e[3]<<24|e[2]<<16|e[1]<<8|e[0],a=e[7]<<24|e[6]<<16|e[5]<<8|e[4];if(239!=e[0]&&1145128264!=t&&1414745936!=t&&542393671!=t&&1230262351!=t&&4008636142!=t&&0!=a)break;e.randomize()}const t=e.slice().reverse();let a=e.slice(8,40),r=e.slice(40,56),s=t.slice(8,40),i=t.slice(40,56);this.enc=new o.default.ModeOfOperation.ctr(a,new o.default.Counter(r)),this.dec=new o.default.ModeOfOperation.ctr(s,new o.default.Counter(i)),e.set(n.default.obfuscateTag,56);const d=this.encode(e);return e.set(d.slice(56,64),56),e}encode(e){return this.enc.encrypt(e)}decode(e){return this.dec.encrypt(e)}}t.Obfuscation=d;class c extends s.default{constructor(e,t){super(e,t),this.pending=[],this.connected=!1,this.transport="websocket",this.obfuscation=new d,this.debug=!1,this.connect=()=>{this.ws&&(this.ws.removeEventListener("open",this.handleOpen),this.ws.removeEventListener("close",this.handleClose),this.ws.removeEventListener("message",this.handleMessage),this.ws.close(1e3)),this.ws=new WebSocket(this.url,"binary"),this.ws.binaryType="arraybuffer",this.ws.onopen=this.handleOpen,this.ws.onclose=this.handleClose,this.ws.onmessage=this.handleMessage},this.handleOpen=()=>{this.log("opened"),this.ws.send(this.obfuscation.init()),this.connected=!0,this.releasePending()},this.handleClose=e=>{this.log("closed",e),this.connected=!1,this.pending.length=0,this.networker&&this.networker.cleanupSent(),this.log("trying to reconnect..."),this.connect()},this.handleMessage=e=>{this.debug&&this.log("<-","handleMessage",e);let t=this.obfuscation.decode(new Uint8Array(e.data));if(t=n.default.readPacket(t),this.networker)return this.debug&&this.log("redirecting to networker"),this.networker.parseResponse(t).then(e=>{this.debug&&this.log("redirecting to networker response:",e),this.networker.processMessage(e.response,e.messageID,e.sessionID)});let a=this.pending.shift();if(!a)return this.log("no pending for res:",t.hex);a.resolve(t)},this.send=e=>{if(this.debug&&this.log("-> body length to pending:",e.length),!this.networker){let t=new Promise((t,a)=>{this.pending.push({resolve:t,reject:a,body:e})});return this.releasePending(),t}this.pending.push({body:e}),this.releasePending()},this.log=i.logger(`WS-${e}`),this.log("constructor"),this.connect()}releasePending(){if(!this.connected)return;for(let e=this.pending.length-1;e>=0;--e){let t=this.pending[e],{body:a}=t;if(a){let r=n.default.encodePacket(a),s=this.obfuscation.encode(r);this.debug&&this.log("-> body length to send:",s.length),this.ws.send(s),t.resolve||this.pending.splice(e,1),delete t.body}}}}t.default=c},,function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=a(2);t.default=new class{constructor(){this.tag=239,this.obfuscateTag=new Uint8Array([this.tag,this.tag,this.tag,this.tag])}encodePacket(e){let t,a=e.byteLength>>2;return a<127?t=new Uint8Array([a]):(t=new Uint8Array([127,...r.addPadding(r.bytesFromHex(a.toString(16)).reverse(),3,!0)]),console.log("got nobody cause im braindead",t,a)),new Uint8Array([...t,...e])}readPacket(e){let t=e[0];return t>=127?(t=e[1]|e[2]<<8|e[3]<<16,e.slice(4,t<<3)):e.slice(1,t<<3)}}},,function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=a(2),o=r(a(29));const n=new class{constructor(){this.dbName="cachedFiles",this.dbStoreName="files",this.dbVersion=2,this.name="IndexedDB",window.IDBTransaction=window.IDBTransaction||window.webkitIDBTransaction||window.OIDBTransaction||window.msIDBTransaction,this.storageIsAvailable=void 0!==window.indexedDB&&void 0!==window.IDBTransaction,this.storageIsAvailable&&-1!=navigator.userAgent.indexOf("Safari")&&-1==navigator.userAgent.indexOf("Chrome")&&navigator.userAgent.match(/Version\/[678]/)&&(this.storageIsAvailable=!1),this.storeBlobsAvailable=this.storageIsAvailable||!1,this.openDatabase()}isAvailable(){return this.storageIsAvailable}openDatabase(){if(this.openDbPromise)return this.openDbPromise;var e;try{var t=indexedDB.open(this.dbName,this.dbVersion);if(e=e=>{e.createObjectStore(this.dbStoreName)},!t)throw new Error}catch(e){return console.error("error opening db",e.message),this.storageIsAvailable=!1,Promise.reject(e)}var a=!1;return setTimeout(()=>{a||t.onerror({type:"IDB_CREATE_TIMEOUT"})},3e3),this.openDbPromise=new Promise((r,s)=>{t.onsuccess=e=>{a=!0;var o=t.result;o.onerror=e=>{this.storageIsAvailable=!1,console.error("Error creating/accessing IndexedDB database",e),s(e)},r(o)},t.onerror=e=>{a=!0,this.storageIsAvailable=!1,console.error("Error creating/accessing IndexedDB database",e),s(e)},t.onupgradeneeded=t=>{a=!0,console.warn("performing idb upgrade from",t.oldVersion,"to",t.newVersion);var r=t.target.result;1==t.oldVersion&&r.deleteObjectStore(this.dbStoreName),e(r)}})}deleteFile(e){return this.openDatabase().then(t=>{try{var a=t.transaction([this.dbStoreName],IDBTransaction.READ_WRITE||"readwrite").objectStore(this.dbStoreName);console.log("Delete file: `"+e+"`");var r=a.delete(e)}catch(e){return Promise.reject(e)}return new Promise((e,t)=>{r.onsuccess=function(t){console.log("deleted file",t),e()},r.onerror=function(e){t(e)}})})}saveFile(e,t){return this.openDatabase().then(a=>{if(!this.storeBlobsAvailable)return this.saveFileBase64(a,e,t);t instanceof Blob||(t=s.blobConstruct([t]));try{var r=a.transaction([this.dbStoreName],IDBTransaction.READ_WRITE||"readwrite").objectStore(this.dbStoreName).put(t,e)}catch(r){return this.storeBlobsAvailable?(this.storeBlobsAvailable=!1,this.saveFileBase64(a,e,t)):(this.storageIsAvailable=!1,Promise.reject(r))}return new Promise((e,a)=>{r.onsuccess=function(a){e(t)},r.onerror=function(e){a(e)}})})}saveFileBase64(e,t,a){if(this.getBlobSize(a)>10485760)return Promise.reject();if(!(a instanceof Blob)){var r="data:"+s.blobSafeMimeType(a.type||"image/jpeg")+";base64,"+s.bytesToBase64(a);return this.storagePutB64String(e,t,r).then(()=>a)}try{var o=new FileReader}catch(e){return this.storageIsAvailable=!1,Promise.reject()}let n=new Promise((r,s)=>{o.onloadend=()=>{this.storagePutB64String(e,t,o.result).then(()=>{r(a)},s)},o.onerror=s});try{o.readAsDataURL(a)}catch(e){return this.storageIsAvailable=!1,Promise.reject()}return n}storagePutB64String(e,t,a){try{var r=e.transaction([this.dbStoreName],IDBTransaction.READ_WRITE||"readwrite").objectStore(this.dbStoreName).put(a,t)}catch(e){return this.storageIsAvailable=!1,Promise.reject(e)}return new Promise((e,t)=>{r.onsuccess=function(t){e()},r.onerror=t})}getBlobSize(e){return e.size||e.byteLength||e.length}getFile(e,t){return this.openDatabase().then(t=>{var a=t.transaction([this.dbStoreName],IDBTransaction.READ||"readonly").objectStore(this.dbStoreName).get(e);return new Promise((e,t)=>{a.onsuccess=function(a){var r=a.target.result;void 0===r?t():"string"==typeof r&&"data:"===r.substr(0,5)?e(s.dataUrlToBlob(r)):e(r)},a.onerror=t})})}getFileWriter(e,t){var a=o.default.getFakeFileWriter(t,t=>{this.saveFile(e,t)});return Promise.resolve(a)}};window.IdbFileStorage=n,t.default=n},,function(e,t,a){"use strict";a.r(t),a.d(t,"stackBlurImage",(function(){return o})),a.d(t,"stackBlurCanvasRGBA",(function(){return n})),a.d(t,"stackBlurCanvasRGB",(function(){return i}));var r=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],s=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function o(e,t,a,r){var s,o=(s="string"==typeof e?document.getElementById(e):e).naturalWidth,d=s.naturalHeight,c=document.getElementById(t);c.style.width=o+"px",c.style.height=d+"px",c.width=o,c.height=d;var l=c.getContext("2d");if(l.clearRect(0,0,o,d),l.drawImage(s,0,0),!(isNaN(a)||a<1))return r?n(t,0,0,o,d,a):i(t,0,0,o,d,a)}function n(e,t,a,o,n,i){if(!(isNaN(i)||i<1)){i|=0;var c,l=document.getElementById(e).getContext("2d");try{try{c=l.getImageData(t,a,o,n)}catch(e){try{c=l.getImageData(t,a,o,n)}catch(e){throw alert("Cannot access local image"),new Error("unable to access local image data: "+e)}}}catch(e){throw alert("Cannot access image"),new Error("unable to access image data: "+e)}var p,h,m,g,y,u,_,f,b,x,D,v,w,P,k,S,C,F,M,E,I,A,B,T,L=c.data,U=i+i+1,O=o-1,R=n-1,j=i+1,N=j*(j+1)/2,V=new d,z=V;for(m=1;m>K,0!=B?(B=255/B,L[u]=(f*W>>K)*B,L[u+1]=(b*W>>K)*B,L[u+2]=(x*W>>K)*B):L[u]=L[u+1]=L[u+2]=0,f-=v,b-=w,x-=P,D-=k,v-=q.r,w-=q.g,P-=q.b,k-=q.a,g=_+((g=p+i+1)>K,B>0?(B=255/B,L[g]=(f*W>>K)*B,L[g+1]=(b*W>>K)*B,L[g+2]=(x*W>>K)*B):L[g]=L[g+1]=L[g+2]=0,f-=v,b-=w,x-=P,D-=k,v-=q.r,w-=q.g,P-=q.b,k-=q.a,g=p+((g=h+j)>H,I[u+1]=b*z>>H,I[u+2]=x*z>>H,f-=D,b-=v,x-=w,D-=N.r,v-=N.g,w-=N.b,g=_+((g=p+i+1)>H,I[g+1]=b*z>>H,I[g+2]=x*z>>H,f-=D,b-=v,x-=w,D-=N.r,v-=N.g,w-=N.b,g=p+((g=h+L)r(void 0,void 0,void 0,(function*(){m=e;let t=document.body.getElementsByClassName("page-authCode")[0];t.style.display="";let a=t.getElementsByClassName("phone")[0];a.innerText=m.phone_number;let s=t.getElementsByClassName("sent-type")[0];switch(m.type._){case"auth.sentCodeTypeSms":s.innerHTML="We have sent you an SMS
with the code.";break;case"auth.sentCodeTypeApp":s.innerHTML="We have sent you a message in Telegram
with the code.";break;case"auth.sentCodeTypeCall":s.innerHTML="We will call you and voice
the code.";break;default:s.innerHTML=`Please check everything
for a code (type: ${m.type._})`}if(h)return;h=!0;let g=0,y=0,u=void 0;const _=m.type.length;fetch("assets/img/TwoFactorSetupMonkeyTracking.tgs").then(e=>e.arrayBuffer()).then(e=>r(void 0,void 0,void 0,(function*(){let t=yield l.default.gzipUncompress(e,!0);(u=yield p.default.loadAnimation({container:document.body.querySelector(".page-authCode .auth-image"),renderer:"svg",loop:!1,autoplay:!1,animationData:JSON.parse(t)})).setSpeed(1),u.addEventListener("enterFrame",e=>{let t=Math.round(e.currentTime);(1==e.direction&&t>=g||-1==e.direction&&t<=g)&&(u.setSpeed(1),u.pause())})})));const f=document.getElementById("code"),b=f.nextElementSibling,x=document.querySelector(".phone-edit");x.addEventListener("click",(function(){return t.style.display="none",n.default()}));f.addEventListener("input",(function(e){this.classList.remove("error"),this.value=this.value.replace(/\D/g,""),this.value.length>_&&(this.value=this.value.slice(0,_));let a,r=this.value.length;if(r==_)(e=>{f.setAttribute("disabled","true");let a={phone_number:m.phone_number,phone_code_hash:m.phone_code_hash,phone_code:e};console.log("invoking auth.signIn with params:",a),o.MTProto.apiManager.invokeApi("auth.signIn",a).then(e=>{switch(console.log("auth.signIn response:",e),e._){case"auth.authorization":o.MTProto.apiManager.setUserAuth({id:e.user.id}),t.style.display="none",d.default(),u&&u.destroy();break;case"auth.authorizationSignUpRequired":console.log("Registration needed!"),t.style.display="none",i.default({phone_number:m.phone_number,phone_code_hash:m.phone_code_hash}),u&&u.destroy();break;default:f.innerText=e._}}).catch(e=>{switch(f.removeAttribute("disabled"),e.type){case"SESSION_PASSWORD_NEEDED":console.warn("pageAuthCode: SESSION_PASSWORD_NEEDED"),e.handled=!0,t.style.display="none",u&&u.destroy(),c.default();break;case"PHONE_CODE_EMPTY":case"PHONE_CODE_INVALID":f.classList.add("error"),b.innerText="Invalid Code";break;default:b.innerText=e.type}})})(this.value);else if(r==y)return;if(y=r,!u)return;a=r?Math.round((r>45?45:r)*(165/45)+11.33):0;let s=g>a?-1:1;u.setDirection(s),0!=g&&0==a&&u.setSpeed(7),g=a,u.play()}))}))},function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=a(1),o=a(4);let n=!1,i=null;const d=r(a(72)),c=r(a(16));t.default=e=>{if(i=e,n)return;n=!0;let t=document.body.getElementsByClassName("page-signUp")[0];t.style.display="";Array.from(document.body.getElementsByClassName("popup-close")).forEach(e=>{let t=((e,t)=>{for(;e.parentNode;)if((e=e.parentNode).classList.contains(t))return e;return null})(e,"popup");e.addEventListener("click",()=>{t.classList.remove("is-visible")})});const a=document.getElementById("avatar-input"),r=t.getElementsByClassName("popup-avatar")[0],l=t.querySelector("#canvas-avatar"),p=r.getElementsByClassName("crop")[0];let h,m=new Image;p.append(m),r.getElementsByClassName("popup-close")[0].addEventListener("click",(function(e){setTimeout(()=>{g.removeHandlers(),m&&m.remove()},200)}));let g={crop:()=>{},removeHandlers:()=>{}};r.getElementsByClassName("btn-crop")[0].addEventListener("click",()=>{g.crop(),r.classList.remove("is-visible"),g.removeHandlers(),l.toBlob(e=>{h=e;let t=l.getContext("2d");t.fillStyle="rgba(0, 0, 0, 0.3)",t.fillRect(0,0,l.width,l.height)},"image/jpeg",1),m.remove()}),a.addEventListener("change",e=>{var t=e.target.files[0];if(t){var s=new FileReader;s.onload=e=>{var t=e.target.result;m=new Image,p.append(m),m.src=t,m.onload=()=>{g=d.default(m,l),a.value=""},r.classList.add("is-visible")},s.readAsDataURL(t)}},!1),t.querySelector(".auth-image").addEventListener("click",()=>{a.click()});const y=t.getElementsByClassName("fullName")[0];let u=function(e){let t=_.value||"",a=f.value||"",r=t||a?(t+" "+a).trim():"Your Name";y.innerText!=r&&(y.innerText=r),this.classList.remove("error")};const _=document.getElementById("name");_.addEventListener("input",u);const f=document.getElementById("lastName");f.addEventListener("input",u),document.getElementById("signUp").addEventListener("click",(function(e){if(this.setAttribute("disabled","true"),!_.value.length)return _.classList.add("error"),!1;let a=_.value,r=f.value,n={phone_number:i.phone_number,phone_code_hash:i.phone_code_hash,first_name:a,last_name:r};console.log("invoking auth.signUp with params:",n),this.textContent="PLEASE WAIT...",o.putPreloader(this),s.MTProto.apiManager.invokeApi("auth.signUp",n).then(e=>{switch(console.log("auth.signUp response:",e),e._){case"auth.authorization":s.MTProto.apiManager.setUserAuth({id:e.user.id}),(()=>new Promise((e,t)=>{if(!h)return console.log("User has not selected avatar"),e();console.log("invoking uploadFile..."),s.MTProto.apiFileManager.uploadFile(h).then(a=>{console.log("uploaded smthn",a),s.MTProto.apiManager.invokeApi("photos.uploadProfilePhoto",{file:a}).then(t=>{console.log("updated photo!"),e()},t)},t)}))().then(()=>{t.style.display="none",c.default()},()=>{t.style.display="none",c.default()});break;default:this.innerText=e._}}).catch(e=>{this.removeAttribute("disabled"),e.type,this.innerText=e.type})}))}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var a,r,s,o={},n=1,i=4,d=50,c=200,l=200,p=0,h=0,m=0,g=0;function y(){if(e.dataset.isCrop)throw"image is already crop";e.dataset.isCrop="true",e.classList.add("crop-blur"),e.draggable=!1,(s=new Image).crossOrigin=e.crossOrigin,s.src=e.src,s.draggable=!1,t||(t=document.createElement("canvas")),(a=document.createElement("div")).classList.add("crop-component"),(r=document.createElement("div")).classList.add("overlay");let o=document.createElement("div");o.classList.add("crop-overlay-color"),a.appendChild(r),e.parentNode.appendChild(a),a.appendChild(s),a.appendChild(e),a.appendChild(o),r.appendChild(s),s.style.maxWidth=e.width+"px",u(e.offsetWidth/2-c/2,e.offsetHeight/2-l/2),r.addEventListener("mousedown",D,!1),r.addEventListener("touchstart",D,!1),r.addEventListener("wheel",x,!1),document.addEventListener("keypress",b,!1)}function u(e,t){p=-e*n,h=-t*n,s.style.top=-t+"px",s.style.left=-e+"px"}function _(e,t){let a=t+c/2+"px",s=e+l/2+"px";r.style.top=a,r.style.left=s}function f(e){e=e*Math.PI*2;var t,a,o,i,l,p,h=Math.floor(r.clientWidth+e),m=Math.floor(r.clientHeight+e),g=s.clientWidth,y=s.clientHeight;hg||(o=(t=r.offsetLeft-e/2)+h,i=(a=r.offsetTop-e/2)+m,t<0&&(t=0),a<0&&(a=0),o>g||i>y||(n=c/h,l=h,p=h,r.style.width=l+"px",r.style.height=p+"px",u(t,a),_(t,a))))}function b(e){switch(e.preventDefault(),String.fromCharCode(e.charCode)){case"+":f(i);break;case"-":f(-i)}}function x(e){e.preventDefault(),f(e.deltaY>0?1:-1)}function D(e){e.preventDefault(),e.stopPropagation(),function(e){o.container_width=r.offsetWidth,o.container_height=r.offsetHeight,o.container_left=r.offsetLeft,o.container_top=r.offsetTop,o.mouse_x=(e.clientX||e.pageX||e.touches&&e.touches[0].clientX)+window.scrollX,o.mouse_y=(e.clientY||e.pageY||e.touches&&e.touches[0].clientY)+window.scrollY}(e),document.addEventListener("mousemove",w),document.addEventListener("touchmove",w),document.addEventListener("mouseup",v),document.addEventListener("touchend",v)}function v(e){e.preventDefault(),document.removeEventListener("mouseup",v),document.removeEventListener("touchend",v),document.removeEventListener("mousemove",w),document.removeEventListener("touchmove",w)}function w(e){var t,a,n,i,d={x:0,y:0};e.preventDefault(),e.stopPropagation(),d.x=e.pageX||e.touches&&e.touches[0].pageX,d.y=e.pageY||e.touches&&e.touches[0].pageY,t=d.x-(o.mouse_x-o.container_left),a=d.y-(o.mouse_y-o.container_top),n=r.offsetWidth,i=r.offsetHeight,t<0?t=0:t>s.offsetWidth-n&&(t=s.offsetWidth-n),a<0?a=0:a>s.offsetHeight-i&&(a=s.offsetHeight-i),u(t,a),_(t,a)}return e.complete?y():e.onload=y,{crop:function(){m=s.width*n,g=s.height*n,t.width=c,t.height=l,t.getContext("2d").drawImage(s,p,h,m,g)},removeHandlers:function(){r.removeEventListener("mousedown",D),r.removeEventListener("touchstart",D),r.removeEventListener("wheel",x),document.removeEventListener("mouseup",v),document.removeEventListener("touchend",v),document.removeEventListener("mousemove",w),document.removeEventListener("touchmove",w),document.removeEventListener("keypress",b),a.remove(),r.remove(),s.remove()}}}},function(e,t,a){"use strict";var r=this&&this.__awaiter||function(e,t,a,r){return new(a||(a=Promise))((function(s,o){function n(e){try{d(r.next(e))}catch(e){o(e)}}function i(e){try{d(r.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(n,i)}d((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=a(1),n=s(a(16)),i=s(a(7)),d=a(4),c=s(a(14));let l=!1;t.default=()=>r(void 0,void 0,void 0,(function*(){if(l)return;l=!0;let e=0,t=void 0,a=!1,s=document.body.getElementsByClassName("page-password")[0];s.style.display="",fetch("assets/img/TwoFactorSetupMonkeyClose.tgs").then(e=>e.arrayBuffer()).then(a=>r(void 0,void 0,void 0,(function*(){let r=yield i.default.gzipUncompress(a,!0);t=yield c.default.loadAnimation({container:s.querySelector(".auth-image"),renderer:"svg",loop:!1,autoplay:!1,animationData:JSON.parse(r)}),console.log(t.getDuration(!0)),t.addEventListener("enterFrame",a=>{let r=Math.round(a.currentTime);(1==a.direction&&r>=e||-1==a.direction&&r<=e)&&(t.setSpeed(1),t.pause())}),e=49,t.play()})));const p=s.querySelector("button"),h=document.getElementById("password"),m=s.querySelector(".toggle-visible");let g=e=>{p.removeAttribute("disabled"),e.type,p.innerText=e.type};m.addEventListener("click",(function(r){a?(this.classList.remove("tgico-eye2"),h.setAttribute("type","password"),t.setDirection(1),e=49,t.play()):(this.classList.add("tgico-eye2"),h.setAttribute("type","text"),t.setDirection(-1),e=0,t.play()),a=!a})),p.addEventListener("click",(function(e){if(!h.value.length)return void h.classList.add("error");this.setAttribute("disabled","true");let a=h.value;this.textContent="PLEASE WAIT...",d.putPreloader(this),o.MTProto.passwordManager.getState().then(e=>{console.log(e),o.MTProto.passwordManager.check(e,a).then(e=>{switch(console.log("passwordManager response:",e),e._){case"auth.authorization":o.MTProto.apiManager.setUserAuth({id:e.user.id}),s.style.display="none",n.default(),t&&t.destroy();break;default:p.removeAttribute("disabled"),p.innerText=e._}}).catch(g)}).catch(g)})),h.addEventListener("keypress",(function(e){if(this.classList.remove("error"),"Enter"==e.key)return p.click()}))}))},function(e){e.exports=JSON.parse('[{"name":"Afghanistan","code":"AF","phoneCode":"93"},{"name":"Aland Islands","code":"AX","phoneCode":"35818"},{"name":"Albania","code":"AL","phoneCode":"355"},{"name":"Algeria","code":"DZ","phoneCode":"213"},{"name":"American Samoa","code":"AS","phoneCode":"1684"},{"name":"Andorra","code":"AD","phoneCode":"376"},{"name":"Angola","code":"AO","phoneCode":"244"},{"name":"Anguilla","code":"AI","phoneCode":"1264"},{"name":"Antigua and Barbuda","code":"AG","phoneCode":"1268"},{"name":"Argentina","code":"AR","phoneCode":"54"},{"name":"Armenia","code":"AM","phoneCode":"374"},{"name":"Aruba","code":"AW","phoneCode":"297"},{"name":"Australia","code":"AU","phoneCode":"61"},{"name":"Austria","code":"AT","phoneCode":"43"},{"name":"Azerbaijan","code":"AZ","phoneCode":"994"},{"name":"Bahamas","code":"BS","phoneCode":"1242"},{"name":"Bahrain","code":"BH","phoneCode":"973"},{"name":"Bangladesh","code":"BD","phoneCode":"880"},{"name":"Barbados","code":"BB","phoneCode":"1246"},{"name":"Belarus","code":"BY","phoneCode":"375"},{"name":"Belgium","code":"BE","phoneCode":"32"},{"name":"Belize","code":"BZ","phoneCode":"501"},{"name":"Benin","code":"BJ","phoneCode":"229"},{"name":"Bermuda","code":"BM","phoneCode":"1441"},{"name":"Bhutan","code":"BT","phoneCode":"975"},{"name":"Bolivia","code":"BO","phoneCode":"591"},{"name":"Bonaire, Saint Eustatius and Saba ","code":"BQ","phoneCode":"599"},{"name":"Bosnia and Herzegovina","code":"BA","phoneCode":"387"},{"name":"Botswana","code":"BW","phoneCode":"267"},{"name":"Brazil","code":"BR","phoneCode":"55"},{"name":"British Indian Ocean Territory","code":"IO","phoneCode":"246"},{"name":"British Virgin Islands","code":"VG","phoneCode":"1284"},{"name":"Brunei","code":"BN","phoneCode":"673"},{"name":"Bulgaria","code":"BG","phoneCode":"359"},{"name":"Burkina Faso","code":"BF","phoneCode":"226"},{"name":"Burundi","code":"BI","phoneCode":"257"},{"name":"Cambodia","code":"KH","phoneCode":"855"},{"name":"Cameroon","code":"CM","phoneCode":"237"},{"name":"Canada","code":"CA","phoneCode":"1"},{"name":"Cape Verde","code":"CV","phoneCode":"238"},{"name":"Cayman Islands","code":"KY","phoneCode":"1345"},{"name":"Central African Republic","code":"CF","phoneCode":"236"},{"name":"Chad","code":"TD","phoneCode":"235"},{"name":"Chile","code":"CL","phoneCode":"56"},{"name":"China","code":"CN","phoneCode":"86"},{"name":"Christmas Island","code":"CX","phoneCode":"61"},{"name":"Cocos Islands","code":"CC","phoneCode":"61"},{"name":"Colombia","code":"CO","phoneCode":"57"},{"name":"Comoros","code":"KM","phoneCode":"269"},{"name":"Cook Islands","code":"CK","phoneCode":"682"},{"name":"Costa Rica","code":"CR","phoneCode":"506"},{"name":"Croatia","code":"HR","phoneCode":"385"},{"name":"Cuba","code":"CU","phoneCode":"53"},{"name":"Curacao","code":"CW","phoneCode":"599"},{"name":"Cyprus","code":"CY","phoneCode":"357"},{"name":"Czech Republic","code":"CZ","phoneCode":"420"},{"name":"Democratic Republic of the Congo","code":"CD","phoneCode":"243"},{"name":"Denmark","code":"DK","phoneCode":"45"},{"name":"Djibouti","code":"DJ","phoneCode":"253"},{"name":"Dominica","code":"DM","phoneCode":"1767"},{"name":"Dominican Republic","code":"DO","phoneCode":"1809 and 1829"},{"name":"East Timor","code":"TL","phoneCode":"670"},{"name":"Ecuador","code":"EC","phoneCode":"593"},{"name":"Egypt","code":"EG","phoneCode":"20"},{"name":"El Salvador","code":"SV","phoneCode":"503"},{"name":"Equatorial Guinea","code":"GQ","phoneCode":"240"},{"name":"Eritrea","code":"ER","phoneCode":"291"},{"name":"Estonia","code":"EE","phoneCode":"372"},{"name":"Ethiopia","code":"ET","phoneCode":"251"},{"name":"Falkland Islands","code":"FK","phoneCode":"500"},{"name":"Faroe Islands","code":"FO","phoneCode":"298"},{"name":"Fiji","code":"FJ","phoneCode":"679"},{"name":"Finland","code":"FI","phoneCode":"358"},{"name":"France","code":"FR","phoneCode":"33"},{"name":"French Guiana","code":"GF","phoneCode":"594"},{"name":"French Polynesia","code":"PF","phoneCode":"689"},{"name":"Gabon","code":"GA","phoneCode":"241"},{"name":"Gambia","code":"GM","phoneCode":"220"},{"name":"Georgia","code":"GE","phoneCode":"995"},{"name":"Germany","code":"DE","phoneCode":"49"},{"name":"Ghana","code":"GH","phoneCode":"233"},{"name":"Gibraltar","code":"GI","phoneCode":"350"},{"name":"Greece","code":"GR","phoneCode":"30"},{"name":"Greenland","code":"GL","phoneCode":"299"},{"name":"Grenada","code":"GD","phoneCode":"1473"},{"name":"Guadeloupe","code":"GP","phoneCode":"590"},{"name":"Guam","code":"GU","phoneCode":"1671"},{"name":"Guatemala","code":"GT","phoneCode":"502"},{"name":"Guernsey","code":"GG","phoneCode":"441481"},{"name":"Guinea","code":"GN","phoneCode":"224"},{"name":"Guinea-Bissau","code":"GW","phoneCode":"245"},{"name":"Guyana","code":"GY","phoneCode":"592"},{"name":"Haiti","code":"HT","phoneCode":"509"},{"name":"Heard Island and McDonald Islands","code":"HM","phoneCode":" "},{"name":"Honduras","code":"HN","phoneCode":"504"},{"name":"Hong Kong","code":"HK","phoneCode":"852"},{"name":"Hungary","code":"HU","phoneCode":"36"},{"name":"Iceland","code":"IS","phoneCode":"354"},{"name":"India","code":"IN","phoneCode":"91"},{"name":"Indonesia","code":"ID","phoneCode":"62"},{"name":"Iran","code":"IR","phoneCode":"98"},{"name":"Iraq","code":"IQ","phoneCode":"964"},{"name":"Ireland","code":"IE","phoneCode":"353"},{"name":"Isle of Man","code":"IM","phoneCode":"441624"},{"name":"Israel","code":"IL","phoneCode":"972"},{"name":"Italy","code":"IT","phoneCode":"39"},{"name":"Ivory Coast","code":"CI","phoneCode":"225"},{"name":"Jamaica","code":"JM","phoneCode":"1876"},{"name":"Japan","code":"JP","phoneCode":"81"},{"name":"Jersey","code":"JE","phoneCode":"441534"},{"name":"Jordan","code":"JO","phoneCode":"962"},{"name":"Kazakhstan","code":"KZ","phoneCode":"7"},{"name":"Kenya","code":"KE","phoneCode":"254"},{"name":"Kiribati","code":"KI","phoneCode":"686"},{"name":"Kuwait","code":"KW","phoneCode":"965"},{"name":"Kyrgyzstan","code":"KG","phoneCode":"996"},{"name":"Laos","code":"LA","phoneCode":"856"},{"name":"Latvia","code":"LV","phoneCode":"371"},{"name":"Lebanon","code":"LB","phoneCode":"961"},{"name":"Lesotho","code":"LS","phoneCode":"266"},{"name":"Liberia","code":"LR","phoneCode":"231"},{"name":"Libya","code":"LY","phoneCode":"218"},{"name":"Liechtenstein","code":"LI","phoneCode":"423"},{"name":"Lithuania","code":"LT","phoneCode":"370"},{"name":"Luxembourg","code":"LU","phoneCode":"352"},{"name":"Macao","code":"MO","phoneCode":"853"},{"name":"Macedonia","code":"MK","phoneCode":"389"},{"name":"Madagascar","code":"MG","phoneCode":"261"},{"name":"Malawi","code":"MW","phoneCode":"265"},{"name":"Malaysia","code":"MY","phoneCode":"60"},{"name":"Maldives","code":"MV","phoneCode":"960"},{"name":"Mali","code":"ML","phoneCode":"223"},{"name":"Malta","code":"MT","phoneCode":"356"},{"name":"Marshall Islands","code":"MH","phoneCode":"692"},{"name":"Martinique","code":"MQ","phoneCode":"596"},{"name":"Mauritania","code":"MR","phoneCode":"222"},{"name":"Mauritius","code":"MU","phoneCode":"230"},{"name":"Mayotte","code":"YT","phoneCode":"262"},{"name":"Mexico","code":"MX","phoneCode":"52"},{"name":"Micronesia","code":"FM","phoneCode":"691"},{"name":"Moldova","code":"MD","phoneCode":"373"},{"name":"Monaco","code":"MC","phoneCode":"377"},{"name":"Mongolia","code":"MN","phoneCode":"976"},{"name":"Montenegro","code":"ME","phoneCode":"382"},{"name":"Montserrat","code":"MS","phoneCode":"1664"},{"name":"Morocco","code":"MA","phoneCode":"212"},{"name":"Mozambique","code":"MZ","phoneCode":"258"},{"name":"Myanmar","code":"MM","phoneCode":"95"},{"name":"Namibia","code":"NA","phoneCode":"264"},{"name":"Nauru","code":"NR","phoneCode":"674"},{"name":"Nepal","code":"NP","phoneCode":"977"},{"name":"Netherlands","code":"NL","phoneCode":"31"},{"name":"New Caledonia","code":"NC","phoneCode":"687"},{"name":"New Zealand","code":"NZ","phoneCode":"64"},{"name":"Nicaragua","code":"NI","phoneCode":"505"},{"name":"Niger","code":"NE","phoneCode":"227"},{"name":"Nigeria","code":"NG","phoneCode":"234"},{"name":"Niue","code":"NU","phoneCode":"683"},{"name":"Norfolk Island","code":"NF","phoneCode":"672"},{"name":"North Korea","code":"KP","phoneCode":"850"},{"name":"Northern Mariana Islands","code":"MP","phoneCode":"1670"},{"name":"Norway","code":"NO","phoneCode":"47"},{"name":"Oman","code":"OM","phoneCode":"968"},{"name":"Pakistan","code":"PK","phoneCode":"92"},{"name":"Palau","code":"PW","phoneCode":"680"},{"name":"Palestinian Territory","code":"PS","phoneCode":"970"},{"name":"Panama","code":"PA","phoneCode":"507"},{"name":"Papua New Guinea","code":"PG","phoneCode":"675"},{"name":"Paraguay","code":"PY","phoneCode":"595"},{"name":"Peru","code":"PE","phoneCode":"51"},{"name":"Philippines","code":"PH","phoneCode":"63"},{"name":"Pitcairn","code":"PN","phoneCode":"870"},{"name":"Poland","code":"PL","phoneCode":"48"},{"name":"Portugal","code":"PT","phoneCode":"351"},{"name":"Puerto Rico","code":"PR","phoneCode":"1787 and 1939"},{"name":"Qatar","code":"QA","phoneCode":"974"},{"name":"Republic of the Congo","code":"CG","phoneCode":"242"},{"name":"Reunion","code":"RE","phoneCode":"262"},{"name":"Romania","code":"RO","phoneCode":"40"},{"name":"Russia","code":"RU","phoneCode":"7"},{"name":"Rwanda","code":"RW","phoneCode":"250"},{"name":"Saint Barthelemy","code":"BL","phoneCode":"590"},{"name":"Saint Helena","code":"SH","phoneCode":"290"},{"name":"Saint Kitts and Nevis","code":"KN","phoneCode":"1869"},{"name":"Saint Lucia","code":"LC","phoneCode":"1758"},{"name":"Saint Martin","code":"MF","phoneCode":"590"},{"name":"Saint Pierre and Miquelon","code":"PM","phoneCode":"508"},{"name":"Saint Vincent and the Grenadines","code":"VC","phoneCode":"1784"},{"name":"Samoa","code":"WS","phoneCode":"685"},{"name":"San Marino","code":"SM","phoneCode":"378"},{"name":"Sao Tome and Principe","code":"ST","phoneCode":"239"},{"name":"Saudi Arabia","code":"SA","phoneCode":"966"},{"name":"Senegal","code":"SN","phoneCode":"221"},{"name":"Serbia","code":"RS","phoneCode":"381"},{"name":"Seychelles","code":"SC","phoneCode":"248"},{"name":"Sierra Leone","code":"SL","phoneCode":"232"},{"name":"Singapore","code":"SG","phoneCode":"65"},{"name":"Sint Maarten","code":"SX","phoneCode":"599"},{"name":"Slovakia","code":"SK","phoneCode":"421"},{"name":"Slovenia","code":"SI","phoneCode":"386"},{"name":"Solomon Islands","code":"SB","phoneCode":"677"},{"name":"Somalia","code":"SO","phoneCode":"252"},{"name":"South Africa","code":"ZA","phoneCode":"27"},{"name":"South Korea","code":"KR","phoneCode":"82"},{"name":"South Sudan","code":"SS","phoneCode":"211"},{"name":"Spain","code":"ES","phoneCode":"34"},{"name":"Sri Lanka","code":"LK","phoneCode":"94"},{"name":"Sudan","code":"SD","phoneCode":"249"},{"name":"Suriname","code":"SR","phoneCode":"597"},{"name":"Svalbard and Jan Mayen","code":"SJ","phoneCode":"47"},{"name":"Swaziland","code":"SZ","phoneCode":"268"},{"name":"Sweden","code":"SE","phoneCode":"46"},{"name":"Switzerland","code":"CH","phoneCode":"41"},{"name":"Syria","code":"SY","phoneCode":"963"},{"name":"Taiwan","code":"TW","phoneCode":"886"},{"name":"Tajikistan","code":"TJ","phoneCode":"992"},{"name":"Tanzania","code":"TZ","phoneCode":"255"},{"name":"Thailand","code":"TH","phoneCode":"66"},{"name":"Togo","code":"TG","phoneCode":"228"},{"name":"Tokelau","code":"TK","phoneCode":"690"},{"name":"Tonga","code":"TO","phoneCode":"676"},{"name":"Trinidad and Tobago","code":"TT","phoneCode":"1868"},{"name":"Tunisia","code":"TN","phoneCode":"216"},{"name":"Turkey","code":"TR","phoneCode":"90"},{"name":"Turkmenistan","code":"TM","phoneCode":"993"},{"name":"Turks and Caicos Islands","code":"TC","phoneCode":"1649"},{"name":"Tuvalu","code":"TV","phoneCode":"688"},{"name":"U.S. Virgin Islands","code":"VI","phoneCode":"1340"},{"name":"Uganda","code":"UG","phoneCode":"256"},{"name":"Ukraine","code":"UA","phoneCode":"380"},{"name":"United Arab Emirates","code":"AE","phoneCode":"971"},{"name":"United Kingdom","code":"GB","phoneCode":"44"},{"name":"United States","code":"US","phoneCode":"1"},{"name":"United States Minor Outlying Islands","code":"UM","phoneCode":"1"},{"name":"Uruguay","code":"UY","phoneCode":"598"},{"name":"Uzbekistan","code":"UZ","phoneCode":"998"},{"name":"Vanuatu","code":"VU","phoneCode":"678"},{"name":"Vatican","code":"VA","phoneCode":"379"},{"name":"Venezuela","code":"VE","phoneCode":"58"},{"name":"Vietnam","code":"VN","phoneCode":"84"},{"name":"Wallis and Futuna","code":"WF","phoneCode":"681"},{"name":"Western Sahara","code":"EH","phoneCode":"212"},{"name":"Yemen","code":"YE","phoneCode":"967"},{"name":"Zambia","code":"ZM","phoneCode":"260"},{"name":"Zimbabwe","code":"ZW","phoneCode":"263"}]')}],[[43,5,1,2,3,4,6]]]); \ No newline at end of file diff --git a/public/main.chunk.js.gz b/public/main.chunk.js.gz new file mode 100644 index 00000000..4dd015e3 Binary files /dev/null and b/public/main.chunk.js.gz differ diff --git a/public/npm.aes-js.chunk.js b/public/npm.aes-js.chunk.js new file mode 100644 index 00000000..beb3e24e --- /dev/null +++ b/public/npm.aes-js.chunk.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{63:function(t,e,r){ +/*! MIT License. Copyright 2015-2018 Richard Moore . See LICENSE.txt. */ +!function(e){"use strict";function r(t){return parseInt(t)===t}function i(t){if(!r(t.length))return!1;for(var e=0;e255)return!1;return!0}function n(t,e){if(t.buffer&&"Uint8Array"===t.name)return e&&(t=t.slice?t.slice():Array.prototype.slice.call(t)),t;if(Array.isArray(t)){if(!i(t))throw new Error("Array contains invalid value: "+t);return new Uint8Array(t)}if(r(t.length)&&i(t))return new Uint8Array(t);throw new Error("unsupported array-like object")}function s(t){return new Uint8Array(t)}function o(t,e,r,i,n){null==i&&null==n||(t=t.slice?t.slice(i,n):Array.prototype.slice.call(t,i,n)),e.set(t,r)}var h,a={toBytes:function(t){var e=[],r=0;for(t=encodeURI(t);r191&&i<224?(e.push(String.fromCharCode((31&i)<<6|63&t[r+1])),r+=2):(e.push(String.fromCharCode((15&i)<<12|(63&t[r+1])<<6|63&t[r+2])),r+=3)}return e.join("")}},f=(h="0123456789abcdef",{toBytes:function(t){for(var e=[],r=0;r>4]+h[15&i])}return e.join("")}}),c={16:10,24:12,32:14},u=[1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],p=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],l=[82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],g=[3328402341,4168907908,4000806809,4135287693,4294111757,3597364157,3731845041,2445657428,1613770832,33620227,3462883241,1445669757,3892248089,3050821474,1303096294,3967186586,2412431941,528646813,2311702848,4202528135,4026202645,2992200171,2387036105,4226871307,1101901292,3017069671,1604494077,1169141738,597466303,1403299063,3832705686,2613100635,1974974402,3791519004,1033081774,1277568618,1815492186,2118074177,4126668546,2211236943,1748251740,1369810420,3521504564,4193382664,3799085459,2883115123,1647391059,706024767,134480908,2512897874,1176707941,2646852446,806885416,932615841,168101135,798661301,235341577,605164086,461406363,3756188221,3454790438,1311188841,2142417613,3933566367,302582043,495158174,1479289972,874125870,907746093,3698224818,3025820398,1537253627,2756858614,1983593293,3084310113,2108928974,1378429307,3722699582,1580150641,327451799,2790478837,3117535592,0,3253595436,1075847264,3825007647,2041688520,3059440621,3563743934,2378943302,1740553945,1916352843,2487896798,2555137236,2958579944,2244988746,3151024235,3320835882,1336584933,3992714006,2252555205,2588757463,1714631509,293963156,2319795663,3925473552,67240454,4269768577,2689618160,2017213508,631218106,1269344483,2723238387,1571005438,2151694528,93294474,1066570413,563977660,1882732616,4059428100,1673313503,2008463041,2950355573,1109467491,537923632,3858759450,4260623118,3218264685,2177748300,403442708,638784309,3287084079,3193921505,899127202,2286175436,773265209,2479146071,1437050866,4236148354,2050833735,3362022572,3126681063,840505643,3866325909,3227541664,427917720,2655997905,2749160575,1143087718,1412049534,999329963,193497219,2353415882,3354324521,1807268051,672404540,2816401017,3160301282,369822493,2916866934,3688947771,1681011286,1949973070,336202270,2454276571,201721354,1210328172,3093060836,2680341085,3184776046,1135389935,3294782118,965841320,831886756,3554993207,4068047243,3588745010,2345191491,1849112409,3664604599,26054028,2983581028,2622377682,1235855840,3630984372,2891339514,4092916743,3488279077,3395642799,4101667470,1202630377,268961816,1874508501,4034427016,1243948399,1546530418,941366308,1470539505,1941222599,2546386513,3421038627,2715671932,3899946140,1042226977,2521517021,1639824860,227249030,260737669,3765465232,2084453954,1907733956,3429263018,2420656344,100860677,4160157185,470683154,3261161891,1781871967,2924959737,1773779408,394692241,2579611992,974986535,664706745,3655459128,3958962195,731420851,571543859,3530123707,2849626480,126783113,865375399,765172662,1008606754,361203602,3387549984,2278477385,2857719295,1344809080,2782912378,59542671,1503764984,160008576,437062935,1707065306,3622233649,2218934982,3496503480,2185314755,697932208,1512910199,504303377,2075177163,2824099068,1841019862,739644986],y=[2781242211,2230877308,2582542199,2381740923,234877682,3184946027,2984144751,1418839493,1348481072,50462977,2848876391,2102799147,434634494,1656084439,3863849899,2599188086,1167051466,2636087938,1082771913,2281340285,368048890,3954334041,3381544775,201060592,3963727277,1739838676,4250903202,3930435503,3206782108,4149453988,2531553906,1536934080,3262494647,484572669,2923271059,1783375398,1517041206,1098792767,49674231,1334037708,1550332980,4098991525,886171109,150598129,2481090929,1940642008,1398944049,1059722517,201851908,1385547719,1699095331,1587397571,674240536,2704774806,252314885,3039795866,151914247,908333586,2602270848,1038082786,651029483,1766729511,3447698098,2682942837,454166793,2652734339,1951935532,775166490,758520603,3000790638,4004797018,4217086112,4137964114,1299594043,1639438038,3464344499,2068982057,1054729187,1901997871,2534638724,4121318227,1757008337,0,750906861,1614815264,535035132,3363418545,3988151131,3201591914,1183697867,3647454910,1265776953,3734260298,3566750796,3903871064,1250283471,1807470800,717615087,3847203498,384695291,3313910595,3617213773,1432761139,2484176261,3481945413,283769337,100925954,2180939647,4037038160,1148730428,3123027871,3813386408,4087501137,4267549603,3229630528,2315620239,2906624658,3156319645,1215313976,82966005,3747855548,3245848246,1974459098,1665278241,807407632,451280895,251524083,1841287890,1283575245,337120268,891687699,801369324,3787349855,2721421207,3431482436,959321879,1469301956,4065699751,2197585534,1199193405,2898814052,3887750493,724703513,2514908019,2696962144,2551808385,3516813135,2141445340,1715741218,2119445034,2872807568,2198571144,3398190662,700968686,3547052216,1009259540,2041044702,3803995742,487983883,1991105499,1004265696,1449407026,1316239930,504629770,3683797321,168560134,1816667172,3837287516,1570751170,1857934291,4014189740,2797888098,2822345105,2754712981,936633572,2347923833,852879335,1133234376,1500395319,3084545389,2348912013,1689376213,3533459022,3762923945,3034082412,4205598294,133428468,634383082,2949277029,2398386810,3913789102,403703816,3580869306,2297460856,1867130149,1918643758,607656988,4049053350,3346248884,1368901318,600565992,2090982877,2632479860,557719327,3717614411,3697393085,2249034635,2232388234,2430627952,1115438654,3295786421,2865522278,3633334344,84280067,33027830,303828494,2747425121,1600795957,4188952407,3496589753,2434238086,1486471617,658119965,3106381470,953803233,334231800,3005978776,857870609,3151128937,1890179545,2298973838,2805175444,3056442267,574365214,2450884487,550103529,1233637070,4289353045,2018519080,2057691103,2399374476,4166623649,2148108681,387583245,3664101311,836232934,3330556482,3100665960,3280093505,2955516313,2002398509,287182607,3413881008,4238890068,3597515707,975967766],d=[1671808611,2089089148,2006576759,2072901243,4061003762,1807603307,1873927791,3310653893,810573872,16974337,1739181671,729634347,4263110654,3613570519,2883997099,1989864566,3393556426,2191335298,3376449993,2106063485,4195741690,1508618841,1204391495,4027317232,2917941677,3563566036,2734514082,2951366063,2629772188,2767672228,1922491506,3227229120,3082974647,4246528509,2477669779,644500518,911895606,1061256767,4144166391,3427763148,878471220,2784252325,3845444069,4043897329,1905517169,3631459288,827548209,356461077,67897348,3344078279,593839651,3277757891,405286936,2527147926,84871685,2595565466,118033927,305538066,2157648768,3795705826,3945188843,661212711,2999812018,1973414517,152769033,2208177539,745822252,439235610,455947803,1857215598,1525593178,2700827552,1391895634,994932283,3596728278,3016654259,695947817,3812548067,795958831,2224493444,1408607827,3513301457,0,3979133421,543178784,4229948412,2982705585,1542305371,1790891114,3410398667,3201918910,961245753,1256100938,1289001036,1491644504,3477767631,3496721360,4012557807,2867154858,4212583931,1137018435,1305975373,861234739,2241073541,1171229253,4178635257,33948674,2139225727,1357946960,1011120188,2679776671,2833468328,1374921297,2751356323,1086357568,2408187279,2460827538,2646352285,944271416,4110742005,3168756668,3066132406,3665145818,560153121,271589392,4279952895,4077846003,3530407890,3444343245,202643468,322250259,3962553324,1608629855,2543990167,1154254916,389623319,3294073796,2817676711,2122513534,1028094525,1689045092,1575467613,422261273,1939203699,1621147744,2174228865,1339137615,3699352540,577127458,712922154,2427141008,2290289544,1187679302,3995715566,3100863416,339486740,3732514782,1591917662,186455563,3681988059,3762019296,844522546,978220090,169743370,1239126601,101321734,611076132,1558493276,3260915650,3547250131,2901361580,1655096418,2443721105,2510565781,3828863972,2039214713,3878868455,3359869896,928607799,1840765549,2374762893,3580146133,1322425422,2850048425,1823791212,1459268694,4094161908,3928346602,1706019429,2056189050,2934523822,135794696,3134549946,2022240376,628050469,779246638,472135708,2800834470,3032970164,3327236038,3894660072,3715932637,1956440180,522272287,1272813131,3185336765,2340818315,2323976074,1888542832,1044544574,3049550261,1722469478,1222152264,50660867,4127324150,236067854,1638122081,895445557,1475980887,3117443513,2257655686,3243809217,489110045,2662934430,3778599393,4162055160,2561878936,288563729,1773916777,3648039385,2391345038,2493985684,2612407707,505560094,2274497927,3911240169,3460925390,1442818645,678973480,3749357023,2358182796,2717407649,2306869641,219617805,3218761151,3862026214,1120306242,1756942440,1103331905,2578459033,762796589,252780047,2966125488,1425844308,3151392187,372911126],w=[1667474886,2088535288,2004326894,2071694838,4075949567,1802223062,1869591006,3318043793,808472672,16843522,1734846926,724270422,4278065639,3621216949,2880169549,1987484396,3402253711,2189597983,3385409673,2105378810,4210693615,1499065266,1195886990,4042263547,2913856577,3570689971,2728590687,2947541573,2627518243,2762274643,1920112356,3233831835,3082273397,4261223649,2475929149,640051788,909531756,1061110142,4160160501,3435941763,875846760,2779116625,3857003729,4059105529,1903268834,3638064043,825316194,353713962,67374088,3351728789,589522246,3284360861,404236336,2526454071,84217610,2593830191,117901582,303183396,2155911963,3806477791,3958056653,656894286,2998062463,1970642922,151591698,2206440989,741110872,437923380,454765878,1852748508,1515908788,2694904667,1381168804,993742198,3604373943,3014905469,690584402,3823320797,791638366,2223281939,1398011302,3520161977,0,3991743681,538992704,4244381667,2981218425,1532751286,1785380564,3419096717,3200178535,960056178,1246420628,1280103576,1482221744,3486468741,3503319995,4025428677,2863326543,4227536621,1128514950,1296947098,859002214,2240123921,1162203018,4193849577,33687044,2139062782,1347481760,1010582648,2678045221,2829640523,1364325282,2745433693,1077985408,2408548869,2459086143,2644360225,943212656,4126475505,3166494563,3065430391,3671750063,555836226,269496352,4294908645,4092792573,3537006015,3452783745,202118168,320025894,3974901699,1600119230,2543297077,1145359496,387397934,3301201811,2812801621,2122220284,1027426170,1684319432,1566435258,421079858,1936954854,1616945344,2172753945,1330631070,3705438115,572679748,707427924,2425400123,2290647819,1179044492,4008585671,3099120491,336870440,3739122087,1583276732,185277718,3688593069,3772791771,842159716,976899700,168435220,1229577106,101059084,606366792,1549591736,3267517855,3553849021,2897014595,1650632388,2442242105,2509612081,3840161747,2038008818,3890688725,3368567691,926374254,1835907034,2374863873,3587531953,1313788572,2846482505,1819063512,1448540844,4109633523,3941213647,1701162954,2054852340,2930698567,134748176,3132806511,2021165296,623210314,774795868,471606328,2795958615,3031746419,3334885783,3907527627,3722280097,1953799400,522133822,1263263126,3183336545,2341176845,2324333839,1886425312,1044267644,3048588401,1718004428,1212733584,50529542,4143317495,235803164,1633788866,892690282,1465383342,3115962473,2256965911,3250673817,488449850,2661202215,3789633753,4177007595,2560144171,286339874,1768537042,3654906025,2391705863,2492770099,2610673197,505291324,2273808917,3924369609,3469625735,1431699370,673740880,3755965093,2358021891,2711746649,2307489801,218961690,3217021541,3873845719,1111672452,1751693520,1094828930,2576986153,757954394,252645662,2964376443,1414855848,3149649517,370555436],_=[1374988112,2118214995,437757123,975658646,1001089995,530400753,2902087851,1273168787,540080725,2910219766,2295101073,4110568485,1340463100,3307916247,641025152,3043140495,3736164937,632953703,1172967064,1576976609,3274667266,2169303058,2370213795,1809054150,59727847,361929877,3211623147,2505202138,3569255213,1484005843,1239443753,2395588676,1975683434,4102977912,2572697195,666464733,3202437046,4035489047,3374361702,2110667444,1675577880,3843699074,2538681184,1649639237,2976151520,3144396420,4269907996,4178062228,1883793496,2403728665,2497604743,1383856311,2876494627,1917518562,3810496343,1716890410,3001755655,800440835,2261089178,3543599269,807962610,599762354,33778362,3977675356,2328828971,2809771154,4077384432,1315562145,1708848333,101039829,3509871135,3299278474,875451293,2733856160,92987698,2767645557,193195065,1080094634,1584504582,3178106961,1042385657,2531067453,3711829422,1306967366,2438237621,1908694277,67556463,1615861247,429456164,3602770327,2302690252,1742315127,2968011453,126454664,3877198648,2043211483,2709260871,2084704233,4169408201,0,159417987,841739592,504459436,1817866830,4245618683,260388950,1034867998,908933415,168810852,1750902305,2606453969,607530554,202008497,2472011535,3035535058,463180190,2160117071,1641816226,1517767529,470948374,3801332234,3231722213,1008918595,303765277,235474187,4069246893,766945465,337553864,1475418501,2943682380,4003061179,2743034109,4144047775,1551037884,1147550661,1543208500,2336434550,3408119516,3069049960,3102011747,3610369226,1113818384,328671808,2227573024,2236228733,3535486456,2935566865,3341394285,496906059,3702665459,226906860,2009195472,733156972,2842737049,294930682,1206477858,2835123396,2700099354,1451044056,573804783,2269728455,3644379585,2362090238,2564033334,2801107407,2776292904,3669462566,1068351396,742039012,1350078989,1784663195,1417561698,4136440770,2430122216,775550814,2193862645,2673705150,1775276924,1876241833,3475313331,3366754619,270040487,3902563182,3678124923,3441850377,1851332852,3969562369,2203032232,3868552805,2868897406,566021896,4011190502,3135740889,1248802510,3936291284,699432150,832877231,708780849,3332740144,899835584,1951317047,4236429990,3767586992,866637845,4043610186,1106041591,2144161806,395441711,1984812685,1139781709,3433712980,3835036895,2664543715,1282050075,3240894392,1181045119,2640243204,25965917,4203181171,4211818798,3009879386,2463879762,3910161971,1842759443,2597806476,933301370,1509430414,3943906441,3467192302,3076639029,3776767469,2051518780,2631065433,1441952575,404016761,1942435775,1408749034,1610459739,3745345300,2017778566,3400528769,3110650942,941896748,3265478751,371049330,3168937228,675039627,4279080257,967311729,135050206,3635733660,1683407248,2076935265,3576870512,1215061108,3501741890],v=[1347548327,1400783205,3273267108,2520393566,3409685355,4045380933,2880240216,2471224067,1428173050,4138563181,2441661558,636813900,4233094615,3620022987,2149987652,2411029155,1239331162,1730525723,2554718734,3781033664,46346101,310463728,2743944855,3328955385,3875770207,2501218972,3955191162,3667219033,768917123,3545789473,692707433,1150208456,1786102409,2029293177,1805211710,3710368113,3065962831,401639597,1724457132,3028143674,409198410,2196052529,1620529459,1164071807,3769721975,2226875310,486441376,2499348523,1483753576,428819965,2274680428,3075636216,598438867,3799141122,1474502543,711349675,129166120,53458370,2592523643,2782082824,4063242375,2988687269,3120694122,1559041666,730517276,2460449204,4042459122,2706270690,3446004468,3573941694,533804130,2328143614,2637442643,2695033685,839224033,1973745387,957055980,2856345839,106852767,1371368976,4181598602,1033297158,2933734917,1179510461,3046200461,91341917,1862534868,4284502037,605657339,2547432937,3431546947,2003294622,3182487618,2282195339,954669403,3682191598,1201765386,3917234703,3388507166,0,2198438022,1211247597,2887651696,1315723890,4227665663,1443857720,507358933,657861945,1678381017,560487590,3516619604,975451694,2970356327,261314535,3535072918,2652609425,1333838021,2724322336,1767536459,370938394,182621114,3854606378,1128014560,487725847,185469197,2918353863,3106780840,3356761769,2237133081,1286567175,3152976349,4255350624,2683765030,3160175349,3309594171,878443390,1988838185,3704300486,1756818940,1673061617,3403100636,272786309,1075025698,545572369,2105887268,4174560061,296679730,1841768865,1260232239,4091327024,3960309330,3497509347,1814803222,2578018489,4195456072,575138148,3299409036,446754879,3629546796,4011996048,3347532110,3252238545,4270639778,915985419,3483825537,681933534,651868046,2755636671,3828103837,223377554,2607439820,1649704518,3270937875,3901806776,1580087799,4118987695,3198115200,2087309459,2842678573,3016697106,1003007129,2802849917,1860738147,2077965243,164439672,4100872472,32283319,2827177882,1709610350,2125135846,136428751,3874428392,3652904859,3460984630,3572145929,3593056380,2939266226,824852259,818324884,3224740454,930369212,2801566410,2967507152,355706840,1257309336,4148292826,243256656,790073846,2373340630,1296297904,1422699085,3756299780,3818836405,457992840,3099667487,2135319889,77422314,1560382517,1945798516,788204353,1521706781,1385356242,870912086,325965383,2358957921,2050466060,2388260884,2313884476,4006521127,901210569,3990953189,1014646705,1503449823,1062597235,2031621326,3212035895,3931371469,1533017514,350174575,2256028891,2177544179,1052338372,741876788,1606591296,1914052035,213705253,2334669897,1107234197,1899603969,3725069491,2631447780,2422494913,1635502980,1893020342,1950903388,1120974935],b=[2807058932,1699970625,2764249623,1586903591,1808481195,1173430173,1487645946,59984867,4199882800,1844882806,1989249228,1277555970,3623636965,3419915562,1149249077,2744104290,1514790577,459744698,244860394,3235995134,1963115311,4027744588,2544078150,4190530515,1608975247,2627016082,2062270317,1507497298,2200818878,567498868,1764313568,3359936201,2305455554,2037970062,1047239e3,1910319033,1337376481,2904027272,2892417312,984907214,1243112415,830661914,861968209,2135253587,2011214180,2927934315,2686254721,731183368,1750626376,4246310725,1820824798,4172763771,3542330227,48394827,2404901663,2871682645,671593195,3254988725,2073724613,145085239,2280796200,2779915199,1790575107,2187128086,472615631,3029510009,4075877127,3802222185,4107101658,3201631749,1646252340,4270507174,1402811438,1436590835,3778151818,3950355702,3963161475,4020912224,2667994737,273792366,2331590177,104699613,95345982,3175501286,2377486676,1560637892,3564045318,369057872,4213447064,3919042237,1137477952,2658625497,1119727848,2340947849,1530455833,4007360968,172466556,266959938,516552836,0,2256734592,3980931627,1890328081,1917742170,4294704398,945164165,3575528878,958871085,3647212047,2787207260,1423022939,775562294,1739656202,3876557655,2530391278,2443058075,3310321856,547512796,1265195639,437656594,3121275539,719700128,3762502690,387781147,218828297,3350065803,2830708150,2848461854,428169201,122466165,3720081049,1627235199,648017665,4122762354,1002783846,2117360635,695634755,3336358691,4234721005,4049844452,3704280881,2232435299,574624663,287343814,612205898,1039717051,840019705,2708326185,793451934,821288114,1391201670,3822090177,376187827,3113855344,1224348052,1679968233,2361698556,1058709744,752375421,2431590963,1321699145,3519142200,2734591178,188127444,2177869557,3727205754,2384911031,3215212461,2648976442,2450346104,3432737375,1180849278,331544205,3102249176,4150144569,2952102595,2159976285,2474404304,766078933,313773861,2570832044,2108100632,1668212892,3145456443,2013908262,418672217,3070356634,2594734927,1852171925,3867060991,3473416636,3907448597,2614737639,919489135,164948639,2094410160,2997825956,590424639,2486224549,1723872674,3157750862,3399941250,3501252752,3625268135,2555048196,3673637356,1343127501,4130281361,3599595085,2957853679,1297403050,81781910,3051593425,2283490410,532201772,1367295589,3926170974,895287692,1953757831,1093597963,492483431,3528626907,1446242576,1192455638,1636604631,209336225,344873464,1015671571,669961897,3375740769,3857572124,2973530695,3747192018,1933530610,3464042516,935293895,3454686199,2858115069,1863638845,3683022916,4085369519,3292445032,875313188,1080017571,3279033885,621591778,1233856572,2504130317,24197544,3017672716,3835484340,3247465558,2220981195,3060847922,1551124588,1463996600],m=[4104605777,1097159550,396673818,660510266,2875968315,2638606623,4200115116,3808662347,821712160,1986918061,3430322568,38544885,3856137295,718002117,893681702,1654886325,2975484382,3122358053,3926825029,4274053469,796197571,1290801793,1184342925,3556361835,2405426947,2459735317,1836772287,1381620373,3196267988,1948373848,3764988233,3385345166,3263785589,2390325492,1480485785,3111247143,3780097726,2293045232,548169417,3459953789,3746175075,439452389,1362321559,1400849762,1685577905,1806599355,2174754046,137073913,1214797936,1174215055,3731654548,2079897426,1943217067,1258480242,529487843,1437280870,3945269170,3049390895,3313212038,923313619,679998e3,3215307299,57326082,377642221,3474729866,2041877159,133361907,1776460110,3673476453,96392454,878845905,2801699524,777231668,4082475170,2330014213,4142626212,2213296395,1626319424,1906247262,1846563261,562755902,3708173718,1040559837,3871163981,1418573201,3294430577,114585348,1343618912,2566595609,3186202582,1078185097,3651041127,3896688048,2307622919,425408743,3371096953,2081048481,1108339068,2216610296,0,2156299017,736970802,292596766,1517440620,251657213,2235061775,2933202493,758720310,265905162,1554391400,1532285339,908999204,174567692,1474760595,4002861748,2610011675,3234156416,3693126241,2001430874,303699484,2478443234,2687165888,585122620,454499602,151849742,2345119218,3064510765,514443284,4044981591,1963412655,2581445614,2137062819,19308535,1928707164,1715193156,4219352155,1126790795,600235211,3992742070,3841024952,836553431,1669664834,2535604243,3323011204,1243905413,3141400786,4180808110,698445255,2653899549,2989552604,2253581325,3252932727,3004591147,1891211689,2487810577,3915653703,4237083816,4030667424,2100090966,865136418,1229899655,953270745,3399679628,3557504664,4118925222,2061379749,3079546586,2915017791,983426092,2022837584,1607244650,2118541908,2366882550,3635996816,972512814,3283088770,1568718495,3499326569,3576539503,621982671,2895723464,410887952,2623762152,1002142683,645401037,1494807662,2595684844,1335535747,2507040230,4293295786,3167684641,367585007,3885750714,1865862730,2668221674,2960971305,2763173681,1059270954,2777952454,2724642869,1320957812,2194319100,2429595872,2815956275,77089521,3973773121,3444575871,2448830231,1305906550,4021308739,2857194700,2516901860,3518358430,1787304780,740276417,1699839814,1592394909,2352307457,2272556026,188821243,1729977011,3687994002,274084841,3594982253,3613494426,2701949495,4162096729,322734571,2837966542,1640576439,484830689,1202797690,3537852828,4067639125,349075736,3342319475,4157467219,4255800159,1030690015,1155237496,2951971274,1757691577,607398968,2738905026,499347990,3794078908,1011452712,227885567,2818666809,213114376,3034881240,1455525988,3414450555,850817237,1817998408,3092726480],E=[0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795],C=[0,185469197,370938394,487725847,741876788,657861945,975451694,824852259,1483753576,1400783205,1315723890,1164071807,1950903388,2135319889,1649704518,1767536459,2967507152,3152976349,2801566410,2918353863,2631447780,2547432937,2328143614,2177544179,3901806776,3818836405,4270639778,4118987695,3299409036,3483825537,3535072918,3652904859,2077965243,1893020342,1841768865,1724457132,1474502543,1559041666,1107234197,1257309336,598438867,681933534,901210569,1052338372,261314535,77422314,428819965,310463728,3409685355,3224740454,3710368113,3593056380,3875770207,3960309330,4045380933,4195456072,2471224067,2554718734,2237133081,2388260884,3212035895,3028143674,2842678573,2724322336,4138563181,4255350624,3769721975,3955191162,3667219033,3516619604,3431546947,3347532110,2933734917,2782082824,3099667487,3016697106,2196052529,2313884476,2499348523,2683765030,1179510461,1296297904,1347548327,1533017514,1786102409,1635502980,2087309459,2003294622,507358933,355706840,136428751,53458370,839224033,957055980,605657339,790073846,2373340630,2256028891,2607439820,2422494913,2706270690,2856345839,3075636216,3160175349,3573941694,3725069491,3273267108,3356761769,4181598602,4063242375,4011996048,3828103837,1033297158,915985419,730517276,545572369,296679730,446754879,129166120,213705253,1709610350,1860738147,1945798516,2029293177,1239331162,1120974935,1606591296,1422699085,4148292826,4233094615,3781033664,3931371469,3682191598,3497509347,3446004468,3328955385,2939266226,2755636671,3106780840,2988687269,2198438022,2282195339,2501218972,2652609425,1201765386,1286567175,1371368976,1521706781,1805211710,1620529459,2105887268,1988838185,533804130,350174575,164439672,46346101,870912086,954669403,636813900,788204353,2358957921,2274680428,2592523643,2441661558,2695033685,2880240216,3065962831,3182487618,3572145929,3756299780,3270937875,3388507166,4174560061,4091327024,4006521127,3854606378,1014646705,930369212,711349675,560487590,272786309,457992840,106852767,223377554,1678381017,1862534868,1914052035,2031621326,1211247597,1128014560,1580087799,1428173050,32283319,182621114,401639597,486441376,768917123,651868046,1003007129,818324884,1503449823,1385356242,1333838021,1150208456,1973745387,2125135846,1673061617,1756818940,2970356327,3120694122,2802849917,2887651696,2637442643,2520393566,2334669897,2149987652,3917234703,3799141122,4284502037,4100872472,3309594171,3460984630,3545789473,3629546796,2050466060,1899603969,1814803222,1730525723,1443857720,1560382517,1075025698,1260232239,575138148,692707433,878443390,1062597235,243256656,91341917,409198410,325965383,3403100636,3252238545,3704300486,3620022987,3874428392,3990953189,4042459122,4227665663,2460449204,2578018489,2226875310,2411029155,3198115200,3046200461,2827177882,2743944855],z=[0,218828297,437656594,387781147,875313188,958871085,775562294,590424639,1750626376,1699970625,1917742170,2135253587,1551124588,1367295589,1180849278,1265195639,3501252752,3720081049,3399941250,3350065803,3835484340,3919042237,4270507174,4085369519,3102249176,3051593425,2734591178,2952102595,2361698556,2177869557,2530391278,2614737639,3145456443,3060847922,2708326185,2892417312,2404901663,2187128086,2504130317,2555048196,3542330227,3727205754,3375740769,3292445032,3876557655,3926170974,4246310725,4027744588,1808481195,1723872674,1910319033,2094410160,1608975247,1391201670,1173430173,1224348052,59984867,244860394,428169201,344873464,935293895,984907214,766078933,547512796,1844882806,1627235199,2011214180,2062270317,1507497298,1423022939,1137477952,1321699145,95345982,145085239,532201772,313773861,830661914,1015671571,731183368,648017665,3175501286,2957853679,2807058932,2858115069,2305455554,2220981195,2474404304,2658625497,3575528878,3625268135,3473416636,3254988725,3778151818,3963161475,4213447064,4130281361,3599595085,3683022916,3432737375,3247465558,3802222185,4020912224,4172763771,4122762354,3201631749,3017672716,2764249623,2848461854,2331590177,2280796200,2431590963,2648976442,104699613,188127444,472615631,287343814,840019705,1058709744,671593195,621591778,1852171925,1668212892,1953757831,2037970062,1514790577,1463996600,1080017571,1297403050,3673637356,3623636965,3235995134,3454686199,4007360968,3822090177,4107101658,4190530515,2997825956,3215212461,2830708150,2779915199,2256734592,2340947849,2627016082,2443058075,172466556,122466165,273792366,492483431,1047239e3,861968209,612205898,695634755,1646252340,1863638845,2013908262,1963115311,1446242576,1530455833,1277555970,1093597963,1636604631,1820824798,2073724613,1989249228,1436590835,1487645946,1337376481,1119727848,164948639,81781910,331544205,516552836,1039717051,821288114,669961897,719700128,2973530695,3157750862,2871682645,2787207260,2232435299,2283490410,2667994737,2450346104,3647212047,3564045318,3279033885,3464042516,3980931627,3762502690,4150144569,4199882800,3070356634,3121275539,2904027272,2686254721,2200818878,2384911031,2570832044,2486224549,3747192018,3528626907,3310321856,3359936201,3950355702,3867060991,4049844452,4234721005,1739656202,1790575107,2108100632,1890328081,1402811438,1586903591,1233856572,1149249077,266959938,48394827,369057872,418672217,1002783846,919489135,567498868,752375421,209336225,24197544,376187827,459744698,945164165,895287692,574624663,793451934,1679968233,1764313568,2117360635,1933530610,1343127501,1560637892,1243112415,1192455638,3704280881,3519142200,3336358691,3419915562,3907448597,3857572124,4075877127,4294704398,3029510009,3113855344,2927934315,2744104290,2159976285,2377486676,2594734927,2544078150],S=[0,151849742,303699484,454499602,607398968,758720310,908999204,1059270954,1214797936,1097159550,1517440620,1400849762,1817998408,1699839814,2118541908,2001430874,2429595872,2581445614,2194319100,2345119218,3034881240,3186202582,2801699524,2951971274,3635996816,3518358430,3399679628,3283088770,4237083816,4118925222,4002861748,3885750714,1002142683,850817237,698445255,548169417,529487843,377642221,227885567,77089521,1943217067,2061379749,1640576439,1757691577,1474760595,1592394909,1174215055,1290801793,2875968315,2724642869,3111247143,2960971305,2405426947,2253581325,2638606623,2487810577,3808662347,3926825029,4044981591,4162096729,3342319475,3459953789,3576539503,3693126241,1986918061,2137062819,1685577905,1836772287,1381620373,1532285339,1078185097,1229899655,1040559837,923313619,740276417,621982671,439452389,322734571,137073913,19308535,3871163981,4021308739,4104605777,4255800159,3263785589,3414450555,3499326569,3651041127,2933202493,2815956275,3167684641,3049390895,2330014213,2213296395,2566595609,2448830231,1305906550,1155237496,1607244650,1455525988,1776460110,1626319424,2079897426,1928707164,96392454,213114376,396673818,514443284,562755902,679998e3,865136418,983426092,3708173718,3557504664,3474729866,3323011204,4180808110,4030667424,3945269170,3794078908,2507040230,2623762152,2272556026,2390325492,2975484382,3092726480,2738905026,2857194700,3973773121,3856137295,4274053469,4157467219,3371096953,3252932727,3673476453,3556361835,2763173681,2915017791,3064510765,3215307299,2156299017,2307622919,2459735317,2610011675,2081048481,1963412655,1846563261,1729977011,1480485785,1362321559,1243905413,1126790795,878845905,1030690015,645401037,796197571,274084841,425408743,38544885,188821243,3613494426,3731654548,3313212038,3430322568,4082475170,4200115116,3780097726,3896688048,2668221674,2516901860,2366882550,2216610296,3141400786,2989552604,2837966542,2687165888,1202797690,1320957812,1437280870,1554391400,1669664834,1787304780,1906247262,2022837584,265905162,114585348,499347990,349075736,736970802,585122620,972512814,821712160,2595684844,2478443234,2293045232,2174754046,3196267988,3079546586,2895723464,2777952454,3537852828,3687994002,3234156416,3385345166,4142626212,4293295786,3841024952,3992742070,174567692,57326082,410887952,292596766,777231668,660510266,1011452712,893681702,1108339068,1258480242,1343618912,1494807662,1715193156,1865862730,1948373848,2100090966,2701949495,2818666809,3004591147,3122358053,2235061775,2352307457,2535604243,2653899549,3915653703,3764988233,4219352155,4067639125,3444575871,3294430577,3746175075,3594982253,836553431,953270745,600235211,718002117,367585007,484830689,133361907,251657213,2041877159,1891211689,1806599355,1654886325,1568718495,1418573201,1335535747,1184342925];function A(t){for(var e=[],r=0;r>2,this._Ke[r][e%4]=s[e],this._Kd[t-r][e%4]=s[e];for(var o,h=0,a=n;a>16&255]<<24^p[o>>8&255]<<16^p[255&o]<<8^p[o>>24&255]^u[h]<<24,h+=1,8!=n)for(e=1;e>8&255]<<8^p[o>>16&255]<<16^p[o>>24&255]<<24;for(e=n/2+1;e>2,l=a%4,this._Ke[f][l]=s[e],this._Kd[t-f][l]=s[e++],a++}for(var f=1;f>24&255]^C[o>>16&255]^z[o>>8&255]^S[255&o]},K.prototype.encrypt=function(t){if(16!=t.length)throw new Error("invalid plaintext size (must be 16 bytes)");for(var e=this._Ke.length-1,r=[0,0,0,0],i=A(t),n=0;n<4;n++)i[n]^=this._Ke[0][n];for(var o=1;o>24&255]^y[i[(n+1)%4]>>16&255]^d[i[(n+2)%4]>>8&255]^w[255&i[(n+3)%4]]^this._Ke[o][n];i=r.slice()}var h,a=s(16);for(n=0;n<4;n++)h=this._Ke[e][n],a[4*n]=255&(p[i[n]>>24&255]^h>>24),a[4*n+1]=255&(p[i[(n+1)%4]>>16&255]^h>>16),a[4*n+2]=255&(p[i[(n+2)%4]>>8&255]^h>>8),a[4*n+3]=255&(p[255&i[(n+3)%4]]^h);return a},K.prototype.decrypt=function(t){if(16!=t.length)throw new Error("invalid ciphertext size (must be 16 bytes)");for(var e=this._Kd.length-1,r=[0,0,0,0],i=A(t),n=0;n<4;n++)i[n]^=this._Kd[0][n];for(var o=1;o>24&255]^v[i[(n+3)%4]>>16&255]^b[i[(n+2)%4]>>8&255]^m[255&i[(n+1)%4]]^this._Kd[o][n];i=r.slice()}var h,a=s(16);for(n=0;n<4;n++)h=this._Kd[e][n],a[4*n]=255&(l[i[n]>>24&255]^h>>24),a[4*n+1]=255&(l[i[(n+3)%4]>>16&255]^h>>16),a[4*n+2]=255&(l[i[(n+2)%4]>>8&255]^h>>8),a[4*n+3]=255&(l[255&i[(n+1)%4]]^h);return a};var k=function(t){if(!(this instanceof k))throw Error("AES must be instanitated with `new`");this.description="Electronic Code Block",this.name="ecb",this._aes=new K(t)};k.prototype.encrypt=function(t){if((t=n(t)).length%16!=0)throw new Error("invalid plaintext size (must be multiple of 16 bytes)");for(var e=s(t.length),r=s(16),i=0;iNumber.MAX_SAFE_INTEGER)throw new Error("integer value out of safe range");for(var e=15;e>=0;--e)this._counter[e]=t%256,t=parseInt(t/256)},R.prototype.setBytes=function(t){if(16!=(t=n(t,!0)).length)throw new Error("invalid counter bytes size (must be 16 bytes)");this._counter=t},R.prototype.increment=function(){for(var t=15;t>=0;t--){if(255!==this._counter[t]){this._counter[t]++;break}this._counter[t]=0}};var B=function(t,e){if(!(this instanceof B))throw Error("AES must be instanitated with `new`");this.description="Counter",this.name="ctr",e instanceof R||(e=new R(e)),this._counter=e,this._remainingCounter=null,this._remainingCounterIndex=16,this._aes=new K(t)};B.prototype.encrypt=function(t){for(var e=n(t,!0),r=0;r16)throw new Error("PKCS#7 padding byte out of range");for(var r=t.length-e,i=0;i>15;--h>=0;){var f=32767&this[t],u=this[t++]>>15,p=n*f+u*e;s=((f=e*f+((32767&p)<<15)+o[r]+(1073741823&s))>>>30)+(p>>>15)+n*u+(s>>>30),o[r++]=1073741823&f}return s},i=30):s&&"Netscape"!=navigator.appName?(o.prototype.am=function(t,i,o,r,s,h){for(;--h>=0;){var e=i*this[t++]+o[r]+s;s=Math.floor(e/67108864),o[r++]=67108863&e}return s},i=26):(o.prototype.am=function(t,i,o,r,s,h){for(var e=16383&i,n=i>>14;--h>=0;){var f=16383&this[t],u=this[t++]>>14,p=n*f+u*e;s=((f=e*f+((16383&p)<<14)+o[r]+s)>>28)+(p>>14)+n*u,o[r++]=268435455&f}return s},i=28),o.prototype.DB=i,o.prototype.DM=(1<>>16)&&(t=i,o+=16),0!=(i=t>>8)&&(t=i,o+=8),0!=(i=t>>4)&&(t=i,o+=4),0!=(i=t>>2)&&(t=i,o+=2),0!=(i=t>>1)&&(t=i,o+=1),o}function m(t){this.m=t}function l(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,i+=16),0==(255&t)&&(t>>=8,i+=8),0==(15&t)&&(t>>=4,i+=4),0==(3&t)&&(t>>=2,i+=2),0==(1&t)&&++i,i}function b(t){for(var i=0;0!=t;)t&=t-1,++i;return i}function g(){}function S(t){return t}function B(t){this.r2=r(),this.q3=r(),o.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}m.prototype.convert=function(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},m.prototype.revert=function(t){return t},m.prototype.reduce=function(t){t.divRemTo(this.m,null,t)},m.prototype.mulTo=function(t,i,o){t.multiplyTo(i,o),this.reduce(o)},m.prototype.sqrTo=function(t,i){t.squareTo(i),this.reduce(i)},l.prototype.convert=function(t){var i=r();return t.abs().dlShiftTo(this.m.t,i),i.divRemTo(this.m,null,i),t.s<0&&i.compareTo(o.ZERO)>0&&this.m.subTo(i,i),i},l.prototype.revert=function(t){var i=r();return t.copyTo(i),this.reduce(i),i},l.prototype.reduce=function(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var i=0;i>15)*this.mpl&this.um)<<15)&t.DM;for(t[o=i+this.m.t]+=this.m.am(0,r,t,i,0,this.m.t);t[o]>=t.DV;)t[o]-=t.DV,t[++o]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},l.prototype.mulTo=function(t,i,o){t.multiplyTo(i,o),this.reduce(o)},l.prototype.sqrTo=function(t,i){t.squareTo(i),this.reduce(i)},o.prototype.copyTo=function(t){for(var i=this.t-1;i>=0;--i)t[i]=this[i];t.t=this.t,t.s=this.s},o.prototype.fromInt=function(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+this.DV:this.t=0},o.prototype.fromString=function(t,i){var r;if(16==i)r=4;else if(8==i)r=3;else if(256==i)r=8;else if(2==i)r=1;else if(32==i)r=5;else{if(4!=i)return void this.fromRadix(t,i);r=2}this.t=0,this.s=0;for(var s=t.length,h=!1,e=0;--s>=0;){var n=8==r?255&t[s]:p(t,s);n<0?"-"==t.charAt(s)&&(h=!0):(h=!1,0==e?this[this.t++]=n:e+r>this.DB?(this[this.t-1]|=(n&(1<>this.DB-e):this[this.t-1]|=n<=this.DB&&(e-=this.DB))}8==r&&0!=(128&t[0])&&(this.s=-1,e>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t},o.prototype.dlShiftTo=function(t,i){var o;for(o=this.t-1;o>=0;--o)i[o+t]=this[o];for(o=t-1;o>=0;--o)i[o]=0;i.t=this.t+t,i.s=this.s},o.prototype.drShiftTo=function(t,i){for(var o=t;o=0;--o)i[o+e+1]=this[o]>>s|n,n=(this[o]&h)<=0;--o)i[o]=0;i[e]=n,i.t=this.t+e+1,i.s=this.s,i.clamp()},o.prototype.rShiftTo=function(t,i){i.s=this.s;var o=Math.floor(t/this.DB);if(o>=this.t)i.t=0;else{var r=t%this.DB,s=this.DB-r,h=(1<>r;for(var e=o+1;e>r;r>0&&(i[this.t-o-1]|=(this.s&h)<>=this.DB;if(t.t>=this.DB;r+=this.s}else{for(r+=this.s;o>=this.DB;r-=t.s}i.s=r<0?-1:0,r<-1?i[o++]=this.DV+r:r>0&&(i[o++]=r),i.t=o,i.clamp()},o.prototype.multiplyTo=function(t,i){var r=this.abs(),s=t.abs(),h=r.t;for(i.t=h+s.t;--h>=0;)i[h]=0;for(h=0;h=0;)t[o]=0;for(o=0;o=i.DV&&(t[o+i.t]-=i.DV,t[o+i.t+1]=1)}t.t>0&&(t[t.t-1]+=i.am(o,i[o],t,2*o,0,1)),t.s=0,t.clamp()},o.prototype.divRemTo=function(t,i,s){var h=t.abs();if(!(h.t<=0)){var e=this.abs();if(e.t0?(h.lShiftTo(p,n),e.lShiftTo(p,s)):(h.copyTo(n),e.copyTo(s));var a=n.t,m=n[a-1];if(0!=m){var l=m*(1<1?n[a-2]>>this.F2:0),v=this.FV/l,T=(1<=0&&(s[s.t++]=1,s.subTo(b,s)),o.ONE.dlShiftTo(a,b),b.subTo(n,n);n.t=0;){var g=s[--d]==m?this.DM:Math.floor(s[d]*v+(s[d-1]+y)*T);if((s[d]+=n.am(0,g,s,D,0,a))0&&s.rShiftTo(p,s),f<0&&o.ZERO.subTo(s,s)}}},o.prototype.invDigit=function(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var i=3&t;return(i=(i=(i=(i=i*(2-(15&t)*i)&15)*(2-(255&t)*i)&255)*(2-((65535&t)*i&65535))&65535)*(2-t*i%this.DV)%this.DV)>0?this.DV-i:-i},o.prototype.isEven=function(){return 0==(this.t>0?1&this[0]:this.s)},o.prototype.exp=function(t,i){if(t>4294967295||t<1)return o.ONE;var s=r(),h=r(),e=i.convert(this),n=c(t)-1;for(e.copyTo(s);--n>=0;)if(i.sqrTo(s,h),(t&1<0)i.mulTo(h,e,s);else{var f=s;s=h,h=f}return i.revert(s)},o.prototype.toString=function(t){if(this.s<0)return"-"+this.negate().toString(t);var i;if(16==t)i=4;else if(8==t)i=3;else if(2==t)i=1;else if(32==t)i=5;else{if(4!=t)return this.toRadix(t);i=2}var o,r=(1<0)for(n>n)>0&&(s=!0,h=u(o));e>=0;)n>(n+=this.DB-i)):(o=this[e]>>(n-=i)&r,n<=0&&(n+=this.DB,--e)),o>0&&(s=!0),s&&(h+=u(o));return s?h:"0"},o.prototype.negate=function(){var t=r();return o.ZERO.subTo(this,t),t},o.prototype.abs=function(){return this.s<0?this.negate():this},o.prototype.compareTo=function(t){var i=this.s-t.s;if(0!=i)return i;var o=this.t;if(0!=(i=o-t.t))return this.s<0?-i:i;for(;--o>=0;)if(0!=(i=this[o]-t[o]))return i;return 0},o.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+c(this[this.t-1]^this.s&this.DM)},o.prototype.mod=function(t){var i=r();return this.abs().divRemTo(t,null,i),this.s<0&&i.compareTo(o.ZERO)>0&&t.subTo(i,i),i},o.prototype.modPowInt=function(t,i){var o;return o=t<256||i.isEven()?new m(i):new l(i),this.exp(t,o)},o.ZERO=a(0),o.ONE=a(1),g.prototype.convert=S,g.prototype.revert=S,g.prototype.mulTo=function(t,i,o){t.multiplyTo(i,o)},g.prototype.sqrTo=function(t,i){t.squareTo(i)},B.prototype.convert=function(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var i=r();return t.copyTo(i),this.reduce(i),i},B.prototype.revert=function(t){return t},B.prototype.reduce=function(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},B.prototype.mulTo=function(t,i,o){t.multiplyTo(i,o),this.reduce(o)},B.prototype.sqrTo=function(t,i){t.squareTo(i),this.reduce(i)};var w,M,E,R=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],O=(1<<26)/R[R.length-1];function A(){var t;t=(new Date).getTime(),M[E++]^=255&t,M[E++]^=t>>8&255,M[E++]^=t>>16&255,M[E++]^=t>>24&255,E>=Z&&(E-=Z)}if(o.prototype.chunkSize=function(t){return Math.floor(Math.LN2*this.DB/Math.log(t))},o.prototype.toRadix=function(t){if(null==t&&(t=10),0==this.signum()||t<2||t>36)return"0";var i=this.chunkSize(t),o=Math.pow(t,i),s=a(o),h=r(),e=r(),n="";for(this.divRemTo(s,h,e);h.signum()>0;)n=(o+e.intValue()).toString(t).substr(1)+n,h.divRemTo(s,h,e);return e.intValue().toString(t)+n},o.prototype.fromRadix=function(t,i){this.fromInt(0),null==i&&(i=10);for(var r=this.chunkSize(i),s=Math.pow(i,r),h=!1,e=0,n=0,f=0;f=r&&(this.dMultiply(s),this.dAddOffset(n,0),e=0,n=0))}e>0&&(this.dMultiply(Math.pow(i,e)),this.dAddOffset(n,0)),h&&o.ZERO.subTo(this,this)},o.prototype.fromNumber=function(t,i,r){if("number"==typeof i)if(t<2)this.fromInt(1);else for(this.fromNumber(t,r),this.testBit(t-1)||this.bitwiseTo(o.ONE.shiftLeft(t-1),T,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(i);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(o.ONE.shiftLeft(t-1),this);else{var s=new Array,h=7&t;s.length=1+(t>>3),i.nextBytes(s),h>0?s[0]&=(1<>=this.DB;if(t.t>=this.DB;r+=this.s}else{for(r+=this.s;o>=this.DB;r+=t.s}i.s=r<0?-1:0,r>0?i[o++]=r:r<-1&&(i[o++]=this.DV+r),i.t=o,i.clamp()},o.prototype.dMultiply=function(t){this[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()},o.prototype.dAddOffset=function(t,i){if(0!=t){for(;this.t<=i;)this[this.t++]=0;for(this[i]+=t;this[i]>=this.DV;)this[i]-=this.DV,++i>=this.t&&(this[this.t++]=0),++this[i]}},o.prototype.multiplyLowerTo=function(t,i,o){var r,s=Math.min(this.t+t.t,i);for(o.s=0,o.t=s;s>0;)o[--s]=0;for(r=o.t-this.t;s=0;)o[r]=0;for(r=Math.max(i-this.t,0);r0)if(0==i)o=this[0]%t;else for(var r=this.t-1;r>=0;--r)o=(i*o+this[r])%t;return o},o.prototype.millerRabin=function(t){var i=this.subtract(o.ONE),s=i.getLowestSetBit();if(s<=0)return!1;var h=i.shiftRight(s);(t=t+1>>1)>R.length&&(t=R.length);for(var e=r(),n=0;n>24},o.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},o.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},o.prototype.toByteArray=function(){var t=this.t,i=new Array;i[0]=this.s;var o,r=this.DB-t*this.DB%8,s=0;if(t-- >0)for(r>r)!=(this.s&this.DM)>>r&&(i[s++]=o|this.s<=0;)r<8?(o=(this[t]&(1<>(r+=this.DB-8)):(o=this[t]>>(r-=8)&255,r<=0&&(r+=this.DB,--t)),0!=(128&o)&&(o|=-256),0==s&&(128&this.s)!=(128&o)&&++s,(s>0||o!=this.s)&&(i[s++]=o);return i},o.prototype.equals=function(t){return 0==this.compareTo(t)},o.prototype.min=function(t){return this.compareTo(t)<0?this:t},o.prototype.max=function(t){return this.compareTo(t)>0?this:t},o.prototype.and=function(t){var i=r();return this.bitwiseTo(t,v,i),i},o.prototype.or=function(t){var i=r();return this.bitwiseTo(t,T,i),i},o.prototype.xor=function(t){var i=r();return this.bitwiseTo(t,y,i),i},o.prototype.andNot=function(t){var i=r();return this.bitwiseTo(t,d,i),i},o.prototype.not=function(){for(var t=r(),i=0;i=this.t?0!=this.s:0!=(this[i]&1<1){var v=r();for(s.sqrTo(n[1],v);f<=p;)n[f]=r(),s.mulTo(v,n[f-2],n[f]),f+=2}var T,y,d=t.t-1,D=!0,b=r();for(h=c(t[d])-1;d>=0;){for(h>=u?T=t[d]>>h-u&p:(T=(t[d]&(1<0&&(T|=t[d-1]>>this.DB+h-u)),f=o;0==(1&T);)T>>=1,--f;if((h-=f)<0&&(h+=this.DB,--d),D)n[T].copyTo(e),D=!1;else{for(;f>1;)s.sqrTo(e,b),s.sqrTo(b,e),f-=2;f>0?s.sqrTo(e,b):(y=e,e=b,b=y),s.mulTo(b,n[T],e)}for(;d>=0&&0==(t[d]&1<=0?(r.subTo(s,r),i&&h.subTo(n,h),e.subTo(f,e)):(s.subTo(r,s),i&&n.subTo(h,n),f.subTo(e,f))}return 0!=s.compareTo(o.ONE)?o.ZERO:f.compareTo(t)>=0?f.subtract(t):f.signum()<0?(f.addTo(t,f),f.signum()<0?f.add(t):f):f},o.prototype.pow=function(t){return this.exp(t,new g)},o.prototype.gcd=function(t){var i=this.s<0?this.negate():this.clone(),o=t.s<0?t.negate():t.clone();if(i.compareTo(o)<0){var r=i;i=o,o=r}var s=i.getLowestSetBit(),h=o.getLowestSetBit();if(h<0)return i;for(s0&&(i.rShiftTo(h,i),o.rShiftTo(h,o));i.signum()>0;)(s=i.getLowestSetBit())>0&&i.rShiftTo(s,i),(s=o.getLowestSetBit())>0&&o.rShiftTo(s,o),i.compareTo(o)>=0?(i.subTo(o,i),i.rShiftTo(1,i)):(o.subTo(i,o),o.rShiftTo(1,o));return h>0&&o.lShiftTo(h,o),o},o.prototype.isProbablePrime=function(t){var i,o=this.abs();if(1==o.t&&o[0]<=R[R.length-1]){for(i=0;i>>8,M[E++]=255&V;E=0,A()}function x(){if(null==w){for(A(),(w=new I).init(M),E=0;E/?`~ \\'\"+-";for(e=0;1<1<>=1))-1)+1;var i,l,h=mn(1,1,1),g=mn(0,1,1),a=new Array(0),c=a,d=a,v=a,w=a,s=a,M=a,y=a,_=a,b=a,A=a,m=a,I=a,p=a,k=a,P=a,S=a,x=a,C=a,q=a,D=a,G=a,R=a,z=a,B=a,J=a,O=a,T=a,Z=a,j=a,E=a,F=a,H=a,K=a;function L(n){var r,t,e,f;for(t=new Array(n),r=0;r0;r--);for(t=0,f=n[r];f;f>>=1,t++);return t+=e*r}function V(n,r){var t=mn(0,(n.length>r?n.length:r)*e,0);return Cn(t,n),t}function W(n){var r=mn(0,n,0);return ln(r,n),Qn(r,1)}function X(n){return Y(n,n>=600?2:n>=550?4:n>=500?5:n>=400?6:n>=350?7:n>=300?9:n>=250?12:n>=200?15:n>=150?18:n>=100?27:40)}function Y(n,r){var t,e,f;for(3e4,t=mn(0,n,0),0===q.length&&(q=L(3e4)),K.length!==t.length&&(K=xn(t));;){for(gn(t,n,0),t[0]|=1,f=0,e=0;er.length?n.length+1:r.length+1);return En(t,r),Qn(t,1)}function fn(n,r){var t=V(n,n.length>r.length?n.length+1:r.length+1);return Fn(t,r),Qn(t,1)}function on(n,r){var t=V(n,r.length);return dn(t,r)?Qn(t,1):null}function un(n,r,t){var e=V(n,t.length);return Ln(e,r,t),Qn(e,1)}function ln(n,r){var t,f,o,u,i,l,h,g,a,c;if(0==q.length&&(q=L(3e4)),0==D.length)for(D=new Array(512),o=0;o<512;o++)D[o]=Math.pow(2,o/511-1);if(R.length!=n.length&&(R=xn(n),z=xn(n),O=xn(n),Z=xn(n),F=xn(n),xn(n),xn(n),E=xn(n),j=xn(n),G=xn(n),B=xn(n),J=xn(n),T=xn(n),H=xn(n)),r<=20){for(t=(1<<(r+2>>1))-1,qn(n,0),f=1;f;)for(f=0,n[0]=1|1<40)for(u=1;r-r*u<=20;)u=D[Math.floor(512*Math.random())];else u=.5;for(a=Math.floor(u*r)+1,ln(J,a),qn(R,0),R[Math.floor((r-2)/e)]|=1<<(r-2)%e,_n(R,J,G,B),h=U(G);;){for(;gn(z,h,0),!yn(G,z););for(Dn(z,1),Fn(z,G),Cn(j,J),Hn(j,z),Bn(j,2),Dn(j,1),Cn(Z,z),Bn(Z,2),l=0,o=0;o0;o--);for(g=0,c=j[o];c;c>>=1,g++);for(g+=e*o;gn(T,g,0),!yn(j,T););if(Dn(j,3),Dn(T,2),Cn(E,T),Cn(O,j),Dn(O,-1),Un(E,O,j),Dn(E,-1),Pn(E)&&(Cn(E,T),Un(E,Z,j),Dn(E,-1),Cn(H,j),Cn(F,E),cn(F,j),pn(F,1)))return void Cn(n,H)}}}}function hn(n,r){var t;return gn(t=mn(0,0,Math.floor((n-1)/e)+2),n,r),t}function gn(n,r,t){var f,o;for(f=0;f=0;t--);for(e=n[t],f=r[t],o=1,u=0,i=0,l=1;f+i&&f+l&&(h=Math.floor((e+o)/(f+i)))==Math.floor((e+u)/(f+l));)a=o-h*i,o=i,i=a,a=u-h*l,u=l,l=a,a=e-h*f,e=f,f=a;u?(Cn(_,n),On(n,r,o,u),On(r,_,l,i)):(Kn(n,r),Cn(_,n),Cn(n,r),Cn(r,_))}if(0!==r[0])for(a=An(n,r[0]),qn(n,r[0]),r[0]=a;r[0];)n[0]%=r[0],a=n[0],n[0]=r[0],r[0]=a}function dn(n,r){var t=1+2*Math.max(n.length,r.length);if(!(1&n[0]||1&r[0]))return qn(n,0),0;for(k.length!=t&&(k=new Array(t),p=new Array(t),P=new Array(t),S=new Array(t),x=new Array(t),C=new Array(t)),Cn(k,n),Cn(p,r),qn(P,1),qn(S,0),qn(x,0),qn(C,1);;){for(;!(1&k[0]);)Rn(k),1&P[0]||1&S[0]?(Fn(P,r),Rn(P),En(S,n),Rn(S)):(Rn(P),Rn(S));for(;!(1&p[0]);)Rn(p),1&x[0]||1&C[0]?(Fn(x,r),Rn(x),En(C,n),Rn(C)):(Rn(x),Rn(C));if(yn(p,k)?(En(p,k),En(x,P),En(C,S)):(En(k,p),En(P,x),En(S,C)),pn(k,0)){for(;sn(x);)Fn(x,r);return Cn(n,x),pn(p,1)?1:(qn(n,0),0)}}}function vn(n,r){for(var t=1,e=0;;){if(1===n)return t;if(0===n)return 0;if(e-=t*Math.floor(r/n),1===(r%=n))return e;if(0===r)return 0;t-=e*Math.floor(n/r),n%=r}}function wn(n,r,t,e,f){var o=0,u=Math.max(n.length,r.length);for(k.length!=u&&(k=new Array(u),P=new Array(u),S=new Array(u),x=new Array(u),C=new Array(u));!(1&n[0]||1&r[0]);)Rn(n),Rn(r),o++;for(Cn(k,n),Cn(t,r),qn(P,1),qn(S,0),qn(x,0),qn(C,1);;){for(;!(1&k[0]);)Rn(k),1&P[0]||1&S[0]?(Fn(P,r),Rn(P),En(S,n),Rn(S)):(Rn(P),Rn(S));for(;!(1&t[0]);)Rn(t),1&x[0]||1&C[0]?(Fn(x,r),Rn(x),En(C,n),Rn(C)):(Rn(x),Rn(C));if(yn(t,k)?(En(t,k),En(x,P),En(C,S)):(En(k,t),En(P,x),En(S,C)),pn(k,0)){for(;sn(x);)Fn(x,r),En(C,n);return Bn(C,-1),Cn(e,x),Cn(f,C),void zn(t,o)}}}function sn(n){return n[n.length-1]>>e-1&1}function Mn(n,r,t){var e,f=n.length,o=r.length;for(i=f+t=0;e++)if(n[e]>0)return 1;for(e=f-1+t;e0)return 0;for(e=i-1;e>=t;e--){if(n[e-t]>r[e])return 1;if(n[e-t]=0;t--){if(n[t]>r[t])return 1;if(n[t]>=1;for(zn(r,d=e-d),zn(u,d),i=u.length;0===u[i-1]&&i>l;i--);for(qn(t,0);!Mn(r,u,i-l);)jn(u,r,i-l),t[i-l]++;for(h=i-1;h>=l;h--){for(u[h]==r[l-1]?t[h-l]=f:t[h-l]=Math.floor((u[h]*o+u[h-1])/r[l-1]);c=(a=(l>1?r[l-2]:0)*t[h-l])>>e,a&=f,c=(g=c+t[h-l]*r[l-1])>>e,g&=f,c==u[h]?g==u[h-1]?a>(h>1?u[h-2]:0):g>u[h-1]:c>u[h];)t[h-l]--;Tn(u,r,-t[h-l],h-l),sn(u)&&(Zn(u,r,h-l),t[h-l]--)}Gn(r,d),Gn(u,d)}function bn(n){var r,t,u,i;for(t=n.length,u=0,r=0;r>e))*o),n[r]=u&f,u=(u>>e)-i}function An(n,r){var t,e=0;for(t=n.length-1;t>=0;t--)e=(e*o+n[t])%r;return e}function mn(n,r,t){var f;f=t>(f=Math.ceil(r/e)+1)?t:f;var o=new Array(f);return qn(o,n),o}function In(n,r,t){var e,f,o,i,l,h=n.length;if(-1===r){for(o=new Array(0);;){for(i=new Array(o.length+1),f=0;f=36&&(e-=26),!(e>=r||e<0));f++)Bn(o,r),Dn(o,e);for(h=o.length;h>0&&!o[h-1];h--);for(h=t>h+1?t:h+1,i=new Array(h),l=hr.length){for(;t0;t--)f+=n[t]+",";f+=n[0]}else for(;!Pn(M);)e=Jn(M,r),f=u.substring(e,e+1)+f;return 0===f.length&&(f="0"),f}function xn(n){return Cn(l=Array(n.length),n),l}function Cn(n,r){var t,e=n.length>=e}function Dn(n,r){var t,u,i,l;for(n[0]+=r,u=n.length,i=0,t=0;t>e))*o),n[t]=i&f,!(i=(i>>e)-l))return}function Gn(n,r){var t,o=Math.floor(r/e);if(o){for(t=0;t>r);n[t]>>=r}function Rn(n){var r;for(r=0;r>1);n[r]=n[r]>>1|n[r]&o>>1}function zn(n,r){var t,o=Math.floor(r/e);if(o){for(t=n.length;t>=o;t--)n[t]=n[t-o];for(;t>=0;t--)n[t]=0;r%=e}if(r){for(t=n.length-1;t>0;t--)n[t]=f&(n[t]<>e-r);n[t]=f&n[t]<>e))*o),n[t]=i&f,i=(i>>e)-l}function Jn(n,r){var t,e,f=0;for(t=n.length-1;t>=0;t--)e=f*o+n[t],n[t]=Math.floor(e/r),f=e%r;return f}function On(n,r,t,o){var u,i,l,h;for(l=n.length>=e;for(u=l;u>=e}function Tn(n,r,t,o){var u,i,l,h;for(l=n.length>=e;for(u=l;i&&u>=e}function Zn(n,r,t){var o,u,i,l;for(i=n.length>=e;for(o=i;u&&o>=e}function jn(n,r,t){var o,u,i,l;for(i=n.length>=e;for(o=i;u&&o>=e}function En(n,r){var t,o,u;for(u=n.length>=e;for(t=u;o&&t>=e}function Fn(n,r){var t,o,u;for(u=n.length>=e;for(t=u;o&&t>=e}function Hn(n,r){var t;for(c.length!=2*n.length&&(c=new Array(2*n.length)),qn(c,0),t=0;t0&&!n[i-1];i--);for(l=i>r.length?2*i:2*r.length,d.length!=l&&(d=new Array(l)),qn(d,0),t=0;t>=e,o=t+1;o>=e;d[t+i]=u}Kn(d,r),Cn(n,d)}function Qn(n,r){var t,e;for(t=n.length;t>0&&!n[t-1];t--);return Cn(e=new Array(t+r),n),e}function Un(n,r,t){var f,u,i,l;if(y.length!=t.length&&(y=xn(t)),0!=(1&t[0])){for(qn(y,0),i=t.length;i>0&&!t[i-1];i--);for(l=o-vn(An(t,o),o),y[i]=1,Ln(n,y,t),v.length!=n.length?v=xn(n):Cn(v,n),f=r.length-1;f>0&!r[f];f--);if(0!=r[f]){for(u=1<>=1);for(;;){if(!(u>>=1)){if(--f<0)return void Vn(n,h,t,l);u=1<0&&0==t[c-1];c--);for(;d>0&&0==r[d-1];d--);for(a=b.length-1,u=0;u>e,g=n[u],i=1;i>=e,l+=b[++i]+h*t[i]+g*r[i],b[i-1]=l&f,l>>=e,l+=b[++i]+h*t[i]+g*r[i],b[i-1]=l&f,l>>=e,l+=b[++i]+h*t[i]+g*r[i],b[i-1]=l&f,l>>=e,l+=b[++i]+h*t[i]+g*r[i],b[i-1]=l&f,l>>=e,i++;for(;i>=e,i++;for(;i>=e,l+=b[++i]+h*t[i],b[i-1]=l&f,l>>=e,l+=b[++i]+h*t[i],b[i-1]=l&f,l>>=e,l+=b[++i]+h*t[i],b[i-1]=l&f,l>>=e,l+=b[++i]+h*t[i],b[i-1]=l&f,l>>=e,i++;for(;i>=e,i++;for(;i>=e,i++;b[i-1]=l&f}yn(t,b)||En(b,t),Cn(n,b)}}}]); \ No newline at end of file diff --git a/public/npm.leemon.chunk.js.gz b/public/npm.leemon.chunk.js.gz new file mode 100644 index 00000000..fc2062ce Binary files /dev/null and b/public/npm.leemon.chunk.js.gz differ diff --git a/public/npm.lottie-web.chunk.js b/public/npm.lottie-web.chunk.js new file mode 100644 index 00000000..793c4646 --- /dev/null +++ b/public/npm.lottie-web.chunk.js @@ -0,0 +1,9 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{67:function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_RESULT__;"undefined"!=typeof navigator&&function(t,e){void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return e(t)}.call(exports,__webpack_require__,exports,module))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)}(window||{},(function(window){"use strict";var svgNS="http://www.w3.org/2000/svg",locationHref="",initialDefaultFrame=-999999,subframeEnabled=!0,expressionsPlugin,isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),cachedColors={},bm_rounder=Math.round,bm_rnd,bm_pow=Math.pow,bm_sqrt=Math.sqrt,bm_abs=Math.abs,bm_floor=Math.floor,bm_max=Math.max,bm_min=Math.min,blitter=10,BMMath={};function ProjectInterface(){return{}}!function(){var t,e=["abs","acos","acosh","asin","asinh","atan","atanh","atan2","ceil","cbrt","expm1","clz32","cos","cosh","exp","floor","fround","hypot","imul","log","log1p","log2","log10","max","min","pow","random","round","sign","sin","sinh","sqrt","tan","tanh","trunc","E","LN10","LN2","LOG10E","LOG2E","PI","SQRT1_2","SQRT2"],r=e.length;for(t=0;t1?r[1]=1:r[1]<=0&&(r[1]=0),HSVtoRGB(r[0],r[1],r[2])}function addBrightnessToRGB(t,e){var r=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return r[2]+=e,r[2]>1?r[2]=1:r[2]<0&&(r[2]=0),HSVtoRGB(r[0],r[1],r[2])}function addHueToRGB(t,e){var r=RGBtoHSV(255*t[0],255*t[1],255*t[2]);return r[0]+=e/360,r[0]>1?r[0]-=1:r[0]<0&&(r[0]+=1),HSVtoRGB(r[0],r[1],r[2])}var rgbToHex=function(){var t,e,r=[];for(t=0;t<256;t+=1)e=t.toString(16),r[t]=1==e.length?"0"+e:e;return function(t,e,i){return t<0&&(t=0),e<0&&(e=0),i<0&&(i=0),"#"+r[t]+r[e]+r[i]}}();function BaseEvent(){}BaseEvent.prototype={triggerEvent:function(t,e){if(this._cbs[t])for(var r=this._cbs[t].length,i=0;i0||t>-1e-6&&t<0?i(1e4*t)/1e4:t}function F(){var t=this.props;return"matrix("+w(t[0])+","+w(t[1])+","+w(t[4])+","+w(t[5])+","+w(t[12])+","+w(t[13])+")"}return function(){this.reset=s,this.rotate=a,this.rotateX=n,this.rotateY=o,this.rotateZ=h,this.skew=p,this.skewFromAxis=m,this.shear=l,this.scale=f,this.setTransform=c,this.translate=d,this.transform=u,this.applyToPoint=E,this.applyToX=x,this.applyToY=P,this.applyToZ=S,this.applyToPointArray=k,this.applyToTriplePoints=T,this.applyToPointStringified=M,this.toCSS=D,this.to2dCSS=F,this.clone=v,this.cloneFromProps=b,this.equals=g,this.inversePoints=A,this.inversePoint=C,this.getInverseMatrix=_,this._t=this.transform,this.isIdentity=y,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray("float32",16),this.reset()}}();!function(t,e){var r,i=this,s=256,a=6,n="random",o=e.pow(s,a),h=e.pow(2,52),l=2*h,p=s-1;function m(t){var e,r=t.length,i=this,a=0,n=i.i=i.j=0,o=i.S=[];for(r||(t=[r++]);a=l;)t/=2,e/=2,r>>>=1;return(t+r)/e};return E.int32=function(){return 0|b.g(4)},E.quick=function(){return b.g(4)/4294967296},E.double=E,c(d(b.S),t),(u.pass||y||function(t,r,i,s){return s&&(s.S&&f(s,b),t.state=function(){return f(b,{})}),i?(e[n]=t,r):t})(E,v,"global"in u?u.global:this==e,u.state)},c(e.random(),t)}([],BMMath);var BezierFactory=function(){var t={getBezierEasing:function(t,r,i,s,a){var n=a||("bez_"+t+"_"+r+"_"+i+"_"+s).replace(/\./g,"p");if(e[n])return e[n];var o=new c([t,r,i,s]);return e[n]=o,o}},e={};var r=4,i=1e-7,s=10,a=11,n=1/(a-1),o="function"==typeof Float32Array;function h(t,e){return 1-3*e+3*t}function l(t,e){return 3*e-6*t}function p(t){return 3*t}function m(t,e,r){return((h(e,r)*t+l(e,r))*t+p(e))*t}function f(t,e,r){return 3*h(e,r)*t*t+2*l(e,r)*t+p(e)}function c(t){this._p=t,this._mSampleValues=o?new Float32Array(a):new Array(a),this._precomputed=!1,this.get=this.get.bind(this)}return c.prototype={get:function(t){var e=this._p[0],r=this._p[1],i=this._p[2],s=this._p[3];return this._precomputed||this._precompute(),e===r&&i===s?t:0===t?0:1===t?1:m(this._getTForX(t),r,s)},_precompute:function(){var t=this._p[0],e=this._p[1],r=this._p[2],i=this._p[3];this._precomputed=!0,t===e&&r===i||this._calcSampleValues()},_calcSampleValues:function(){for(var t=this._p[0],e=this._p[2],r=0;r=.001?function(t,e,i,s){for(var a=0;a0?r=h:e=h}while(Math.abs(o)>i&&++l-.001&&n<.001}var e=function(t,e,r,i){var s,a,n,o,h,l,p=defaultCurveSegments,m=0,f=[],c=[],d=bezier_length_pool.newElement();for(n=r.length,s=0;sn?-1:1,l=!0;l;)if(i[a]<=n&&i[a+1]>n?(o=(n-i[a])/(i[a+1]-i[a]),l=!1):a+=h,a<0||a>=s-1){if(a===s-1)return r[a];l=!1}return r[a]+(r[a+1]-r[a])*o}var o=createTypedArray("float32",8);return{getSegmentsLength:function(t){var r,i=segments_length_pool.newElement(),s=t.c,a=t.v,n=t.o,o=t.i,h=t._length,l=i.lengths,p=0;for(r=0;r1?1:s,h),m=n(a=a>1?1:a,h),f=t.length,c=1-p,d=1-m,u=c*c*c,y=p*c*c*3,g=p*p*c*3,v=p*p*p,b=c*c*d,E=p*c*d+c*p*d+c*c*m,x=p*p*d+c*p*m+p*c*m,P=p*p*m,S=c*d*d,_=p*d*d+c*m*d+c*d*m,C=p*m*d+c*m*m+p*d*m,A=p*m*m,T=d*d*d,k=m*d*d+d*m*d+d*d*m,M=m*m*d+d*m*m+m*d*m,D=m*m*m;for(l=0;lf?m>c?m-f-c:c-f-m:c>f?c-f-m:f-m-c)>-1e-4&&p<1e-4}}}!function(){for(var t=0,e=["ms","moz","webkit","o"],r=0;r=0;e-=1)if("sh"==t[e].ty){if(t[e].ks.k.i)i(t[e].ks.k);else for(a=t[e].ks.k.length,s=0;sr[0]||!(r[0]>t[0])&&(t[1]>r[1]||!(r[1]>t[1])&&(t[2]>r[2]||!(r[2]>t[2])&&void 0))}var a,n=function(){var t=[4,4,14];function e(t){var e,r,i,s=t.length;for(e=0;e=0;r-=1)if("sh"==t[r].ty){if(t[r].ks.k.i)t[r].ks.k.c=t[r].closed;else for(s=t[r].ks.k.length,i=0;i0&&(p=!1),p){var m=createTag("style");m.setAttribute("f-forigin",a[r].fOrigin),m.setAttribute("f-origin",a[r].origin),m.setAttribute("f-family",a[r].fFamily),m.type="text/css",m.innerHTML="@font-face {font-family: "+a[r].fFamily+"; font-style: normal; src: url('"+a[r].fPath+"');}",e.appendChild(m)}}else if("g"===a[r].fOrigin||1===a[r].origin){for(h=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),l=0;l=n.t-s){a.h&&(a=n),c=0;break}if(n.t-s>t){c=d;break}d=v||t=v?E.points.length-1:0;for(h=E.points[x].point.length,o=0;o=_&&S<_+E.points[m+1].partialLength){for(P=(S-_)/E.points[m+1].partialLength,h=E.points[m].point.length,o=0;o=v)r[0]=g[0],r[1]=g[1],r[2]=g[2];else if(t<=b)r[0]=a.s[0],r[1]=a.s[1],r[2]=a.s[2];else{!function(t,e){var r=e[0],i=e[1],s=e[2],a=e[3],n=Math.atan2(2*i*a-2*r*s,1-2*i*i-2*s*s),o=Math.asin(2*r*i+2*s*a),h=Math.atan2(2*r*a-2*i*s,1-2*r*r-2*s*s);t[0]=n/degToRads,t[1]=o/degToRads,t[2]=h/degToRads}(r,function(t,e,r){var i,s,a,n,o,h=[],l=t[0],p=t[1],m=t[2],f=t[3],c=e[0],d=e[1],u=e[2],y=e[3];(s=l*c+p*d+m*u+f*y)<0&&(s=-s,c=-c,d=-d,u=-u,y=-y);1-s>1e-6?(i=Math.acos(s),a=Math.sin(i),n=Math.sin((1-r)*i)/a,o=Math.sin(r*i)/a):(n=1-r,o=r);return h[0]=n*l+o*c,h[1]=n*p+o*d,h[2]=n*m+o*u,h[3]=n*f+o*y,h}(i(a.s),i(g),(t-b)/(v-b)))}else for(d=0;d=v?l=1:t=i&&e>=i||this._caching.lastFrame=e&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var s=this.interpolateValue(e,this._caching);this.pv=s}return this._caching.lastFrame=e,this.pv}function a(t){var r;if("unidimensional"===this.propType)r=t*this.mult,e(this.v-r)>1e-5&&(this.v=r,this._mdf=!0);else for(var i=0,s=this.v.length;i1e-5&&(this.v[i]=r,this._mdf=!0),i+=1}function n(){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length)if(this.lock)this.setVValue(this.pv);else{this.lock=!0,this._mdf=this._isFirstFrame;var t,e=this.effectsSequence.length,r=this.kf?this.pv:this.data.k;for(t=0;t=this.p.keyframes[this.p.keyframes.length-1].t?(r=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/s,0),i=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/s,0)):(r=this.p.pv,i=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/s,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){r=[],i=[];var a=this.px,n=this.py;a._caching.lastFrame+a.offsetTime<=a.keyframes[0].t?(r[0]=a.getValueAtTime((a.keyframes[0].t+.01)/s,0),r[1]=n.getValueAtTime((n.keyframes[0].t+.01)/s,0),i[0]=a.getValueAtTime(a.keyframes[0].t/s,0),i[1]=n.getValueAtTime(n.keyframes[0].t/s,0)):a._caching.lastFrame+a.offsetTime>=a.keyframes[a.keyframes.length-1].t?(r[0]=a.getValueAtTime(a.keyframes[a.keyframes.length-1].t/s,0),r[1]=n.getValueAtTime(n.keyframes[n.keyframes.length-1].t/s,0),i[0]=a.getValueAtTime((a.keyframes[a.keyframes.length-1].t-.01)/s,0),i[1]=n.getValueAtTime((n.keyframes[n.keyframes.length-1].t-.01)/s,0)):(r=[a.pv,n.pv],i[0]=a.getValueAtTime((a._caching.lastFrame+a.offsetTime-.01)/s,a.offsetTime),i[1]=n.getValueAtTime((n._caching.lastFrame+n.offsetTime-.01)/s,n.offsetTime))}else r=i=t;this.v.rotate(-Math.atan2(r[1]-i[1],r[0]-i[0]))}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2])}this.frameId=this.elem.globalData.frameId}},precalculateMatrix:function(){if(!this.a.k&&(this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1,!this.s.effectsSequence.length)){if(this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2,this.sk){if(this.sk.effectsSequence.length||this.sa.effectsSequence.length)return;this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3}if(this.r){if(this.r.effectsSequence.length)return;this.pre.rotate(-this.r.v),this.appliedTransformations=4}else this.rz.effectsSequence.length||this.ry.effectsSequence.length||this.rx.effectsSequence.length||this.or.effectsSequence.length||(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4)}},autoOrient:function(){}},extendPrototype([DynamicPropertyContainer],e),e.prototype.addDynamicProperty=function(t){this._addDynamicProperty(t),this.elem.addDynamicProperty(t),this._isDirty=!0},e.prototype._addDynamicProperty=DynamicPropertyContainer.prototype.addDynamicProperty,{getTransformProperty:function(t,r,i){return new e(t,r,i)}}}();function ShapePath(){this.c=!1,this._length=0,this._maxLength=8,this.v=createSizedArray(this._maxLength),this.o=createSizedArray(this._maxLength),this.i=createSizedArray(this._maxLength)}ShapePath.prototype.setPathData=function(t,e){this.c=t,this.setLength(e);for(var r=0;r=this._maxLength&&this.doubleArrayLength(),r){case"v":a=this.v;break;case"i":a=this.i;break;case"o":a=this.o}(!a[i]||a[i]&&!s)&&(a[i]=point_pool.newElement()),a[i][0]=t,a[i][1]=e},ShapePath.prototype.setTripleAt=function(t,e,r,i,s,a,n,o){this.setXYAt(t,e,"v",n,o),this.setXYAt(r,i,"o",n,o),this.setXYAt(s,a,"i",n,o)},ShapePath.prototype.reverse=function(){var t=new ShapePath;t.setPathData(this.c,this._length);var e=this.v,r=this.o,i=this.i,s=0;this.c&&(t.setTripleAt(e[0][0],e[0][1],i[0][0],i[0][1],r[0][0],r[0][1],0,!1),s=1);var a,n=this._length-1,o=this._length;for(a=s;a=c[c.length-1].t-this.offsetTime)i=c[c.length-1].s?c[c.length-1].s[0]:c[c.length-2].e[0],a=!0;else{for(var d,u,y=f,g=c.length-1,v=!0;v&&(d=c[y],!((u=c[y+1]).t-this.offsetTime>t));)y=u.t-this.offsetTime)p=1;else if(ti&&e>i)||(this._caching.lastIndex=s=1?a.push({s:t-1,e:e-1}):(a.push({s:t,e:1}),a.push({s:0,e:e-1}));var n,o,h=[],l=a.length;for(n=0;ni+r);else p=o.s*s<=i?0:(o.s*s-i)/r,m=o.e*s>=i+r?1:(o.e*s-i)/r,h.push([p,m])}return h.length||h.push([0,0]),h},TrimModifier.prototype.releasePathsData=function(t){var e,r=t.length;for(e=0;e1?1:this.s.v<0?0:this.s.v)+s)>(r=(this.e.v>1?1:this.e.v<0?0:this.e.v)+s)){var a=e;e=r,r=a}e=1e-4*Math.round(1e4*e),r=1e-4*Math.round(1e4*r),this.sValue=e,this.eValue=r}else e=this.sValue,r=this.eValue;var n,o,h,l,p,m,f=this.shapes.length,c=0;if(r===e)for(n=0;n=0;n-=1)if((d=this.shapes[n]).shape._mdf){for((u=d.localShapeCollection).releaseShapes(),2===this.m&&f>1?(g=this.calculateShapeEdges(e,r,d.totalShapeLength,E,c),E+=d.totalShapeLength):g=[[v,b]],h=g.length,o=0;o=1?y.push({s:d.totalShapeLength*(v-1),e:d.totalShapeLength*(b-1)}):(y.push({s:d.totalShapeLength*v,e:d.totalShapeLength}),y.push({s:0,e:d.totalShapeLength*(b-1)}));var x=this.addShapes(d,y[0]);if(y[0].s!==y[0].e){if(y.length>1)if(d.shape.paths.shapes[d.shape.paths._length-1].c){var P=x.pop();this.addPaths(x,u),x=this.addShapes(d,y[1],P)}else this.addPaths(x,u),x=this.addShapes(d,y[1]);this.addPaths(x,u)}}d.shape.paths=u}}},TrimModifier.prototype.addPaths=function(t,e){var r,i=t.length;for(r=0;re.e){r.c=!1;break}e.s<=d&&e.e>=d+n.addedLength?(this.addSegment(f[i].v[s-1],f[i].o[s-1],f[i].i[s],f[i].v[s],r,o,y),y=!1):(l=bez.getNewSegment(f[i].v[s-1],f[i].v[s],f[i].o[s-1],f[i].i[s],(e.s-d)/n.addedLength,(e.e-d)/n.addedLength,h[s-1]),this.addSegmentFromArray(l,r,o,y),y=!1,r.c=!1),d+=n.addedLength,o+=1}if(f[i].c&&h.length){if(n=h[s-1],d<=e.e){var g=h[s-1].addedLength;e.s<=d&&e.e>=d+g?(this.addSegment(f[i].v[s-1],f[i].o[s-1],f[i].i[0],f[i].v[0],r,o,y),y=!1):(l=bez.getNewSegment(f[i].v[s-1],f[i].v[0],f[i].o[s-1],f[i].i[0],(e.s-d)/g,(e.e-d)/g,h[s-1]),this.addSegmentFromArray(l,r,o,y),y=!1,r.c=!1)}else r.c=!1;d+=n.addedLength,o+=1}if(r._length&&(r.setXYAt(r.v[p][0],r.v[p][1],"i",p),r.setXYAt(r.v[r._length-1][0],r.v[r._length-1][1],"o",r._length-1)),d>e.e)break;i0;)r-=1,this._elements.unshift(e[r]),1;this.dynamicProperties.length?this.k=!0:this.getValue(!0)},RepeaterModifier.prototype.resetElements=function(t){var e,r=t.length;for(e=0;e0?Math.floor(l):Math.ceil(l),f=(this.tr.v.props,this.pMatrix.props),c=this.rMatrix.props,d=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var u,y,g=0;if(l>0){for(;gm;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),g-=1;p&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-p,!0),g-=p)}for(i=1===this.data.m?0:this._currentCopies-1,s=1===this.data.m?1:-1,a=this._currentCopies;a;){if(y=(r=(e=this.elemsData[i].it)[e.length-1].transform.mProps.v.props).length,e[e.length-1].transform.mProps._mdf=!0,e[e.length-1].transform.op._mdf=!0,e[e.length-1].transform.op.v=this.so.v+(this.eo.v-this.so.v)*(i/(this._currentCopies-1)),0!==g){for((0!==i&&1===s||i!==this._currentCopies-1&&-1===s)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15]),this.matrix.transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],d[8],d[9],d[10],d[11],d[12],d[13],d[14],d[15]),this.matrix.transform(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9],f[10],f[11],f[12],f[13],f[14],f[15]),u=0;u.01)return!1;r+=1}return!0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!=this.c.length/4)return!1;if(this.data.k.k[0].s)for(var t=0,e=this.data.k.k.length;t=o+ot||!d?(v=(o+ot-l)/h.partialLength,G=c.point[0]+(h.point[0]-c.point[0])*v,z=c.point[1]+(h.point[1]-c.point[1])*v,_.translate(-x[0]*T[s].an/200,-x[1]*V/100),p=!1):d&&(l+=h.partialLength,(m+=1)>=d.length&&(m=0,u[f+=1]?d=u[f].points:E.v.c?(m=0,d=u[f=0].points):(l-=h.partialLength,d=null)),d&&(c=h,y=(h=d[m]).partialLength));L=T[s].an/2-T[s].add,_.translate(-L,0,0)}else L=T[s].an/2-T[s].add,_.translate(-L,0,0),_.translate(-x[0]*T[s].an/200,-x[1]*V/100,0);for(T[s].l/2,w=0;w1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(t){this.effectsSequence.push(t),this.elem.addDynamicProperty(this)},TextProperty.prototype.getValue=function(t){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length||t){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var e=this.currentData,r=this.keysIndex;if(this.lock)this.setCurrentData(this.currentData);else{this.lock=!0,this._mdf=!1;var i,s=this.effectsSequence.length,a=t||this.data.d.k[this.keysIndex].s;for(i=0;ie));)r+=1;return this.keysIndex!==r&&(this.keysIndex=r),this.data.d.k[this.keysIndex].s},TextProperty.prototype.buildFinalText=function(t){for(var e,r=FontManager.getCombinedCharacterCodes(),i=[],s=0,a=t.length;s=55296&&e<=56319&&(e=t.charCodeAt(s+1))>=56320&&e<=57343?(i.push(t.substr(s,2)),++s):i.push(t.charAt(s)),s+=1;return i},TextProperty.prototype.completeTextData=function(t){t.__complete=!0;var e,r,i,s,a,n,o,h=this.elem.globalData.fontManager,l=this.data,p=[],m=0,f=l.m.g,c=0,d=0,u=0,y=[],g=0,v=0,b=h.getFontByName(t.f),E=0,x=b.fStyle?b.fStyle.split(" "):[],P="normal",S="normal";for(r=x.length,e=0;eM&&" "!==T[e]?(-1===w?r+=1:e=w,A+=t.finalLineHeight||1.2*t.finalSize,T.splice(e,w===e?1:0,"\r"),w=-1,g=0):(g+=E,g+=C);A+=b.ascent*t.finalSize/100,this.canResize&&t.finalSize>this.minimumFontSize&&Dv?g:v,g=-2*C,s="",i=!0,u+=1):s=t.finalText[e],h.chars?(o=h.getCharData(F,b.fStyle,h.getFontByName(t.f).fFamily),E=i?0:o.w*t.finalSize/100):E=h.measureText(s,t.f,t.finalSize)," "===F?I+=E+C:(g+=E+C+I,I=0),p.push({l:E,an:E,add:c,n:i,anIndexes:[],val:s,line:u,animatorJustifyOffset:0}),2==f){if(c+=E,""===s||" "===s||e===r-1){for(""!==s&&" "!==s||(c-=E);d<=e;)p[d].an=c,p[d].ind=m,p[d].extra=E,d+=1;m+=1,c=0}}else if(3==f){if(c+=E,""===s||e===r-1){for(""===s&&(c-=E);d<=e;)p[d].an=c,p[d].ind=m,p[d].extra=E,d+=1;c=0,m+=1}}else p[m].ind=m,p[m].extra=0,m+=1;if(t.l=p,v=g>v?g:v,y.push(g),t.sz)t.boxWidth=t.sz[0],t.justifyOffset=0;else switch(t.boxWidth=v,t.j){case 1:t.justifyOffset=-t.boxWidth;break;case 2:t.justifyOffset=-t.boxWidth/2;break;default:t.justifyOffset=0}t.lineWidths=y;var V,R,B=l.a;n=B.length;var L,G,z=[];for(a=0;a0?s=this.ne.v/100:a=-this.ne.v/100,this.xe.v>0?n=1-this.xe.v/100:o=1+this.xe.v/100;var h=BezierFactory.getBezierEasing(s,a,n,o).get,l=0,p=this.finalS,m=this.finalE,f=this.data.sh;if(2===f)l=h(l=m===p?i>=m?1:0:t(0,e(.5/(m-p)+(i-p)/(m-p),1)));else if(3===f)l=h(l=m===p?i>=m?0:1:1-t(0,e(.5/(m-p)+(i-p)/(m-p),1)));else if(4===f)m===p?l=0:(l=t(0,e(.5/(m-p)+(i-p)/(m-p),1)))<.5?l*=2:l=1-2*(l-.5),l=h(l);else if(5===f){if(m===p)l=0;else{var c=m-p,d=-c/2+(i=e(t(0,i+.5-p),m-p)),u=c/2;l=Math.sqrt(1-d*d/(u*u))}l=h(l)}else 6===f?(m===p?l=0:(i=e(t(0,i+.5-p),m-p),l=(1+Math.cos(Math.PI+2*Math.PI*i/(m-p)))/2),l=h(l)):(i>=r(p)&&(l=t(0,e(i-p<0?e(m,1)-(p-i):m-i,1))),l=h(l));return l*this.a.v},getValue:function(t){this.iterateDynamicProperties(),this._mdf=t||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,t&&2===this.data.r&&(this.e.v=this._currentTextLength);var e=2===this.data.r?1:100/this.data.totalChars,r=this.o.v/e,i=this.s.v/e+r,s=this.e.v/e+r;if(i>s){var a=i;i=s,s=a}this.finalS=i,this.finalE=s}},extendPrototype([DynamicPropertyContainer],i),{getTextSelectorProp:function(t,e,r){return new i(t,e,r)}}}(),pool_factory=function(t,e,r,i){var s=0,a=t,n=createSizedArray(a);function o(){return s?n[s-=1]:e()}return{newElement:o,release:function(t){s===a&&(n=pooling.double(n),a*=2),r&&r(t),n[s]=t,s+=1}}},pooling={double:function(t){return t.concat(createSizedArray(t.length))}},point_pool=pool_factory(8,(function(){return createTypedArray("float32",2)})),shape_pool=(factory=pool_factory(4,(function(){return new ShapePath}),(function(t){var e,r=t._length;for(e=0;e0&&(this.maskElement.setAttribute("id",y),this.element.maskedElement.setAttribute(v,"url("+locationHref+"#"+y+")"),s.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this)}function HierarchyElement(){}function FrameElement(){}function TransformElement(){}function RenderableElement(){}function RenderableDOMElement(){}function ProcessedElement(t,e){this.elem=t,this.pos=e}function SVGStyleData(t,e){this.data=t,this.type=t.ty,this.d="",this.lvl=e,this._mdf=!1,this.closed=!0===t.hd,this.pElem=createNS("path"),this.msElem=null}function SVGShapeData(t,e,r){this.caches=[],this.styles=[],this.transformers=t,this.lStr="",this.sh=r,this.lvl=e,this._isAnimated=!!r.k;for(var i=0,s=t.length;i=0;e--)this.elements[e]||(r=this.layers[e]).ip-r.st<=t-this.layers[e].st&&r.op-r.st>t-this.layers[e].st&&this.buildItem(e),this.completeLayers=!!this.elements[e]&&this.completeLayers;this.checkPendingElements()},BaseRenderer.prototype.createItem=function(t){switch(t.ty){case 2:return this.createImage(t);case 0:return this.createComp(t);case 1:return this.createSolid(t);case 3:return this.createNull(t);case 4:return this.createShape(t);case 5:return this.createText(t);case 13:return this.createCamera(t)}return this.createNull(t)},BaseRenderer.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},BaseRenderer.prototype.buildAllItems=function(){var t,e=this.layers.length;for(t=0;t=0;e--)(this.completeLayers||this.elements[e])&&this.elements[e].prepareFrame(t-this.layers[e].st);if(this.globalData._mdf)for(e=0;er&&"meet"===a||ir&&"slice"===a)?(t-this.transformCanvas.w*(e/this.transformCanvas.h))/2*this.renderConfig.dpr:"xMax"===o&&(ir&&"slice"===a)?(t-this.transformCanvas.w*(e/this.transformCanvas.h))*this.renderConfig.dpr:0,this.transformCanvas.ty="YMid"===h&&(i>r&&"meet"===a||ir&&"meet"===a||i=0;t-=1)this.elements[t]&&this.elements[t].destroy();this.elements.length=0,this.globalData.canvasContext=null,this.animationItem.container=null,this.destroyed=!0},CanvasRenderer.prototype.renderFrame=function(t,e){if((this.renderedFrame!==t||!0!==this.renderConfig.clearCanvas||e)&&!this.destroyed&&-1!==t){this.renderedFrame=t,this.globalData.frameNum=t-this.animationItem._isFirstFrame,this.globalData.frameId+=1,this.globalData._mdf=!this.renderConfig.clearCanvas||e,this.globalData.projectInterface.currentFrame=t;var r,i=this.layers.length;for(this.completeLayers||this.checkLayers(t),r=0;r=0;r-=1)(this.completeLayers||this.elements[r])&&this.elements[r].renderFrame();!0!==this.renderConfig.clearCanvas&&this.restore()}}},CanvasRenderer.prototype.buildItem=function(t){var e=this.elements;if(!e[t]&&99!=this.layers[t].ty){var r=this.createItem(this.layers[t],this,this.globalData);e[t]=r,r.initExpressions()}},CanvasRenderer.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){this.pendingElements.pop().checkParenting()}},CanvasRenderer.prototype.hide=function(){this.animationItem.container.style.display="none"},CanvasRenderer.prototype.show=function(){this.animationItem.container.style.display="block"},extendPrototype([BaseRenderer],HybridRenderer),HybridRenderer.prototype.buildItem=SVGRenderer.prototype.buildItem,HybridRenderer.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){this.pendingElements.pop().checkParenting()}},HybridRenderer.prototype.appendElementInPos=function(t,e){var r=t.getBaseElement();if(r){var i=this.layers[e];if(i.ddd&&this.supports3d)this.addTo3dContainer(r,e);else if(this.threeDElements)this.addTo3dContainer(r,e);else{for(var s,a,n=0;n=t)return this.threeDElements[e].perspectiveElem;e+=1}},HybridRenderer.prototype.createThreeDContainer=function(t,e){var r=createTag("div");styleDiv(r);var i=createTag("div");styleDiv(i),"3d"===e&&(r.style.width=this.globalData.compSize.w+"px",r.style.height=this.globalData.compSize.h+"px",r.style.transformOrigin=r.style.mozTransformOrigin=r.style.webkitTransformOrigin="50% 50%",i.style.transform=i.style.webkitTransform="matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)"),r.appendChild(i);var s={container:i,perspectiveElem:r,startPos:t,endPos:t,type:e};return this.threeDElements.push(s),s},HybridRenderer.prototype.build3dContainers=function(){var t,e,r=this.layers.length,i="";for(t=0;t=0;t--)this.resizerElem.appendChild(this.threeDElements[t].perspectiveElem)},HybridRenderer.prototype.addTo3dContainer=function(t,e){for(var r=0,i=this.threeDElements.length;rn?(t=s/this.globalData.compSize.w,e=s/this.globalData.compSize.w,r=0,i=(a-this.globalData.compSize.h*(s/this.globalData.compSize.w))/2):(t=a/this.globalData.compSize.h,e=a/this.globalData.compSize.h,r=(s-this.globalData.compSize.w*(a/this.globalData.compSize.h))/2,i=0),this.resizerElem.style.transform=this.resizerElem.style.webkitTransform="matrix3d("+t+",0,0,0,0,"+e+",0,0,0,0,1,0,"+r+","+i+",0,1)"},HybridRenderer.prototype.renderFrame=SVGRenderer.prototype.renderFrame,HybridRenderer.prototype.hide=function(){this.resizerElem.style.display="none"},HybridRenderer.prototype.show=function(){this.resizerElem.style.display="block"},HybridRenderer.prototype.initItems=function(){if(this.buildAllItems(),this.camera)this.camera.setup();else{var t,e=this.globalData.compSize.w,r=this.globalData.compSize.h,i=this.threeDElements.length;for(t=0;t1&&(a+=" C"+e.o[i-1][0]+","+e.o[i-1][1]+" "+e.i[0][0]+","+e.i[0][1]+" "+e.v[0][0]+","+e.v[0][1]),r.lastPath!==a){var n="";r.elem&&(e.c&&(n=t.inv?this.solidPath+a:a),r.elem.setAttribute("d",n)),r.lastPath=a}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null},HierarchyElement.prototype={initHierarchy:function(){this.hierarchy=[],this._isParent=!1,this.checkParenting()},setHierarchy:function(t){this.hierarchy=t},setAsParent:function(){this._isParent=!0},checkParenting:function(){void 0!==this.data.parent&&this.comp.buildElementParenting(this,this.data.parent,[])}},FrameElement.prototype={initFrame:function(){this._isFirstFrame=!1,this.dynamicProperties=[],this._mdf=!1},prepareProperties:function(t,e){var r,i=this.dynamicProperties.length;for(r=0;rt?!0!==this.isInRange&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):!1!==this.isInRange&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide())},renderRenderable:function(){var t,e=this.renderableComponents.length;for(t=0;t0;)h=i.transformers[u].mProps._mdf||h,d--,u--;if(h)for(d=g-i.styles[p].lvl,u=i.transformers.length-1;d>0;)c=i.transformers[u].mProps.v.props,f.transform(c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15]),d--,u--}else f=t;if(n=(m=i.sh.paths)._length,h){for(o="",a=0;a=1?.99:e.h.v<=-1?-.99:e.h.v),b=Math.cos(g+e.a.v)*v+p[0],E=Math.sin(g+e.a.v)*v+p[1];h.setAttribute("fx",b),h.setAttribute("fy",E),l&&!e.g._collapsable&&(e.of.setAttribute("fx",b),e.of.setAttribute("fy",E))}}function o(t,e,r){var i=e.style,s=e.d;s&&(s._mdf||r)&&s.dashStr&&(i.pElem.setAttribute("stroke-dasharray",s.dashStr),i.pElem.setAttribute("stroke-dashoffset",s.dashoffset[0])),e.c&&(e.c._mdf||r)&&i.pElem.setAttribute("stroke","rgb("+bm_floor(e.c.v[0])+","+bm_floor(e.c.v[1])+","+bm_floor(e.c.v[2])+")"),(e.o._mdf||r)&&i.pElem.setAttribute("stroke-opacity",e.o.v),(e.w._mdf||r)&&(i.pElem.setAttribute("stroke-width",e.w.v),i.msElem&&i.msElem.setAttribute("stroke-width",e.w.v))}return{createRenderFunction:function(t){t.ty;switch(t.ty){case"fl":return s;case"gf":return n;case"gs":return a;case"st":return o;case"sh":case"el":case"rc":case"sr":return i;case"tr":return r}}}}();function ShapeTransformManager(){this.sequences={},this.sequenceList=[],this.transform_key_count=0}function CVShapeData(t,e,r,i){this.styledShapes=[],this.tr=[0,0,0,0,0,0];var s=4;"rc"==e.ty?s=5:"el"==e.ty?s=6:"sr"==e.ty&&(s=7),this.sh=ShapePropertyFactory.getShapeProp(t,e,s,t);var a,n,o=r.length;for(a=0;a=0;i-=1)r=t.transforms[i].transform.mProps.v.props,t.finalTransform.transform(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15]);t._mdf=a},processSequences:function(t){var e,r=this.sequenceList.length;for(e=0;e=0;t-=1)this.shapeModifiers[t].processShapes(this._isFirstFrame)}},lcEnum:{1:"butt",2:"round",3:"square"},ljEnum:{1:"miter",2:"round",3:"bevel"},searchProcessedElement:function(t){for(var e=this.processedElements,r=0,i=e.length;r=0;r-=1)(this.completeLayers||this.elements[r])&&(this.elements[r].prepareFrame(this.renderedFrame-this.layers[r].st),this.elements[r]._mdf&&(this._mdf=!0))}},ICompElement.prototype.renderInnerContent=function(){var t,e=this.layers.length;for(t=0;tt?this.textSpans[t]:createNS(h?"path":"text"),b<=t&&(n.setAttribute("stroke-linecap","butt"),n.setAttribute("stroke-linejoin","round"),n.setAttribute("stroke-miterlimit","4"),this.textSpans[t]=n,this.layerElement.appendChild(n)),n.style.display="inherit"),p.reset(),p.scale(r.finalSize/100,r.finalSize/100),f&&(o[t].n&&(c=-y,d+=r.yOffset,d+=u?1:0,u=!1),this.applyTextPropertiesToMatrix(r,p,o[t].line,c,d),c+=o[t].l||0,c+=y),h?(l=(g=(v=this.globalData.fontManager.getCharData(r.finalText[t],i.fStyle,this.globalData.fontManager.getFontByName(r.f).fFamily))&&v.data||{}).shapes?g.shapes[0].it:[],f?m+=this.createPathShape(p,l):n.setAttribute("d",this.createPathShape(p,l))):(f&&n.setAttribute("transform","translate("+p.props[12]+","+p.props[13]+")"),n.textContent=o[t].val,n.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"));f&&n&&n.setAttribute("d",m)}else{var E=this.textContainer,x="start";switch(r.j){case 1:x="end";break;case 2:x="middle"}E.setAttribute("text-anchor",x),E.setAttribute("letter-spacing",y);var P=this.buildTextContents(r.finalText);for(e=P.length,d=r.ps?r.ps[1]+r.ascent:0,t=0;t1&&o&&this.setShapesAsAnimated(n)}},SVGShapeElement.prototype.setShapesAsAnimated=function(t){var e,r=t.length;for(e=0;e=0;o-=1){if((f=this.searchProcessedElement(t[o]))?e[o]=r[f-1]:t[o]._render=n,"fl"==t[o].ty||"st"==t[o].ty||"gf"==t[o].ty||"gs"==t[o].ty)f?e[o].style.closed=!1:e[o]=this.createStyleElement(t[o],s),t[o]._render&&i.appendChild(e[o].style.pElem),u.push(e[o].style);else if("gr"==t[o].ty){if(f)for(l=e[o].it.length,h=0;h=l?c<0?i:s:i+f*Math.pow((a-t)/c,1/r),p[m++]=n,o+=256/255;return p.join(" ")},SVGProLevelsFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e,r=this.filterManager.effectElements;this.feFuncRComposed&&(t||r[3].p._mdf||r[4].p._mdf||r[5].p._mdf||r[6].p._mdf||r[7].p._mdf)&&(e=this.getTableValue(r[3].p.v,r[4].p.v,r[5].p.v,r[6].p.v,r[7].p.v),this.feFuncRComposed.setAttribute("tableValues",e),this.feFuncGComposed.setAttribute("tableValues",e),this.feFuncBComposed.setAttribute("tableValues",e)),this.feFuncR&&(t||r[10].p._mdf||r[11].p._mdf||r[12].p._mdf||r[13].p._mdf||r[14].p._mdf)&&(e=this.getTableValue(r[10].p.v,r[11].p.v,r[12].p.v,r[13].p.v,r[14].p.v),this.feFuncR.setAttribute("tableValues",e)),this.feFuncG&&(t||r[17].p._mdf||r[18].p._mdf||r[19].p._mdf||r[20].p._mdf||r[21].p._mdf)&&(e=this.getTableValue(r[17].p.v,r[18].p.v,r[19].p.v,r[20].p.v,r[21].p.v),this.feFuncG.setAttribute("tableValues",e)),this.feFuncB&&(t||r[24].p._mdf||r[25].p._mdf||r[26].p._mdf||r[27].p._mdf||r[28].p._mdf)&&(e=this.getTableValue(r[24].p.v,r[25].p.v,r[26].p.v,r[27].p.v,r[28].p.v),this.feFuncB.setAttribute("tableValues",e)),this.feFuncA&&(t||r[31].p._mdf||r[32].p._mdf||r[33].p._mdf||r[34].p._mdf||r[35].p._mdf)&&(e=this.getTableValue(r[31].p.v,r[32].p.v,r[33].p.v,r[34].p.v,r[35].p.v),this.feFuncA.setAttribute("tableValues",e))}},SVGDropShadowEffect.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){if((t||this.filterManager.effectElements[4].p._mdf)&&this.feGaussianBlur.setAttribute("stdDeviation",this.filterManager.effectElements[4].p.v/4),t||this.filterManager.effectElements[0].p._mdf){var e=this.filterManager.effectElements[0].p.v;this.feFlood.setAttribute("flood-color",rgbToHex(Math.round(255*e[0]),Math.round(255*e[1]),Math.round(255*e[2])))}if((t||this.filterManager.effectElements[1].p._mdf)&&this.feFlood.setAttribute("flood-opacity",this.filterManager.effectElements[1].p.v/255),t||this.filterManager.effectElements[2].p._mdf||this.filterManager.effectElements[3].p._mdf){var r=this.filterManager.effectElements[3].p.v,i=(this.filterManager.effectElements[2].p.v-90)*degToRads,s=r*Math.cos(i),a=r*Math.sin(i);this.feOffset.setAttribute("dx",s),this.feOffset.setAttribute("dy",a)}}};var _svgMatteSymbols=[];function SVGMatte3Effect(t,e,r){this.initialized=!1,this.filterManager=e,this.filterElem=t,this.elem=r,r.matteElement=createNS("g"),r.matteElement.appendChild(r.layerElement),r.matteElement.appendChild(r.transformedElement),r.baseElement=r.matteElement}function SVGEffects(t){var e,r,i=t.data.ef?t.data.ef.length:0,s=createElementID(),a=filtersFactory.createFilter(s),n=0;for(this.filters=[],e=0;eo&&"xMidYMid slice"===h||n=0;t-=1)(this.completeLayers||this.elements[t])&&this.elements[t].renderFrame()},CVCompElement.prototype.destroy=function(){var t;for(t=this.layers.length-1;t>=0;t-=1)this.elements[t]&&this.elements[t].destroy();this.layers=null,this.elements=null},CVMaskElement.prototype.renderFrame=function(){if(this.hasMasks){var t,e,r,i,s=this.element.finalTransform.mat,a=this.element.canvasContext,n=this.masksProperties.length;for(a.beginPath(),t=0;t=0;a-=1){if((h=this.searchProcessedElement(t[a]))?e[a]=r[h-1]:t[a]._shouldRender=i,"fl"==t[a].ty||"st"==t[a].ty||"gf"==t[a].ty||"gs"==t[a].ty)h?e[a].style.closed=!1:e[a]=this.createStyleElement(t[a],d),f.push(e[a].style);else if("gr"==t[a].ty){if(h)for(o=e[a].it.length,n=0;n=0;s-=1)"tr"==e[s].ty?(a=r[s].transform,this.renderShapeTransform(t,a)):"sh"==e[s].ty||"el"==e[s].ty||"rc"==e[s].ty||"sr"==e[s].ty?this.renderPath(e[s],r[s]):"fl"==e[s].ty?this.renderFill(e[s],r[s],a):"st"==e[s].ty?this.renderStroke(e[s],r[s],a):"gf"==e[s].ty||"gs"==e[s].ty?this.renderGradientFill(e[s],r[s],a):"gr"==e[s].ty?this.renderShape(a,e[s].it,r[s].it):e[s].ty;i&&this.drawLayer()},CVShapeElement.prototype.renderStyledShape=function(t,e){if(this._isFirstFrame||e._mdf||t.transforms._mdf){var r,i,s,a=t.trNodes,n=e.paths,o=n._length;a.length=0;var h=t.transforms.finalTransform;for(s=0;s=1?.99:e.h.v<=-1?-.99:e.h.v),p=Math.cos(h+e.a.v)*l+a[0],m=Math.sin(h+e.a.v)*l+a[1],f=s.createRadialGradient(p,m,0,a[0],a[1],o);var c,d=t.g.p,u=e.g.c,y=1;for(c=0;c=t.x+t.width&&this.currentBBox.height+this.currentBBox.y>=t.y+t.height},HShapeElement.prototype.renderInnerContent=function(){if(this._renderShapeFrame(),!this.hidden&&(this._isFirstFrame||this._mdf)){var t=this.tempBoundingBox,e=999999;if(t.x=e,t.xMax=-e,t.y=e,t.yMax=-e,this.calculateBoundingBox(this.itemsData,t),t.width=t.xMax=0;t-=1){var i=this.hierarchy[t].finalTransform.mProp;this.mat.translate(-i.p.v[0],-i.p.v[1],i.p.v[2]),this.mat.rotateX(-i.or.v[0]).rotateY(-i.or.v[1]).rotateZ(i.or.v[2]),this.mat.rotateX(-i.rx.v).rotateY(-i.ry.v).rotateZ(i.rz.v),this.mat.scale(1/i.s.v[0],1/i.s.v[1],1/i.s.v[2]),this.mat.translate(i.a.v[0],i.a.v[1],i.a.v[2])}if(this.p?this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]):this.mat.translate(-this.px.v,-this.py.v,this.pz.v),this.a){var s;s=this.p?[this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]]:[this.px.v-this.a.v[0],this.py.v-this.a.v[1],this.pz.v-this.a.v[2]];var a=Math.sqrt(Math.pow(s[0],2)+Math.pow(s[1],2)+Math.pow(s[2],2)),n=[s[0]/a,s[1]/a,s[2]/a],o=Math.sqrt(n[2]*n[2]+n[0]*n[0]),h=Math.atan2(n[1],o),l=Math.atan2(n[0],-n[2]);this.mat.rotateY(l).rotateX(-h)}this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]),this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0),this.mat.translate(0,0,this.pe.v);var p=!this._prevMat.equals(this.mat);if((p||this.pe._mdf)&&this.comp.threeDElements){var m;for(e=this.comp.threeDElements.length,t=0;t=0;r-=1)e[r].animation.destroy(t)},t.freeze=function(){n=!0},t.unfreeze=function(){n=!1,d()},t.getRegisteredAnimations=function(){var t,r=e.length,i=[];for(t=0;tthis.animationData.op&&(this.animationData.op=t.op,this.totalFrames=Math.floor(t.op-this.animationData.ip));var e,r,i=this.animationData.layers,s=i.length,a=t.layers,n=a.length;for(r=0;rthis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame()},AnimationItem.prototype.renderFrame=function(){if(!1!==this.isLoaded)try{this.renderer.renderFrame(this.currentFrame+this.firstFrame)}catch(t){this.triggerRenderFrameError(t)}},AnimationItem.prototype.play=function(t){t&&this.name!=t||!0===this.isPaused&&(this.isPaused=!1,this._idle&&(this._idle=!1,this.trigger("_active")))},AnimationItem.prototype.pause=function(t){t&&this.name!=t||!1===this.isPaused&&(this.isPaused=!0,this._idle=!0,this.trigger("_idle"))},AnimationItem.prototype.togglePause=function(t){t&&this.name!=t||(!0===this.isPaused?this.play():this.pause())},AnimationItem.prototype.stop=function(t){t&&this.name!=t||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0))},AnimationItem.prototype.goToAndStop=function(t,e,r){r&&this.name!=r||(e?this.setCurrentRawFrameValue(t):this.setCurrentRawFrameValue(t*this.frameModifier),this.pause())},AnimationItem.prototype.goToAndPlay=function(t,e,r){this.goToAndStop(t,e,r),this.play()},AnimationItem.prototype.advanceTime=function(t){if(!0!==this.isPaused&&!1!==this.isLoaded){var e=this.currentRawFrame+t*this.frameModifier,r=!1;e>=this.totalFrames-1&&this.frameModifier>0?this.loop&&this.playCount!==this.loop?e>=this.totalFrames?(this.playCount+=1,this.checkSegments(e%this.totalFrames)||(this.setCurrentRawFrameValue(e%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(e):this.checkSegments(e>this.totalFrames?e%this.totalFrames:0)||(r=!0,e=this.totalFrames-1):e<0?this.checkSegments(e%this.totalFrames)||(!this.loop||this.playCount--<=0&&!0!==this.loop?(r=!0,e=0):(this.setCurrentRawFrameValue(this.totalFrames+e%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0)):this.setCurrentRawFrameValue(e),r&&(this.setCurrentRawFrameValue(e),this.pause(),this.trigger("complete"))}},AnimationItem.prototype.adjustSegment=function(t,e){this.playCount=0,t[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.timeCompleted=this.totalFrames=t[0]-t[1],this.firstFrame=t[1],this.setCurrentRawFrameValue(this.totalFrames-.001-e)):t[1]>t[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.timeCompleted=this.totalFrames=t[1]-t[0],this.firstFrame=t[0],this.setCurrentRawFrameValue(.001+e)),this.trigger("segmentStart")},AnimationItem.prototype.setSegment=function(t,e){var r=-1;this.isPaused&&(this.currentRawFrame+this.firstFramee&&(r=e-t)),this.firstFrame=t,this.timeCompleted=this.totalFrames=e-t,-1!==r&&this.goToAndStop(r,!0)},AnimationItem.prototype.playSegments=function(t,e){if(e&&(this.segments.length=0),"object"==typeof t[0]){var r,i=t.length;for(r=0;rr){var i=r;r=e,e=i}return Math.min(Math.max(t,e),r)}function radiansToDegrees(t){return t/degToRads}var radians_to_degrees=radiansToDegrees;function degreesToRadians(t){return t*degToRads}var degrees_to_radians=radiansToDegrees,helperLengthArray=[0,0,0,0,0,0];function length(t,e){if("number"==typeof t||t instanceof Number)return e=e||0,Math.abs(t-e);e||(e=helperLengthArray);var r,i=Math.min(t.length,e.length),s=0;for(r=0;r.5?l/(2-n-o):l/(n+o),n){case i:e=(s-a)/l+(s1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}function hslToRgb(t){var e,r,i,s=t[0],a=t[1],n=t[2];if(0===a)e=r=i=n;else{var o=n<.5?n*(1+a):n+a-n*a,h=2*n-o;e=hue2rgb(h,o,s+1/3),r=hue2rgb(h,o,s),i=hue2rgb(h,o,s-1/3)}return[e,r,i,t[3]]}function linear(t,e,r,i,s){if(void 0!==i&&void 0!==s||(i=e,s=r,e=0,r=1),r=r)return s;var n=r===e?0:(t-e)/(r-e);if(!i.length)return i+(s-i)*n;var o,h=i.length,l=createTypedArray("float32",h);for(o=0;o1){for(i=0;i1?1:e<0?0:e);if($bm_isInstanceOfArray(s)){var o,h=s.length,l=createTypedArray("float32",h);for(o=0;odata.k[e].t&&tdata.k[e+1].t-t?(r=e+2,i=data.k[e+1].t):(r=e+1,i=data.k[e].t);break}}-1===r&&(r=e+1,i=data.k[e].t)}else r=0,i=0;var a={};return a.index=r,a.time=i/elem.comp.globalData.frameRate,a}function key(t){var e,r,i;if(!data.k.length||"number"==typeof data.k[0])throw new Error("The property has no keyframe at index "+t);t-=1,e={time:data.k[t].t/elem.comp.globalData.frameRate,value:[]};var s=data.k[t].hasOwnProperty("s")?data.k[t].s:data.k[t-1].e;for(i=s.length,r=0;rl.length-1)&&(e=l.length-1),i=p-(s=l[l.length-1-e].t)),"pingpong"===t){if(Math.floor((h-s)/i)%2!=0)return this.getValueAtTime((i-(h-s)%i+s)/this.comp.globalData.frameRate,0)}else{if("offset"===t){var m=this.getValueAtTime(s/this.comp.globalData.frameRate,0),f=this.getValueAtTime(p/this.comp.globalData.frameRate,0),c=this.getValueAtTime(((h-s)%i+s)/this.comp.globalData.frameRate,0),d=Math.floor((h-s)/i);if(this.pv.length){for(n=(o=new Array(m.length)).length,a=0;a=p)return this.pv;if(r?s=p+(i=e?Math.abs(elem.comp.globalData.frameRate*e):Math.max(0,this.elem.data.op-p)):((!e||e>l.length-1)&&(e=l.length-1),i=(s=l[e].t)-p),"pingpong"===t){if(Math.floor((p-h)/i)%2==0)return this.getValueAtTime(((p-h)%i+p)/this.comp.globalData.frameRate,0)}else{if("offset"===t){var m=this.getValueAtTime(p/this.comp.globalData.frameRate,0),f=this.getValueAtTime(s/this.comp.globalData.frameRate,0),c=this.getValueAtTime((i-(p-h)%i+p)/this.comp.globalData.frameRate,0),d=Math.floor((p-h)/i)+1;if(this.pv.length){for(n=(o=new Array(m.length)).length,a=0;a1?(s+t-a)/(e-1):1,o=0,h=0;for(r=this.pv.length?createTypedArray("float32",this.pv.length):0;on){var p=o,m=r.c&&o===h-1?0:o+1,f=(n-l)/a[o].addedLength;i=bez.getPointInSegment(r.v[p],r.v[m],r.o[p],r.i[m],f,a[o]);break}l+=a[o].addedLength,o+=1}return i||(i=r.c?[r.v[0][0],r.v[0][1]]:[r.v[r._length-1][0],r.v[r._length-1][1]]),i},vectorOnPath:function(t,e,r){t=1==t?this.v.c?0:.999:t;var i=this.pointOnPath(t,e),s=this.pointOnPath(t+.001,e),a=s[0]-i[0],n=s[1]-i[1],o=Math.sqrt(Math.pow(a,2)+Math.pow(n,2));return 0===o?[0,0]:"tangent"===r?[a/o,n/o]:[-n/o,a/o]},tangentOnPath:function(t,e){return this.vectorOnPath(t,e,"tangent")},normalOnPath:function(t,e){return this.vectorOnPath(t,e,"normal")},setGroupProperty:expressionHelpers.setGroupProperty,getValueAtTime:expressionHelpers.getStaticValueAtTime},extendPrototype([l],o),extendPrototype([l],h),h.prototype.getValueAtTime=function(t){return this._cachingAtTime||(this._cachingAtTime={shapeValue:shape_pool.clone(this.pv),lastIndex:0,lastTime:initialDefaultFrame}),t*=this.elem.globalData.frameRate,(t-=this.offsetTime)!==this._cachingAtTime.lastTime&&(this._cachingAtTime.lastIndex=this._cachingAtTime.lastTime1&&(defaultCurveSegments=t);roundValues(!(defaultCurveSegments>=50))}function inBrowser(){return"undefined"!=typeof navigator}function installPlugin(t,e){"expressions"===t&&(expressionsPlugin=e)}function getFactory(t){switch(t){case"propertyFactory":return PropertyFactory;case"shapePropertyFactory":return ShapePropertyFactory;case"matrix":return Matrix}}function checkReady(){"complete"===document.readyState&&(clearInterval(readyStateCheckInterval),searchAnimations())}function getQueryVariable(t){for(var e=queryString.split("&"),r=0;r>>6:(n<65536?t[o++]=224|n>>>12:(t[o++]=240|n>>>18,t[o++]=128|n>>>12&63),t[o++]=128|n>>>6&63),t[o++]=128|63&n);return t},n.buf2binstring=function(e){return f(e,e.length)},n.binstring2buf=function(e){for(var t=new i.Buf8(e.length),n=0,r=t.length;n>10&1023,l[i++]=56320|1023&r)}return f(l,i)},n.utf8border=function(e,t){var n;for((t=t||e.length)>e.length&&(t=e.length),n=t-1;0<=n&&128==(192&e[n]);)n--;return n<0?t:0===n?t:n+o[e[n]]>t?n:t}},{"./common":1}],3:[function(e,t,n){"use strict";t.exports=function(e,t,n,i){for(var r=65535&e|0,a=e>>>16&65535|0,o=0;0!==n;){for(n-=o=2e3>>1:e>>>1;t[n]=e}return t}();t.exports=function(e,t,n,r){var a=i,o=r+n;e^=-1;for(var s=r;s>>8^a[255&(e^t[s])];return-1^e}},{}],6:[function(e,t,n){"use strict";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],7:[function(e,t,n){"use strict";t.exports=function(e,t){var n,i,r,a,o,s,f,l,c,u,d,h,b,m,w,v,p,g,k,_,y,x,S,E,B;n=e.state,i=e.next_in,E=e.input,r=i+(e.avail_in-5),a=e.next_out,B=e.output,o=a-(t-e.avail_out),s=a+(e.avail_out-257),f=n.dmax,l=n.wsize,c=n.whave,u=n.wnext,d=n.window,h=n.hold,b=n.bits,m=n.lencode,w=n.distcode,v=(1<>>=k=g>>>24,b-=k,0==(k=g>>>16&255))B[a++]=65535&g;else{if(!(16&k)){if(0==(64&k)){g=m[(65535&g)+(h&(1<>>=k,b-=k),b<15&&(h+=E[i++]<>>=k=g>>>24,b-=k,!(16&(k=g>>>16&255))){if(0==(64&k)){g=w[(65535&g)+(h&(1<>>=k,b-=k,(k=a-o)>3,h&=(1<<(b-=_<<3))-1,e.next_in=i,e.next_out=a,e.avail_in=i>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function w(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function v(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=d,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(h),t.distcode=t.distdyn=new i.Buf32(b),t.sane=1,t.back=-1,c):u}function p(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,v(e)):u}function g(e,t){var n,i;return e&&e.state?(i=e.state,t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=o.wsize?(i.arraySet(o.window,t,n-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(r<(a=o.wsize-o.wnext)&&(a=r),i.arraySet(o.window,t,n-r,a,o.wnext),(r-=a)?(i.arraySet(o.window,t,n-r,r,0),o.wnext=r,o.whave=o.wsize):(o.wnext+=a,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,n.check=a(n.check,M,2,0),_=k=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&k)<<8)+(k>>8))%31){e.msg="incorrect header check",n.mode=30;break}if(8!=(15&k)){e.msg="unknown compression method",n.mode=30;break}if(_-=4,I=8+(15&(k>>>=4)),0===n.wbits)n.wbits=I;else if(I>n.wbits){e.msg="invalid window size",n.mode=30;break}n.dmax=1<>8&1),512&n.flags&&(M[0]=255&k,M[1]=k>>>8&255,n.check=a(n.check,M,2,0)),_=k=0,n.mode=3;case 3:for(;_<32;){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}n.head&&(n.head.time=k),512&n.flags&&(M[0]=255&k,M[1]=k>>>8&255,M[2]=k>>>16&255,M[3]=k>>>24&255,n.check=a(n.check,M,4,0)),_=k=0,n.mode=4;case 4:for(;_<16;){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}n.head&&(n.head.xflags=255&k,n.head.os=k>>8),512&n.flags&&(M[0]=255&k,M[1]=k>>>8&255,n.check=a(n.check,M,2,0)),_=k=0,n.mode=5;case 5:if(1024&n.flags){for(;_<16;){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}n.length=k,n.head&&(n.head.extra_len=k),512&n.flags&&(M[0]=255&k,M[1]=k>>>8&255,n.check=a(n.check,M,2,0)),_=k=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(p<(B=n.length)&&(B=p),B&&(n.head&&(I=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),i.arraySet(n.head.extra,h,w,B,I)),512&n.flags&&(n.check=a(n.check,h,B,w)),p-=B,w+=B,n.length-=B),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===p)break e;for(B=0;I=h[w+B++],n.head&&I&&n.length<65536&&(n.head.name+=String.fromCharCode(I)),I&&B>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=12;break;case 10:for(;_<32;){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}e.adler=n.check=m(k),_=k=0,n.mode=11;case 11:if(0===n.havedict)return e.next_out=v,e.avail_out=g,e.next_in=w,e.avail_in=p,n.hold=k,n.bits=_,2;e.adler=n.check=1,n.mode=12;case 12:if(5===t||6===t)break e;case 13:if(n.last){k>>>=7&_,_-=7&_,n.mode=27;break}for(;_<3;){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}switch(n.last=1&k,_-=1,3&(k>>>=1)){case 0:n.mode=14;break;case 1:if(S(n),n.mode=20,6!==t)break;k>>>=2,_-=2;break e;case 2:n.mode=17;break;case 3:e.msg="invalid block type",n.mode=30}k>>>=2,_-=2;break;case 14:for(k>>>=7&_,_-=7&_;_<32;){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}if((65535&k)!=(k>>>16^65535)){e.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&k,_=k=0,n.mode=15,6===t)break e;case 15:n.mode=16;case 16:if(B=n.length){if(p>>=5,_-=5,n.ndist=1+(31&k),k>>>=5,_-=5,n.ncode=4+(15&k),k>>>=4,_-=4,286>>=3,_-=3}for(;n.have<19;)n.lens[j[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,D={bits:n.lenbits},U=s(0,n.lens,0,19,n.lencode,0,n.work,D),n.lenbits=D.bits,U){e.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have>>16&255,R=65535&L,!((C=L>>>24)<=_);){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}if(R<16)k>>>=C,_-=C,n.lens[n.have++]=R;else{if(16===R){for(F=C+2;_>>=C,_-=C,0===n.have){e.msg="invalid bit length repeat",n.mode=30;break}I=n.lens[n.have-1],B=3+(3&k),k>>>=2,_-=2}else if(17===R){for(F=C+3;_>>=C)),k>>>=3,_-=3}else{for(F=C+7;_>>=C)),k>>>=7,_-=7}if(n.have+B>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=30;break}for(;B--;)n.lens[n.have++]=I}}if(30===n.mode)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,D={bits:n.lenbits},U=s(f,n.lens,0,n.nlen,n.lencode,0,n.work,D),n.lenbits=D.bits,U){e.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,D={bits:n.distbits},U=s(l,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,D),n.distbits=D.bits,U){e.msg="invalid distances set",n.mode=30;break}if(n.mode=20,6===t)break e;case 20:n.mode=21;case 21:if(6<=p&&258<=g){e.next_out=v,e.avail_out=g,e.next_in=w,e.avail_in=p,n.hold=k,n.bits=_,o(e,x),v=e.next_out,b=e.output,g=e.avail_out,w=e.next_in,h=e.input,p=e.avail_in,k=n.hold,_=n.bits,12===n.mode&&(n.back=-1);break}for(n.back=0;N=(L=n.lencode[k&(1<>>16&255,R=65535&L,!((C=L>>>24)<=_);){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}if(N&&0==(240&N)){for(O=C,z=N,T=R;N=(L=n.lencode[T+((k&(1<>O)])>>>16&255,R=65535&L,!(O+(C=L>>>24)<=_);){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}k>>>=O,_-=O,n.back+=O}if(k>>>=C,_-=C,n.back+=C,n.length=R,0===N){n.mode=26;break}if(32&N){n.back=-1,n.mode=12;break}if(64&N){e.msg="invalid literal/length code",n.mode=30;break}n.extra=15&N,n.mode=22;case 22:if(n.extra){for(F=n.extra;_>>=n.extra,_-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;N=(L=n.distcode[k&(1<>>16&255,R=65535&L,!((C=L>>>24)<=_);){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}if(0==(240&N)){for(O=C,z=N,T=R;N=(L=n.distcode[T+((k&(1<>O)])>>>16&255,R=65535&L,!(O+(C=L>>>24)<=_);){if(0===p)break e;p--,k+=h[w++]<<_,_+=8}k>>>=O,_-=O,n.back+=O}if(k>>>=C,_-=C,n.back+=C,64&N){e.msg="invalid distance code",n.mode=30;break}n.offset=R,n.extra=15&N,n.mode=24;case 24:if(n.extra){for(F=n.extra;_>>=n.extra,_-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(0===g)break e;if(B=x-g,n.offset>B){if((B=n.offset-B)>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=30;break}B>n.wnext?(B-=n.wnext,Z=n.wsize-B):Z=n.wnext-B,B>n.length&&(B=n.length),A=n.window}else A=b,Z=v-n.offset,B=n.length;for(gp?(k=D[F+u[S]],_=z[T+u[S]]):(k=96,_=0),h=1<>C)+(b-=h)]=g<<24|k<<16|_|0,0!==b;);for(h=1<>=1;if(0!==h?(O&=h-1,O+=h):O=0,S++,0==--I[x]){if(x===B)break;x=t[n+u[S]]}if(Z + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/fonts/tgico.ttf b/src/assets/fonts/tgico.ttf new file mode 100644 index 00000000..9bdcff3a Binary files /dev/null and b/src/assets/fonts/tgico.ttf differ diff --git a/src/assets/fonts/tgico.woff b/src/assets/fonts/tgico.woff new file mode 100644 index 00000000..ee8dd3ce Binary files /dev/null and b/src/assets/fonts/tgico.woff differ diff --git a/src/assets/img/doc-in.svg b/src/assets/img/doc-in.svg new file mode 100644 index 00000000..695a5996 --- /dev/null +++ b/src/assets/img/doc-in.svg @@ -0,0 +1,10 @@ + + + + doc-in + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/assets/img/msg-tail-left.svg b/src/assets/img/msg-tail-left.svg new file mode 100644 index 00000000..e3a9d82e --- /dev/null +++ b/src/assets/img/msg-tail-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/msg-tail-right.svg b/src/assets/img/msg-tail-right.svg new file mode 100644 index 00000000..b20de5f6 --- /dev/null +++ b/src/assets/img/msg-tail-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/photo.jpg b/src/assets/img/photo.jpg new file mode 100644 index 00000000..f0129411 Binary files /dev/null and b/src/assets/img/photo.jpg differ diff --git a/src/components/misc.ts b/src/components/misc.ts new file mode 100644 index 00000000..d48933a4 --- /dev/null +++ b/src/components/misc.ts @@ -0,0 +1,538 @@ +import { MTProto } from "../lib/mtproto/mtproto"; +import { formatBytes, whichChild, isElementInViewport, isInDOM, findUpTag } from "../lib/utils"; +import appPhotosManager from '../lib/appManagers/appPhotosManager'; +import CryptoWorker from '../lib/crypto/cryptoworker'; +import LottieLoader from '../lib/lottieLoader'; +import appStickersManager from "../lib/appManagers/appStickersManager"; +import appDocsManager from "../lib/appManagers/appDocsManager"; + +export type MTDocument = { + _: 'document', + pFlags: any, + flags: number, + id: string, + access_hash: string, + file_reference: Uint8Array | number[], + date: number, + mime_type: string, + size: number, + thumbs: MTPhotoSize[], + dc_id: number, + attributes: any[], + + type?: string, + h?: number, + w?: number +}; + +export type MTPhotoSize = { + _: string, + w?: number, + h?: number, + size?: number, + type?: string, // i, m, x, y, w by asc + location?: any, + bytes?: Uint8Array, // if type == 'i' + + preloaded?: boolean // custom added +}; + +let onRippleClick = function(this: HTMLElement, e: MouseEvent) { + var $circle = this.firstElementChild as HTMLSpanElement;//this.querySelector('.c-ripple__circle') as HTMLSpanElement; + + var rect = this.parentElement.getBoundingClientRect(); + var x = e.clientX - rect.left; //x position within the element. + var y = e.clientY - rect.top; + + /* var x = e.pageX - this.parentElement.offsetLeft; + var y = e.pageY - this.parentElement.offsetTop - this.parentElement.scrollHeight; */ + + $circle.style.top = y + 'px'; + $circle.style.left = x + 'px'; + + this.classList.add('active'); + + //console.log('onrippleclick', e/* e.pageY, this.parentElement.offsetTop */); +}; + +export function ripple(elem: Element) { + /* elem.addEventListener('click', function(e) { + var $circle = elem.querySelector('.c-ripple__circle') as HTMLSpanElement; + + var x = e.pageX - elem.offsetLeft; + var y = e.pageY - elem.offsetTop; + + $circle.style.top = y + 'px'; + $circle.style.left = x + 'px'; + + elem.classList.add('active'); + }); */ + + let r = document.createElement('div'); + r.classList.add('c-ripple'); + + let span = document.createElement('span'); + span.classList.add('c-ripple__circle'); + + r.append(span); + elem.append(r); + + r.addEventListener('click', onRippleClick); + + let onEnd = () => { + r.classList.remove('active'); + }; + + for(let type of ['animationend', 'webkitAnimationEnd', 'oanimationend', 'MSAnimationEnd']) { + r.addEventListener(type, onEnd); + } +} + +export function putPreloader(elem: Element) { + const html = ` + + + `; + + elem.innerHTML += html; +} + +export class ProgressivePreloader { + private preloader: HTMLDivElement = null; + private circle: SVGCircleElement = null; + private progress = 0; + constructor(elem?: Element, private cancelable = true) { + this.preloader = document.createElement('div'); + this.preloader.classList.add('preloader-container'); + + this.preloader.innerHTML = ` + + + `; + + if(cancelable) { + this.preloader.innerHTML += ` + + + + `; + } else { + this.preloader.classList.add('preloader-swing'); + } + + this.circle = this.preloader.firstElementChild.firstElementChild as SVGCircleElement; + + if(elem) { + this.attach(elem); + } + } + + public attach(elem: Element) { + if(this.cancelable) { + this.setProgress(0); + } + + elem.append(this.preloader); + /* let isIn = isInDOM(this.preloader); + + if(isIn && this.progress != this.defaultProgress) { + this.setProgress(this.defaultProgress); + } + + elem.append(this.preloader); + + if(!isIn && this.progress != this.defaultProgress) { + this.setProgress(this.defaultProgress); + } */ + } + + public detach() { + if(this.preloader.parentElement) { + this.preloader.parentElement.removeChild(this.preloader); + } + } + + public setProgress(percents: number) { + this.progress = percents; + + if(!isInDOM(this.circle)) { + return; + } + + if(percents == 0) { + this.circle.style.strokeDasharray = ''; + return; + } + + let totalLength = this.circle.getTotalLength(); + console.log('setProgress', (percents / 100 * totalLength)); + this.circle.style.strokeDasharray = '' + (percents / 100 * totalLength); + } +} + +export class LazyLoadQueue { + private lazyLoadMedia: Array<{div: HTMLDivElement, load: () => Promise}> = []; + + public check(id?: number) { + /* let length = this.lazyLoadMedia.length; + for(let i = length - 1; i >= 0; --i) { + let {div, load} = this.lazyLoadMedia[i]; + + if(isElementInViewport(div)) { + console.log('will load div:', div); + load(); + this.lazyLoadMedia.splice(i, 1); + } + } */ + if(id !== undefined) { + let {div, load} = this.lazyLoadMedia[id]; + if(isElementInViewport(div)) { + //console.log('will load div by id:', div, div.getBoundingClientRect()); + load(); + this.lazyLoadMedia.splice(id, 1); + } + + return; + } + + this.lazyLoadMedia = this.lazyLoadMedia.filter(({div, load}) => { + if(isElementInViewport(div)) { + //console.log('will load div:', div, div.getBoundingClientRect()); + load(); + return false; + } + + return true; + }); + } + + public push(el: {div: HTMLDivElement, load: () => Promise}) { + let id = this.lazyLoadMedia.push(el) - 1; + + this.check(id); + } +} + +export function wrapVideo(doc: MTDocument, container: HTMLDivElement, middleware: () => boolean, messageID: number, justLoader = true, preloader?: ProgressivePreloader) { + if(!container.firstElementChild || container.firstElementChild.tagName != 'IMG') { + let size = appPhotosManager.setAttachmentSize(doc, container); + } + + //return Promise.resolve(); + + if(!preloader) { + preloader = new ProgressivePreloader(container, true); + } + + let loadVideo = () => { + let promise = appDocsManager.downloadDoc(doc); + + promise.notify = (details: {done: number, total: number}) => { + console.log('doc download', promise, details); + preloader.setProgress(details.done); + }; + + return promise.then(blob => { + if(!middleware()) { + return; + } + + console.log('loaded doc:', doc, blob, container.firstElementChild); + + let video = document.createElement('video'); + video.loop = true; + video.autoplay = true; + + if(!justLoader) { + video.controls = true; + } + + video.setAttribute('message-id', '' + messageID); + + let source = document.createElement('source'); + //source.src = doc.url; + source.src = URL.createObjectURL(blob); + source.type = doc.mime_type; + + video.append(source); + container.append(video); + + if(container.firstElementChild) { + container.firstElementChild.remove(); + } + + preloader.detach(); + }); + }; + + if(doc.type == 'gif') { + return loadVideo(); + } else { // if video + return appPhotosManager.preloadPhoto(doc).then((blob) => { + if(!middleware()) { + return; + } + + if(container.firstElementChild) { + container.firstElementChild.remove(); + } + + let image = new Image(); + image.src = URL.createObjectURL(blob); + + /* image.style.height = doc.h + 'px'; + image.style.width = doc.w + 'px'; */ + + image.setAttribute('message-id', '' + messageID); + + container.append(image); + + if(!justLoader) { + return loadVideo(); + } + }); + } +} + +export function wrapDocument(doc: MTDocument, withTime = false): HTMLDivElement { + let docDiv = document.createElement('div'); + docDiv.classList.add('document'); + + let iconDiv = document.createElement('div'); + iconDiv.classList.add('tgico-document'); + + let attributeFilename: { + _: 'documentAttributeFilename', + file_name: string + } = doc.attributes.find((a: any) => a._ == "documentAttributeFilename"); + + let extSplitted = attributeFilename ? attributeFilename.file_name.split('.') : ''; + let ext = ''; + ext = extSplitted.length > 1 && Array.isArray(extSplitted) ? extSplitted.pop().toLowerCase() : 'file'; + + let fileName = attributeFilename ? attributeFilename.file_name : 'Unknown.file'; + let size = formatBytes(doc.size); + + if(withTime) { + let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + let date = new Date(doc.date * 1000); + + size += ' · ' + months[date.getMonth()] + ' ' + date.getDate() + ', ' + date.getFullYear() + + ' at ' + date.getHours() + ':' + ('0' + date.getMinutes()).slice(-2); + } + + docDiv.innerHTML = ` +
${ext}
+
${fileName}
+
${size}
+ `; + + return docDiv; +} + +export function scrollable(el: HTMLDivElement, x = false, y = true) { + let container = document.createElement('div'); + container.classList.add('scrollable'); + if(x) container.classList.add('scrollable-x'); + if(y) container.classList.add('scrollable-y'); + + container.addEventListener('mouseover', () => { + container.classList.add('active'); + + container.addEventListener('mouseout', () => { + container.classList.remove('active'); + }, {once: true}); + }); + + Array.from(el.children).forEach(c => container.append(c)); + + el.append(container);//container.append(el); + return container; +} + +export function wrapSticker(doc: MTDocument, div: HTMLDivElement, middleware?: () => boolean, lazyLoadQueue?: LazyLoadQueue, group?: string, canvas?: boolean) { + let stickerType = doc.mime_type == "application/x-tgsticker" ? 2 : (doc.mime_type == "image/webp" ? 1 : 0); + + if(!stickerType) { + console.error('wrong doc for wrapSticker!', doc, div); + } + + console.log('wrap sticker', doc); + + if(doc.thumbs && !div.firstElementChild) { + let thumb = doc.thumbs[0]; + + if(thumb.bytes) { + MTProto.apiFileManager.saveSmallFile(thumb.location, thumb.bytes); + + appPhotosManager.setAttachmentPreview(thumb.bytes, div, true); + } + } + + let load = () => MTProto.apiFileManager.downloadSmallFile({ + _: 'inputDocumentFileLocation', + access_hash: doc.access_hash, + file_reference: doc.file_reference, + thumb_size: ''/* document.thumbs[0].type */, + id: doc.id, + stickerType: stickerType + }, {mimeType: doc.mime_type, dcID: doc.dc_id}).then(blob => { + //console.log('loaded sticker:', blob, div); + if(middleware && !middleware()) return; + + if(div.firstElementChild) { + div.firstElementChild.remove(); + } + + if(stickerType == 2) { + const reader = new FileReader(); + + reader.addEventListener('loadend', async(e) => { + // @ts-ignore + const text = e.srcElement.result; + let json = await CryptoWorker.gzipUncompress(text, true); + + let animation = await LottieLoader.loadAnimation({ + container: div, + loop: false, + autoplay: false, + animationData: JSON.parse(json), + renderer: canvas ? 'canvas' : 'svg' + }, group); + + if(!canvas) { + div.addEventListener('mouseover', (e) => { + let animation = LottieLoader.getAnimation(div, group); + + if(animation) { + //console.log('sticker hover', animation, div); + + // @ts-ignore + animation.loop = true; + + // @ts-ignore + if(animation.currentFrame == animation.totalFrames - 1) { + animation.goToAndPlay(0, true); + } else { + animation.play(); + } + + div.addEventListener('mouseout', () => { + // @ts-ignore + animation.loop = false; + }, {once: true}); + } + }); + } + }); + + reader.readAsArrayBuffer(blob); + } else if(stickerType == 1) { + let img = new Image(); + img.src = URL.createObjectURL(blob); + + /* div.style.height = doc.h + 'px'; + div.style.width = doc.w + 'px'; */ + div.append(img); + } + + div.setAttribute('file-id', doc.id); + appStickersManager.saveSticker(doc); + }); + + return lazyLoadQueue ? (lazyLoadQueue.push({div, load}), Promise.resolve()) : load(); +} + +export function horizontalMenu(tabs: HTMLUListElement, content: HTMLDivElement, onClick?: (id: number, tabContent: HTMLDivElement) => void, onTransitionEnd?: () => void) { + let hideTimeout: number = 0; + let prevTabContent: HTMLDivElement = null; + + let prevId = -1; + + tabs.addEventListener('click', function(e) { + let target = e.target as HTMLLIElement; + + if(target.tagName != 'LI') { + target = findUpTag(target, 'LI'); + } + + console.log('tabs click:', target); + + if(target.classList.contains('active')) return false; + + let prev = tabs.querySelector('li.active') as HTMLLIElement; + prev && prev.classList.remove('active'); + + target.classList.add('active'); + + let id = whichChild(target); + + if(id == prevId) return false; + + let tabContent = content.children[id] as HTMLDivElement; + tabContent.classList.add('active'); + + console.log('mambo rap', prevId, id); + + //content.style.marginLeft = id > 0 ? (-id * 100) + '%' : ''; + let toRight = prevId < id; + if(prevId != -1) { + content.style.width = '200%'; + + console.log('mambo rap setting', toRight); + + content.classList.remove('animated'); + + if(toRight) { + content.classList.add('animated'); + content.style.marginLeft = '-100%'; + } else { + + content.style.marginLeft = '-100%'; + setTimeout(() => { + content.classList.add('animated'); + content.style.marginLeft = ''; + }, 0); + } + } + + prevId = id; + + let p = prevTabContent; + clearTimeout(hideTimeout); + if(p) hideTimeout = setTimeout(() => { + if(toRight) { + p.classList.remove('active'); + content.classList.remove('animated'); + content.style.width = '100%'; + } + + /* content.style.marginLeft = '0%'; + content.style.width = '100%'; */ + + if(!toRight) { + p.classList.remove('active'); + content.classList.remove('animated'); + content.style.width = '100%'; + } + + content.style.marginLeft = ''; + + if(onTransitionEnd) onTransitionEnd(); + }, 200); + + if(onClick) onClick(id, tabContent); + prevTabContent = tabContent; + }); +} + +export function getNearestDc() { + return MTProto.apiManager.invokeApi('help.getNearestDc').then((nearestDcResult: any) => { + if(nearestDcResult.nearest_dc != nearestDcResult.this_dc) { + //MTProto.apiManager.baseDcID = nearestDcResult.nearest_dc; + MTProto.apiManager.getNetworker(nearestDcResult.nearest_dc); + } + + return nearestDcResult; + }); +} diff --git a/src/components/pageAuthCode.ts b/src/components/pageAuthCode.ts new file mode 100644 index 00000000..f740504f --- /dev/null +++ b/src/components/pageAuthCode.ts @@ -0,0 +1,277 @@ +import {MTProto} from '../lib/mtproto/mtproto'; + +import pageSignIn from './pageSignIn'; +import pageSignUp from './pageSignUp'; +import pageIm from './pageIm'; +import pagePassword from './pagePassword'; +import CryptoWorker from '../lib/crypto/cryptoworker'; +import LottieLoader from '../lib/lottieLoader'; + +let installed = false; +let authCode: { + _: string, // 'auth.sentCode' + pFlags: any, // {} + flags: number, + type: { + _: string, // 'auth.sentCodeTypeSms', + length: number + }, + phone_code_hash: string, + phone_number: string +} = null; + +const EDITONSAMEPAGE = false; + +export default async(_authCode: typeof authCode) => { + authCode = _authCode; + + //let LottieLoader = (await import('../lib/lottieLoader')).default; + + let pageElement = document.body.getElementsByClassName('page-authCode')[0] as HTMLDivElement; + pageElement.style.display = ''; + + let headerElement = pageElement.getElementsByClassName('phone')[0] as HTMLHeadElement; + headerElement.innerText = authCode.phone_number; + + let sentTypeElement = pageElement.getElementsByClassName('sent-type')[0] as HTMLParagraphElement; + + switch(authCode.type._) { + case 'auth.sentCodeTypeSms': + sentTypeElement.innerHTML = 'We have sent you an SMS
with the code.'; + break; + case 'auth.sentCodeTypeApp': + sentTypeElement.innerHTML = 'We have sent you a message in Telegram
with the code.'; + break; + case 'auth.sentCodeTypeCall': + sentTypeElement.innerHTML = 'We will call you and voice
the code.'; + break; + default: + sentTypeElement.innerHTML = `Please check everything
for a code (type: ${authCode.type._})`; + break; + } + + if(installed) return; + installed = true; + + let needFrame = 0, lastLength = 0; + let animation: /* AnimationItem */any = undefined; + + const CODELENGTH = authCode.type.length; + + fetch('assets/img/TwoFactorSetupMonkeyTracking.tgs') + .then(res => res.arrayBuffer()) + .then(async(data) => { + let str = await CryptoWorker.gzipUncompress(data, true); + + animation = await LottieLoader.loadAnimation({ + container: document.body.querySelector('.page-authCode .auth-image'), + renderer: 'svg', + loop: false, + autoplay: false, + animationData: JSON.parse(str) + }); + + animation.setSpeed(1); + //console.log(animation.getDuration(), animation.getDuration(true)); + + animation.addEventListener('enterFrame', (e: any) => { + //console.log('enterFrame', e, needFrame); + let currentFrame = Math.round(e.currentTime); + + if((e.direction == 1 && currentFrame >= needFrame) || + (e.direction == -1 && currentFrame <= needFrame)) { + animation.setSpeed(1); + animation.pause(); + } + }); + }); + + const codeInput = document.getElementById('code') as HTMLInputElement; + const codeInputLabel = codeInput.nextElementSibling as HTMLLabelElement; + const editButton = document.querySelector('.phone-edit') as HTMLElement; + + if(EDITONSAMEPAGE) { + let editable = false; + let changePhonePromise: Promise; + + let changePhone = () => { + if(changePhonePromise) return; + + let phone_number = '+' + headerElement.innerText.replace(/\D/g, ''); + if(authCode.phone_number == phone_number) return; + + codeInput.setAttribute('disabled', 'true'); + + changePhonePromise = MTProto.apiManager.invokeApi('auth.sendCode', { + /* flags: 0, */ + phone_number: phone_number, + api_id: Config.App.id, + api_hash: Config.App.hash, + settings: { + _: 'codeSettings', // that's how we sending Type + flags: 0 + } + /* lang_code: navigator.language || 'en' */ + }).then((code: any) => { + console.log('got code 2', code); + + authCode = Object.assign(code, {phone_number}); + + changePhonePromise = undefined; + codeInput.removeAttribute('disabled'); + codeInput.focus(); + }).catch(err => { + switch(err.type) { + case 'PHONE_NUMBER_INVALID': + headerElement.classList.add('error'); + editable = true; + headerElement.setAttribute('contenteditable', '' + editable); + headerElement.focus(); + break; + default: + codeInputLabel.innerText = err.type; + break; + } + + changePhonePromise = undefined; + codeInput.removeAttribute('disabled'); + }); + }; + + headerElement.addEventListener('keypress', function(this, e) { + if(e.key == 'Enter') { + editable = false; + headerElement.setAttribute('contenteditable', '' + editable); + changePhone(); + } + + if(/\D/.test(e.key)) { + e.preventDefault(); + return false; + } + + this.classList.remove('error'); + }); + + editButton.addEventListener('click', function() { + if(changePhonePromise) return; + + editable = !editable; + headerElement.setAttribute('contenteditable', '' + editable); + + if(!editable) changePhone(); + }); + } else { + editButton.addEventListener('click', function() { + pageElement.style.display = 'none'; + return pageSignIn(); + }); + } + + let submitCode = (code: string) => { + codeInput.setAttribute('disabled', 'true'); + + let params = { + phone_number: authCode.phone_number, + phone_code_hash: authCode.phone_code_hash, + phone_code: code + }; + + console.log('invoking auth.signIn with params:', params); + + MTProto.apiManager.invokeApi('auth.signIn', params) + .then((response: any) => { + console.log('auth.signIn response:', response); + + switch(response._) { + case 'auth.authorization': + MTProto.apiManager.setUserAuth({ + id: response.user.id + }); + + pageElement.style.display = 'none'; + pageIm(); + if(animation) animation.destroy(); + break; + case 'auth.authorizationSignUpRequired': + console.log('Registration needed!'); + + pageElement.style.display = 'none'; + pageSignUp({ + 'phone_number': authCode.phone_number, + 'phone_code_hash': authCode.phone_code_hash + }); + + if(animation) animation.destroy(); + break; + default: + codeInput.innerText = response._; + break; + } + }).catch(err => { + codeInput.removeAttribute('disabled'); + + switch(err.type) { + case 'SESSION_PASSWORD_NEEDED': + console.warn('pageAuthCode: SESSION_PASSWORD_NEEDED'); + err.handled = true; + pageElement.style.display = 'none'; + if(animation) animation.destroy(); + pagePassword(); + break; + case 'PHONE_CODE_EMPTY': + case 'PHONE_CODE_INVALID': + codeInput.classList.add('error'); + codeInputLabel.innerText = 'Invalid Code'; + break; + default: + codeInputLabel.innerText = err.type; + break; + } + }); + }; + + const max = 45; + // 1st symbol = frame 15 + // end symbol = frame 165 + codeInput.addEventListener('input', function(this: typeof codeInput, e) { + this.classList.remove('error'); + + this.value = this.value.replace(/\D/g, ''); + if(this.value.length > CODELENGTH) { + this.value = this.value.slice(0, CODELENGTH); + } + + let length = this.value.length; + if(length == CODELENGTH) { // submit code + submitCode(this.value); + } else if(length == lastLength) { + return; + } + + lastLength = length; + + if(!animation) return; + + let frame: number; + if(length) frame = Math.round((length > max ? max : length) * (165 / max) + 11.33); + else frame = 0; + //animation.playSegments([1, 2]); + + let direction = needFrame > frame ? -1 : 1; + //console.log('keydown', length, frame, direction); + // @ts-ignore + animation.setDirection(direction); + if(needFrame != 0 && frame == 0) { + animation.setSpeed(7); + } + /* let diff = Math.abs(needFrame - frame * direction); + if((diff / 20) > 1) animation.setSpeed(diff / 20 | 0); */ + needFrame = frame; + + animation.play(); + + /* animation.goToAndStop(15, true); */ + //animation.goToAndStop(length / max * ); + }); +}; diff --git a/src/components/pageIm.ts b/src/components/pageIm.ts new file mode 100644 index 00000000..1d9369d1 --- /dev/null +++ b/src/components/pageIm.ts @@ -0,0 +1,758 @@ +//import { appImManager, appMessagesManager, appDialogsManager, apiUpdatesManager, appUsersManager } from "../lib/services"; +import { putPreloader, horizontalMenu, wrapSticker, MTDocument, LazyLoadQueue, scrollable } from "./misc"; + +import { isElementInViewport, whichChild, findUpTag } from "../lib/utils"; +import {stackBlurImage} from '../lib/StackBlur'; +import * as Config from '../lib/config'; +import { RichTextProcessor } from "../lib/richtextprocessor"; +import { MTProto } from "../lib/mtproto/mtproto"; +import lottieLoader from "../lib/lottieLoader"; +import CryptoWorker from '../lib/crypto/cryptoworker'; + +import appStickersManager, { MTStickerSet } from "../lib/appManagers/appStickersManager"; +import { AppImManager } from "../lib/appManagers/appImManager"; +import { AppMessagesManager } from "../lib/appManagers/appMessagesManager"; +import appSidebarRight from "../lib/appManagers/appSidebarRight"; + +const EMOTICONSSTICKERGROUP = 'emoticons-dropdown'; + +let initEmoticonsDropdown = (pageEl: HTMLDivElement, + appImManager: AppImManager, appMessagesManager: AppMessagesManager, + messageInput: HTMLDivElement, toggleEl: HTMLButtonElement, btnSend: HTMLButtonElement) => { + let dropdown = pageEl.querySelector('.emoji-dropdown') as HTMLDivElement; + dropdown.classList.add('active'); // need + + let lazyLoadQueue = new LazyLoadQueue(); + + let container = pageEl.querySelector('.emoji-container .tabs-container') as HTMLDivElement; + let tabs = pageEl.querySelector('.emoji-dropdown .emoji-tabs') as HTMLUListElement; + horizontalMenu(tabs, container, (id) => { + lottieLoader.checkAnimations(true, EMOTICONSSTICKERGROUP); + + if(id == 1 && stickersInit) { + stickersInit(); + } + }, () => { + lottieLoader.checkAnimations(false, EMOTICONSSTICKERGROUP); + lazyLoadQueue.check(); // for stickers + }); + (tabs.children[0] as HTMLLIElement).click(); // set media + + let emoticonsMenuOnClick = (menu: HTMLUListElement, heights: number[], scroll: HTMLDivElement) => { + menu.addEventListener('click', function(e) { + let target = e.target as HTMLLIElement; + target = findUpTag(target, 'LI'); + + let index = whichChild(target); + let y = heights[index - 1/* 2 */] || 0; // 10 == padding .scrollable + + //console.log(target, index, heights, y, scroll); + + //scroll.scroll({y: y + 'px'}); + scroll.scrollTop = y; + }); + }; + + let emoticonsContentOnScroll = (menu: HTMLUListElement, heights: number[], prevCategoryIndex: number, scroll: HTMLDivElement) => { + let pos = scroll.scroll(); + let y = scroll.scrollTop; + + //console.log(heights, y); + + for(let i = 0; i < heights.length; ++i) { + let height = heights[i]; + if(y < height) { + menu.children[prevCategoryIndex].classList.remove('active'); + prevCategoryIndex = i/* + 1 */; + menu.children[prevCategoryIndex].classList.add('active'); + + break; + } + } + + return prevCategoryIndex; + }; + + { + let categories = ["Smileys & Emotion", "Animals & Nature", "Food & Drink", "Travel & Places", "Activities", "Objects", "Symbols", "Flags", "Skin Tones"]; + let divs: { + [category: string]: HTMLDivElement + } = {}; + + let keyCategory = Config.Emoji.keyCategory; + let sorted: { + [category: string]: any[] + } = {}; + + for(let unified in Config.Emoji.emoji) { + // @ts-ignore + let details = Config.Emoji.emoji[unified]; + let category = details[keyCategory]; + + details.unified = unified; + + if(!sorted[category]) sorted[category] = []; + sorted[category][details.sort_order] = details; + } + + Object.keys(sorted).forEach(c => sorted[c].sort()); + + categories.pop(); + delete sorted["Skin Tones"]; + + console.time('emojiParse'); + for(let category in sorted) { + let div = document.createElement('div'); + div.classList.add('emoji-category'); + + let emojis = sorted[category]; + emojis.forEach(details => { + let emoji = details.unified; + //let emoji = (details.unified as string).split('-') + //.reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), ''); + + let spanEmoji = document.createElement('span'); + let kek = RichTextProcessor.wrapRichText(emoji); + + if(!kek.includes('emoji')) { + console.log(details, emoji, kek, spanEmoji, emoji.length, new TextEncoder().encode(emoji)); + return; + } + + //console.log(kek); + + spanEmoji.innerHTML = kek; + + //spanEmoji = spanEmoji.firstElementChild as HTMLSpanElement; + //spanEmoji.setAttribute('emoji', emoji); + div.appendChild(spanEmoji); + }); + + divs[category] = div; + } + console.timeEnd('emojiParse'); + + let heights: number[] = [0]; + + let contentEmojiDiv = document.getElementById('content-emoji') as HTMLDivElement; + categories.forEach(category => { + let div = divs[category]; + + if(!div) { + console.error('no div by category:', category); + } + + contentEmojiDiv.append(div); + heights.push((heights[heights.length - 1] || 0) + div.scrollHeight); + + //console.log(div, div.scrollHeight); + }); + + contentEmojiDiv.addEventListener('click', function(e) { + let target = e.target as any; + //if(target.tagName != 'SPAN') return; + + if(target.tagName == 'SPAN' && !target.classList.contains('emoji')) { + target = target.firstElementChild; + } else if(target.tagName == 'DIV') return; + + //console.log('contentEmoji div', target); + + /* if(!target.classList.contains('emoji')) { + target = target.parentElement as HTMLSpanElement; + + if(!target.classList.contains('emoji')) { + return; + } + } */ + + //messageInput.innerHTML += target.innerHTML; + messageInput.innerHTML += target.outerHTML; + + btnSend.classList.add('tgico-send'); + btnSend.classList.remove('tgico-microphone2'); + }); + + let prevCategoryIndex = 1; + let menu = contentEmojiDiv.nextElementSibling as HTMLUListElement; + let emojiScroll = scrollable(contentEmojiDiv); + emojiScroll.onscroll = (e) => { + prevCategoryIndex = emoticonsContentOnScroll(menu, heights, prevCategoryIndex, emojiScroll); + }; + + emoticonsMenuOnClick(menu, heights, emojiScroll); + } + + let stickersInit = () => { + let contentStickersDiv = document.getElementById('content-stickers') as HTMLDivElement; + //let stickersDiv = contentStickersDiv.querySelector('.os-content') as HTMLDivElement; + + let menuWrapper = contentStickersDiv.nextElementSibling as HTMLDivElement; + let menu = menuWrapper.firstElementChild as HTMLUListElement; + + let menuScroll = scrollable(menuWrapper, true, false); + + let stickersDiv = document.createElement('div'); + stickersDiv.classList.add('stickers-categories'); + contentStickersDiv.append(stickersDiv); + + stickersDiv.addEventListener('mouseover', (e) => { + let target = e.target as HTMLElement; + + if(target.tagName == 'CANVAS') { // turn on sticker + let animation = lottieLoader.getAnimation(target.parentElement, EMOTICONSSTICKERGROUP); + + if(animation) { + // @ts-ignore + if(animation.currentFrame == animation.totalFrames - 1) { + animation.goToAndPlay(0, true); + } else { + animation.play(); + } + } + } + }); + + stickersDiv.addEventListener('click', (e) => { + let target = e.target as HTMLDivElement; + target = findUpTag(target, 'DIV'); + + let fileID = target.getAttribute('file-id'); + let document = appStickersManager.getSticker(fileID); + + if(document) { + appMessagesManager.sendFile(appImManager.peerID, document, {isMedia: true}); + appImManager.scroll.scrollTop = appImManager.scroll.scrollHeight; + dropdown.classList.remove('active'); + toggleEl.classList.remove('active'); + } else { + console.warn('got no sticker by id:', fileID); + } + }); + + let heights: number[] = []; + + let categoryPush = (categoryDiv: HTMLDivElement, docs: MTDocument[], prepend?: boolean) => { + //if((docs.length % 5) != 0) categoryDiv.classList.add('not-full'); + + docs.forEach(doc => { + let div = document.createElement('div'); + wrapSticker(doc, div, undefined, lazyLoadQueue, EMOTICONSSTICKERGROUP, true); + + categoryDiv.append(div); + }); + + /* if(prepend) { + stickersDiv.prepend(categoryDiv); + } else { + stickersDiv.append(categoryDiv); + } */ + + setTimeout(() => lazyLoadQueue.check(), 0); + + /* let scrollHeight = categoryDiv.scrollHeight; + let prevHeight = heights[heights.length - 1] || 0; + //console.log('scrollHeight', scrollHeight, categoryDiv, stickersDiv.childElementCount); + if(prepend && heights.length) {// all stickers loaded faster than recent + heights.forEach((h, i) => heights[i] += scrollHeight); + + return heights.unshift(scrollHeight) - 1; + } */ + + heights.length = 0; + Array.from(stickersDiv.children).forEach((div, i) => { + heights[i] = (heights[i - 1] || 0) + div.scrollHeight; + }); + + //return heights.push(prevHeight + scrollHeight) - 1; + }; + + MTProto.apiManager.invokeApi('messages.getRecentStickers', {flags: 0, hash: 0}).then((res) => { + let stickers: { + _: string, + hash: number, + packs: any[], + stickers: MTDocument[], + dates: number[] + } = res as any; + + let categoryDiv = document.createElement('div'); + categoryDiv.classList.add('sticker-category'); + + stickersDiv.prepend(categoryDiv); + + categoryPush(categoryDiv, stickers.stickers, true); + }); + + MTProto.apiManager.invokeApi('messages.getAllStickers', {hash: 0}).then((res) => { + let stickers: { + _: 'messages.allStickers', + hash: number, + sets: Array + } = res as any; + + stickers.sets/* .slice(0, 10) */.forEach(async(set) => { + let categoryDiv = document.createElement('div'); + categoryDiv.classList.add('sticker-category'); + + let li = document.createElement('li'); + li.classList.add('btn-icon'); + + menu.append(li); + + stickersDiv.append(categoryDiv); + + let stickerSet = await appStickersManager.getStickerSet(set); + + if(stickerSet.set.thumb) { + let thumb = stickerSet.set.thumb; + + appStickersManager.getStickerSetThumb(stickerSet.set).then(async(blob) => { + if(thumb.w == 1 && thumb.h == 1) { + const reader = new FileReader(); + + reader.addEventListener('loadend', async(e) => { + // @ts-ignore + const text = e.srcElement.result; + let json = await CryptoWorker.gzipUncompress(text, true); + + let animation = await lottieLoader.loadAnimation({ + container: li, + loop: true, + autoplay: false, + animationData: JSON.parse(json) + }, EMOTICONSSTICKERGROUP); + }); + + reader.readAsArrayBuffer(blob); + } else { + let image = new Image(); + image.src = URL.createObjectURL(blob); + + li.append(image); + } + }); + } else { // as thumb will be used first sticker + wrapSticker(stickerSet.documents[0], li as any, undefined, undefined, EMOTICONSSTICKERGROUP); // kostil + } + + categoryPush(categoryDiv, stickerSet.documents); + }); + }); + + let prevCategoryIndex = 0; + let stickersScroll = scrollable(contentStickersDiv); + stickersScroll.onscroll = (e) => { + lazyLoadQueue.check(); + lottieLoader.checkAnimations(); + + prevCategoryIndex = emoticonsContentOnScroll(menu, heights, prevCategoryIndex, stickersScroll); + }; + + emoticonsMenuOnClick(menu, heights, stickersScroll); + + stickersInit = null; + }; + + return {dropdown, lazyLoadQueue}; +}; + +export default () => import('../lib/services').then(services => { + console.log('included services', services); + + let {appImManager, appMessagesManager, appDialogsManager, apiUpdatesManager, appUsersManager} = services; +//export default () => { + let chatsContainer = document.getElementById('chats-container') as HTMLDivElement; + let d = document.createElement('div'); + d.classList.add('preloader'); + putPreloader(d); + chatsContainer.append(d); + + let pageEl = document.body.getElementsByClassName('page-chats')[0] as HTMLDivElement; + pageEl.style.display = ''; + + const loadCount = Math.round(document.body.scrollHeight / 70 * 1.5); + + let chatsScroll = scrollable(chatsContainer as HTMLDivElement); + let sidebarScroll = scrollable(document.body.querySelector('.profile-container')); + let chatScroll = scrollable(document.getElementById('bubbles') as HTMLDivElement); + + apiUpdatesManager.attach(); + + let offsetIndex = 0; + let loadDialogsPromise: Promise; + let loadDialogs = async() => { + if(loadDialogsPromise) return loadDialogsPromise; + + chatsContainer.append(d); + + //let offset = appMessagesManager.generateDialogIndex();/* appMessagesManager.dialogsNum */; + + try { + loadDialogsPromise = appMessagesManager.getConversations('', offsetIndex, loadCount); + + let result = await loadDialogsPromise; + + console.log('loaded ' + loadCount + ' dialogs by offset:', offsetIndex, result); + + if(result && result.dialogs && result.dialogs.length) { + offsetIndex = result.dialogs[result.dialogs.length - 1].index; + result.dialogs.forEach((dialog: any) => { + appDialogsManager.addDialog(dialog); + }); + } + } catch(err) { + console.error(err); + } + + d.remove(); + loadDialogsPromise = undefined; + }; + + let onScroll = () => { + if(!loadDialogsPromise) { + let d = Array.from(appDialogsManager.chatList.childNodes).slice(-5); + for(let node of d) { + if(isElementInViewport(node)) { + loadDialogs(); + break; + } + } + + //console.log('last 5 dialogs:', d); + } + }; + + chatsScroll.onscroll = onScroll; + window.addEventListener('resize', () => { + setTimeout(onScroll, 0); + }); + + // @ts-ignore + document.addEventListener('user_update', (e: CustomEvent) => { + let userID = e.detail; + + let user = appUsersManager.getUser(userID); + + let dialog = appMessagesManager.getDialogByPeerID(user.id)[0]; + //console.log('updating user:', user, dialog); + + if(dialog && !appUsersManager.isBot(dialog.peerID) && dialog.peerID != appImManager.myID) { + let online = user.status._ == 'userStatusOnline'; + let dom = appDialogsManager.getDialogDom(dialog.peerID); + + if(dom) { + if(online) { + dom.avatarDiv.classList.add('is-online'); + } else { + dom.avatarDiv.classList.remove('is-online'); + } + } + } + + if(appImManager.peerID == user.id) { + appImManager.setPeerStatus(); + } + }); + + // @ts-ignore + document.addEventListener('history_multiappend', (e: CustomEvent) => { + //let msgIDsByPeer = e.detail; + + appDialogsManager.sortDom(); + }); + + // @ts-ignore + document.addEventListener('dialog_top', (e: CustomEvent) => { + let dialog: any = e.detail; + + appDialogsManager.setLastMessage(dialog); + appDialogsManager.sortDom(); + }); + + // @ts-ignore + document.addEventListener('history_delete', (e: CustomEvent) => { + let detail: { + peerID: string, + msgs: {[x: number]: boolean} + } = e.detail; + + appImManager.deleteMessagesByIDs(Object.keys(detail.msgs).map(s => +s)); + }); + + // @ts-ignore + document.addEventListener('dialogs_multiupdate', (e: CustomEvent) => { + let dialogs = e.detail; + + for(let id in dialogs) { + let dialog = dialogs[id]; + + console.log('updating dialog:', dialog); + + if(!(dialog.peerID in appDialogsManager.doms)) { + appDialogsManager.addDialog(dialog); + continue; + } + + appDialogsManager.setLastMessage(dialog); + } + + appDialogsManager.sortDom(); + }); + + // @ts-ignore + document.addEventListener('dialog_unread', (e: CustomEvent) => { + let info: { + peerID: number, + count: number + } = e.detail; + + let dialog = appMessagesManager.getDialogByPeerID(info.peerID)[0]; + if(dialog) { + appDialogsManager.setUnreadMessages(dialog); + + if(dialog.peerID == appImManager.peerID) { + appImManager.updateUnreadByDialog(dialog); + } + } + }); +/* + loadDialogs().then(result => { + //appImManager.setScroll(chatScroll); + }); + return; + */ + let messageInput = document.getElementById('input-message') as HTMLDivElement/* HTMLInputElement */; + messageInput.addEventListener('keydown', function(this: typeof messageInput, e: KeyboardEvent) { + if(e.key == 'Enter') { + if(e.shiftKey) { + return; + } + + sendMessage(); + } + }); + + messageInput.addEventListener('input', function(this: typeof messageInput, e) { + //console.log('messageInput input', this.innerText, serializeNodes(Array.from(messageInput.childNodes))); + if(!this.innerText.trim() && !serializeNodes(Array.from(messageInput.childNodes)).trim()) { + this.innerHTML = ''; + btnSend.classList.remove('tgico-send'); + btnSend.classList.add('tgico-microphone2'); + } else if(!btnSend.classList.contains('tgico-send')) { + btnSend.classList.add('tgico-send'); + btnSend.classList.remove('tgico-microphone2'); + } + }); + + let serializeNodes = (nodes: Node[]): string => { + return nodes.reduce((str, child: any) => { + //console.log('childNode', str, child, typeof(child), typeof(child) === 'string', child.innerText); + + if(typeof(child) === 'object' && child.textContent) return str += child.textContent; + if(child.innerText) return str += child.innerText; + if(child.tagName == 'IMG' && child.classList && child.classList.contains('emoji')) return str += child.getAttribute('emoji'); + + return str; + }, ''); + }; + + messageInput.addEventListener('copy', function(e) { + const selection = document.getSelection(); + + let range = selection.getRangeAt(0); + let ancestorContainer = range.commonAncestorContainer; + + let str = ''; + + let selectedNodes = Array.from(ancestorContainer.childNodes).slice(range.startOffset, range.endOffset); + if(selectedNodes.length) { + str = serializeNodes(selectedNodes); + } else { + str = selection.toString(); + } + + console.log('messageInput copy', str, ancestorContainer.childNodes, range); + + // @ts-ignore + event.clipboardData.setData('text/plain', str); + event.preventDefault(); + }); + + messageInput.addEventListener('paste', function(this: typeof messageInput, e) { + e.preventDefault(); + // @ts-ignore + let text = (e.originalEvent || e).clipboardData.getData('text/plain'); + + // console.log('messageInput paste', text); + + text = RichTextProcessor.wrapRichText(text); + + // console.log('messageInput paste after', text); + + // @ts-ignore + //let html = (e.originalEvent || e).clipboardData.getData('text/html'); + + // @ts-ignore + //console.log('paste text', text, ); + window.document.execCommand('insertHTML', false, text); + }); + + let fileInput = document.getElementById('input-file') as HTMLInputElement; + + fileInput.addEventListener('change', (e) => { + var file = (e.target as HTMLInputElement & EventTarget).files[0]; + if(!file) { + return; + } + + console.log('selected file:', file, typeof(file)); + + fileInput.value = ''; + + appMessagesManager.sendFile(appImManager.peerID, file, {isMedia: true}); + appImManager.scroll.scrollTop = appImManager.scroll.scrollHeight; + + /* MTProto.apiFileManager.uploadFile(file).then((inputFile) => { + console.log('uploaded smthn', inputFile); + }); */ + }, false); + + pageEl.querySelector('#attach-file').addEventListener('click', () => { + fileInput.click(); + }); + + let inputMessageContainer = document.getElementsByClassName('input-message-container')[0] as HTMLDivElement; + + let inputScroll = scrollable(inputMessageContainer); + + let sendMessage = () => { + let str = serializeNodes(Array.from(messageInput.childNodes)); + + //console.log('childnode str after:', str); + + appMessagesManager.sendText(appImManager.peerID, str); + appImManager.scroll.scrollTop = appImManager.scroll.scrollHeight; + messageInput.innerText = ''; + + btnSend.classList.remove('tgico-send'); + btnSend.classList.add('tgico-microphone2'); + }; + + let btnSend = document.getElementById('btn-send') as HTMLButtonElement; + btnSend.addEventListener('click', () => { + if(btnSend.classList.contains('tgico-send')) { + sendMessage(); + } + }); + + /* function placeCaretAfterNode(node: HTMLElement) { + if (typeof window.getSelection != "undefined") { + var range = document.createRange(); + range.setStartAfter(node); + range.collapse(true); + var selection = window.getSelection(); + selection.removeAllRanges(); + selection.addRange(range); + } +} + + messageInput.onclick = (e) => { + let target = e.target as HTMLElement; + if(target.classList.contains('emoji-inner')) { + placeCaretAfterNode(target.parentElement); + } else if(target.classList.contains('emoji-sizer')) { + placeCaretAfterNode(target); + } + console.log('lol', target); + }; */ + + /* window.addEventListener('click', function(this, e) { + // @ts-ignore + let isInput = e.target.tagName == 'INPUT'; + if(!isInput && !window.getSelection().toString()) { + console.log('click'); + messageInput.focus(); + } + }); */ + + fetch('assets/img/camomile.jpg') + .then(res => res.blob()) + .then(blob => { + let img = new Image(); + let url = URL.createObjectURL(blob); + img.src = url; + img.onload = () => { + let id = 'chat-background-canvas'; + var canvas = document.getElementById(id) as HTMLCanvasElement; + URL.revokeObjectURL(url); + + stackBlurImage(img, id, 15, 0); + + canvas.toBlob(blob => { + //let dataUrl = canvas.toDataURL('image/jpeg', 1); + let dataUrl = URL.createObjectURL(blob); + + [/* '.chat-background', '#chat-closed' */'.chat-container'].forEach(selector => { + let bg = document.querySelector(selector) as HTMLDivElement; + bg.style.backgroundImage = 'url(' + dataUrl + ')'; + }); + }, 'image/jpeg', 1); + }; + }); + + let emoticonsDropdown: HTMLDivElement = null; + let emoticonsTimeout: number = 0; + let toggleEmoticons = pageEl.querySelector('.toggle-emoticons') as HTMLButtonElement; + let emoticonsLazyLoadQueue: LazyLoadQueue = null; + toggleEmoticons.onmouseover = (e) => { + clearTimeout(emoticonsTimeout); + emoticonsTimeout = setTimeout(() => { + if(!emoticonsDropdown) { + let res = initEmoticonsDropdown(pageEl, appImManager, + appMessagesManager, messageInput, toggleEmoticons, btnSend); + + emoticonsDropdown = res.dropdown; + emoticonsLazyLoadQueue = res.lazyLoadQueue; + + toggleEmoticons.onmouseout = emoticonsDropdown.onmouseout = (e) => { + clearTimeout(emoticonsTimeout); + emoticonsTimeout = setTimeout(() => { + emoticonsDropdown.classList.remove('active'); + toggleEmoticons.classList.remove('active'); + lottieLoader.checkAnimations(true, EMOTICONSSTICKERGROUP); + }, 200); + }; + + emoticonsDropdown.onmouseover = (e) => { + clearTimeout(emoticonsTimeout); + }; + } else { + emoticonsDropdown.classList.add('active'); + emoticonsLazyLoadQueue.check(); + } + + toggleEmoticons.classList.add('active'); + + lottieLoader.checkAnimations(false, EMOTICONSSTICKERGROUP); + }, 0/* 200 */); + }; + + /* toggleEmoticons.onclick = (e) => { + if(!emoticonsDropdown) { + emoticonsDropdown = initEmoticonsDropdown(pageEl, appImManager, + appMessagesManager, messageInput, toggleEmoticons); + } else { + emoticonsDropdown.classList.toggle('active'); + } + + toggleEmoticons.classList.toggle('active'); + }; */ + + + loadDialogs().then(result => { + onScroll(); + appImManager.setScroll(chatScroll); + appSidebarRight.setScroll(sidebarScroll); + }); +}); diff --git a/src/components/pagePassword.ts b/src/components/pagePassword.ts new file mode 100644 index 00000000..873aecce --- /dev/null +++ b/src/components/pagePassword.ts @@ -0,0 +1,136 @@ +import {MTProto} from '../lib/mtproto/mtproto'; + +import pageIm from './pageIm'; +import CryptoWorker from '../lib/crypto/cryptoworker'; +import { putPreloader } from './misc'; + +import LottieLoader from '../lib/lottieLoader'; + +let installed = false; + +export default async() => { + //let LottieLoader = (await import('../lib/lottieLoader')).default; + + if(installed) return; + installed = true; + + let needFrame = 0; + let animation: /* AnimationItem */any = undefined; + + let passwordVisible = false; + let pageElement = document.body.getElementsByClassName('page-password')[0] as HTMLDivElement; + pageElement.style.display = ''; + + fetch('assets/img/TwoFactorSetupMonkeyClose.tgs') + .then(res => res.arrayBuffer()) + .then(async(data) => { + let str = await CryptoWorker.gzipUncompress(data, true); + + animation = await LottieLoader.loadAnimation({ + container: pageElement.querySelector('.auth-image'), + renderer: 'svg', + loop: false, + autoplay: false, + animationData: JSON.parse(str) + }); + + console.log(animation.getDuration(true)); + //animation.goToAndStop(822); + + animation.addEventListener('enterFrame', (e: any) => { + //console.log('enterFrame', e, needFrame); + let currentFrame = Math.round(e.currentTime); + + if((e.direction == 1 && currentFrame >= needFrame) || + (e.direction == -1 && currentFrame <= needFrame)) { + animation.setSpeed(1); + animation.pause(); + } + }); + + needFrame = 49; + animation.play(); + }); + + const btnNext = pageElement.querySelector('button') as HTMLButtonElement; + const passwordInput = document.getElementById('password') as HTMLInputElement; + //const passwordInputLabel = passwordInput.nextElementSibling as HTMLLabelElement; + const toggleVisible = pageElement.querySelector('.toggle-visible') as HTMLSpanElement; + + let handleError = (err: any) => { + btnNext.removeAttribute('disabled'); + + switch(err.type) { + default: + btnNext.innerText = err.type; + break; + } + }; + + toggleVisible.addEventListener('click', function(this, e) { + if(!passwordVisible) { + this.classList.add('tgico-eye2'); + passwordInput.setAttribute('type', 'text'); + animation.setDirection(-1); + needFrame = 0; + animation.play(); + } else { + this.classList.remove('tgico-eye2'); + passwordInput.setAttribute('type', 'password'); + animation.setDirection(1); + needFrame = 49; + animation.play(); + } + + passwordVisible = !passwordVisible; + }); + + btnNext.addEventListener('click', function(this, e) { + if(!passwordInput.value.length) { + passwordInput.classList.add('error'); + return; + } + + this.setAttribute('disabled', 'true'); + let value = passwordInput.value; + + this.textContent = 'PLEASE WAIT...'; + putPreloader(this); + + MTProto.passwordManager.getState() + .then(state => { + console.log(state); + MTProto.passwordManager.check(state, value).then((response: any) => { + console.log('passwordManager response:', response); + + switch(response._) { + case 'auth.authorization': + MTProto.apiManager.setUserAuth({ + id: response.user.id + }); + + pageElement.style.display = 'none'; + pageIm(); + if(animation) animation.destroy(); + break; + default: + btnNext.removeAttribute('disabled'); + btnNext.innerText = response._; + break; + } + }).catch(handleError); + }).catch(handleError); + }); + + passwordInput.addEventListener('keypress', function(this, e) { + this.classList.remove('error'); + + if(e.key == 'Enter') { + return btnNext.click(); + } + }); + + /* passwordInput.addEventListener('input', function(this, e) { + + }); */ +}; diff --git a/src/components/pageSignIn.ts b/src/components/pageSignIn.ts new file mode 100644 index 00000000..131e8142 --- /dev/null +++ b/src/components/pageSignIn.ts @@ -0,0 +1,261 @@ +import { MTProto } from "../lib/mtproto/mtproto"; +import { putPreloader, getNearestDc, scrollable } from "./misc"; +import {RichTextProcessor} from '../lib/richtextprocessor'; + +import { unifiedCountryCodeEmoji, countryCodeEmoji, findUpTag } from "../lib/utils"; +import pageAuthCode from "./pageAuthCode"; + +let installed = false; + +type Country = { + name: string, + code: string, + phoneCode: string, + li?: HTMLLIElement[] +}; + +import _countries from '../countries_pretty.json'; + +//export default () => import('../countries_pretty.json').then(async(results) => { +export default () => { + //let pageAuthCode = await import('./pageAuthCode'); + //Array.from(document.querySelectorAll('body > .whole:not(.page-authCode)')).forEach(div => div.style.display = 'none'); + const pageEl = document.body.getElementsByClassName('page-sign')[0] as HTMLDivElement; + pageEl.style.display = ''; + + let btnNext = pageEl.querySelector('button'); + + if(installed) { + btnNext.textContent = 'NEXT'; + btnNext.removeAttribute('disabled'); + return; + } + + installed = true; + + //const countries: Country[] = results[0].default; + const countries: Country[] = _countries; + + let lastCountrySelected = ''; + + var selectCountryCode = pageEl.querySelector('input[name="countryCode"]')! as HTMLInputElement; + var parent = selectCountryCode.parentElement; + + var wrapper = document.createElement('div'); + wrapper.classList.add('select-wrapper', 'z-depth-4'); + + var list = document.createElement('ul'); + wrapper.appendChild(list); + + //let wrapperScroll = OverlayScrollbars(wrapper, (window as any).scrollbarOptions); + let wrapperScroll = scrollable(wrapper); + + let initedSelect = false; + + selectCountryCode.addEventListener('focus', function(this: typeof selectCountryCode, e) { + /* this.removeAttribute('readonly'); */ + if(!initedSelect) { + countries.forEach((c) => { + initedSelect = true; + + /* let unified = unifiedCountryCodeEmoji(c.code); + let emoji = unified.split('-').reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), ''); */ + let emoji = countryCodeEmoji(c.code); + + let liArr: Array = []; + c.phoneCode.split(' and ').forEach((phoneCode: string) => { + let li = document.createElement('li'); + var spanEmoji = document.createElement('span'); + /* spanEmoji.innerHTML = countryCodeEmoji(c.code); */ + //spanEmoji.classList.add('emoji-outer', 'emoji-sizer'); + //spanEmoji.innerHTML = ``; + + + + let kek = RichTextProcessor.wrapRichText(emoji); + //console.log(c.name, emoji, kek, spanEmoji.innerHTML); + + li.appendChild(spanEmoji); + spanEmoji.outerHTML = kek; + + li.append(c.name); + + var span = document.createElement('span'); + span.classList.add('phone-code'); + span.innerText = '+' + phoneCode; + li.appendChild(span); + + liArr.push(li); + list.append(li); + }); + + c.li = liArr; + }); + + list.addEventListener('mousedown', function(e) { + let target = e.target as HTMLElement; + if(target.tagName != 'LI') target = findUpTag(target, 'LI'); + + let countryName = target.childNodes[1].textContent;//target.innerText.split('\n').shift(); + let phoneCode = target.querySelector('.phone-code').innerText; + + selectCountryCode.value = countryName; + lastCountrySelected = countryName; + + telEl.value = phoneCode; + setTimeout(() => telEl.focus(), 0); + console.log('clicked', e, countryName, phoneCode); + }); + } + + parent.appendChild(wrapper); + }/* , {once: true} */); + selectCountryCode.addEventListener('blur', function(this: typeof selectCountryCode, e) { + parent.removeChild(wrapper); + e.cancelBubble = true; + }, {capture: true}); + + selectCountryCode.addEventListener('keyup', function(this: typeof selectCountryCode, e) { + if(e.ctrlKey || e.key == 'Control') return false; + + //let i = new RegExp('^' + this.value, 'i'); + let _value = this.value.toLowerCase(); + let matches: Country[] = []; + countries.forEach((c) => { + let good = c.name.toLowerCase().indexOf(_value) !== -1/* == 0 */;//i.test(c.name); + + c.li.forEach(li => li.style.display = good ? '' : 'none'); + if(good) matches.push(c); + }); + + if(matches.length == 1 && matches[0].li.length == 1) { + if(matches[0].name == lastCountrySelected) return false; + console.log('clicking', matches[0]); + + var clickEvent = document.createEvent('MouseEvents'); + clickEvent.initEvent('mousedown', true, true); + matches[0].li[0].dispatchEvent(clickEvent); + return false; + } else if(matches.length == 0) { + countries.forEach((c) => { + c.li.forEach(li => li.style.display = ''); + }); + } + }); + + let arrowDown = pageEl.querySelector('.arrow-down') as HTMLSpanElement; + arrowDown.addEventListener('mousedown', function(this: typeof arrowDown, e) { + e.cancelBubble = true; + e.preventDefault(); + if(selectCountryCode.matches(':focus')) selectCountryCode.blur(); + else selectCountryCode.focus(); + }); + + let telEl = pageEl.querySelector('input[name="phone"]') as HTMLInputElement; + telEl.addEventListener('input', function(this: typeof telEl, e) { + this.classList.remove('error'); + this.value = '+' + this.value + .replace(/[^0-9\s]/g, '') + /* .replace(/(\d{1,4})(\d{1,3})?(\d{1,3})?/g, function(txt, f, s, t) { + if (t) { + return `(${f}) ${s}-${t}` + } else if (s) { + return `(${f}) ${s}` + } else if (f) { + return `(${f})` + } + }) */; + + let sorted = countries.slice().sort((a, b) => b.phoneCode.length - a.phoneCode.length); + let phoneCode = this.value.slice(1, 7).replace(/\D/g, ''); + let country = sorted.find((c) => { + return c.phoneCode.split(' and ').find((c) => phoneCode.indexOf(c) == 0); + }); + + console.log(phoneCode, country); + + let countryName = country ? country.name : ''/* 'Unknown' */; + if(countryName != selectCountryCode.value) { + selectCountryCode.value = countryName; + lastCountrySelected = countryName; + } + + if(this.value.length >= 9) { + btnNext.style.display = ''; + } + }); + + telEl.addEventListener('keypress', function(this: typeof telEl, e) { + if(this.value.length >= 9 && e.key == 'Enter') { + return btnNext.click(); + } else if(/\D/.test(e.key)) { + e.preventDefault(); + return false; + } + }); + + /* telEl.addEventListener('focus', function(this: typeof telEl, e) { + this.removeAttribute('readonly'); // fix autocomplete + });*/ + + /* MTProto.authorizer.auth(2); + MTProto.networkerFactory.startAll(); */ + + btnNext.addEventListener('click', function(this: HTMLElement, e) { + this.setAttribute('disabled', 'true'); + + this.textContent = 'PLEASE WAIT...'; + putPreloader(this); + //this.innerHTML = 'PLEASE WAIT...'; + + let phone_number = telEl.value; + MTProto.apiManager.invokeApi('auth.sendCode', { + /* flags: 0, */ + phone_number: phone_number, + api_id: Config.App.id, + api_hash: Config.App.hash, + settings: { + _: 'codeSettings', // that's how we sending Type + flags: 0 + } + /* lang_code: navigator.language || 'en' */ + }).then((code: any) => { + console.log('got code', code); + + pageEl.style.display = 'none'; + + // @ts-ignore + pageAuthCode(Object.assign(code, {phone_number: phone_number})); + }).catch(err => { + this.removeAttribute('disabled'); + + this.innerText = 'NEXT'; + switch(err.type) { + case 'PHONE_NUMBER_INVALID': + telEl.classList.add('error'); + break; + default: + this.innerText = err.type; + break; + } + }); + }); + + let tryAgain = () => { + getNearestDc().then((nearestDcResult: any) => { + let country = countries.find((c) => c.code == nearestDcResult.country); + if(country) { + if(!selectCountryCode.value.length && !telEl.value.length) { + selectCountryCode.value = country.name; + lastCountrySelected = country.name; + telEl.value = '+' + country.phoneCode.split(' and ').shift(); + } + } + + return console.log('woohoo', nearestDcResult, country); + })//.catch(tryAgain); + }; + + tryAgain(); + +}; diff --git a/src/components/pageSignUp.ts b/src/components/pageSignUp.ts new file mode 100644 index 00000000..1b002bb9 --- /dev/null +++ b/src/components/pageSignUp.ts @@ -0,0 +1,234 @@ +import {MTProto} from '../lib/mtproto/mtproto'; +import {putPreloader} from './misc'; + +let installed = false; +let authCode: { + 'phone_number': string, + 'phone_code_hash': string +} = null; + +import resizeableImage from '../lib/cropper'; +import pageIm from './pageIm'; + +export default (_authCode: typeof authCode) => { + authCode = _authCode; + if(installed) return; + installed = true; + + let pageElement = document.body.getElementsByClassName('page-signUp')[0] as HTMLDivElement; + pageElement.style.display = ''; + + let findUpClassName = (el: Element | HTMLElement, className: string): HTMLElement => { + while(el.parentNode) { + // @ts-ignore + el = el.parentNode; + if(el.classList.contains(className)) + return el; + } + return null; + }; + Array.from(document.body.getElementsByClassName('popup-close')).forEach(el => { + let popup = findUpClassName(el, 'popup'); + el.addEventListener('click', () => { + popup.classList.remove('is-visible'); + }); + }); + + const avatarInput = document.getElementById('avatar-input') as HTMLInputElement; + const avatarPopup = pageElement.getElementsByClassName('popup-avatar')[0]; + const avatarPreview = pageElement.querySelector('#canvas-avatar') as HTMLCanvasElement; + const cropContainer = avatarPopup.getElementsByClassName('crop')[0]; + let avatarImage = new Image(); + cropContainer.append(avatarImage); + + let avatarBlob: Blob; + + (avatarPopup.getElementsByClassName('popup-close')[0] as HTMLButtonElement) + .addEventListener('click', function(this, e) { + /* let popup = findUpClassName(this, 'popup'); + popup.classList.remove('is-visible'); */ + + setTimeout(() => { + cropper.removeHandlers(); + if(avatarImage) { + avatarImage.remove(); + } + }, 200); + + /* e.cancelBubble = true; + return false; */ + }); + + let cropper = { + crop: () => {}, + removeHandlers: () => {} + }; + + // apply + avatarPopup.getElementsByClassName('btn-crop')[0].addEventListener('click', () => { + cropper.crop(); + avatarPopup.classList.remove('is-visible'); + cropper.removeHandlers(); + + avatarPreview.toBlob(blob => { + avatarBlob = blob; // save blob to send after reg + + // darken + let ctx = avatarPreview.getContext('2d'); + ctx.fillStyle = "rgba(0, 0, 0, 0.3)"; + ctx.fillRect(0, 0, avatarPreview.width, avatarPreview.height); + }, 'image/jpeg', 1); + + avatarImage.remove(); + }); + + avatarInput.addEventListener('change', (e: any) => { + var file = e.target.files[0]; + if(!file) { + return; + } + + /* console.log(file, typeof(file)); */ + + // @ts-ignore + /* MTProto.apiFileManager.uploadFile(file).then(function(inputFile) { + console.log('uploaded smthn', inputFile); + + MTProto.apiManager.invokeApi('photos.uploadProfilePhoto', { + file: inputFile + }).then(function (updateResult) { + console.log('updated photo!'); + }); + }); */ + + var reader = new FileReader(); + reader.onload = (e) => { + var contents = e.target.result as string; + + avatarImage = new Image(); + cropContainer.append(avatarImage); + avatarImage.src = contents; + + avatarImage.onload = () => { + /* avatarPreviewCtx.drawImage(avatarImage, + 70, 20, // Start at 70/20 pixels from the left and the top of the image (crop), + 50, 50, // "Get" a `50 * 50` (w * h) area from the source image (crop), + 0, 0, // Place the result at 0, 0 in the canvas, + 100, 100); // With as width / height: 100 * 100 (scale) */ + + cropper = resizeableImage(avatarImage, avatarPreview); + avatarInput.value = ''; + }; + + avatarPopup.classList.add('is-visible'); + //console.log(contents); + }; + + reader.readAsDataURL(file); + }, false); + + pageElement.querySelector('.auth-image').addEventListener('click', () => { + avatarInput.click(); + }); + + const headerName = pageElement.getElementsByClassName('fullName')[0] as HTMLHeadingElement; + + let handleInput = function(this: typeof fieldName, e: Event) { + let name = fieldName.value || ''; + let lastName = fieldLastName.value || ''; + + let fullName = name || lastName + ? (name + ' ' + lastName).trim() + : 'Your Name'; + + if(headerName.innerText != fullName) headerName.innerText = fullName; + this.classList.remove('error'); + }; + + let sendAvatar = () => new Promise((resolve, reject) => { + if(!avatarBlob) { + console.log('User has not selected avatar'); + return resolve(); + } + + console.log('invoking uploadFile...'); + // @ts-ignore + MTProto.apiFileManager.uploadFile(avatarBlob).then((inputFile: any) => { + console.log('uploaded smthn', inputFile); + + MTProto.apiManager.invokeApi('photos.uploadProfilePhoto', { + file: inputFile + }).then((updateResult) => { + console.log('updated photo!'); + resolve(); + }, reject); + }, reject); + }); + + const fieldName = document.getElementById('name') as HTMLInputElement; + fieldName.addEventListener('input', handleInput); + + const fieldLastName = document.getElementById('lastName') as HTMLInputElement; + fieldLastName.addEventListener('input', handleInput); + + const signUpButton = document.getElementById('signUp') as HTMLButtonElement; + signUpButton.addEventListener('click', function(this: typeof signUpButton, e) { + this.setAttribute('disabled', 'true'); + + if(!fieldName.value.length) { + fieldName.classList.add('error'); + return false; + } + + let name = fieldName.value; + let lastName = fieldLastName.value; + + let params = { + 'phone_number': authCode.phone_number, + 'phone_code_hash': authCode.phone_code_hash, + 'first_name': name, + 'last_name': lastName + }; + + console.log('invoking auth.signUp with params:', params); + + this.textContent = 'PLEASE WAIT...'; + putPreloader(this); + + MTProto.apiManager.invokeApi('auth.signUp', params) + .then((response: any) => { + console.log('auth.signUp response:', response); + + switch(response._) { + case 'auth.authorization': // success + MTProto.apiManager.setUserAuth({ // warning + id: response.user.id + }); + + sendAvatar().then(() => { + pageElement.style.display = 'none'; + pageIm(); + }, () => { + pageElement.style.display = 'none'; + pageIm(); + }); + + break; + default: + this.innerText = response._; + break; + } + + /* (document.body.getElementsByClassName('page-sign')[0] as HTMLDivElement).style.display = 'none'; + pageAuthCode(Object.assign(code, {phoneNumber})); */ + }).catch(err => { + this.removeAttribute('disabled'); + + switch(err.type) { + default: + this.innerText = err.type; + break; + } + }); + }); +}; diff --git a/src/countries.json b/src/countries.json new file mode 100644 index 00000000..eb97e58b --- /dev/null +++ b/src/countries.json @@ -0,0 +1 @@ +[["Afghanistan","AF","93"],["Aland Islands","AX","35818"],["Albania","AL","355"],["Algeria","DZ","213"],["American Samoa","AS","1684"],["Andorra","AD","376"],["Angola","AO","244"],["Anguilla","AI","1264"],["Antigua and Barbuda","AG","1268"],["Argentina","AR","54"],["Armenia","AM","374"],["Aruba","AW","297"],["Australia","AU","61"],["Austria","AT","43"],["Azerbaijan","AZ","994"],["Bahamas","BS","1242"],["Bahrain","BH","973"],["Bangladesh","BD","880"],["Barbados","BB","1246"],["Belarus","BY","375"],["Belgium","BE","32"],["Belize","BZ","501"],["Benin","BJ","229"],["Bermuda","BM","1441"],["Bhutan","BT","975"],["Bolivia","BO","591"],["Bonaire, Saint Eustatius and Saba ","BQ","599"],["Bosnia and Herzegovina","BA","387"],["Botswana","BW","267"],["Brazil","BR","55"],["British Indian Ocean Territory","IO","246"],["British Virgin Islands","VG","1284"],["Brunei","BN","673"],["Bulgaria","BG","359"],["Burkina Faso","BF","226"],["Burundi","BI","257"],["Cambodia","KH","855"],["Cameroon","CM","237"],["Canada","CA","1"],["Cape Verde","CV","238"],["Cayman Islands","KY","1345"],["Central African Republic","CF","236"],["Chad","TD","235"],["Chile","CL","56"],["China","CN","86"],["Christmas Island","CX","61"],["Cocos Islands","CC","61"],["Colombia","CO","57"],["Comoros","KM","269"],["Cook Islands","CK","682"],["Costa Rica","CR","506"],["Croatia","HR","385"],["Cuba","CU","53"],["Curacao","CW","599"],["Cyprus","CY","357"],["Czech Republic","CZ","420"],["Democratic Republic of the Congo","CD","243"],["Denmark","DK","45"],["Djibouti","DJ","253"],["Dominica","DM","1767"],["Dominican Republic","DO","1809 and 1829"],["East Timor","TL","670"],["Ecuador","EC","593"],["Egypt","EG","20"],["El Salvador","SV","503"],["Equatorial Guinea","GQ","240"],["Eritrea","ER","291"],["Estonia","EE","372"],["Ethiopia","ET","251"],["Falkland Islands","FK","500"],["Faroe Islands","FO","298"],["Fiji","FJ","679"],["Finland","FI","358"],["France","FR","33"],["French Guiana","GF","594"],["French Polynesia","PF","689"],["Gabon","GA","241"],["Gambia","GM","220"],["Georgia","GE","995"],["Germany","DE","49"],["Ghana","GH","233"],["Gibraltar","GI","350"],["Greece","GR","30"],["Greenland","GL","299"],["Grenada","GD","1473"],["Guadeloupe","GP","590"],["Guam","GU","1671"],["Guatemala","GT","502"],["Guernsey","GG","441481"],["Guinea","GN","224"],["Guinea-Bissau","GW","245"],["Guyana","GY","592"],["Haiti","HT","509"],["Heard Island and McDonald Islands","HM"," "],["Honduras","HN","504"],["Hong Kong","HK","852"],["Hungary","HU","36"],["Iceland","IS","354"],["India","IN","91"],["Indonesia","ID","62"],["Iran","IR","98"],["Iraq","IQ","964"],["Ireland","IE","353"],["Isle of Man","IM","441624"],["Israel","IL","972"],["Italy","IT","39"],["Ivory Coast","CI","225"],["Jamaica","JM","1876"],["Japan","JP","81"],["Jersey","JE","441534"],["Jordan","JO","962"],["Kazakhstan","KZ","7"],["Kenya","KE","254"],["Kiribati","KI","686"],["Kuwait","KW","965"],["Kyrgyzstan","KG","996"],["Laos","LA","856"],["Latvia","LV","371"],["Lebanon","LB","961"],["Lesotho","LS","266"],["Liberia","LR","231"],["Libya","LY","218"],["Liechtenstein","LI","423"],["Lithuania","LT","370"],["Luxembourg","LU","352"],["Macao","MO","853"],["Macedonia","MK","389"],["Madagascar","MG","261"],["Malawi","MW","265"],["Malaysia","MY","60"],["Maldives","MV","960"],["Mali","ML","223"],["Malta","MT","356"],["Marshall Islands","MH","692"],["Martinique","MQ","596"],["Mauritania","MR","222"],["Mauritius","MU","230"],["Mayotte","YT","262"],["Mexico","MX","52"],["Micronesia","FM","691"],["Moldova","MD","373"],["Monaco","MC","377"],["Mongolia","MN","976"],["Montenegro","ME","382"],["Montserrat","MS","1664"],["Morocco","MA","212"],["Mozambique","MZ","258"],["Myanmar","MM","95"],["Namibia","NA","264"],["Nauru","NR","674"],["Nepal","NP","977"],["Netherlands","NL","31"],["New Caledonia","NC","687"],["New Zealand","NZ","64"],["Nicaragua","NI","505"],["Niger","NE","227"],["Nigeria","NG","234"],["Niue","NU","683"],["Norfolk Island","NF","672"],["North Korea","KP","850"],["Northern Mariana Islands","MP","1670"],["Norway","NO","47"],["Oman","OM","968"],["Pakistan","PK","92"],["Palau","PW","680"],["Palestinian Territory","PS","970"],["Panama","PA","507"],["Papua New Guinea","PG","675"],["Paraguay","PY","595"],["Peru","PE","51"],["Philippines","PH","63"],["Pitcairn","PN","870"],["Poland","PL","48"],["Portugal","PT","351"],["Puerto Rico","PR","1787 and 1939"],["Qatar","QA","974"],["Republic of the Congo","CG","242"],["Reunion","RE","262"],["Romania","RO","40"],["Russia","RU","7"],["Rwanda","RW","250"],["Saint Barthelemy","BL","590"],["Saint Helena","SH","290"],["Saint Kitts and Nevis","KN","1869"],["Saint Lucia","LC","1758"],["Saint Martin","MF","590"],["Saint Pierre and Miquelon","PM","508"],["Saint Vincent and the Grenadines","VC","1784"],["Samoa","WS","685"],["San Marino","SM","378"],["Sao Tome and Principe","ST","239"],["Saudi Arabia","SA","966"],["Senegal","SN","221"],["Serbia","RS","381"],["Seychelles","SC","248"],["Sierra Leone","SL","232"],["Singapore","SG","65"],["Sint Maarten","SX","599"],["Slovakia","SK","421"],["Slovenia","SI","386"],["Solomon Islands","SB","677"],["Somalia","SO","252"],["South Africa","ZA","27"],["South Korea","KR","82"],["South Sudan","SS","211"],["Spain","ES","34"],["Sri Lanka","LK","94"],["Sudan","SD","249"],["Suriname","SR","597"],["Svalbard and Jan Mayen","SJ","47"],["Swaziland","SZ","268"],["Sweden","SE","46"],["Switzerland","CH","41"],["Syria","SY","963"],["Taiwan","TW","886"],["Tajikistan","TJ","992"],["Tanzania","TZ","255"],["Thailand","TH","66"],["Togo","TG","228"],["Tokelau","TK","690"],["Tonga","TO","676"],["Trinidad and Tobago","TT","1868"],["Tunisia","TN","216"],["Turkey","TR","90"],["Turkmenistan","TM","993"],["Turks and Caicos Islands","TC","1649"],["Tuvalu","TV","688"],["U.S. Virgin Islands","VI","1340"],["Uganda","UG","256"],["Ukraine","UA","380"],["United Arab Emirates","AE","971"],["United Kingdom","GB","44"],["United States","US","1"],["United States Minor Outlying Islands","UM","1"],["Uruguay","UY","598"],["Uzbekistan","UZ","998"],["Vanuatu","VU","678"],["Vatican","VA","379"],["Venezuela","VE","58"],["Vietnam","VN","84"],["Wallis and Futuna","WF","681"],["Western Sahara","EH","212"],["Yemen","YE","967"],["Zambia","ZM","260"],["Zimbabwe","ZW","263"]] \ No newline at end of file diff --git a/src/countries_pretty.json b/src/countries_pretty.json new file mode 100644 index 00000000..405bf282 --- /dev/null +++ b/src/countries_pretty.json @@ -0,0 +1 @@ +[{"name":"Afghanistan","code":"AF","phoneCode":"93"},{"name":"Aland Islands","code":"AX","phoneCode":"35818"},{"name":"Albania","code":"AL","phoneCode":"355"},{"name":"Algeria","code":"DZ","phoneCode":"213"},{"name":"American Samoa","code":"AS","phoneCode":"1684"},{"name":"Andorra","code":"AD","phoneCode":"376"},{"name":"Angola","code":"AO","phoneCode":"244"},{"name":"Anguilla","code":"AI","phoneCode":"1264"},{"name":"Antigua and Barbuda","code":"AG","phoneCode":"1268"},{"name":"Argentina","code":"AR","phoneCode":"54"},{"name":"Armenia","code":"AM","phoneCode":"374"},{"name":"Aruba","code":"AW","phoneCode":"297"},{"name":"Australia","code":"AU","phoneCode":"61"},{"name":"Austria","code":"AT","phoneCode":"43"},{"name":"Azerbaijan","code":"AZ","phoneCode":"994"},{"name":"Bahamas","code":"BS","phoneCode":"1242"},{"name":"Bahrain","code":"BH","phoneCode":"973"},{"name":"Bangladesh","code":"BD","phoneCode":"880"},{"name":"Barbados","code":"BB","phoneCode":"1246"},{"name":"Belarus","code":"BY","phoneCode":"375"},{"name":"Belgium","code":"BE","phoneCode":"32"},{"name":"Belize","code":"BZ","phoneCode":"501"},{"name":"Benin","code":"BJ","phoneCode":"229"},{"name":"Bermuda","code":"BM","phoneCode":"1441"},{"name":"Bhutan","code":"BT","phoneCode":"975"},{"name":"Bolivia","code":"BO","phoneCode":"591"},{"name":"Bonaire, Saint Eustatius and Saba ","code":"BQ","phoneCode":"599"},{"name":"Bosnia and Herzegovina","code":"BA","phoneCode":"387"},{"name":"Botswana","code":"BW","phoneCode":"267"},{"name":"Brazil","code":"BR","phoneCode":"55"},{"name":"British Indian Ocean Territory","code":"IO","phoneCode":"246"},{"name":"British Virgin Islands","code":"VG","phoneCode":"1284"},{"name":"Brunei","code":"BN","phoneCode":"673"},{"name":"Bulgaria","code":"BG","phoneCode":"359"},{"name":"Burkina Faso","code":"BF","phoneCode":"226"},{"name":"Burundi","code":"BI","phoneCode":"257"},{"name":"Cambodia","code":"KH","phoneCode":"855"},{"name":"Cameroon","code":"CM","phoneCode":"237"},{"name":"Canada","code":"CA","phoneCode":"1"},{"name":"Cape Verde","code":"CV","phoneCode":"238"},{"name":"Cayman Islands","code":"KY","phoneCode":"1345"},{"name":"Central African Republic","code":"CF","phoneCode":"236"},{"name":"Chad","code":"TD","phoneCode":"235"},{"name":"Chile","code":"CL","phoneCode":"56"},{"name":"China","code":"CN","phoneCode":"86"},{"name":"Christmas Island","code":"CX","phoneCode":"61"},{"name":"Cocos Islands","code":"CC","phoneCode":"61"},{"name":"Colombia","code":"CO","phoneCode":"57"},{"name":"Comoros","code":"KM","phoneCode":"269"},{"name":"Cook Islands","code":"CK","phoneCode":"682"},{"name":"Costa Rica","code":"CR","phoneCode":"506"},{"name":"Croatia","code":"HR","phoneCode":"385"},{"name":"Cuba","code":"CU","phoneCode":"53"},{"name":"Curacao","code":"CW","phoneCode":"599"},{"name":"Cyprus","code":"CY","phoneCode":"357"},{"name":"Czech Republic","code":"CZ","phoneCode":"420"},{"name":"Democratic Republic of the Congo","code":"CD","phoneCode":"243"},{"name":"Denmark","code":"DK","phoneCode":"45"},{"name":"Djibouti","code":"DJ","phoneCode":"253"},{"name":"Dominica","code":"DM","phoneCode":"1767"},{"name":"Dominican Republic","code":"DO","phoneCode":"1809 and 1829"},{"name":"East Timor","code":"TL","phoneCode":"670"},{"name":"Ecuador","code":"EC","phoneCode":"593"},{"name":"Egypt","code":"EG","phoneCode":"20"},{"name":"El Salvador","code":"SV","phoneCode":"503"},{"name":"Equatorial Guinea","code":"GQ","phoneCode":"240"},{"name":"Eritrea","code":"ER","phoneCode":"291"},{"name":"Estonia","code":"EE","phoneCode":"372"},{"name":"Ethiopia","code":"ET","phoneCode":"251"},{"name":"Falkland Islands","code":"FK","phoneCode":"500"},{"name":"Faroe Islands","code":"FO","phoneCode":"298"},{"name":"Fiji","code":"FJ","phoneCode":"679"},{"name":"Finland","code":"FI","phoneCode":"358"},{"name":"France","code":"FR","phoneCode":"33"},{"name":"French Guiana","code":"GF","phoneCode":"594"},{"name":"French Polynesia","code":"PF","phoneCode":"689"},{"name":"Gabon","code":"GA","phoneCode":"241"},{"name":"Gambia","code":"GM","phoneCode":"220"},{"name":"Georgia","code":"GE","phoneCode":"995"},{"name":"Germany","code":"DE","phoneCode":"49"},{"name":"Ghana","code":"GH","phoneCode":"233"},{"name":"Gibraltar","code":"GI","phoneCode":"350"},{"name":"Greece","code":"GR","phoneCode":"30"},{"name":"Greenland","code":"GL","phoneCode":"299"},{"name":"Grenada","code":"GD","phoneCode":"1473"},{"name":"Guadeloupe","code":"GP","phoneCode":"590"},{"name":"Guam","code":"GU","phoneCode":"1671"},{"name":"Guatemala","code":"GT","phoneCode":"502"},{"name":"Guernsey","code":"GG","phoneCode":"441481"},{"name":"Guinea","code":"GN","phoneCode":"224"},{"name":"Guinea-Bissau","code":"GW","phoneCode":"245"},{"name":"Guyana","code":"GY","phoneCode":"592"},{"name":"Haiti","code":"HT","phoneCode":"509"},{"name":"Heard Island and McDonald Islands","code":"HM","phoneCode":" "},{"name":"Honduras","code":"HN","phoneCode":"504"},{"name":"Hong Kong","code":"HK","phoneCode":"852"},{"name":"Hungary","code":"HU","phoneCode":"36"},{"name":"Iceland","code":"IS","phoneCode":"354"},{"name":"India","code":"IN","phoneCode":"91"},{"name":"Indonesia","code":"ID","phoneCode":"62"},{"name":"Iran","code":"IR","phoneCode":"98"},{"name":"Iraq","code":"IQ","phoneCode":"964"},{"name":"Ireland","code":"IE","phoneCode":"353"},{"name":"Isle of Man","code":"IM","phoneCode":"441624"},{"name":"Israel","code":"IL","phoneCode":"972"},{"name":"Italy","code":"IT","phoneCode":"39"},{"name":"Ivory Coast","code":"CI","phoneCode":"225"},{"name":"Jamaica","code":"JM","phoneCode":"1876"},{"name":"Japan","code":"JP","phoneCode":"81"},{"name":"Jersey","code":"JE","phoneCode":"441534"},{"name":"Jordan","code":"JO","phoneCode":"962"},{"name":"Kazakhstan","code":"KZ","phoneCode":"7"},{"name":"Kenya","code":"KE","phoneCode":"254"},{"name":"Kiribati","code":"KI","phoneCode":"686"},{"name":"Kuwait","code":"KW","phoneCode":"965"},{"name":"Kyrgyzstan","code":"KG","phoneCode":"996"},{"name":"Laos","code":"LA","phoneCode":"856"},{"name":"Latvia","code":"LV","phoneCode":"371"},{"name":"Lebanon","code":"LB","phoneCode":"961"},{"name":"Lesotho","code":"LS","phoneCode":"266"},{"name":"Liberia","code":"LR","phoneCode":"231"},{"name":"Libya","code":"LY","phoneCode":"218"},{"name":"Liechtenstein","code":"LI","phoneCode":"423"},{"name":"Lithuania","code":"LT","phoneCode":"370"},{"name":"Luxembourg","code":"LU","phoneCode":"352"},{"name":"Macao","code":"MO","phoneCode":"853"},{"name":"Macedonia","code":"MK","phoneCode":"389"},{"name":"Madagascar","code":"MG","phoneCode":"261"},{"name":"Malawi","code":"MW","phoneCode":"265"},{"name":"Malaysia","code":"MY","phoneCode":"60"},{"name":"Maldives","code":"MV","phoneCode":"960"},{"name":"Mali","code":"ML","phoneCode":"223"},{"name":"Malta","code":"MT","phoneCode":"356"},{"name":"Marshall Islands","code":"MH","phoneCode":"692"},{"name":"Martinique","code":"MQ","phoneCode":"596"},{"name":"Mauritania","code":"MR","phoneCode":"222"},{"name":"Mauritius","code":"MU","phoneCode":"230"},{"name":"Mayotte","code":"YT","phoneCode":"262"},{"name":"Mexico","code":"MX","phoneCode":"52"},{"name":"Micronesia","code":"FM","phoneCode":"691"},{"name":"Moldova","code":"MD","phoneCode":"373"},{"name":"Monaco","code":"MC","phoneCode":"377"},{"name":"Mongolia","code":"MN","phoneCode":"976"},{"name":"Montenegro","code":"ME","phoneCode":"382"},{"name":"Montserrat","code":"MS","phoneCode":"1664"},{"name":"Morocco","code":"MA","phoneCode":"212"},{"name":"Mozambique","code":"MZ","phoneCode":"258"},{"name":"Myanmar","code":"MM","phoneCode":"95"},{"name":"Namibia","code":"NA","phoneCode":"264"},{"name":"Nauru","code":"NR","phoneCode":"674"},{"name":"Nepal","code":"NP","phoneCode":"977"},{"name":"Netherlands","code":"NL","phoneCode":"31"},{"name":"New Caledonia","code":"NC","phoneCode":"687"},{"name":"New Zealand","code":"NZ","phoneCode":"64"},{"name":"Nicaragua","code":"NI","phoneCode":"505"},{"name":"Niger","code":"NE","phoneCode":"227"},{"name":"Nigeria","code":"NG","phoneCode":"234"},{"name":"Niue","code":"NU","phoneCode":"683"},{"name":"Norfolk Island","code":"NF","phoneCode":"672"},{"name":"North Korea","code":"KP","phoneCode":"850"},{"name":"Northern Mariana Islands","code":"MP","phoneCode":"1670"},{"name":"Norway","code":"NO","phoneCode":"47"},{"name":"Oman","code":"OM","phoneCode":"968"},{"name":"Pakistan","code":"PK","phoneCode":"92"},{"name":"Palau","code":"PW","phoneCode":"680"},{"name":"Palestinian Territory","code":"PS","phoneCode":"970"},{"name":"Panama","code":"PA","phoneCode":"507"},{"name":"Papua New Guinea","code":"PG","phoneCode":"675"},{"name":"Paraguay","code":"PY","phoneCode":"595"},{"name":"Peru","code":"PE","phoneCode":"51"},{"name":"Philippines","code":"PH","phoneCode":"63"},{"name":"Pitcairn","code":"PN","phoneCode":"870"},{"name":"Poland","code":"PL","phoneCode":"48"},{"name":"Portugal","code":"PT","phoneCode":"351"},{"name":"Puerto Rico","code":"PR","phoneCode":"1787 and 1939"},{"name":"Qatar","code":"QA","phoneCode":"974"},{"name":"Republic of the Congo","code":"CG","phoneCode":"242"},{"name":"Reunion","code":"RE","phoneCode":"262"},{"name":"Romania","code":"RO","phoneCode":"40"},{"name":"Russia","code":"RU","phoneCode":"7"},{"name":"Rwanda","code":"RW","phoneCode":"250"},{"name":"Saint Barthelemy","code":"BL","phoneCode":"590"},{"name":"Saint Helena","code":"SH","phoneCode":"290"},{"name":"Saint Kitts and Nevis","code":"KN","phoneCode":"1869"},{"name":"Saint Lucia","code":"LC","phoneCode":"1758"},{"name":"Saint Martin","code":"MF","phoneCode":"590"},{"name":"Saint Pierre and Miquelon","code":"PM","phoneCode":"508"},{"name":"Saint Vincent and the Grenadines","code":"VC","phoneCode":"1784"},{"name":"Samoa","code":"WS","phoneCode":"685"},{"name":"San Marino","code":"SM","phoneCode":"378"},{"name":"Sao Tome and Principe","code":"ST","phoneCode":"239"},{"name":"Saudi Arabia","code":"SA","phoneCode":"966"},{"name":"Senegal","code":"SN","phoneCode":"221"},{"name":"Serbia","code":"RS","phoneCode":"381"},{"name":"Seychelles","code":"SC","phoneCode":"248"},{"name":"Sierra Leone","code":"SL","phoneCode":"232"},{"name":"Singapore","code":"SG","phoneCode":"65"},{"name":"Sint Maarten","code":"SX","phoneCode":"599"},{"name":"Slovakia","code":"SK","phoneCode":"421"},{"name":"Slovenia","code":"SI","phoneCode":"386"},{"name":"Solomon Islands","code":"SB","phoneCode":"677"},{"name":"Somalia","code":"SO","phoneCode":"252"},{"name":"South Africa","code":"ZA","phoneCode":"27"},{"name":"South Korea","code":"KR","phoneCode":"82"},{"name":"South Sudan","code":"SS","phoneCode":"211"},{"name":"Spain","code":"ES","phoneCode":"34"},{"name":"Sri Lanka","code":"LK","phoneCode":"94"},{"name":"Sudan","code":"SD","phoneCode":"249"},{"name":"Suriname","code":"SR","phoneCode":"597"},{"name":"Svalbard and Jan Mayen","code":"SJ","phoneCode":"47"},{"name":"Swaziland","code":"SZ","phoneCode":"268"},{"name":"Sweden","code":"SE","phoneCode":"46"},{"name":"Switzerland","code":"CH","phoneCode":"41"},{"name":"Syria","code":"SY","phoneCode":"963"},{"name":"Taiwan","code":"TW","phoneCode":"886"},{"name":"Tajikistan","code":"TJ","phoneCode":"992"},{"name":"Tanzania","code":"TZ","phoneCode":"255"},{"name":"Thailand","code":"TH","phoneCode":"66"},{"name":"Togo","code":"TG","phoneCode":"228"},{"name":"Tokelau","code":"TK","phoneCode":"690"},{"name":"Tonga","code":"TO","phoneCode":"676"},{"name":"Trinidad and Tobago","code":"TT","phoneCode":"1868"},{"name":"Tunisia","code":"TN","phoneCode":"216"},{"name":"Turkey","code":"TR","phoneCode":"90"},{"name":"Turkmenistan","code":"TM","phoneCode":"993"},{"name":"Turks and Caicos Islands","code":"TC","phoneCode":"1649"},{"name":"Tuvalu","code":"TV","phoneCode":"688"},{"name":"U.S. Virgin Islands","code":"VI","phoneCode":"1340"},{"name":"Uganda","code":"UG","phoneCode":"256"},{"name":"Ukraine","code":"UA","phoneCode":"380"},{"name":"United Arab Emirates","code":"AE","phoneCode":"971"},{"name":"United Kingdom","code":"GB","phoneCode":"44"},{"name":"United States","code":"US","phoneCode":"1"},{"name":"United States Minor Outlying Islands","code":"UM","phoneCode":"1"},{"name":"Uruguay","code":"UY","phoneCode":"598"},{"name":"Uzbekistan","code":"UZ","phoneCode":"998"},{"name":"Vanuatu","code":"VU","phoneCode":"678"},{"name":"Vatican","code":"VA","phoneCode":"379"},{"name":"Venezuela","code":"VE","phoneCode":"58"},{"name":"Vietnam","code":"VN","phoneCode":"84"},{"name":"Wallis and Futuna","code":"WF","phoneCode":"681"},{"name":"Western Sahara","code":"EH","phoneCode":"212"},{"name":"Yemen","code":"YE","phoneCode":"967"},{"name":"Zambia","code":"ZM","phoneCode":"260"},{"name":"Zimbabwe","code":"ZW","phoneCode":"263"}] \ No newline at end of file diff --git a/src/dialogsBug.js b/src/dialogsBug.js new file mode 100644 index 00000000..be8d3b98 --- /dev/null +++ b/src/dialogsBug.js @@ -0,0 +1,28 @@ +MTProto.apiManager.invokeApi('messages.getPeerDialogs', { + peers: [ + { + _: 'inputDialogPeer', + peer: {_: 'inputPeerUser', user_id: 296814355, access_hash: '7461657386624868366'} +} +] +}).then(dialogs => console.log(dialogs)); + +MTProto.apiManager.invokeApi('messages.getPinnedDialogs', { + folder_id: 0 +}).then(dialogs => console.log(dialogs)); + +// read_outbox_max_id && read_inbox_max_id are 0! +MTProto.apiManager.invokeApi('messages.getDialogs', { + flags: 0 | 1, + exclude_pinned: true, + folder_id: 0, + offset_date: 0, + offset_id: 0, + offset_peer: {_: 'inputPeerEmpty'}, + limit: 6, + hash: Date.now() * 5 +}).then(dialogs => console.log(dialogs)); + +// [109, 188, 177, 157, 19, 7, 177, 17, 49, 155, 9, 0, 44, 155, 9, 0, 237, 154, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 157, 80, 175] - works +// [109, 188, 177, 157, 19, 7, 177, 17, 49, 155, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 157, 80, 175] - pinned + diff --git a/src/emoji.json b/src/emoji.json new file mode 100644 index 00000000..2249bc3a --- /dev/null +++ b/src/emoji.json @@ -0,0 +1 @@ +{"#️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":0,"sort_order":132},"*️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":1,"sort_order":133},"0️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":2,"sort_order":134},"1️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":3,"sort_order":135},"2️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":4,"sort_order":136},"3️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":5,"sort_order":137},"4️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":6,"sort_order":138},"5️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":7,"sort_order":139},"6️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":8,"sort_order":140},"7️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":9,"sort_order":141},"8️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":10,"sort_order":142},"9️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":11,"sort_order":143},"©️":{"category":"Symbols","sheet_x":0,"sheet_y":12,"sort_order":129},"®️":{"category":"Symbols","sheet_x":0,"sheet_y":13,"sort_order":130},"🀄":{"category":"Activities","sheet_x":0,"sheet_y":14,"sort_order":73},"🃏":{"category":"Activities","sheet_x":0,"sheet_y":15,"sort_order":72},"🅰️":{"category":"Symbols","sheet_x":0,"sheet_y":16,"sort_order":150},"🅱️":{"category":"Symbols","sheet_x":0,"sheet_y":17,"sort_order":152},"🅾️":{"category":"Symbols","sheet_x":0,"sheet_y":18,"sort_order":161},"🅿️":{"category":"Symbols","sheet_x":0,"sheet_y":19,"sort_order":163},"🆎":{"category":"Symbols","sheet_x":0,"sheet_y":20,"sort_order":151},"🆑":{"category":"Symbols","sheet_x":0,"sheet_y":21,"sort_order":153},"🆒":{"category":"Symbols","sheet_x":0,"sheet_y":22,"sort_order":154},"🆓":{"category":"Symbols","sheet_x":0,"sheet_y":23,"sort_order":155},"🆔":{"category":"Symbols","sheet_x":0,"sheet_y":24,"sort_order":157},"🆕":{"category":"Symbols","sheet_x":0,"sheet_y":25,"sort_order":159},"🆖":{"category":"Symbols","sheet_x":0,"sheet_y":26,"sort_order":160},"🆗":{"category":"Symbols","sheet_x":0,"sheet_y":27,"sort_order":162},"🆘":{"category":"Symbols","sheet_x":0,"sheet_y":28,"sort_order":164},"🆙":{"category":"Symbols","sheet_x":0,"sheet_y":29,"sort_order":165},"🆚":{"category":"Symbols","sheet_x":0,"sheet_y":30,"sort_order":166},"🇦🇨":{"category":"Flags","sheet_x":0,"sheet_y":31,"sort_order":8},"🇦🇩":{"category":"Flags","sheet_x":0,"sheet_y":32,"sort_order":9},"🇦🇪":{"category":"Flags","sheet_x":0,"sheet_y":33,"sort_order":10},"🇦🇫":{"category":"Flags","sheet_x":0,"sheet_y":34,"sort_order":11},"🇦🇬":{"category":"Flags","sheet_x":0,"sheet_y":35,"sort_order":12},"🇦🇮":{"category":"Flags","sheet_x":0,"sheet_y":36,"sort_order":13},"🇦🇱":{"category":"Flags","sheet_x":0,"sheet_y":37,"sort_order":14},"🇦🇲":{"category":"Flags","sheet_x":0,"sheet_y":38,"sort_order":15},"🇦🇴":{"category":"Flags","sheet_x":0,"sheet_y":39,"sort_order":16},"🇦🇶":{"category":"Flags","sheet_x":0,"sheet_y":40,"sort_order":17},"🇦🇷":{"category":"Flags","sheet_x":0,"sheet_y":41,"sort_order":18},"🇦🇸":{"category":"Flags","sheet_x":0,"sheet_y":42,"sort_order":19},"🇦🇹":{"category":"Flags","sheet_x":0,"sheet_y":43,"sort_order":20},"🇦🇺":{"category":"Flags","sheet_x":0,"sheet_y":44,"sort_order":21},"🇦🇼":{"category":"Flags","sheet_x":0,"sheet_y":45,"sort_order":22},"🇦🇽":{"category":"Flags","sheet_x":0,"sheet_y":46,"sort_order":23},"🇦🇿":{"category":"Flags","sheet_x":0,"sheet_y":47,"sort_order":24},"🇧🇦":{"category":"Flags","sheet_x":0,"sheet_y":48,"sort_order":25},"🇧🇧":{"category":"Flags","sheet_x":0,"sheet_y":49,"sort_order":26},"🇧🇩":{"category":"Flags","sheet_x":0,"sheet_y":50,"sort_order":27},"🇧🇪":{"category":"Flags","sheet_x":0,"sheet_y":51,"sort_order":28},"🇧🇫":{"category":"Flags","sheet_x":0,"sheet_y":52,"sort_order":29},"🇧🇬":{"category":"Flags","sheet_x":0,"sheet_y":53,"sort_order":30},"🇧🇭":{"category":"Flags","sheet_x":0,"sheet_y":54,"sort_order":31},"🇧🇮":{"category":"Flags","sheet_x":0,"sheet_y":55,"sort_order":32},"🇧🇯":{"category":"Flags","sheet_x":0,"sheet_y":56,"sort_order":33},"🇧🇱":{"category":"Flags","sheet_x":1,"sheet_y":0,"sort_order":34},"🇧🇲":{"category":"Flags","sheet_x":1,"sheet_y":1,"sort_order":35},"🇧🇳":{"category":"Flags","sheet_x":1,"sheet_y":2,"sort_order":36},"🇧🇴":{"category":"Flags","sheet_x":1,"sheet_y":3,"sort_order":37},"🇧🇶":{"category":"Flags","sheet_x":1,"sheet_y":4,"sort_order":38},"🇧🇷":{"category":"Flags","sheet_x":1,"sheet_y":5,"sort_order":39},"🇧🇸":{"category":"Flags","sheet_x":1,"sheet_y":6,"sort_order":40},"🇧🇹":{"category":"Flags","sheet_x":1,"sheet_y":7,"sort_order":41},"🇧🇻":{"category":"Flags","sheet_x":1,"sheet_y":8,"sort_order":42},"🇧🇼":{"category":"Flags","sheet_x":1,"sheet_y":9,"sort_order":43},"🇧🇾":{"category":"Flags","sheet_x":1,"sheet_y":10,"sort_order":44},"🇧🇿":{"category":"Flags","sheet_x":1,"sheet_y":11,"sort_order":45},"🇨🇦":{"category":"Flags","sheet_x":1,"sheet_y":12,"sort_order":46},"🇨🇨":{"category":"Flags","sheet_x":1,"sheet_y":13,"sort_order":47},"🇨🇩":{"category":"Flags","sheet_x":1,"sheet_y":14,"sort_order":48},"🇨🇫":{"category":"Flags","sheet_x":1,"sheet_y":15,"sort_order":49},"🇨🇬":{"category":"Flags","sheet_x":1,"sheet_y":16,"sort_order":50},"🇨🇭":{"category":"Flags","sheet_x":1,"sheet_y":17,"sort_order":51},"🇨🇮":{"category":"Flags","sheet_x":1,"sheet_y":18,"sort_order":52},"🇨🇰":{"category":"Flags","sheet_x":1,"sheet_y":19,"sort_order":53},"🇨🇱":{"category":"Flags","sheet_x":1,"sheet_y":20,"sort_order":54},"🇨🇲":{"category":"Flags","sheet_x":1,"sheet_y":21,"sort_order":55},"🇨🇳":{"category":"Flags","sheet_x":1,"sheet_y":22,"sort_order":56},"🇨🇴":{"category":"Flags","sheet_x":1,"sheet_y":23,"sort_order":57},"🇨🇵":{"category":"Flags","sheet_x":1,"sheet_y":24,"sort_order":58},"🇨🇷":{"category":"Flags","sheet_x":1,"sheet_y":25,"sort_order":59},"🇨🇺":{"category":"Flags","sheet_x":1,"sheet_y":26,"sort_order":60},"🇨🇻":{"category":"Flags","sheet_x":1,"sheet_y":27,"sort_order":61},"🇨🇼":{"category":"Flags","sheet_x":1,"sheet_y":28,"sort_order":62},"🇨🇽":{"category":"Flags","sheet_x":1,"sheet_y":29,"sort_order":63},"🇨🇾":{"category":"Flags","sheet_x":1,"sheet_y":30,"sort_order":64},"🇨🇿":{"category":"Flags","sheet_x":1,"sheet_y":31,"sort_order":65},"🇩🇪":{"category":"Flags","sheet_x":1,"sheet_y":32,"sort_order":66},"🇩🇬":{"category":"Flags","sheet_x":1,"sheet_y":33,"sort_order":67},"🇩🇯":{"category":"Flags","sheet_x":1,"sheet_y":34,"sort_order":68},"🇩🇰":{"category":"Flags","sheet_x":1,"sheet_y":35,"sort_order":69},"🇩🇲":{"category":"Flags","sheet_x":1,"sheet_y":36,"sort_order":70},"🇩🇴":{"category":"Flags","sheet_x":1,"sheet_y":37,"sort_order":71},"🇩🇿":{"category":"Flags","sheet_x":1,"sheet_y":38,"sort_order":72},"🇪🇦":{"category":"Flags","sheet_x":1,"sheet_y":39,"sort_order":73},"🇪🇨":{"category":"Flags","sheet_x":1,"sheet_y":40,"sort_order":74},"🇪🇪":{"category":"Flags","sheet_x":1,"sheet_y":41,"sort_order":75},"🇪🇬":{"category":"Flags","sheet_x":1,"sheet_y":42,"sort_order":76},"🇪🇭":{"category":"Flags","sheet_x":1,"sheet_y":43,"sort_order":77},"🇪🇷":{"category":"Flags","sheet_x":1,"sheet_y":44,"sort_order":78},"🇪🇸":{"category":"Flags","sheet_x":1,"sheet_y":45,"sort_order":79},"🇪🇹":{"category":"Flags","sheet_x":1,"sheet_y":46,"sort_order":80},"🇪🇺":{"category":"Flags","sheet_x":1,"sheet_y":47,"sort_order":81},"🇫🇮":{"category":"Flags","sheet_x":1,"sheet_y":48,"sort_order":82},"🇫🇯":{"category":"Flags","sheet_x":1,"sheet_y":49,"sort_order":83},"🇫🇰":{"category":"Flags","sheet_x":1,"sheet_y":50,"sort_order":84},"🇫🇲":{"category":"Flags","sheet_x":1,"sheet_y":51,"sort_order":85},"🇫🇴":{"category":"Flags","sheet_x":1,"sheet_y":52,"sort_order":86},"🇫🇷":{"category":"Flags","sheet_x":1,"sheet_y":53,"sort_order":87},"🇬🇦":{"category":"Flags","sheet_x":1,"sheet_y":54,"sort_order":88},"🇬🇧":{"category":"Flags","sheet_x":1,"sheet_y":55,"sort_order":89},"🇬🇩":{"category":"Flags","sheet_x":1,"sheet_y":56,"sort_order":90},"🇬🇪":{"category":"Flags","sheet_x":2,"sheet_y":0,"sort_order":91},"🇬🇫":{"category":"Flags","sheet_x":2,"sheet_y":1,"sort_order":92},"🇬🇬":{"category":"Flags","sheet_x":2,"sheet_y":2,"sort_order":93},"🇬🇭":{"category":"Flags","sheet_x":2,"sheet_y":3,"sort_order":94},"🇬🇮":{"category":"Flags","sheet_x":2,"sheet_y":4,"sort_order":95},"🇬🇱":{"category":"Flags","sheet_x":2,"sheet_y":5,"sort_order":96},"🇬🇲":{"category":"Flags","sheet_x":2,"sheet_y":6,"sort_order":97},"🇬🇳":{"category":"Flags","sheet_x":2,"sheet_y":7,"sort_order":98},"🇬🇵":{"category":"Flags","sheet_x":2,"sheet_y":8,"sort_order":99},"🇬🇶":{"category":"Flags","sheet_x":2,"sheet_y":9,"sort_order":100},"🇬🇷":{"category":"Flags","sheet_x":2,"sheet_y":10,"sort_order":101},"🇬🇸":{"category":"Flags","sheet_x":2,"sheet_y":11,"sort_order":102},"🇬🇹":{"category":"Flags","sheet_x":2,"sheet_y":12,"sort_order":103},"🇬🇺":{"category":"Flags","sheet_x":2,"sheet_y":13,"sort_order":104},"🇬🇼":{"category":"Flags","sheet_x":2,"sheet_y":14,"sort_order":105},"🇬🇾":{"category":"Flags","sheet_x":2,"sheet_y":15,"sort_order":106},"🇭🇰":{"category":"Flags","sheet_x":2,"sheet_y":16,"sort_order":107},"🇭🇲":{"category":"Flags","sheet_x":2,"sheet_y":17,"sort_order":108},"🇭🇳":{"category":"Flags","sheet_x":2,"sheet_y":18,"sort_order":109},"🇭🇷":{"category":"Flags","sheet_x":2,"sheet_y":19,"sort_order":110},"🇭🇹":{"category":"Flags","sheet_x":2,"sheet_y":20,"sort_order":111},"🇭🇺":{"category":"Flags","sheet_x":2,"sheet_y":21,"sort_order":112},"🇮🇨":{"category":"Flags","sheet_x":2,"sheet_y":22,"sort_order":113},"🇮🇩":{"category":"Flags","sheet_x":2,"sheet_y":23,"sort_order":114},"🇮🇪":{"category":"Flags","sheet_x":2,"sheet_y":24,"sort_order":115},"🇮🇱":{"category":"Flags","sheet_x":2,"sheet_y":25,"sort_order":116},"🇮🇲":{"category":"Flags","sheet_x":2,"sheet_y":26,"sort_order":117},"🇮🇳":{"category":"Flags","sheet_x":2,"sheet_y":27,"sort_order":118},"🇮🇴":{"category":"Flags","sheet_x":2,"sheet_y":28,"sort_order":119},"🇮🇶":{"category":"Flags","sheet_x":2,"sheet_y":29,"sort_order":120},"🇮🇷":{"category":"Flags","sheet_x":2,"sheet_y":30,"sort_order":121},"🇮🇸":{"category":"Flags","sheet_x":2,"sheet_y":31,"sort_order":122},"🇮🇹":{"category":"Flags","sheet_x":2,"sheet_y":32,"sort_order":123},"🇯🇪":{"category":"Flags","sheet_x":2,"sheet_y":33,"sort_order":124},"🇯🇲":{"category":"Flags","sheet_x":2,"sheet_y":34,"sort_order":125},"🇯🇴":{"category":"Flags","sheet_x":2,"sheet_y":35,"sort_order":126},"🇯🇵":{"category":"Flags","sheet_x":2,"sheet_y":36,"sort_order":127},"🇰🇪":{"category":"Flags","sheet_x":2,"sheet_y":37,"sort_order":128},"🇰🇬":{"category":"Flags","sheet_x":2,"sheet_y":38,"sort_order":129},"🇰🇭":{"category":"Flags","sheet_x":2,"sheet_y":39,"sort_order":130},"🇰🇮":{"category":"Flags","sheet_x":2,"sheet_y":40,"sort_order":131},"🇰🇲":{"category":"Flags","sheet_x":2,"sheet_y":41,"sort_order":132},"🇰🇳":{"category":"Flags","sheet_x":2,"sheet_y":42,"sort_order":133},"🇰🇵":{"category":"Flags","sheet_x":2,"sheet_y":43,"sort_order":134},"🇰🇷":{"category":"Flags","sheet_x":2,"sheet_y":44,"sort_order":135},"🇰🇼":{"category":"Flags","sheet_x":2,"sheet_y":45,"sort_order":136},"🇰🇾":{"category":"Flags","sheet_x":2,"sheet_y":46,"sort_order":137},"🇰🇿":{"category":"Flags","sheet_x":2,"sheet_y":47,"sort_order":138},"🇱🇦":{"category":"Flags","sheet_x":2,"sheet_y":48,"sort_order":139},"🇱🇧":{"category":"Flags","sheet_x":2,"sheet_y":49,"sort_order":140},"🇱🇨":{"category":"Flags","sheet_x":2,"sheet_y":50,"sort_order":141},"🇱🇮":{"category":"Flags","sheet_x":2,"sheet_y":51,"sort_order":142},"🇱🇰":{"category":"Flags","sheet_x":2,"sheet_y":52,"sort_order":143},"🇱🇷":{"category":"Flags","sheet_x":2,"sheet_y":53,"sort_order":144},"🇱🇸":{"category":"Flags","sheet_x":2,"sheet_y":54,"sort_order":145},"🇱🇹":{"category":"Flags","sheet_x":2,"sheet_y":55,"sort_order":146},"🇱🇺":{"category":"Flags","sheet_x":2,"sheet_y":56,"sort_order":147},"🇱🇻":{"category":"Flags","sheet_x":3,"sheet_y":0,"sort_order":148},"🇱🇾":{"category":"Flags","sheet_x":3,"sheet_y":1,"sort_order":149},"🇲🇦":{"category":"Flags","sheet_x":3,"sheet_y":2,"sort_order":150},"🇲🇨":{"category":"Flags","sheet_x":3,"sheet_y":3,"sort_order":151},"🇲🇩":{"category":"Flags","sheet_x":3,"sheet_y":4,"sort_order":152},"🇲🇪":{"category":"Flags","sheet_x":3,"sheet_y":5,"sort_order":153},"🇲🇫":{"category":"Flags","sheet_x":3,"sheet_y":6,"sort_order":154},"🇲🇬":{"category":"Flags","sheet_x":3,"sheet_y":7,"sort_order":155},"🇲🇭":{"category":"Flags","sheet_x":3,"sheet_y":8,"sort_order":156},"🇲🇰":{"category":"Flags","sheet_x":3,"sheet_y":9,"sort_order":157},"🇲🇱":{"category":"Flags","sheet_x":3,"sheet_y":10,"sort_order":158},"🇲🇲":{"category":"Flags","sheet_x":3,"sheet_y":11,"sort_order":159},"🇲🇳":{"category":"Flags","sheet_x":3,"sheet_y":12,"sort_order":160},"🇲🇴":{"category":"Flags","sheet_x":3,"sheet_y":13,"sort_order":161},"🇲🇵":{"category":"Flags","sheet_x":3,"sheet_y":14,"sort_order":162},"🇲🇶":{"category":"Flags","sheet_x":3,"sheet_y":15,"sort_order":163},"🇲🇷":{"category":"Flags","sheet_x":3,"sheet_y":16,"sort_order":164},"🇲🇸":{"category":"Flags","sheet_x":3,"sheet_y":17,"sort_order":165},"🇲🇹":{"category":"Flags","sheet_x":3,"sheet_y":18,"sort_order":166},"🇲🇺":{"category":"Flags","sheet_x":3,"sheet_y":19,"sort_order":167},"🇲🇻":{"category":"Flags","sheet_x":3,"sheet_y":20,"sort_order":168},"🇲🇼":{"category":"Flags","sheet_x":3,"sheet_y":21,"sort_order":169},"🇲🇽":{"category":"Flags","sheet_x":3,"sheet_y":22,"sort_order":170},"🇲🇾":{"category":"Flags","sheet_x":3,"sheet_y":23,"sort_order":171},"🇲🇿":{"category":"Flags","sheet_x":3,"sheet_y":24,"sort_order":172},"🇳🇦":{"category":"Flags","sheet_x":3,"sheet_y":25,"sort_order":173},"🇳🇨":{"category":"Flags","sheet_x":3,"sheet_y":26,"sort_order":174},"🇳🇪":{"category":"Flags","sheet_x":3,"sheet_y":27,"sort_order":175},"🇳🇫":{"category":"Flags","sheet_x":3,"sheet_y":28,"sort_order":176},"🇳🇬":{"category":"Flags","sheet_x":3,"sheet_y":29,"sort_order":177},"🇳🇮":{"category":"Flags","sheet_x":3,"sheet_y":30,"sort_order":178},"🇳🇱":{"category":"Flags","sheet_x":3,"sheet_y":31,"sort_order":179},"🇳🇴":{"category":"Flags","sheet_x":3,"sheet_y":32,"sort_order":180},"🇳🇵":{"category":"Flags","sheet_x":3,"sheet_y":33,"sort_order":181},"🇳🇷":{"category":"Flags","sheet_x":3,"sheet_y":34,"sort_order":182},"🇳🇺":{"category":"Flags","sheet_x":3,"sheet_y":35,"sort_order":183},"🇳🇿":{"category":"Flags","sheet_x":3,"sheet_y":36,"sort_order":184},"🇴🇲":{"category":"Flags","sheet_x":3,"sheet_y":37,"sort_order":185},"🇵🇦":{"category":"Flags","sheet_x":3,"sheet_y":38,"sort_order":186},"🇵🇪":{"category":"Flags","sheet_x":3,"sheet_y":39,"sort_order":187},"🇵🇫":{"category":"Flags","sheet_x":3,"sheet_y":40,"sort_order":188},"🇵🇬":{"category":"Flags","sheet_x":3,"sheet_y":41,"sort_order":189},"🇵🇭":{"category":"Flags","sheet_x":3,"sheet_y":42,"sort_order":190},"🇵🇰":{"category":"Flags","sheet_x":3,"sheet_y":43,"sort_order":191},"🇵🇱":{"category":"Flags","sheet_x":3,"sheet_y":44,"sort_order":192},"🇵🇲":{"category":"Flags","sheet_x":3,"sheet_y":45,"sort_order":193},"🇵🇳":{"category":"Flags","sheet_x":3,"sheet_y":46,"sort_order":194},"🇵🇷":{"category":"Flags","sheet_x":3,"sheet_y":47,"sort_order":195},"🇵🇸":{"category":"Flags","sheet_x":3,"sheet_y":48,"sort_order":196},"🇵🇹":{"category":"Flags","sheet_x":3,"sheet_y":49,"sort_order":197},"🇵🇼":{"category":"Flags","sheet_x":3,"sheet_y":50,"sort_order":198},"🇵🇾":{"category":"Flags","sheet_x":3,"sheet_y":51,"sort_order":199},"🇶🇦":{"category":"Flags","sheet_x":3,"sheet_y":52,"sort_order":200},"🇷🇪":{"category":"Flags","sheet_x":3,"sheet_y":53,"sort_order":201},"🇷🇴":{"category":"Flags","sheet_x":3,"sheet_y":54,"sort_order":202},"🇷🇸":{"category":"Flags","sheet_x":3,"sheet_y":55,"sort_order":203},"🇷🇺":{"category":"Flags","sheet_x":3,"sheet_y":56,"sort_order":204},"🇷🇼":{"category":"Flags","sheet_x":4,"sheet_y":0,"sort_order":205},"🇸🇦":{"category":"Flags","sheet_x":4,"sheet_y":1,"sort_order":206},"🇸🇧":{"category":"Flags","sheet_x":4,"sheet_y":2,"sort_order":207},"🇸🇨":{"category":"Flags","sheet_x":4,"sheet_y":3,"sort_order":208},"🇸🇩":{"category":"Flags","sheet_x":4,"sheet_y":4,"sort_order":209},"🇸🇪":{"category":"Flags","sheet_x":4,"sheet_y":5,"sort_order":210},"🇸🇬":{"category":"Flags","sheet_x":4,"sheet_y":6,"sort_order":211},"🇸🇭":{"category":"Flags","sheet_x":4,"sheet_y":7,"sort_order":212},"🇸🇮":{"category":"Flags","sheet_x":4,"sheet_y":8,"sort_order":213},"🇸🇯":{"category":"Flags","sheet_x":4,"sheet_y":9,"sort_order":214},"🇸🇰":{"category":"Flags","sheet_x":4,"sheet_y":10,"sort_order":215},"🇸🇱":{"category":"Flags","sheet_x":4,"sheet_y":11,"sort_order":216},"🇸🇲":{"category":"Flags","sheet_x":4,"sheet_y":12,"sort_order":217},"🇸🇳":{"category":"Flags","sheet_x":4,"sheet_y":13,"sort_order":218},"🇸🇴":{"category":"Flags","sheet_x":4,"sheet_y":14,"sort_order":219},"🇸🇷":{"category":"Flags","sheet_x":4,"sheet_y":15,"sort_order":220},"🇸🇸":{"category":"Flags","sheet_x":4,"sheet_y":16,"sort_order":221},"🇸🇹":{"category":"Flags","sheet_x":4,"sheet_y":17,"sort_order":222},"🇸🇻":{"category":"Flags","sheet_x":4,"sheet_y":18,"sort_order":223},"🇸🇽":{"category":"Flags","sheet_x":4,"sheet_y":19,"sort_order":224},"🇸🇾":{"category":"Flags","sheet_x":4,"sheet_y":20,"sort_order":225},"🇸🇿":{"category":"Flags","sheet_x":4,"sheet_y":21,"sort_order":226},"🇹🇦":{"category":"Flags","sheet_x":4,"sheet_y":22,"sort_order":227},"🇹🇨":{"category":"Flags","sheet_x":4,"sheet_y":23,"sort_order":228},"🇹🇩":{"category":"Flags","sheet_x":4,"sheet_y":24,"sort_order":229},"🇹🇫":{"category":"Flags","sheet_x":4,"sheet_y":25,"sort_order":230},"🇹🇬":{"category":"Flags","sheet_x":4,"sheet_y":26,"sort_order":231},"🇹🇭":{"category":"Flags","sheet_x":4,"sheet_y":27,"sort_order":232},"🇹🇯":{"category":"Flags","sheet_x":4,"sheet_y":28,"sort_order":233},"🇹🇰":{"category":"Flags","sheet_x":4,"sheet_y":29,"sort_order":234},"🇹🇱":{"category":"Flags","sheet_x":4,"sheet_y":30,"sort_order":235},"🇹🇲":{"category":"Flags","sheet_x":4,"sheet_y":31,"sort_order":236},"🇹🇳":{"category":"Flags","sheet_x":4,"sheet_y":32,"sort_order":237},"🇹🇴":{"category":"Flags","sheet_x":4,"sheet_y":33,"sort_order":238},"🇹🇷":{"category":"Flags","sheet_x":4,"sheet_y":34,"sort_order":239},"🇹🇹":{"category":"Flags","sheet_x":4,"sheet_y":35,"sort_order":240},"🇹🇻":{"category":"Flags","sheet_x":4,"sheet_y":36,"sort_order":241},"🇹🇼":{"category":"Flags","sheet_x":4,"sheet_y":37,"sort_order":242},"🇹🇿":{"category":"Flags","sheet_x":4,"sheet_y":38,"sort_order":243},"🇺🇦":{"category":"Flags","sheet_x":4,"sheet_y":39,"sort_order":244},"🇺🇬":{"category":"Flags","sheet_x":4,"sheet_y":40,"sort_order":245},"🇺🇲":{"category":"Flags","sheet_x":4,"sheet_y":41,"sort_order":246},"🇺🇳":{"category":"Flags","sheet_x":4,"sheet_y":42,"sort_order":247},"🇺🇸":{"category":"Flags","sheet_x":4,"sheet_y":43,"sort_order":248},"🇺🇾":{"category":"Flags","sheet_x":4,"sheet_y":44,"sort_order":249},"🇺🇿":{"category":"Flags","sheet_x":4,"sheet_y":45,"sort_order":250},"🇻🇦":{"category":"Flags","sheet_x":4,"sheet_y":46,"sort_order":251},"🇻🇨":{"category":"Flags","sheet_x":4,"sheet_y":47,"sort_order":252},"🇻🇪":{"category":"Flags","sheet_x":4,"sheet_y":48,"sort_order":253},"🇻🇬":{"category":"Flags","sheet_x":4,"sheet_y":49,"sort_order":254},"🇻🇮":{"category":"Flags","sheet_x":4,"sheet_y":50,"sort_order":255},"🇻🇳":{"category":"Flags","sheet_x":4,"sheet_y":51,"sort_order":256},"🇻🇺":{"category":"Flags","sheet_x":4,"sheet_y":52,"sort_order":257},"🇼🇫":{"category":"Flags","sheet_x":4,"sheet_y":53,"sort_order":258},"🇼🇸":{"category":"Flags","sheet_x":4,"sheet_y":54,"sort_order":259},"🇽🇰":{"category":"Flags","sheet_x":4,"sheet_y":55,"sort_order":260},"🇾🇪":{"category":"Flags","sheet_x":4,"sheet_y":56,"sort_order":261},"🇾🇹":{"category":"Flags","sheet_x":5,"sheet_y":0,"sort_order":262},"🇿🇦":{"category":"Flags","sheet_x":5,"sheet_y":1,"sort_order":263},"🇿🇲":{"category":"Flags","sheet_x":5,"sheet_y":2,"sort_order":264},"🇿🇼":{"category":"Flags","sheet_x":5,"sheet_y":3,"sort_order":265},"🈁":{"category":"Symbols","sheet_x":5,"sheet_y":4,"sort_order":167},"🈂️":{"category":"Symbols","sheet_x":5,"sheet_y":5,"sort_order":168},"🈚":{"category":"Symbols","sheet_x":5,"sheet_y":6,"sort_order":174},"🈯":{"category":"Symbols","sheet_x":5,"sheet_y":7,"sort_order":171},"🈲":{"category":"Symbols","sheet_x":5,"sheet_y":8,"sort_order":175},"🈳":{"category":"Symbols","sheet_x":5,"sheet_y":9,"sort_order":179},"🈴":{"category":"Symbols","sheet_x":5,"sheet_y":10,"sort_order":178},"🈵":{"category":"Symbols","sheet_x":5,"sheet_y":11,"sort_order":183},"🈶":{"category":"Symbols","sheet_x":5,"sheet_y":12,"sort_order":170},"🈷️":{"category":"Symbols","sheet_x":5,"sheet_y":13,"sort_order":169},"🈸":{"category":"Symbols","sheet_x":5,"sheet_y":14,"sort_order":177},"🈹":{"category":"Symbols","sheet_x":5,"sheet_y":15,"sort_order":173},"🈺":{"category":"Symbols","sheet_x":5,"sheet_y":16,"sort_order":182},"🉐":{"category":"Symbols","sheet_x":5,"sheet_y":17,"sort_order":172},"🉑":{"category":"Symbols","sheet_x":5,"sheet_y":18,"sort_order":176},"🌀":{"category":"Travel & Places","sheet_x":5,"sheet_y":19,"sort_order":197},"🌁":{"category":"Travel & Places","sheet_x":5,"sheet_y":20,"sort_order":49},"🌂":{"category":"Travel & Places","sheet_x":5,"sheet_y":21,"sort_order":199},"🌃":{"category":"Travel & Places","sheet_x":5,"sheet_y":22,"sort_order":50},"🌄":{"category":"Travel & Places","sheet_x":5,"sheet_y":23,"sort_order":52},"🌅":{"category":"Travel & Places","sheet_x":5,"sheet_y":24,"sort_order":53},"🌆":{"category":"Travel & Places","sheet_x":5,"sheet_y":25,"sort_order":54},"🌇":{"category":"Travel & Places","sheet_x":5,"sheet_y":26,"sort_order":55},"🌈":{"category":"Travel & Places","sheet_x":5,"sheet_y":27,"sort_order":198},"🌉":{"category":"Travel & Places","sheet_x":5,"sheet_y":28,"sort_order":56},"🌊":{"category":"Travel & Places","sheet_x":5,"sheet_y":29,"sort_order":210},"🌋":{"category":"Travel & Places","sheet_x":5,"sheet_y":30,"sort_order":10},"🌌":{"category":"Travel & Places","sheet_x":5,"sheet_y":31,"sort_order":184},"🌍":{"category":"Travel & Places","sheet_x":5,"sheet_y":32,"sort_order":1},"🌎":{"category":"Travel & Places","sheet_x":5,"sheet_y":33,"sort_order":2},"🌏":{"category":"Travel & Places","sheet_x":5,"sheet_y":34,"sort_order":3},"🌐":{"category":"Travel & Places","sheet_x":5,"sheet_y":35,"sort_order":4},"🌑":{"category":"Travel & Places","sheet_x":5,"sheet_y":36,"sort_order":164},"🌒":{"category":"Travel & Places","sheet_x":5,"sheet_y":37,"sort_order":165},"🌓":{"category":"Travel & Places","sheet_x":5,"sheet_y":38,"sort_order":166},"🌔":{"category":"Travel & Places","sheet_x":5,"sheet_y":39,"sort_order":167},"🌕":{"category":"Travel & Places","sheet_x":5,"sheet_y":40,"sort_order":168},"🌖":{"category":"Travel & Places","sheet_x":5,"sheet_y":41,"sort_order":169},"🌗":{"category":"Travel & Places","sheet_x":5,"sheet_y":42,"sort_order":170},"🌘":{"category":"Travel & Places","sheet_x":5,"sheet_y":43,"sort_order":171},"🌙":{"category":"Travel & Places","sheet_x":5,"sheet_y":44,"sort_order":172},"🌚":{"category":"Travel & Places","sheet_x":5,"sheet_y":45,"sort_order":173},"🌛":{"category":"Travel & Places","sheet_x":5,"sheet_y":46,"sort_order":174},"🌜":{"category":"Travel & Places","sheet_x":5,"sheet_y":47,"sort_order":175},"🌝":{"category":"Travel & Places","sheet_x":5,"sheet_y":48,"sort_order":178},"🌞":{"category":"Travel & Places","sheet_x":5,"sheet_y":49,"sort_order":179},"🌟":{"category":"Travel & Places","sheet_x":5,"sheet_y":50,"sort_order":182},"🌠":{"category":"Travel & Places","sheet_x":5,"sheet_y":51,"sort_order":183},"🌡️":{"category":"Travel & Places","sheet_x":5,"sheet_y":52,"sort_order":176},"🌤️":{"category":"Travel & Places","sheet_x":5,"sheet_y":53,"sort_order":188},"🌥️":{"category":"Travel & Places","sheet_x":5,"sheet_y":54,"sort_order":189},"🌦️":{"category":"Travel & Places","sheet_x":5,"sheet_y":55,"sort_order":190},"🌧️":{"category":"Travel & Places","sheet_x":5,"sheet_y":56,"sort_order":191},"🌨️":{"category":"Travel & Places","sheet_x":6,"sheet_y":0,"sort_order":192},"🌩️":{"category":"Travel & Places","sheet_x":6,"sheet_y":1,"sort_order":193},"🌪️":{"category":"Travel & Places","sheet_x":6,"sheet_y":2,"sort_order":194},"🌫️":{"category":"Travel & Places","sheet_x":6,"sheet_y":3,"sort_order":195},"🌬️":{"category":"Travel & Places","sheet_x":6,"sheet_y":4,"sort_order":196},"🌭":{"category":"Food & Drink","sheet_x":6,"sheet_y":5,"sort_order":47},"🌮":{"category":"Food & Drink","sheet_x":6,"sheet_y":6,"sort_order":49},"🌯":{"category":"Food & Drink","sheet_x":6,"sheet_y":7,"sort_order":50},"🌰":{"category":"Food & Drink","sheet_x":6,"sheet_y":8,"sort_order":31},"🌱":{"category":"Animals & Nature","sheet_x":6,"sheet_y":9,"sort_order":116},"🌲":{"category":"Animals & Nature","sheet_x":6,"sheet_y":10,"sort_order":117},"🌳":{"category":"Animals & Nature","sheet_x":6,"sheet_y":11,"sort_order":118},"🌴":{"category":"Animals & Nature","sheet_x":6,"sheet_y":12,"sort_order":119},"🌵":{"category":"Animals & Nature","sheet_x":6,"sheet_y":13,"sort_order":120},"🌶️":{"category":"Food & Drink","sheet_x":6,"sheet_y":14,"sort_order":23},"🌷":{"category":"Animals & Nature","sheet_x":6,"sheet_y":15,"sort_order":115},"🌸":{"category":"Animals & Nature","sheet_x":6,"sheet_y":16,"sort_order":107},"🌹":{"category":"Animals & Nature","sheet_x":6,"sheet_y":17,"sort_order":110},"🌺":{"category":"Animals & Nature","sheet_x":6,"sheet_y":18,"sort_order":112},"🌻":{"category":"Animals & Nature","sheet_x":6,"sheet_y":19,"sort_order":113},"🌼":{"category":"Animals & Nature","sheet_x":6,"sheet_y":20,"sort_order":114},"🌽":{"category":"Food & Drink","sheet_x":6,"sheet_y":21,"sort_order":22},"🌾":{"category":"Animals & Nature","sheet_x":6,"sheet_y":22,"sort_order":121},"🌿":{"category":"Animals & Nature","sheet_x":6,"sheet_y":23,"sort_order":122},"🍀":{"category":"Animals & Nature","sheet_x":6,"sheet_y":24,"sort_order":124},"🍁":{"category":"Animals & Nature","sheet_x":6,"sheet_y":25,"sort_order":125},"🍂":{"category":"Animals & Nature","sheet_x":6,"sheet_y":26,"sort_order":126},"🍃":{"category":"Animals & Nature","sheet_x":6,"sheet_y":27,"sort_order":127},"🍄":{"category":"Food & Drink","sheet_x":6,"sheet_y":28,"sort_order":29},"🍅":{"category":"Food & Drink","sheet_x":6,"sheet_y":29,"sort_order":16},"🍆":{"category":"Food & Drink","sheet_x":6,"sheet_y":30,"sort_order":19},"🍇":{"category":"Food & Drink","sheet_x":6,"sheet_y":31,"sort_order":1},"🍈":{"category":"Food & Drink","sheet_x":6,"sheet_y":32,"sort_order":2},"🍉":{"category":"Food & Drink","sheet_x":6,"sheet_y":33,"sort_order":3},"🍊":{"category":"Food & Drink","sheet_x":6,"sheet_y":34,"sort_order":4},"🍋":{"category":"Food & Drink","sheet_x":6,"sheet_y":35,"sort_order":5},"🍌":{"category":"Food & Drink","sheet_x":6,"sheet_y":36,"sort_order":6},"🍍":{"category":"Food & Drink","sheet_x":6,"sheet_y":37,"sort_order":7},"🍎":{"category":"Food & Drink","sheet_x":6,"sheet_y":38,"sort_order":9},"🍏":{"category":"Food & Drink","sheet_x":6,"sheet_y":39,"sort_order":10},"🍐":{"category":"Food & Drink","sheet_x":6,"sheet_y":40,"sort_order":11},"🍑":{"category":"Food & Drink","sheet_x":6,"sheet_y":41,"sort_order":12},"🍒":{"category":"Food & Drink","sheet_x":6,"sheet_y":42,"sort_order":13},"🍓":{"category":"Food & Drink","sheet_x":6,"sheet_y":43,"sort_order":14},"🍔":{"category":"Food & Drink","sheet_x":6,"sheet_y":44,"sort_order":44},"🍕":{"category":"Food & Drink","sheet_x":6,"sheet_y":45,"sort_order":46},"🍖":{"category":"Food & Drink","sheet_x":6,"sheet_y":46,"sort_order":40},"🍗":{"category":"Food & Drink","sheet_x":6,"sheet_y":47,"sort_order":41},"🍘":{"category":"Food & Drink","sheet_x":6,"sheet_y":48,"sort_order":64},"🍙":{"category":"Food & Drink","sheet_x":6,"sheet_y":49,"sort_order":65},"🍚":{"category":"Food & Drink","sheet_x":6,"sheet_y":50,"sort_order":66},"🍛":{"category":"Food & Drink","sheet_x":6,"sheet_y":51,"sort_order":67},"🍜":{"category":"Food & Drink","sheet_x":6,"sheet_y":52,"sort_order":68},"🍝":{"category":"Food & Drink","sheet_x":6,"sheet_y":53,"sort_order":69},"🍞":{"category":"Food & Drink","sheet_x":6,"sheet_y":54,"sort_order":32},"🍟":{"category":"Food & Drink","sheet_x":6,"sheet_y":55,"sort_order":45},"🍠":{"category":"Food & Drink","sheet_x":6,"sheet_y":56,"sort_order":70},"🍡":{"category":"Food & Drink","sheet_x":7,"sheet_y":0,"sort_order":76},"🍢":{"category":"Food & Drink","sheet_x":7,"sheet_y":1,"sort_order":71},"🍣":{"category":"Food & Drink","sheet_x":7,"sheet_y":2,"sort_order":72},"🍤":{"category":"Food & Drink","sheet_x":7,"sheet_y":3,"sort_order":73},"🍥":{"category":"Food & Drink","sheet_x":7,"sheet_y":4,"sort_order":74},"🍦":{"category":"Food & Drink","sheet_x":7,"sheet_y":5,"sort_order":85},"🍧":{"category":"Food & Drink","sheet_x":7,"sheet_y":6,"sort_order":86},"🍨":{"category":"Food & Drink","sheet_x":7,"sheet_y":7,"sort_order":87},"🍩":{"category":"Food & Drink","sheet_x":7,"sheet_y":8,"sort_order":88},"🍪":{"category":"Food & Drink","sheet_x":7,"sheet_y":9,"sort_order":89},"🍫":{"category":"Food & Drink","sheet_x":7,"sheet_y":10,"sort_order":94},"🍬":{"category":"Food & Drink","sheet_x":7,"sheet_y":11,"sort_order":95},"🍭":{"category":"Food & Drink","sheet_x":7,"sheet_y":12,"sort_order":96},"🍮":{"category":"Food & Drink","sheet_x":7,"sheet_y":13,"sort_order":97},"🍯":{"category":"Food & Drink","sheet_x":7,"sheet_y":14,"sort_order":98},"🍰":{"category":"Food & Drink","sheet_x":7,"sheet_y":15,"sort_order":91},"🍱":{"category":"Food & Drink","sheet_x":7,"sheet_y":16,"sort_order":63},"🍲":{"category":"Food & Drink","sheet_x":7,"sheet_y":17,"sort_order":56},"🍳":{"category":"Food & Drink","sheet_x":7,"sheet_y":18,"sort_order":54},"🍴":{"category":"Food & Drink","sheet_x":7,"sheet_y":19,"sort_order":118},"🍵":{"category":"Food & Drink","sheet_x":7,"sheet_y":20,"sort_order":102},"🍶":{"category":"Food & Drink","sheet_x":7,"sheet_y":21,"sort_order":103},"🍷":{"category":"Food & Drink","sheet_x":7,"sheet_y":22,"sort_order":105},"🍸":{"category":"Food & Drink","sheet_x":7,"sheet_y":23,"sort_order":106},"🍹":{"category":"Food & Drink","sheet_x":7,"sheet_y":24,"sort_order":107},"🍺":{"category":"Food & Drink","sheet_x":7,"sheet_y":25,"sort_order":108},"🍻":{"category":"Food & Drink","sheet_x":7,"sheet_y":26,"sort_order":109},"🍼":{"category":"Food & Drink","sheet_x":7,"sheet_y":27,"sort_order":99},"🍽️":{"category":"Food & Drink","sheet_x":7,"sheet_y":28,"sort_order":117},"🍾":{"category":"Food & Drink","sheet_x":7,"sheet_y":29,"sort_order":104},"🍿":{"category":"Food & Drink","sheet_x":7,"sheet_y":30,"sort_order":59},"🎀":{"category":"Activities","sheet_x":7,"sheet_y":31,"sort_order":17},"🎁":{"category":"Activities","sheet_x":7,"sheet_y":32,"sort_order":18},"🎂":{"category":"Food & Drink","sheet_x":7,"sheet_y":33,"sort_order":90},"🎃":{"category":"Activities","sheet_x":7,"sheet_y":34,"sort_order":1},"🎄":{"category":"Activities","sheet_x":7,"sheet_y":35,"sort_order":2},"🎅":{"category":"People & Body","sheet_x":7,"sheet_y":36,"sort_order":177},"🎆":{"category":"Activities","sheet_x":7,"sheet_y":42,"sort_order":3},"🎇":{"category":"Activities","sheet_x":7,"sheet_y":43,"sort_order":4},"🎈":{"category":"Activities","sheet_x":7,"sheet_y":44,"sort_order":7},"🎉":{"category":"Activities","sheet_x":7,"sheet_y":45,"sort_order":8},"🎊":{"category":"Activities","sheet_x":7,"sheet_y":46,"sort_order":9},"🎋":{"category":"Activities","sheet_x":7,"sheet_y":47,"sort_order":10},"🎌":{"category":"Flags","sheet_x":7,"sheet_y":48,"sort_order":3},"🎍":{"category":"Activities","sheet_x":7,"sheet_y":49,"sort_order":11},"🎎":{"category":"Activities","sheet_x":7,"sheet_y":50,"sort_order":12},"🎏":{"category":"Activities","sheet_x":7,"sheet_y":51,"sort_order":13},"🎐":{"category":"Activities","sheet_x":7,"sheet_y":52,"sort_order":14},"🎑":{"category":"Activities","sheet_x":7,"sheet_y":53,"sort_order":15},"🎒":{"category":"Objects","sheet_x":7,"sheet_y":54,"sort_order":25},"🎓":{"category":"Objects","sheet_x":7,"sheet_y":55,"sort_order":37},"🎖️":{"category":"Activities","sheet_x":7,"sheet_y":56,"sort_order":22},"🎗️":{"category":"Activities","sheet_x":8,"sheet_y":0,"sort_order":19},"🎙️":{"category":"Objects","sheet_x":8,"sheet_y":1,"sort_order":56},"🎚️":{"category":"Objects","sheet_x":8,"sheet_y":2,"sort_order":57},"🎛️":{"category":"Objects","sheet_x":8,"sheet_y":3,"sort_order":58},"🎞️":{"category":"Objects","sheet_x":8,"sheet_y":4,"sort_order":89},"🎟️":{"category":"Activities","sheet_x":8,"sheet_y":5,"sort_order":20},"🎠":{"category":"Travel & Places","sheet_x":8,"sheet_y":6,"sort_order":58},"🎡":{"category":"Travel & Places","sheet_x":8,"sheet_y":7,"sort_order":59},"🎢":{"category":"Travel & Places","sheet_x":8,"sheet_y":8,"sort_order":60},"🎣":{"category":"Activities","sheet_x":8,"sheet_y":9,"sort_order":49},"🎤":{"category":"Objects","sheet_x":8,"sheet_y":10,"sort_order":59},"🎥":{"category":"Objects","sheet_x":8,"sheet_y":11,"sort_order":88},"🎦":{"category":"Symbols","sheet_x":8,"sheet_y":12,"sort_order":91},"🎧":{"category":"Objects","sheet_x":8,"sheet_y":13,"sort_order":60},"🎨":{"category":"Activities","sheet_x":8,"sheet_y":14,"sort_order":77},"🎩":{"category":"Objects","sheet_x":8,"sheet_y":15,"sort_order":36},"🎪":{"category":"Travel & Places","sheet_x":8,"sheet_y":16,"sort_order":62},"🎫":{"category":"Activities","sheet_x":8,"sheet_y":17,"sort_order":21},"🎬":{"category":"Objects","sheet_x":8,"sheet_y":18,"sort_order":91},"🎭":{"category":"Activities","sheet_x":8,"sheet_y":19,"sort_order":75},"🎮":{"category":"Activities","sheet_x":8,"sheet_y":20,"sort_order":61},"🎯":{"category":"Activities","sheet_x":8,"sheet_y":21,"sort_order":55},"🎰":{"category":"Activities","sheet_x":8,"sheet_y":22,"sort_order":63},"🎱":{"category":"Activities","sheet_x":8,"sheet_y":23,"sort_order":58},"🎲":{"category":"Activities","sheet_x":8,"sheet_y":24,"sort_order":64},"🎳":{"category":"Activities","sheet_x":8,"sheet_y":25,"sort_order":37},"🎴":{"category":"Activities","sheet_x":8,"sheet_y":26,"sort_order":74},"🎵":{"category":"Objects","sheet_x":8,"sheet_y":27,"sort_order":54},"🎶":{"category":"Objects","sheet_x":8,"sheet_y":28,"sort_order":55},"🎷":{"category":"Objects","sheet_x":8,"sheet_y":29,"sort_order":62},"🎸":{"category":"Objects","sheet_x":8,"sheet_y":30,"sort_order":63},"🎹":{"category":"Objects","sheet_x":8,"sheet_y":31,"sort_order":64},"🎺":{"category":"Objects","sheet_x":8,"sheet_y":32,"sort_order":65},"🎻":{"category":"Objects","sheet_x":8,"sheet_y":33,"sort_order":66},"🎼":{"category":"Objects","sheet_x":8,"sheet_y":34,"sort_order":53},"🎽":{"category":"Activities","sheet_x":8,"sheet_y":35,"sort_order":51},"🎾":{"category":"Activities","sheet_x":8,"sheet_y":36,"sort_order":35},"🎿":{"category":"Activities","sheet_x":8,"sheet_y":37,"sort_order":52},"🏀":{"category":"Activities","sheet_x":8,"sheet_y":38,"sort_order":31},"🏁":{"category":"Flags","sheet_x":8,"sheet_y":39,"sort_order":1},"🏂":{"category":"People & Body","sheet_x":8,"sheet_y":40,"sort_order":248},"🏃‍♀️":{"category":"People & Body","sheet_x":8,"sheet_y":46,"sort_order":232},"🏃‍♂️":{"category":"People & Body","sheet_x":8,"sheet_y":52,"sort_order":231},"🏃":{"category":"People & Body","sheet_x":9,"sheet_y":1,"sort_order":230},"🏄‍♀️":{"category":"People & Body","sheet_x":9,"sheet_y":7,"sort_order":254},"🏄‍♂️":{"category":"People & Body","sheet_x":9,"sheet_y":13,"sort_order":253},"🏄":{"category":"People & Body","sheet_x":9,"sheet_y":19,"sort_order":252},"🏅":{"category":"Activities","sheet_x":9,"sheet_y":25,"sort_order":24},"🏆":{"category":"Activities","sheet_x":9,"sheet_y":26,"sort_order":23},"🏇":{"category":"People & Body","sheet_x":9,"sheet_y":27,"sort_order":246},"🏈":{"category":"Activities","sheet_x":9,"sheet_y":33,"sort_order":33},"🏉":{"category":"Activities","sheet_x":9,"sheet_y":34,"sort_order":34},"🏊‍♀️":{"category":"People & Body","sheet_x":9,"sheet_y":35,"sort_order":260},"🏊‍♂️":{"category":"People & Body","sheet_x":9,"sheet_y":41,"sort_order":259},"🏊":{"category":"People & Body","sheet_x":9,"sheet_y":47,"sort_order":258},"🏋️‍♀️":{"category":"People & Body","sheet_x":9,"sheet_y":53,"sort_order":266},"🏋️‍♂️":{"category":"People & Body","sheet_x":10,"sheet_y":2,"sort_order":265},"🏋️":{"category":"People & Body","sheet_x":10,"sheet_y":8,"sort_order":264},"🏌️‍♀️":{"category":"People & Body","sheet_x":10,"sheet_y":14,"sort_order":251},"🏌️‍♂️":{"category":"People & Body","sheet_x":10,"sheet_y":20,"sort_order":250},"🏌️":{"category":"People & Body","sheet_x":10,"sheet_y":26,"sort_order":249},"🏍️":{"category":"Travel & Places","sheet_x":10,"sheet_y":32,"sort_order":92},"🏎️":{"category":"Travel & Places","sheet_x":10,"sheet_y":33,"sort_order":91},"🏏":{"category":"Activities","sheet_x":10,"sheet_y":34,"sort_order":38},"🏐":{"category":"Activities","sheet_x":10,"sheet_y":35,"sort_order":32},"🏑":{"category":"Activities","sheet_x":10,"sheet_y":36,"sort_order":39},"🏒":{"category":"Activities","sheet_x":10,"sheet_y":37,"sort_order":40},"🏓":{"category":"Activities","sheet_x":10,"sheet_y":38,"sort_order":42},"🏔️":{"category":"Travel & Places","sheet_x":10,"sheet_y":39,"sort_order":8},"🏕️":{"category":"Travel & Places","sheet_x":10,"sheet_y":40,"sort_order":12},"🏖️":{"category":"Travel & Places","sheet_x":10,"sheet_y":41,"sort_order":13},"🏗️":{"category":"Travel & Places","sheet_x":10,"sheet_y":42,"sort_order":19},"🏘️":{"category":"Travel & Places","sheet_x":10,"sheet_y":43,"sort_order":21},"🏙️":{"category":"Travel & Places","sheet_x":10,"sheet_y":44,"sort_order":51},"🏚️":{"category":"Travel & Places","sheet_x":10,"sheet_y":45,"sort_order":22},"🏛️":{"category":"Travel & Places","sheet_x":10,"sheet_y":46,"sort_order":18},"🏜️":{"category":"Travel & Places","sheet_x":10,"sheet_y":47,"sort_order":14},"🏝️":{"category":"Travel & Places","sheet_x":10,"sheet_y":48,"sort_order":15},"🏞️":{"category":"Travel & Places","sheet_x":10,"sheet_y":49,"sort_order":16},"🏟️":{"category":"Travel & Places","sheet_x":10,"sheet_y":50,"sort_order":17},"🏠":{"category":"Travel & Places","sheet_x":10,"sheet_y":51,"sort_order":23},"🏡":{"category":"Travel & Places","sheet_x":10,"sheet_y":52,"sort_order":24},"🏢":{"category":"Travel & Places","sheet_x":10,"sheet_y":53,"sort_order":25},"🏣":{"category":"Travel & Places","sheet_x":10,"sheet_y":54,"sort_order":26},"🏤":{"category":"Travel & Places","sheet_x":10,"sheet_y":55,"sort_order":27},"🏥":{"category":"Travel & Places","sheet_x":10,"sheet_y":56,"sort_order":28},"🏦":{"category":"Travel & Places","sheet_x":11,"sheet_y":0,"sort_order":29},"🏧":{"category":"Symbols","sheet_x":11,"sheet_y":1,"sort_order":1},"🏨":{"category":"Travel & Places","sheet_x":11,"sheet_y":2,"sort_order":30},"🏩":{"category":"Travel & Places","sheet_x":11,"sheet_y":3,"sort_order":31},"🏪":{"category":"Travel & Places","sheet_x":11,"sheet_y":4,"sort_order":32},"🏫":{"category":"Travel & Places","sheet_x":11,"sheet_y":5,"sort_order":33},"🏬":{"category":"Travel & Places","sheet_x":11,"sheet_y":6,"sort_order":34},"🏭":{"category":"Travel & Places","sheet_x":11,"sheet_y":7,"sort_order":35},"🏮":{"category":"Objects","sheet_x":11,"sheet_y":8,"sort_order":102},"🏯":{"category":"Travel & Places","sheet_x":11,"sheet_y":9,"sort_order":36},"🏰":{"category":"Travel & Places","sheet_x":11,"sheet_y":10,"sort_order":37},"🏳️‍🌈":{"category":"Flags","sheet_x":11,"sheet_y":11,"sort_order":6},"🏳️":{"category":"Flags","sheet_x":11,"sheet_y":12,"sort_order":5},"🏴‍☠️":{"category":"Flags","sheet_x":11,"sheet_y":13,"sort_order":7},"🏴󠁧󠁢󠁥󠁮󠁧󠁿":{"category":"Flags","sheet_x":11,"sheet_y":14,"sort_order":266},"🏴󠁧󠁢󠁳󠁣󠁴󠁿":{"category":"Flags","sheet_x":11,"sheet_y":15,"sort_order":267},"🏴󠁧󠁢󠁷󠁬󠁳󠁿":{"category":"Flags","sheet_x":11,"sheet_y":16,"sort_order":268},"🏴":{"category":"Flags","sheet_x":11,"sheet_y":17,"sort_order":4},"🏵️":{"category":"Animals & Nature","sheet_x":11,"sheet_y":18,"sort_order":109},"🏷️":{"category":"Objects","sheet_x":11,"sheet_y":19,"sort_order":120},"🏸":{"category":"Activities","sheet_x":11,"sheet_y":20,"sort_order":43},"🏹":{"category":"Objects","sheet_x":11,"sheet_y":21,"sort_order":189},"🏺":{"category":"Food & Drink","sheet_x":11,"sheet_y":22,"sort_order":121},"🏻":{"category":"Skin Tones","sheet_x":11,"sheet_y":23,"sort_order":1},"🏼":{"category":"Skin Tones","sheet_x":11,"sheet_y":24,"sort_order":2},"🏽":{"category":"Skin Tones","sheet_x":11,"sheet_y":25,"sort_order":3},"🏾":{"category":"Skin Tones","sheet_x":11,"sheet_y":26,"sort_order":4},"🏿":{"category":"Skin Tones","sheet_x":11,"sheet_y":27,"sort_order":5},"🐀":{"category":"Animals & Nature","sheet_x":11,"sheet_y":28,"sort_order":44},"🐁":{"category":"Animals & Nature","sheet_x":11,"sheet_y":29,"sort_order":43},"🐂":{"category":"Animals & Nature","sheet_x":11,"sheet_y":30,"sort_order":25},"🐃":{"category":"Animals & Nature","sheet_x":11,"sheet_y":31,"sort_order":26},"🐄":{"category":"Animals & Nature","sheet_x":11,"sheet_y":32,"sort_order":27},"🐅":{"category":"Animals & Nature","sheet_x":11,"sheet_y":33,"sort_order":17},"🐆":{"category":"Animals & Nature","sheet_x":11,"sheet_y":34,"sort_order":18},"🐇":{"category":"Animals & Nature","sheet_x":11,"sheet_y":35,"sort_order":47},"🐈":{"category":"Animals & Nature","sheet_x":11,"sheet_y":36,"sort_order":14},"🐉":{"category":"Animals & Nature","sheet_x":11,"sheet_y":37,"sort_order":82},"🐊":{"category":"Animals & Nature","sheet_x":11,"sheet_y":38,"sort_order":77},"🐋":{"category":"Animals & Nature","sheet_x":11,"sheet_y":39,"sort_order":86},"🐌":{"category":"Animals & Nature","sheet_x":11,"sheet_y":40,"sort_order":94},"🐍":{"category":"Animals & Nature","sheet_x":11,"sheet_y":41,"sort_order":80},"🐎":{"category":"Animals & Nature","sheet_x":11,"sheet_y":42,"sort_order":20},"🐏":{"category":"Animals & Nature","sheet_x":11,"sheet_y":43,"sort_order":32},"🐐":{"category":"Animals & Nature","sheet_x":11,"sheet_y":44,"sort_order":34},"🐑":{"category":"Animals & Nature","sheet_x":11,"sheet_y":45,"sort_order":33},"🐒":{"category":"Animals & Nature","sheet_x":11,"sheet_y":46,"sort_order":2},"🐓":{"category":"Animals & Nature","sheet_x":11,"sheet_y":47,"sort_order":62},"🐔":{"category":"Animals & Nature","sheet_x":11,"sheet_y":48,"sort_order":61},"🐕‍🦺":{"category":"Animals & Nature","sheet_x":11,"sheet_y":49,"sort_order":8},"🐕":{"category":"Animals & Nature","sheet_x":11,"sheet_y":50,"sort_order":6},"🐖":{"category":"Animals & Nature","sheet_x":11,"sheet_y":51,"sort_order":29},"🐗":{"category":"Animals & Nature","sheet_x":11,"sheet_y":52,"sort_order":30},"🐘":{"category":"Animals & Nature","sheet_x":11,"sheet_y":53,"sort_order":39},"🐙":{"category":"Animals & Nature","sheet_x":11,"sheet_y":54,"sort_order":92},"🐚":{"category":"Animals & Nature","sheet_x":11,"sheet_y":55,"sort_order":93},"🐛":{"category":"Animals & Nature","sheet_x":11,"sheet_y":56,"sort_order":96},"🐜":{"category":"Animals & Nature","sheet_x":12,"sheet_y":0,"sort_order":97},"🐝":{"category":"Animals & Nature","sheet_x":12,"sheet_y":1,"sort_order":98},"🐞":{"category":"Animals & Nature","sheet_x":12,"sheet_y":2,"sort_order":99},"🐟":{"category":"Animals & Nature","sheet_x":12,"sheet_y":3,"sort_order":88},"🐠":{"category":"Animals & Nature","sheet_x":12,"sheet_y":4,"sort_order":89},"🐡":{"category":"Animals & Nature","sheet_x":12,"sheet_y":5,"sort_order":90},"🐢":{"category":"Animals & Nature","sheet_x":12,"sheet_y":6,"sort_order":78},"🐣":{"category":"Animals & Nature","sheet_x":12,"sheet_y":7,"sort_order":63},"🐤":{"category":"Animals & Nature","sheet_x":12,"sheet_y":8,"sort_order":64},"🐥":{"category":"Animals & Nature","sheet_x":12,"sheet_y":9,"sort_order":65},"🐦":{"category":"Animals & Nature","sheet_x":12,"sheet_y":10,"sort_order":66},"🐧":{"category":"Animals & Nature","sheet_x":12,"sheet_y":11,"sort_order":67},"🐨":{"category":"Animals & Nature","sheet_x":12,"sheet_y":12,"sort_order":52},"🐩":{"category":"Animals & Nature","sheet_x":12,"sheet_y":13,"sort_order":9},"🐪":{"category":"Animals & Nature","sheet_x":12,"sheet_y":14,"sort_order":35},"🐫":{"category":"Animals & Nature","sheet_x":12,"sheet_y":15,"sort_order":36},"🐬":{"category":"Animals & Nature","sheet_x":12,"sheet_y":16,"sort_order":87},"🐭":{"category":"Animals & Nature","sheet_x":12,"sheet_y":17,"sort_order":42},"🐮":{"category":"Animals & Nature","sheet_x":12,"sheet_y":18,"sort_order":24},"🐯":{"category":"Animals & Nature","sheet_x":12,"sheet_y":19,"sort_order":16},"🐰":{"category":"Animals & Nature","sheet_x":12,"sheet_y":20,"sort_order":46},"🐱":{"category":"Animals & Nature","sheet_x":12,"sheet_y":21,"sort_order":13},"🐲":{"category":"Animals & Nature","sheet_x":12,"sheet_y":22,"sort_order":81},"🐳":{"category":"Animals & Nature","sheet_x":12,"sheet_y":23,"sort_order":85},"🐴":{"category":"Animals & Nature","sheet_x":12,"sheet_y":24,"sort_order":19},"🐵":{"category":"Animals & Nature","sheet_x":12,"sheet_y":25,"sort_order":1},"🐶":{"category":"Animals & Nature","sheet_x":12,"sheet_y":26,"sort_order":5},"🐷":{"category":"Animals & Nature","sheet_x":12,"sheet_y":27,"sort_order":28},"🐸":{"category":"Animals & Nature","sheet_x":12,"sheet_y":28,"sort_order":76},"🐹":{"category":"Animals & Nature","sheet_x":12,"sheet_y":29,"sort_order":45},"🐺":{"category":"Animals & Nature","sheet_x":12,"sheet_y":30,"sort_order":10},"🐻":{"category":"Animals & Nature","sheet_x":12,"sheet_y":31,"sort_order":51},"🐼":{"category":"Animals & Nature","sheet_x":12,"sheet_y":32,"sort_order":53},"🐽":{"category":"Animals & Nature","sheet_x":12,"sheet_y":33,"sort_order":31},"🐾":{"category":"Animals & Nature","sheet_x":12,"sheet_y":34,"sort_order":59},"🐿️":{"category":"Animals & Nature","sheet_x":12,"sheet_y":35,"sort_order":48},"👀":{"category":"People & Body","sheet_x":12,"sheet_y":36,"sort_order":45},"👁️‍🗨️":{"category":"Smileys & Emotion","sheet_x":12,"sheet_y":37,"sort_order":145},"👁️":{"category":"People & Body","sheet_x":12,"sheet_y":38,"sort_order":46},"👂":{"category":"People & Body","sheet_x":12,"sheet_y":39,"sort_order":39},"👃":{"category":"People & Body","sheet_x":12,"sheet_y":45,"sort_order":41},"👄":{"category":"People & Body","sheet_x":12,"sheet_y":51,"sort_order":48},"👅":{"category":"People & Body","sheet_x":12,"sheet_y":52,"sort_order":47},"👆":{"category":"People & Body","sheet_x":12,"sheet_y":53,"sort_order":15},"👇":{"category":"People & Body","sheet_x":13,"sheet_y":2,"sort_order":17},"👈":{"category":"People & Body","sheet_x":13,"sheet_y":8,"sort_order":13},"👉":{"category":"People & Body","sheet_x":13,"sheet_y":14,"sort_order":14},"👊":{"category":"People & Body","sheet_x":13,"sheet_y":20,"sort_order":22},"👋":{"category":"People & Body","sheet_x":13,"sheet_y":26,"sort_order":1},"👌":{"category":"People & Body","sheet_x":13,"sheet_y":32,"sort_order":6},"👍":{"category":"People & Body","sheet_x":13,"sheet_y":38,"sort_order":19},"👎":{"category":"People & Body","sheet_x":13,"sheet_y":44,"sort_order":20},"👏":{"category":"People & Body","sheet_x":13,"sheet_y":50,"sort_order":25},"👐":{"category":"People & Body","sheet_x":13,"sheet_y":56,"sort_order":27},"👑":{"category":"Objects","sheet_x":14,"sheet_y":5,"sort_order":34},"👒":{"category":"Objects","sheet_x":14,"sheet_y":6,"sort_order":35},"👓":{"category":"Objects","sheet_x":14,"sheet_y":7,"sort_order":1},"👔":{"category":"Objects","sheet_x":14,"sheet_y":8,"sort_order":6},"👕":{"category":"Objects","sheet_x":14,"sheet_y":9,"sort_order":7},"👖":{"category":"Objects","sheet_x":14,"sheet_y":10,"sort_order":8},"👗":{"category":"Objects","sheet_x":14,"sheet_y":11,"sort_order":13},"👘":{"category":"Objects","sheet_x":14,"sheet_y":12,"sort_order":14},"👙":{"category":"Objects","sheet_x":14,"sheet_y":13,"sort_order":19},"👚":{"category":"Objects","sheet_x":14,"sheet_y":14,"sort_order":20},"👛":{"category":"Objects","sheet_x":14,"sheet_y":15,"sort_order":21},"👜":{"category":"Objects","sheet_x":14,"sheet_y":16,"sort_order":22},"👝":{"category":"Objects","sheet_x":14,"sheet_y":17,"sort_order":23},"👞":{"category":"Objects","sheet_x":14,"sheet_y":18,"sort_order":26},"👟":{"category":"Objects","sheet_x":14,"sheet_y":19,"sort_order":27},"👠":{"category":"Objects","sheet_x":14,"sheet_y":20,"sort_order":30},"👡":{"category":"Objects","sheet_x":14,"sheet_y":21,"sort_order":31},"👢":{"category":"Objects","sheet_x":14,"sheet_y":22,"sort_order":33},"👣":{"category":"People & Body","sheet_x":14,"sheet_y":23,"sort_order":334},"👤":{"category":"People & Body","sheet_x":14,"sheet_y":24,"sort_order":332},"👥":{"category":"People & Body","sheet_x":14,"sheet_y":25,"sort_order":333},"👦":{"category":"People & Body","sheet_x":14,"sheet_y":26,"sort_order":51},"👧":{"category":"People & Body","sheet_x":14,"sheet_y":32,"sort_order":52},"👨‍🌾":{"category":"People & Body","sheet_x":14,"sheet_y":38,"sort_order":118},"👨‍🍳":{"category":"People & Body","sheet_x":14,"sheet_y":44,"sort_order":121},"👨‍🎓":{"category":"People & Body","sheet_x":14,"sheet_y":50,"sort_order":109},"👨‍🎤":{"category":"People & Body","sheet_x":14,"sheet_y":56,"sort_order":139},"👨‍🎨":{"category":"People & Body","sheet_x":15,"sheet_y":5,"sort_order":142},"👨‍🏫":{"category":"People & Body","sheet_x":15,"sheet_y":11,"sort_order":112},"👨‍🏭":{"category":"People & Body","sheet_x":15,"sheet_y":17,"sort_order":127},"👨‍👦‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":23,"sort_order":322},"👨‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":24,"sort_order":321},"👨‍👧‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":25,"sort_order":324},"👨‍👧‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":26,"sort_order":325},"👨‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":27,"sort_order":323},"👨‍👨‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":28,"sort_order":311},"👨‍👨‍👦‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":29,"sort_order":314},"👨‍👨‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":30,"sort_order":312},"👨‍👨‍👧‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":31,"sort_order":313},"👨‍👨‍👧‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":32,"sort_order":315},"👨‍👩‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":33,"sort_order":306},"👨‍👩‍👦‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":34,"sort_order":309},"👨‍👩‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":35,"sort_order":307},"👨‍👩‍👧‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":36,"sort_order":308},"👨‍👩‍👧‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":37,"sort_order":310},"👨‍💻":{"category":"People & Body","sheet_x":15,"sheet_y":38,"sort_order":136},"👨‍💼":{"category":"People & Body","sheet_x":15,"sheet_y":44,"sort_order":130},"👨‍🔧":{"category":"People & Body","sheet_x":15,"sheet_y":50,"sort_order":124},"👨‍🔬":{"category":"People & Body","sheet_x":15,"sheet_y":56,"sort_order":133},"👨‍🚀":{"category":"People & Body","sheet_x":16,"sheet_y":5,"sort_order":148},"👨‍🚒":{"category":"People & Body","sheet_x":16,"sheet_y":11,"sort_order":151},"👨‍🦯":{"category":"People & Body","sheet_x":16,"sheet_y":17,"sort_order":222},"👨‍🦰":{"category":"People & Body","sheet_x":16,"sheet_y":23,"sort_order":57},"👨‍🦱":{"category":"People & Body","sheet_x":16,"sheet_y":29,"sort_order":58},"👨‍🦲":{"category":"People & Body","sheet_x":16,"sheet_y":35,"sort_order":60},"👨‍🦳":{"category":"People & Body","sheet_x":16,"sheet_y":41,"sort_order":59},"👨‍🦼":{"category":"People & Body","sheet_x":16,"sheet_y":47,"sort_order":225},"👨‍🦽":{"category":"People & Body","sheet_x":16,"sheet_y":53,"sort_order":228},"👨‍⚕️":{"category":"People & Body","sheet_x":17,"sheet_y":2,"sort_order":106},"👨‍⚖️":{"category":"People & Body","sheet_x":17,"sheet_y":8,"sort_order":115},"👨‍✈️":{"category":"People & Body","sheet_x":17,"sheet_y":14,"sort_order":145},"👨‍❤️‍👨":{"category":"People & Body","sheet_x":17,"sheet_y":20,"sort_order":303},"👨‍❤️‍💋‍👨":{"category":"People & Body","sheet_x":17,"sheet_y":21,"sort_order":299},"👨":{"category":"People & Body","sheet_x":17,"sheet_y":22,"sort_order":55},"👩‍🌾":{"category":"People & Body","sheet_x":17,"sheet_y":28,"sort_order":119},"👩‍🍳":{"category":"People & Body","sheet_x":17,"sheet_y":34,"sort_order":122},"👩‍🎓":{"category":"People & Body","sheet_x":17,"sheet_y":40,"sort_order":110},"👩‍🎤":{"category":"People & Body","sheet_x":17,"sheet_y":46,"sort_order":140},"👩‍🎨":{"category":"People & Body","sheet_x":17,"sheet_y":52,"sort_order":143},"👩‍🏫":{"category":"People & Body","sheet_x":18,"sheet_y":1,"sort_order":113},"👩‍🏭":{"category":"People & Body","sheet_x":18,"sheet_y":7,"sort_order":128},"👩‍👦‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":13,"sort_order":327},"👩‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":14,"sort_order":326},"👩‍👧‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":15,"sort_order":329},"👩‍👧‍👧":{"category":"People & Body","sheet_x":18,"sheet_y":16,"sort_order":330},"👩‍👧":{"category":"People & Body","sheet_x":18,"sheet_y":17,"sort_order":328},"👩‍👩‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":18,"sort_order":316},"👩‍👩‍👦‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":19,"sort_order":319},"👩‍👩‍👧":{"category":"People & Body","sheet_x":18,"sheet_y":20,"sort_order":317},"👩‍👩‍👧‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":21,"sort_order":318},"👩‍👩‍👧‍👧":{"category":"People & Body","sheet_x":18,"sheet_y":22,"sort_order":320},"👩‍💻":{"category":"People & Body","sheet_x":18,"sheet_y":23,"sort_order":137},"👩‍💼":{"category":"People & Body","sheet_x":18,"sheet_y":29,"sort_order":131},"👩‍🔧":{"category":"People & Body","sheet_x":18,"sheet_y":35,"sort_order":125},"👩‍🔬":{"category":"People & Body","sheet_x":18,"sheet_y":41,"sort_order":134},"👩‍🚀":{"category":"People & Body","sheet_x":18,"sheet_y":47,"sort_order":149},"👩‍🚒":{"category":"People & Body","sheet_x":18,"sheet_y":53,"sort_order":152},"👩‍🦯":{"category":"People & Body","sheet_x":19,"sheet_y":2,"sort_order":223},"👩‍🦰":{"category":"People & Body","sheet_x":19,"sheet_y":8,"sort_order":62},"👩‍🦱":{"category":"People & Body","sheet_x":19,"sheet_y":14,"sort_order":64},"👩‍🦲":{"category":"People & Body","sheet_x":19,"sheet_y":20,"sort_order":68},"👩‍🦳":{"category":"People & Body","sheet_x":19,"sheet_y":26,"sort_order":66},"👩‍🦼":{"category":"People & Body","sheet_x":19,"sheet_y":32,"sort_order":226},"👩‍🦽":{"category":"People & Body","sheet_x":19,"sheet_y":38,"sort_order":229},"👩‍⚕️":{"category":"People & Body","sheet_x":19,"sheet_y":44,"sort_order":107},"👩‍⚖️":{"category":"People & Body","sheet_x":19,"sheet_y":50,"sort_order":116},"👩‍✈️":{"category":"People & Body","sheet_x":19,"sheet_y":56,"sort_order":146},"👩‍❤️‍👨":{"category":"People & Body","sheet_x":20,"sheet_y":5,"sort_order":302},"👩‍❤️‍👩":{"category":"People & Body","sheet_x":20,"sheet_y":6,"sort_order":304},"👩‍❤️‍💋‍👨":{"category":"People & Body","sheet_x":20,"sheet_y":7,"sort_order":298},"👩‍❤️‍💋‍👩":{"category":"People & Body","sheet_x":20,"sheet_y":8,"sort_order":300},"👩":{"category":"People & Body","sheet_x":20,"sheet_y":9,"sort_order":61},"👪":{"category":"People & Body","sheet_x":20,"sheet_y":15,"sort_order":305},"👫":{"category":"People & Body","sheet_x":20,"sheet_y":16,"sort_order":295},"👬":{"category":"People & Body","sheet_x":20,"sheet_y":42,"sort_order":296},"👭":{"category":"People & Body","sheet_x":21,"sheet_y":11,"sort_order":294},"👮‍♀️":{"category":"People & Body","sheet_x":21,"sheet_y":37,"sort_order":155},"👮‍♂️":{"category":"People & Body","sheet_x":21,"sheet_y":43,"sort_order":154},"👮":{"category":"People & Body","sheet_x":21,"sheet_y":49,"sort_order":153},"👯‍♀️":{"category":"People & Body","sheet_x":21,"sheet_y":55,"sort_order":238},"👯‍♂️":{"category":"People & Body","sheet_x":21,"sheet_y":56,"sort_order":237},"👯":{"category":"People & Body","sheet_x":22,"sheet_y":0,"sort_order":236},"👰":{"category":"People & Body","sheet_x":22,"sheet_y":1,"sort_order":173},"👱‍♀️":{"category":"People & Body","sheet_x":22,"sheet_y":7,"sort_order":70},"👱‍♂️":{"category":"People & Body","sheet_x":22,"sheet_y":13,"sort_order":71},"👱":{"category":"People & Body","sheet_x":22,"sheet_y":19,"sort_order":54},"👲":{"category":"People & Body","sheet_x":22,"sheet_y":25,"sort_order":170},"👳‍♀️":{"category":"People & Body","sheet_x":22,"sheet_y":31,"sort_order":169},"👳‍♂️":{"category":"People & Body","sheet_x":22,"sheet_y":37,"sort_order":168},"👳":{"category":"People & Body","sheet_x":22,"sheet_y":43,"sort_order":167},"👴":{"category":"People & Body","sheet_x":22,"sheet_y":49,"sort_order":73},"👵":{"category":"People & Body","sheet_x":22,"sheet_y":55,"sort_order":74},"👶":{"category":"People & Body","sheet_x":23,"sheet_y":4,"sort_order":49},"👷‍♀️":{"category":"People & Body","sheet_x":23,"sheet_y":10,"sort_order":164},"👷‍♂️":{"category":"People & Body","sheet_x":23,"sheet_y":16,"sort_order":163},"👷":{"category":"People & Body","sheet_x":23,"sheet_y":22,"sort_order":162},"👸":{"category":"People & Body","sheet_x":23,"sheet_y":28,"sort_order":166},"👹":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":34,"sort_order":97},"👺":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":35,"sort_order":98},"👻":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":36,"sort_order":99},"👼":{"category":"People & Body","sheet_x":23,"sheet_y":37,"sort_order":176},"👽":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":43,"sort_order":100},"👾":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":44,"sort_order":101},"👿":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":45,"sort_order":92},"💀":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":46,"sort_order":93},"💁‍♀️":{"category":"People & Body","sheet_x":23,"sheet_y":47,"sort_order":89},"💁‍♂️":{"category":"People & Body","sheet_x":23,"sheet_y":53,"sort_order":88},"💁":{"category":"People & Body","sheet_x":24,"sheet_y":2,"sort_order":87},"💂‍♀️":{"category":"People & Body","sheet_x":24,"sheet_y":8,"sort_order":161},"💂‍♂️":{"category":"People & Body","sheet_x":24,"sheet_y":14,"sort_order":160},"💂":{"category":"People & Body","sheet_x":24,"sheet_y":20,"sort_order":159},"💃":{"category":"People & Body","sheet_x":24,"sheet_y":26,"sort_order":233},"💄":{"category":"Objects","sheet_x":24,"sheet_y":32,"sort_order":41},"💅":{"category":"People & Body","sheet_x":24,"sheet_y":33,"sort_order":32},"💆‍♀️":{"category":"People & Body","sheet_x":24,"sheet_y":39,"sort_order":208},"💆‍♂️":{"category":"People & Body","sheet_x":24,"sheet_y":45,"sort_order":207},"💆":{"category":"People & Body","sheet_x":24,"sheet_y":51,"sort_order":206},"💇‍♀️":{"category":"People & Body","sheet_x":25,"sheet_y":0,"sort_order":211},"💇‍♂️":{"category":"People & Body","sheet_x":25,"sheet_y":6,"sort_order":210},"💇":{"category":"People & Body","sheet_x":25,"sheet_y":12,"sort_order":209},"💈":{"category":"Travel & Places","sheet_x":25,"sheet_y":18,"sort_order":61},"💉":{"category":"Objects","sheet_x":25,"sheet_y":19,"sort_order":208},"💊":{"category":"Objects","sheet_x":25,"sheet_y":20,"sort_order":210},"💋":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":21,"sort_order":115},"💌":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":22,"sort_order":116},"💍":{"category":"Objects","sheet_x":25,"sheet_y":23,"sort_order":42},"💎":{"category":"Objects","sheet_x":25,"sheet_y":24,"sort_order":43},"💏":{"category":"People & Body","sheet_x":25,"sheet_y":25,"sort_order":297},"💐":{"category":"Animals & Nature","sheet_x":25,"sheet_y":26,"sort_order":106},"💑":{"category":"People & Body","sheet_x":25,"sheet_y":27,"sort_order":301},"💒":{"category":"Travel & Places","sheet_x":25,"sheet_y":28,"sort_order":38},"💓":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":29,"sort_order":121},"💔":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":30,"sort_order":126},"💕":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":31,"sort_order":123},"💖":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":32,"sort_order":119},"💗":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":33,"sort_order":120},"💘":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":34,"sort_order":117},"💙":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":35,"sort_order":131},"💚":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":36,"sort_order":130},"💛":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":37,"sort_order":129},"💜":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":38,"sort_order":132},"💝":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":39,"sort_order":118},"💞":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":40,"sort_order":122},"💟":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":41,"sort_order":124},"💠":{"category":"Symbols","sheet_x":25,"sheet_y":42,"sort_order":214},"💡":{"category":"Objects","sheet_x":25,"sheet_y":43,"sort_order":100},"💢":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":44,"sort_order":137},"💣":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":45,"sort_order":143},"💤":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":46,"sort_order":149},"💥":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":47,"sort_order":138},"💦":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":48,"sort_order":140},"💧":{"category":"Travel & Places","sheet_x":25,"sheet_y":49,"sort_order":209},"💨":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":50,"sort_order":141},"💩":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":51,"sort_order":95},"💪":{"category":"People & Body","sheet_x":25,"sheet_y":52,"sort_order":34},"💫":{"category":"Smileys & Emotion","sheet_x":26,"sheet_y":1,"sort_order":139},"💬":{"category":"Smileys & Emotion","sheet_x":26,"sheet_y":2,"sort_order":144},"💭":{"category":"Smileys & Emotion","sheet_x":26,"sheet_y":3,"sort_order":148},"💮":{"category":"Animals & Nature","sheet_x":26,"sheet_y":4,"sort_order":108},"💯":{"category":"Smileys & Emotion","sheet_x":26,"sheet_y":5,"sort_order":136},"💰":{"category":"Objects","sheet_x":26,"sheet_y":6,"sort_order":121},"💱":{"category":"Objects","sheet_x":26,"sheet_y":7,"sort_order":130},"💲":{"category":"Objects","sheet_x":26,"sheet_y":8,"sort_order":131},"💳":{"category":"Objects","sheet_x":26,"sheet_y":9,"sort_order":127},"💴":{"category":"Objects","sheet_x":26,"sheet_y":10,"sort_order":122},"💵":{"category":"Objects","sheet_x":26,"sheet_y":11,"sort_order":123},"💶":{"category":"Objects","sheet_x":26,"sheet_y":12,"sort_order":124},"💷":{"category":"Objects","sheet_x":26,"sheet_y":13,"sort_order":125},"💸":{"category":"Objects","sheet_x":26,"sheet_y":14,"sort_order":126},"💹":{"category":"Objects","sheet_x":26,"sheet_y":15,"sort_order":129},"💺":{"category":"Travel & Places","sheet_x":26,"sheet_y":16,"sort_order":123},"💻":{"category":"Objects","sheet_x":26,"sheet_y":17,"sort_order":77},"💼":{"category":"Objects","sheet_x":26,"sheet_y":18,"sort_order":152},"💽":{"category":"Objects","sheet_x":26,"sheet_y":19,"sort_order":83},"💾":{"category":"Objects","sheet_x":26,"sheet_y":20,"sort_order":84},"💿":{"category":"Objects","sheet_x":26,"sheet_y":21,"sort_order":85},"📀":{"category":"Objects","sheet_x":26,"sheet_y":22,"sort_order":86},"📁":{"category":"Objects","sheet_x":26,"sheet_y":23,"sort_order":153},"📂":{"category":"Objects","sheet_x":26,"sheet_y":24,"sort_order":154},"📃":{"category":"Objects","sheet_x":26,"sheet_y":25,"sort_order":113},"📄":{"category":"Objects","sheet_x":26,"sheet_y":26,"sort_order":115},"📅":{"category":"Objects","sheet_x":26,"sheet_y":27,"sort_order":156},"📆":{"category":"Objects","sheet_x":26,"sheet_y":28,"sort_order":157},"📇":{"category":"Objects","sheet_x":26,"sheet_y":29,"sort_order":160},"📈":{"category":"Objects","sheet_x":26,"sheet_y":30,"sort_order":161},"📉":{"category":"Objects","sheet_x":26,"sheet_y":31,"sort_order":162},"📊":{"category":"Objects","sheet_x":26,"sheet_y":32,"sort_order":163},"📋":{"category":"Objects","sheet_x":26,"sheet_y":33,"sort_order":164},"📌":{"category":"Objects","sheet_x":26,"sheet_y":34,"sort_order":165},"📍":{"category":"Objects","sheet_x":26,"sheet_y":35,"sort_order":166},"📎":{"category":"Objects","sheet_x":26,"sheet_y":36,"sort_order":167},"📏":{"category":"Objects","sheet_x":26,"sheet_y":37,"sort_order":169},"📐":{"category":"Objects","sheet_x":26,"sheet_y":38,"sort_order":170},"📑":{"category":"Objects","sheet_x":26,"sheet_y":39,"sort_order":118},"📒":{"category":"Objects","sheet_x":26,"sheet_y":40,"sort_order":112},"📓":{"category":"Objects","sheet_x":26,"sheet_y":41,"sort_order":111},"📔":{"category":"Objects","sheet_x":26,"sheet_y":42,"sort_order":104},"📕":{"category":"Objects","sheet_x":26,"sheet_y":43,"sort_order":105},"📖":{"category":"Objects","sheet_x":26,"sheet_y":44,"sort_order":106},"📗":{"category":"Objects","sheet_x":26,"sheet_y":45,"sort_order":107},"📘":{"category":"Objects","sheet_x":26,"sheet_y":46,"sort_order":108},"📙":{"category":"Objects","sheet_x":26,"sheet_y":47,"sort_order":109},"📚":{"category":"Objects","sheet_x":26,"sheet_y":48,"sort_order":110},"📛":{"category":"Symbols","sheet_x":26,"sheet_y":49,"sort_order":104},"📜":{"category":"Objects","sheet_x":26,"sheet_y":50,"sort_order":114},"📝":{"category":"Objects","sheet_x":26,"sheet_y":51,"sort_order":151},"📞":{"category":"Objects","sheet_x":26,"sheet_y":52,"sort_order":72},"📟":{"category":"Objects","sheet_x":26,"sheet_y":53,"sort_order":73},"📠":{"category":"Objects","sheet_x":26,"sheet_y":54,"sort_order":74},"📡":{"category":"Objects","sheet_x":26,"sheet_y":55,"sort_order":207},"📢":{"category":"Objects","sheet_x":26,"sheet_y":56,"sort_order":48},"📣":{"category":"Objects","sheet_x":27,"sheet_y":0,"sort_order":49},"📤":{"category":"Objects","sheet_x":27,"sheet_y":1,"sort_order":136},"📥":{"category":"Objects","sheet_x":27,"sheet_y":2,"sort_order":137},"📦":{"category":"Objects","sheet_x":27,"sheet_y":3,"sort_order":138},"📧":{"category":"Objects","sheet_x":27,"sheet_y":4,"sort_order":133},"📨":{"category":"Objects","sheet_x":27,"sheet_y":5,"sort_order":134},"📩":{"category":"Objects","sheet_x":27,"sheet_y":6,"sort_order":135},"📪":{"category":"Objects","sheet_x":27,"sheet_y":7,"sort_order":140},"📫":{"category":"Objects","sheet_x":27,"sheet_y":8,"sort_order":139},"📬":{"category":"Objects","sheet_x":27,"sheet_y":9,"sort_order":141},"📭":{"category":"Objects","sheet_x":27,"sheet_y":10,"sort_order":142},"📮":{"category":"Objects","sheet_x":27,"sheet_y":11,"sort_order":143},"📯":{"category":"Objects","sheet_x":27,"sheet_y":12,"sort_order":50},"📰":{"category":"Objects","sheet_x":27,"sheet_y":13,"sort_order":116},"📱":{"category":"Objects","sheet_x":27,"sheet_y":14,"sort_order":69},"📲":{"category":"Objects","sheet_x":27,"sheet_y":15,"sort_order":70},"📳":{"category":"Symbols","sheet_x":27,"sheet_y":16,"sort_order":95},"📴":{"category":"Symbols","sheet_x":27,"sheet_y":17,"sort_order":96},"📵":{"category":"Symbols","sheet_x":27,"sheet_y":18,"sort_order":23},"📶":{"category":"Symbols","sheet_x":27,"sheet_y":19,"sort_order":94},"📷":{"category":"Objects","sheet_x":27,"sheet_y":20,"sort_order":93},"📸":{"category":"Objects","sheet_x":27,"sheet_y":21,"sort_order":94},"📹":{"category":"Objects","sheet_x":27,"sheet_y":22,"sort_order":95},"📺":{"category":"Objects","sheet_x":27,"sheet_y":23,"sort_order":92},"📻":{"category":"Objects","sheet_x":27,"sheet_y":24,"sort_order":61},"📼":{"category":"Objects","sheet_x":27,"sheet_y":25,"sort_order":96},"📽️":{"category":"Objects","sheet_x":27,"sheet_y":26,"sort_order":90},"📿":{"category":"Objects","sheet_x":27,"sheet_y":27,"sort_order":40},"🔀":{"category":"Symbols","sheet_x":27,"sheet_y":28,"sort_order":73},"🔁":{"category":"Symbols","sheet_x":27,"sheet_y":29,"sort_order":74},"🔂":{"category":"Symbols","sheet_x":27,"sheet_y":30,"sort_order":75},"🔃":{"category":"Symbols","sheet_x":27,"sheet_y":31,"sort_order":41},"🔄":{"category":"Symbols","sheet_x":27,"sheet_y":32,"sort_order":42},"🔅":{"category":"Symbols","sheet_x":27,"sheet_y":33,"sort_order":92},"🔆":{"category":"Symbols","sheet_x":27,"sheet_y":34,"sort_order":93},"🔇":{"category":"Objects","sheet_x":27,"sheet_y":35,"sort_order":44},"🔈":{"category":"Objects","sheet_x":27,"sheet_y":36,"sort_order":45},"🔉":{"category":"Objects","sheet_x":27,"sheet_y":37,"sort_order":46},"🔊":{"category":"Objects","sheet_x":27,"sheet_y":38,"sort_order":47},"🔋":{"category":"Objects","sheet_x":27,"sheet_y":39,"sort_order":75},"🔌":{"category":"Objects","sheet_x":27,"sheet_y":40,"sort_order":76},"🔍":{"category":"Objects","sheet_x":27,"sheet_y":41,"sort_order":97},"🔎":{"category":"Objects","sheet_x":27,"sheet_y":42,"sort_order":98},"🔏":{"category":"Objects","sheet_x":27,"sheet_y":43,"sort_order":177},"🔐":{"category":"Objects","sheet_x":27,"sheet_y":44,"sort_order":178},"🔑":{"category":"Objects","sheet_x":27,"sheet_y":45,"sort_order":179},"🔒":{"category":"Objects","sheet_x":27,"sheet_y":46,"sort_order":175},"🔓":{"category":"Objects","sheet_x":27,"sheet_y":47,"sort_order":176},"🔔":{"category":"Objects","sheet_x":27,"sheet_y":48,"sort_order":51},"🔕":{"category":"Objects","sheet_x":27,"sheet_y":49,"sort_order":52},"🔖":{"category":"Objects","sheet_x":27,"sheet_y":50,"sort_order":119},"🔗":{"category":"Objects","sheet_x":27,"sheet_y":51,"sort_order":197},"🔘":{"category":"Symbols","sheet_x":27,"sheet_y":52,"sort_order":215},"🔙":{"category":"Symbols","sheet_x":27,"sheet_y":53,"sort_order":43},"🔚":{"category":"Symbols","sheet_x":27,"sheet_y":54,"sort_order":44},"🔛":{"category":"Symbols","sheet_x":27,"sheet_y":55,"sort_order":45},"🔜":{"category":"Symbols","sheet_x":27,"sheet_y":56,"sort_order":46},"🔝":{"category":"Symbols","sheet_x":28,"sheet_y":0,"sort_order":47},"🔞":{"category":"Symbols","sheet_x":28,"sheet_y":1,"sort_order":24},"🔟":{"category":"Symbols","sheet_x":28,"sheet_y":2,"sort_order":144},"🔠":{"category":"Symbols","sheet_x":28,"sheet_y":3,"sort_order":145},"🔡":{"category":"Symbols","sheet_x":28,"sheet_y":4,"sort_order":146},"🔢":{"category":"Symbols","sheet_x":28,"sheet_y":5,"sort_order":147},"🔣":{"category":"Symbols","sheet_x":28,"sheet_y":6,"sort_order":148},"🔤":{"category":"Symbols","sheet_x":28,"sheet_y":7,"sort_order":149},"🔥":{"category":"Travel & Places","sheet_x":28,"sheet_y":8,"sort_order":208},"🔦":{"category":"Objects","sheet_x":28,"sheet_y":9,"sort_order":101},"🔧":{"category":"Objects","sheet_x":28,"sheet_y":10,"sort_order":191},"🔨":{"category":"Objects","sheet_x":28,"sheet_y":11,"sort_order":181},"🔩":{"category":"Objects","sheet_x":28,"sheet_y":12,"sort_order":192},"🔪":{"category":"Food & Drink","sheet_x":28,"sheet_y":13,"sort_order":120},"🔫":{"category":"Objects","sheet_x":28,"sheet_y":14,"sort_order":188},"🔬":{"category":"Objects","sheet_x":28,"sheet_y":15,"sort_order":205},"🔭":{"category":"Objects","sheet_x":28,"sheet_y":16,"sort_order":206},"🔮":{"category":"Activities","sheet_x":28,"sheet_y":17,"sort_order":59},"🔯":{"category":"Symbols","sheet_x":28,"sheet_y":18,"sort_order":59},"🔰":{"category":"Symbols","sheet_x":28,"sheet_y":19,"sort_order":105},"🔱":{"category":"Symbols","sheet_x":28,"sheet_y":20,"sort_order":103},"🔲":{"category":"Symbols","sheet_x":28,"sheet_y":21,"sort_order":217},"🔳":{"category":"Symbols","sheet_x":28,"sheet_y":22,"sort_order":216},"🔴":{"category":"Symbols","sheet_x":28,"sheet_y":23,"sort_order":184},"🔵":{"category":"Symbols","sheet_x":28,"sheet_y":24,"sort_order":188},"🔶":{"category":"Symbols","sheet_x":28,"sheet_y":25,"sort_order":208},"🔷":{"category":"Symbols","sheet_x":28,"sheet_y":26,"sort_order":209},"🔸":{"category":"Symbols","sheet_x":28,"sheet_y":27,"sort_order":210},"🔹":{"category":"Symbols","sheet_x":28,"sheet_y":28,"sort_order":211},"🔺":{"category":"Symbols","sheet_x":28,"sheet_y":29,"sort_order":212},"🔻":{"category":"Symbols","sheet_x":28,"sheet_y":30,"sort_order":213},"🔼":{"category":"Symbols","sheet_x":28,"sheet_y":31,"sort_order":83},"🔽":{"category":"Symbols","sheet_x":28,"sheet_y":32,"sort_order":85},"🕉️":{"category":"Symbols","sheet_x":28,"sheet_y":33,"sort_order":50},"🕊️":{"category":"Animals & Nature","sheet_x":28,"sheet_y":34,"sort_order":68},"🕋":{"category":"Travel & Places","sheet_x":28,"sheet_y":35,"sort_order":46},"🕌":{"category":"Travel & Places","sheet_x":28,"sheet_y":36,"sort_order":42},"🕍":{"category":"Travel & Places","sheet_x":28,"sheet_y":37,"sort_order":44},"🕎":{"category":"Symbols","sheet_x":28,"sheet_y":38,"sort_order":58},"🕐":{"category":"Travel & Places","sheet_x":28,"sheet_y":39,"sort_order":142},"🕑":{"category":"Travel & Places","sheet_x":28,"sheet_y":40,"sort_order":144},"🕒":{"category":"Travel & Places","sheet_x":28,"sheet_y":41,"sort_order":146},"🕓":{"category":"Travel & Places","sheet_x":28,"sheet_y":42,"sort_order":148},"🕔":{"category":"Travel & Places","sheet_x":28,"sheet_y":43,"sort_order":150},"🕕":{"category":"Travel & Places","sheet_x":28,"sheet_y":44,"sort_order":152},"🕖":{"category":"Travel & Places","sheet_x":28,"sheet_y":45,"sort_order":154},"🕗":{"category":"Travel & Places","sheet_x":28,"sheet_y":46,"sort_order":156},"🕘":{"category":"Travel & Places","sheet_x":28,"sheet_y":47,"sort_order":158},"🕙":{"category":"Travel & Places","sheet_x":28,"sheet_y":48,"sort_order":160},"🕚":{"category":"Travel & Places","sheet_x":28,"sheet_y":49,"sort_order":162},"🕛":{"category":"Travel & Places","sheet_x":28,"sheet_y":50,"sort_order":140},"🕜":{"category":"Travel & Places","sheet_x":28,"sheet_y":51,"sort_order":143},"🕝":{"category":"Travel & Places","sheet_x":28,"sheet_y":52,"sort_order":145},"🕞":{"category":"Travel & Places","sheet_x":28,"sheet_y":53,"sort_order":147},"🕟":{"category":"Travel & Places","sheet_x":28,"sheet_y":54,"sort_order":149},"🕠":{"category":"Travel & Places","sheet_x":28,"sheet_y":55,"sort_order":151},"🕡":{"category":"Travel & Places","sheet_x":28,"sheet_y":56,"sort_order":153},"🕢":{"category":"Travel & Places","sheet_x":29,"sheet_y":0,"sort_order":155},"🕣":{"category":"Travel & Places","sheet_x":29,"sheet_y":1,"sort_order":157},"🕤":{"category":"Travel & Places","sheet_x":29,"sheet_y":2,"sort_order":159},"🕥":{"category":"Travel & Places","sheet_x":29,"sheet_y":3,"sort_order":161},"🕦":{"category":"Travel & Places","sheet_x":29,"sheet_y":4,"sort_order":163},"🕧":{"category":"Travel & Places","sheet_x":29,"sheet_y":5,"sort_order":141},"🕯️":{"category":"Objects","sheet_x":29,"sheet_y":6,"sort_order":99},"🕰️":{"category":"Travel & Places","sheet_x":29,"sheet_y":7,"sort_order":139},"🕳️":{"category":"Smileys & Emotion","sheet_x":29,"sheet_y":8,"sort_order":142},"🕴️":{"category":"People & Body","sheet_x":29,"sheet_y":9,"sort_order":235},"🕵️‍♀️":{"category":"People & Body","sheet_x":29,"sheet_y":15,"sort_order":158},"🕵️‍♂️":{"category":"People & Body","sheet_x":29,"sheet_y":21,"sort_order":157},"🕵️":{"category":"People & Body","sheet_x":29,"sheet_y":27,"sort_order":156},"🕶️":{"category":"Objects","sheet_x":29,"sheet_y":33,"sort_order":2},"🕷️":{"category":"Animals & Nature","sheet_x":29,"sheet_y":34,"sort_order":101},"🕸️":{"category":"Animals & Nature","sheet_x":29,"sheet_y":35,"sort_order":102},"🕹️":{"category":"Activities","sheet_x":29,"sheet_y":36,"sort_order":62},"🕺":{"category":"People & Body","sheet_x":29,"sheet_y":37,"sort_order":234},"🖇️":{"category":"Objects","sheet_x":29,"sheet_y":43,"sort_order":168},"🖊️":{"category":"Objects","sheet_x":29,"sheet_y":44,"sort_order":148},"🖋️":{"category":"Objects","sheet_x":29,"sheet_y":45,"sort_order":147},"🖌️":{"category":"Objects","sheet_x":29,"sheet_y":46,"sort_order":149},"🖍️":{"category":"Objects","sheet_x":29,"sheet_y":47,"sort_order":150},"🖐️":{"category":"People & Body","sheet_x":29,"sheet_y":48,"sort_order":3},"🖕":{"category":"People & Body","sheet_x":29,"sheet_y":54,"sort_order":16},"🖖":{"category":"People & Body","sheet_x":30,"sheet_y":3,"sort_order":5},"🖤":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":9,"sort_order":134},"🖥️":{"category":"Objects","sheet_x":30,"sheet_y":10,"sort_order":78},"🖨️":{"category":"Objects","sheet_x":30,"sheet_y":11,"sort_order":79},"🖱️":{"category":"Objects","sheet_x":30,"sheet_y":12,"sort_order":81},"🖲️":{"category":"Objects","sheet_x":30,"sheet_y":13,"sort_order":82},"🖼️":{"category":"Activities","sheet_x":30,"sheet_y":14,"sort_order":76},"🗂️":{"category":"Objects","sheet_x":30,"sheet_y":15,"sort_order":155},"🗃️":{"category":"Objects","sheet_x":30,"sheet_y":16,"sort_order":172},"🗄️":{"category":"Objects","sheet_x":30,"sheet_y":17,"sort_order":173},"🗑️":{"category":"Objects","sheet_x":30,"sheet_y":18,"sort_order":174},"🗒️":{"category":"Objects","sheet_x":30,"sheet_y":19,"sort_order":158},"🗓️":{"category":"Objects","sheet_x":30,"sheet_y":20,"sort_order":159},"🗜️":{"category":"Objects","sheet_x":30,"sheet_y":21,"sort_order":194},"🗝️":{"category":"Objects","sheet_x":30,"sheet_y":22,"sort_order":180},"🗞️":{"category":"Objects","sheet_x":30,"sheet_y":23,"sort_order":117},"🗡️":{"category":"Objects","sheet_x":30,"sheet_y":24,"sort_order":186},"🗣️":{"category":"People & Body","sheet_x":30,"sheet_y":25,"sort_order":331},"🗨️":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":26,"sort_order":146},"🗯️":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":27,"sort_order":147},"🗳️":{"category":"Objects","sheet_x":30,"sheet_y":28,"sort_order":144},"🗺️":{"category":"Travel & Places","sheet_x":30,"sheet_y":29,"sort_order":5},"🗻":{"category":"Travel & Places","sheet_x":30,"sheet_y":30,"sort_order":11},"🗼":{"category":"Travel & Places","sheet_x":30,"sheet_y":31,"sort_order":39},"🗽":{"category":"Travel & Places","sheet_x":30,"sheet_y":32,"sort_order":40},"🗾":{"category":"Travel & Places","sheet_x":30,"sheet_y":33,"sort_order":6},"🗿":{"category":"Objects","sheet_x":30,"sheet_y":34,"sort_order":233},"😀":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":35,"sort_order":1},"😁":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":36,"sort_order":4},"😂":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":37,"sort_order":8},"😃":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":38,"sort_order":2},"😄":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":39,"sort_order":3},"😅":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":40,"sort_order":6},"😆":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":41,"sort_order":5},"😇":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":42,"sort_order":13},"😈":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":43,"sort_order":91},"😉":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":44,"sort_order":11},"😊":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":45,"sort_order":12},"😋":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":46,"sort_order":22},"😌":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":47,"sort_order":42},"😍":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":48,"sort_order":15},"😎":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":49,"sort_order":60},"😏":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":50,"sort_order":37},"😐":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":51,"sort_order":34},"😑":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":52,"sort_order":35},"😒":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":53,"sort_order":38},"😓":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":54,"sort_order":83},"😔":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":55,"sort_order":43},"😕":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":56,"sort_order":63},"😖":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":0,"sort_order":80},"😗":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":1,"sort_order":18},"😘":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":2,"sort_order":17},"😙":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":3,"sort_order":21},"😚":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":4,"sort_order":20},"😛":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":5,"sort_order":23},"😜":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":6,"sort_order":24},"😝":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":7,"sort_order":26},"😞":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":8,"sort_order":82},"😟":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":9,"sort_order":64},"😠":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":10,"sort_order":89},"😡":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":11,"sort_order":88},"😢":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":12,"sort_order":77},"😣":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":13,"sort_order":81},"😤":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":14,"sort_order":87},"😥":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":15,"sort_order":76},"😦":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":16,"sort_order":72},"😧":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":17,"sort_order":73},"😨":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":18,"sort_order":74},"😩":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":19,"sort_order":84},"😪":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":20,"sort_order":44},"😫":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":21,"sort_order":85},"😬":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":22,"sort_order":40},"😭":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":23,"sort_order":78},"😮":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":24,"sort_order":67},"😯":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":25,"sort_order":68},"😰":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":26,"sort_order":75},"😱":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":27,"sort_order":79},"😲":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":28,"sort_order":69},"😳":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":29,"sort_order":70},"😴":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":30,"sort_order":46},"😵":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":31,"sort_order":56},"😶":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":32,"sort_order":36},"😷":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":33,"sort_order":47},"😸":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":34,"sort_order":104},"😹":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":35,"sort_order":105},"😺":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":36,"sort_order":103},"😻":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":37,"sort_order":106},"😼":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":38,"sort_order":107},"😽":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":39,"sort_order":108},"😾":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":40,"sort_order":111},"😿":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":41,"sort_order":110},"🙀":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":42,"sort_order":109},"🙁":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":43,"sort_order":65},"🙂":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":44,"sort_order":9},"🙃":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":45,"sort_order":10},"🙄":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":46,"sort_order":39},"🙅‍♀️":{"category":"People & Body","sheet_x":31,"sheet_y":47,"sort_order":83},"🙅‍♂️":{"category":"People & Body","sheet_x":31,"sheet_y":53,"sort_order":82},"🙅":{"category":"People & Body","sheet_x":32,"sheet_y":2,"sort_order":81},"🙆‍♀️":{"category":"People & Body","sheet_x":32,"sheet_y":8,"sort_order":86},"🙆‍♂️":{"category":"People & Body","sheet_x":32,"sheet_y":14,"sort_order":85},"🙆":{"category":"People & Body","sheet_x":32,"sheet_y":20,"sort_order":84},"🙇‍♀️":{"category":"People & Body","sheet_x":32,"sheet_y":26,"sort_order":98},"🙇‍♂️":{"category":"People & Body","sheet_x":32,"sheet_y":32,"sort_order":97},"🙇":{"category":"People & Body","sheet_x":32,"sheet_y":38,"sort_order":96},"🙈":{"category":"Smileys & Emotion","sheet_x":32,"sheet_y":44,"sort_order":112},"🙉":{"category":"Smileys & Emotion","sheet_x":32,"sheet_y":45,"sort_order":113},"🙊":{"category":"Smileys & Emotion","sheet_x":32,"sheet_y":46,"sort_order":114},"🙋‍♀️":{"category":"People & Body","sheet_x":32,"sheet_y":47,"sort_order":92},"🙋‍♂️":{"category":"People & Body","sheet_x":32,"sheet_y":53,"sort_order":91},"🙋":{"category":"People & Body","sheet_x":33,"sheet_y":2,"sort_order":90},"🙌":{"category":"People & Body","sheet_x":33,"sheet_y":8,"sort_order":26},"🙍‍♀️":{"category":"People & Body","sheet_x":33,"sheet_y":14,"sort_order":77},"🙍‍♂️":{"category":"People & Body","sheet_x":33,"sheet_y":20,"sort_order":76},"🙍":{"category":"People & Body","sheet_x":33,"sheet_y":26,"sort_order":75},"🙎‍♀️":{"category":"People & Body","sheet_x":33,"sheet_y":32,"sort_order":80},"🙎‍♂️":{"category":"People & Body","sheet_x":33,"sheet_y":38,"sort_order":79},"🙎":{"category":"People & Body","sheet_x":33,"sheet_y":44,"sort_order":78},"🙏":{"category":"People & Body","sheet_x":33,"sheet_y":50,"sort_order":30},"🚀":{"category":"Travel & Places","sheet_x":33,"sheet_y":56,"sort_order":129},"🚁":{"category":"Travel & Places","sheet_x":34,"sheet_y":0,"sort_order":124},"🚂":{"category":"Travel & Places","sheet_x":34,"sheet_y":1,"sort_order":63},"🚃":{"category":"Travel & Places","sheet_x":34,"sheet_y":2,"sort_order":64},"🚄":{"category":"Travel & Places","sheet_x":34,"sheet_y":3,"sort_order":65},"🚅":{"category":"Travel & Places","sheet_x":34,"sheet_y":4,"sort_order":66},"🚆":{"category":"Travel & Places","sheet_x":34,"sheet_y":5,"sort_order":67},"🚇":{"category":"Travel & Places","sheet_x":34,"sheet_y":6,"sort_order":68},"🚈":{"category":"Travel & Places","sheet_x":34,"sheet_y":7,"sort_order":69},"🚉":{"category":"Travel & Places","sheet_x":34,"sheet_y":8,"sort_order":70},"🚊":{"category":"Travel & Places","sheet_x":34,"sheet_y":9,"sort_order":71},"🚋":{"category":"Travel & Places","sheet_x":34,"sheet_y":10,"sort_order":74},"🚌":{"category":"Travel & Places","sheet_x":34,"sheet_y":11,"sort_order":75},"🚍":{"category":"Travel & Places","sheet_x":34,"sheet_y":12,"sort_order":76},"🚎":{"category":"Travel & Places","sheet_x":34,"sheet_y":13,"sort_order":77},"🚏":{"category":"Travel & Places","sheet_x":34,"sheet_y":14,"sort_order":100},"🚐":{"category":"Travel & Places","sheet_x":34,"sheet_y":15,"sort_order":78},"🚑":{"category":"Travel & Places","sheet_x":34,"sheet_y":16,"sort_order":79},"🚒":{"category":"Travel & Places","sheet_x":34,"sheet_y":17,"sort_order":80},"🚓":{"category":"Travel & Places","sheet_x":34,"sheet_y":18,"sort_order":81},"🚔":{"category":"Travel & Places","sheet_x":34,"sheet_y":19,"sort_order":82},"🚕":{"category":"Travel & Places","sheet_x":34,"sheet_y":20,"sort_order":83},"🚖":{"category":"Travel & Places","sheet_x":34,"sheet_y":21,"sort_order":84},"🚗":{"category":"Travel & Places","sheet_x":34,"sheet_y":22,"sort_order":85},"🚘":{"category":"Travel & Places","sheet_x":34,"sheet_y":23,"sort_order":86},"🚙":{"category":"Travel & Places","sheet_x":34,"sheet_y":24,"sort_order":87},"🚚":{"category":"Travel & Places","sheet_x":34,"sheet_y":25,"sort_order":88},"🚛":{"category":"Travel & Places","sheet_x":34,"sheet_y":26,"sort_order":89},"🚜":{"category":"Travel & Places","sheet_x":34,"sheet_y":27,"sort_order":90},"🚝":{"category":"Travel & Places","sheet_x":34,"sheet_y":28,"sort_order":72},"🚞":{"category":"Travel & Places","sheet_x":34,"sheet_y":29,"sort_order":73},"🚟":{"category":"Travel & Places","sheet_x":34,"sheet_y":30,"sort_order":125},"🚠":{"category":"Travel & Places","sheet_x":34,"sheet_y":31,"sort_order":126},"🚡":{"category":"Travel & Places","sheet_x":34,"sheet_y":32,"sort_order":127},"🚢":{"category":"Travel & Places","sheet_x":34,"sheet_y":33,"sort_order":117},"🚣‍♀️":{"category":"People & Body","sheet_x":34,"sheet_y":34,"sort_order":257},"🚣‍♂️":{"category":"People & Body","sheet_x":34,"sheet_y":40,"sort_order":256},"🚣":{"category":"People & Body","sheet_x":34,"sheet_y":46,"sort_order":255},"🚤":{"category":"Travel & Places","sheet_x":34,"sheet_y":52,"sort_order":113},"🚥":{"category":"Travel & Places","sheet_x":34,"sheet_y":53,"sort_order":106},"🚦":{"category":"Travel & Places","sheet_x":34,"sheet_y":54,"sort_order":107},"🚧":{"category":"Travel & Places","sheet_x":34,"sheet_y":55,"sort_order":109},"🚨":{"category":"Travel & Places","sheet_x":34,"sheet_y":56,"sort_order":105},"🚩":{"category":"Flags","sheet_x":35,"sheet_y":0,"sort_order":2},"🚪":{"category":"Objects","sheet_x":35,"sheet_y":1,"sort_order":213},"🚫":{"category":"Symbols","sheet_x":35,"sheet_y":2,"sort_order":17},"🚬":{"category":"Objects","sheet_x":35,"sheet_y":3,"sort_order":230},"🚭":{"category":"Symbols","sheet_x":35,"sheet_y":4,"sort_order":19},"🚮":{"category":"Symbols","sheet_x":35,"sheet_y":5,"sort_order":2},"🚯":{"category":"Symbols","sheet_x":35,"sheet_y":6,"sort_order":20},"🚰":{"category":"Symbols","sheet_x":35,"sheet_y":7,"sort_order":3},"🚱":{"category":"Symbols","sheet_x":35,"sheet_y":8,"sort_order":21},"🚲":{"category":"Travel & Places","sheet_x":35,"sheet_y":9,"sort_order":97},"🚳":{"category":"Symbols","sheet_x":35,"sheet_y":10,"sort_order":18},"🚴‍♀️":{"category":"People & Body","sheet_x":35,"sheet_y":11,"sort_order":269},"🚴‍♂️":{"category":"People & Body","sheet_x":35,"sheet_y":17,"sort_order":268},"🚴":{"category":"People & Body","sheet_x":35,"sheet_y":23,"sort_order":267},"🚵‍♀️":{"category":"People & Body","sheet_x":35,"sheet_y":29,"sort_order":272},"🚵‍♂️":{"category":"People & Body","sheet_x":35,"sheet_y":35,"sort_order":271},"🚵":{"category":"People & Body","sheet_x":35,"sheet_y":41,"sort_order":270},"🚶‍♀️":{"category":"People & Body","sheet_x":35,"sheet_y":47,"sort_order":214},"🚶‍♂️":{"category":"People & Body","sheet_x":35,"sheet_y":53,"sort_order":213},"🚶":{"category":"People & Body","sheet_x":36,"sheet_y":2,"sort_order":212},"🚷":{"category":"Symbols","sheet_x":36,"sheet_y":8,"sort_order":22},"🚸":{"category":"Symbols","sheet_x":36,"sheet_y":9,"sort_order":15},"🚹":{"category":"Symbols","sheet_x":36,"sheet_y":10,"sort_order":5},"🚺":{"category":"Symbols","sheet_x":36,"sheet_y":11,"sort_order":6},"🚻":{"category":"Symbols","sheet_x":36,"sheet_y":12,"sort_order":7},"🚼":{"category":"Symbols","sheet_x":36,"sheet_y":13,"sort_order":8},"🚽":{"category":"Objects","sheet_x":36,"sheet_y":14,"sort_order":217},"🚾":{"category":"Symbols","sheet_x":36,"sheet_y":15,"sort_order":9},"🚿":{"category":"Objects","sheet_x":36,"sheet_y":16,"sort_order":218},"🛀":{"category":"People & Body","sheet_x":36,"sheet_y":17,"sort_order":291},"🛁":{"category":"Objects","sheet_x":36,"sheet_y":23,"sort_order":219},"🛂":{"category":"Symbols","sheet_x":36,"sheet_y":24,"sort_order":10},"🛃":{"category":"Symbols","sheet_x":36,"sheet_y":25,"sort_order":11},"🛄":{"category":"Symbols","sheet_x":36,"sheet_y":26,"sort_order":12},"🛅":{"category":"Symbols","sheet_x":36,"sheet_y":27,"sort_order":13},"🛋️":{"category":"Objects","sheet_x":36,"sheet_y":28,"sort_order":215},"🛌":{"category":"People & Body","sheet_x":36,"sheet_y":29,"sort_order":292},"🛍️":{"category":"Objects","sheet_x":36,"sheet_y":35,"sort_order":24},"🛎️":{"category":"Travel & Places","sheet_x":36,"sheet_y":36,"sort_order":131},"🛏️":{"category":"Objects","sheet_x":36,"sheet_y":37,"sort_order":214},"🛐":{"category":"Symbols","sheet_x":36,"sheet_y":38,"sort_order":48},"🛑":{"category":"Travel & Places","sheet_x":36,"sheet_y":39,"sort_order":108},"🛒":{"category":"Objects","sheet_x":36,"sheet_y":40,"sort_order":229},"🛕":{"category":"Travel & Places","sheet_x":36,"sheet_y":41,"sort_order":43},"🛠️":{"category":"Objects","sheet_x":36,"sheet_y":42,"sort_order":185},"🛡️":{"category":"Objects","sheet_x":36,"sheet_y":43,"sort_order":190},"🛢️":{"category":"Travel & Places","sheet_x":36,"sheet_y":44,"sort_order":103},"🛣️":{"category":"Travel & Places","sheet_x":36,"sheet_y":45,"sort_order":101},"🛤️":{"category":"Travel & Places","sheet_x":36,"sheet_y":46,"sort_order":102},"🛥️":{"category":"Travel & Places","sheet_x":36,"sheet_y":47,"sort_order":116},"🛩️":{"category":"Travel & Places","sheet_x":36,"sheet_y":48,"sort_order":119},"🛫":{"category":"Travel & Places","sheet_x":36,"sheet_y":49,"sort_order":120},"🛬":{"category":"Travel & Places","sheet_x":36,"sheet_y":50,"sort_order":121},"🛰️":{"category":"Travel & Places","sheet_x":36,"sheet_y":51,"sort_order":128},"🛳️":{"category":"Travel & Places","sheet_x":36,"sheet_y":52,"sort_order":114},"🛴":{"category":"Travel & Places","sheet_x":36,"sheet_y":53,"sort_order":98},"🛵":{"category":"Travel & Places","sheet_x":36,"sheet_y":54,"sort_order":93},"🛶":{"category":"Travel & Places","sheet_x":36,"sheet_y":55,"sort_order":112},"🛷":{"category":"Activities","sheet_x":36,"sheet_y":56,"sort_order":53},"🛸":{"category":"Travel & Places","sheet_x":37,"sheet_y":0,"sort_order":130},"🛹":{"category":"Travel & Places","sheet_x":37,"sheet_y":1,"sort_order":99},"🛺":{"category":"Travel & Places","sheet_x":37,"sheet_y":2,"sort_order":96},"🟠":{"category":"Symbols","sheet_x":37,"sheet_y":3,"sort_order":185},"🟡":{"category":"Symbols","sheet_x":37,"sheet_y":4,"sort_order":186},"🟢":{"category":"Symbols","sheet_x":37,"sheet_y":5,"sort_order":187},"🟣":{"category":"Symbols","sheet_x":37,"sheet_y":6,"sort_order":189},"🟤":{"category":"Symbols","sheet_x":37,"sheet_y":7,"sort_order":190},"🟥":{"category":"Symbols","sheet_x":37,"sheet_y":8,"sort_order":193},"🟦":{"category":"Symbols","sheet_x":37,"sheet_y":9,"sort_order":197},"🟧":{"category":"Symbols","sheet_x":37,"sheet_y":10,"sort_order":194},"🟨":{"category":"Symbols","sheet_x":37,"sheet_y":11,"sort_order":195},"🟩":{"category":"Symbols","sheet_x":37,"sheet_y":12,"sort_order":196},"🟪":{"category":"Symbols","sheet_x":37,"sheet_y":13,"sort_order":198},"🟫":{"category":"Symbols","sheet_x":37,"sheet_y":14,"sort_order":199},"🤍":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":15,"sort_order":135},"🤎":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":16,"sort_order":133},"🤏":{"category":"People & Body","sheet_x":37,"sheet_y":17,"sort_order":7},"🤐":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":23,"sort_order":32},"🤑":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":24,"sort_order":27},"🤒":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":25,"sort_order":48},"🤓":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":26,"sort_order":61},"🤔":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":27,"sort_order":31},"🤕":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":28,"sort_order":49},"🤖":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":29,"sort_order":102},"🤗":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":30,"sort_order":28},"🤘":{"category":"People & Body","sheet_x":37,"sheet_y":31,"sort_order":11},"🤙":{"category":"People & Body","sheet_x":37,"sheet_y":37,"sort_order":12},"🤚":{"category":"People & Body","sheet_x":37,"sheet_y":43,"sort_order":2},"🤛":{"category":"People & Body","sheet_x":37,"sheet_y":49,"sort_order":23},"🤜":{"category":"People & Body","sheet_x":37,"sheet_y":55,"sort_order":24},"🤝":{"category":"People & Body","sheet_x":38,"sheet_y":4,"sort_order":29},"🤞":{"category":"People & Body","sheet_x":38,"sheet_y":5,"sort_order":9},"🤟":{"category":"People & Body","sheet_x":38,"sheet_y":11,"sort_order":10},"🤠":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":17,"sort_order":58},"🤡":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":18,"sort_order":96},"🤢":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":19,"sort_order":50},"🤣":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":20,"sort_order":7},"🤤":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":21,"sort_order":45},"🤥":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":22,"sort_order":41},"🤦‍♀️":{"category":"People & Body","sheet_x":38,"sheet_y":23,"sort_order":101},"🤦‍♂️":{"category":"People & Body","sheet_x":38,"sheet_y":29,"sort_order":100},"🤦":{"category":"People & Body","sheet_x":38,"sheet_y":35,"sort_order":99},"🤧":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":41,"sort_order":52},"🤨":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":42,"sort_order":33},"🤩":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":43,"sort_order":16},"🤪":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":44,"sort_order":25},"🤫":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":45,"sort_order":30},"🤬":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":46,"sort_order":90},"🤭":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":47,"sort_order":29},"🤮":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":48,"sort_order":51},"🤯":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":49,"sort_order":57},"🤰":{"category":"People & Body","sheet_x":38,"sheet_y":50,"sort_order":174},"🤱":{"category":"People & Body","sheet_x":38,"sheet_y":56,"sort_order":175},"🤲":{"category":"People & Body","sheet_x":39,"sheet_y":5,"sort_order":28},"🤳":{"category":"People & Body","sheet_x":39,"sheet_y":11,"sort_order":33},"🤴":{"category":"People & Body","sheet_x":39,"sheet_y":17,"sort_order":165},"🤵":{"category":"People & Body","sheet_x":39,"sheet_y":23,"sort_order":172},"🤶":{"category":"People & Body","sheet_x":39,"sheet_y":29,"sort_order":178},"🤷‍♀️":{"category":"People & Body","sheet_x":39,"sheet_y":35,"sort_order":104},"🤷‍♂️":{"category":"People & Body","sheet_x":39,"sheet_y":41,"sort_order":103},"🤷":{"category":"People & Body","sheet_x":39,"sheet_y":47,"sort_order":102},"🤸‍♀️":{"category":"People & Body","sheet_x":39,"sheet_y":53,"sort_order":275},"🤸‍♂️":{"category":"People & Body","sheet_x":40,"sheet_y":2,"sort_order":274},"🤸":{"category":"People & Body","sheet_x":40,"sheet_y":8,"sort_order":273},"🤹‍♀️":{"category":"People & Body","sheet_x":40,"sheet_y":14,"sort_order":287},"🤹‍♂️":{"category":"People & Body","sheet_x":40,"sheet_y":20,"sort_order":286},"🤹":{"category":"People & Body","sheet_x":40,"sheet_y":26,"sort_order":285},"🤺":{"category":"People & Body","sheet_x":40,"sheet_y":32,"sort_order":245},"🤼‍♀️":{"category":"People & Body","sheet_x":40,"sheet_y":33,"sort_order":278},"🤼‍♂️":{"category":"People & Body","sheet_x":40,"sheet_y":34,"sort_order":277},"🤼":{"category":"People & Body","sheet_x":40,"sheet_y":35,"sort_order":276},"🤽‍♀️":{"category":"People & Body","sheet_x":40,"sheet_y":36,"sort_order":281},"🤽‍♂️":{"category":"People & Body","sheet_x":40,"sheet_y":42,"sort_order":280},"🤽":{"category":"People & Body","sheet_x":40,"sheet_y":48,"sort_order":279},"🤾‍♀️":{"category":"People & Body","sheet_x":40,"sheet_y":54,"sort_order":284},"🤾‍♂️":{"category":"People & Body","sheet_x":41,"sheet_y":3,"sort_order":283},"🤾":{"category":"People & Body","sheet_x":41,"sheet_y":9,"sort_order":282},"🤿":{"category":"Activities","sheet_x":41,"sheet_y":15,"sort_order":50},"🥀":{"category":"Animals & Nature","sheet_x":41,"sheet_y":16,"sort_order":111},"🥁":{"category":"Objects","sheet_x":41,"sheet_y":17,"sort_order":68},"🥂":{"category":"Food & Drink","sheet_x":41,"sheet_y":18,"sort_order":110},"🥃":{"category":"Food & Drink","sheet_x":41,"sheet_y":19,"sort_order":111},"🥄":{"category":"Food & Drink","sheet_x":41,"sheet_y":20,"sort_order":119},"🥅":{"category":"Activities","sheet_x":41,"sheet_y":21,"sort_order":46},"🥇":{"category":"Activities","sheet_x":41,"sheet_y":22,"sort_order":25},"🥈":{"category":"Activities","sheet_x":41,"sheet_y":23,"sort_order":26},"🥉":{"category":"Activities","sheet_x":41,"sheet_y":24,"sort_order":27},"🥊":{"category":"Activities","sheet_x":41,"sheet_y":25,"sort_order":44},"🥋":{"category":"Activities","sheet_x":41,"sheet_y":26,"sort_order":45},"🥌":{"category":"Activities","sheet_x":41,"sheet_y":27,"sort_order":54},"🥍":{"category":"Activities","sheet_x":41,"sheet_y":28,"sort_order":41},"🥎":{"category":"Activities","sheet_x":41,"sheet_y":29,"sort_order":30},"🥏":{"category":"Activities","sheet_x":41,"sheet_y":30,"sort_order":36},"🥐":{"category":"Food & Drink","sheet_x":41,"sheet_y":31,"sort_order":33},"🥑":{"category":"Food & Drink","sheet_x":41,"sheet_y":32,"sort_order":18},"🥒":{"category":"Food & Drink","sheet_x":41,"sheet_y":33,"sort_order":24},"🥓":{"category":"Food & Drink","sheet_x":41,"sheet_y":34,"sort_order":43},"🥔":{"category":"Food & Drink","sheet_x":41,"sheet_y":35,"sort_order":20},"🥕":{"category":"Food & Drink","sheet_x":41,"sheet_y":36,"sort_order":21},"🥖":{"category":"Food & Drink","sheet_x":41,"sheet_y":37,"sort_order":34},"🥗":{"category":"Food & Drink","sheet_x":41,"sheet_y":38,"sort_order":58},"🥘":{"category":"Food & Drink","sheet_x":41,"sheet_y":39,"sort_order":55},"🥙":{"category":"Food & Drink","sheet_x":41,"sheet_y":40,"sort_order":51},"🥚":{"category":"Food & Drink","sheet_x":41,"sheet_y":41,"sort_order":53},"🥛":{"category":"Food & Drink","sheet_x":41,"sheet_y":42,"sort_order":100},"🥜":{"category":"Food & Drink","sheet_x":41,"sheet_y":43,"sort_order":30},"🥝":{"category":"Food & Drink","sheet_x":41,"sheet_y":44,"sort_order":15},"🥞":{"category":"Food & Drink","sheet_x":41,"sheet_y":45,"sort_order":37},"🥟":{"category":"Food & Drink","sheet_x":41,"sheet_y":46,"sort_order":77},"🥠":{"category":"Food & Drink","sheet_x":41,"sheet_y":47,"sort_order":78},"🥡":{"category":"Food & Drink","sheet_x":41,"sheet_y":48,"sort_order":79},"🥢":{"category":"Food & Drink","sheet_x":41,"sheet_y":49,"sort_order":116},"🥣":{"category":"Food & Drink","sheet_x":41,"sheet_y":50,"sort_order":57},"🥤":{"category":"Food & Drink","sheet_x":41,"sheet_y":51,"sort_order":112},"🥥":{"category":"Food & Drink","sheet_x":41,"sheet_y":52,"sort_order":17},"🥦":{"category":"Food & Drink","sheet_x":41,"sheet_y":53,"sort_order":26},"🥧":{"category":"Food & Drink","sheet_x":41,"sheet_y":54,"sort_order":93},"🥨":{"category":"Food & Drink","sheet_x":41,"sheet_y":55,"sort_order":35},"🥩":{"category":"Food & Drink","sheet_x":41,"sheet_y":56,"sort_order":42},"🥪":{"category":"Food & Drink","sheet_x":42,"sheet_y":0,"sort_order":48},"🥫":{"category":"Food & Drink","sheet_x":42,"sheet_y":1,"sort_order":62},"🥬":{"category":"Food & Drink","sheet_x":42,"sheet_y":2,"sort_order":25},"🥭":{"category":"Food & Drink","sheet_x":42,"sheet_y":3,"sort_order":8},"🥮":{"category":"Food & Drink","sheet_x":42,"sheet_y":4,"sort_order":75},"🥯":{"category":"Food & Drink","sheet_x":42,"sheet_y":5,"sort_order":36},"🥰":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":6,"sort_order":14},"🥱":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":7,"sort_order":86},"🥳":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":8,"sort_order":59},"🥴":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":9,"sort_order":55},"🥵":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":10,"sort_order":53},"🥶":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":11,"sort_order":54},"🥺":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":12,"sort_order":71},"🥻":{"category":"Objects","sheet_x":42,"sheet_y":13,"sort_order":15},"🥼":{"category":"Objects","sheet_x":42,"sheet_y":14,"sort_order":4},"🥽":{"category":"Objects","sheet_x":42,"sheet_y":15,"sort_order":3},"🥾":{"category":"Objects","sheet_x":42,"sheet_y":16,"sort_order":28},"🥿":{"category":"Objects","sheet_x":42,"sheet_y":17,"sort_order":29},"🦀":{"category":"Food & Drink","sheet_x":42,"sheet_y":18,"sort_order":80},"🦁":{"category":"Animals & Nature","sheet_x":42,"sheet_y":19,"sort_order":15},"🦂":{"category":"Animals & Nature","sheet_x":42,"sheet_y":20,"sort_order":103},"🦃":{"category":"Animals & Nature","sheet_x":42,"sheet_y":21,"sort_order":60},"🦄":{"category":"Animals & Nature","sheet_x":42,"sheet_y":22,"sort_order":21},"🦅":{"category":"Animals & Nature","sheet_x":42,"sheet_y":23,"sort_order":69},"🦆":{"category":"Animals & Nature","sheet_x":42,"sheet_y":24,"sort_order":70},"🦇":{"category":"Animals & Nature","sheet_x":42,"sheet_y":25,"sort_order":50},"🦈":{"category":"Animals & Nature","sheet_x":42,"sheet_y":26,"sort_order":91},"🦉":{"category":"Animals & Nature","sheet_x":42,"sheet_y":27,"sort_order":72},"🦊":{"category":"Animals & Nature","sheet_x":42,"sheet_y":28,"sort_order":11},"🦋":{"category":"Animals & Nature","sheet_x":42,"sheet_y":29,"sort_order":95},"🦌":{"category":"Animals & Nature","sheet_x":42,"sheet_y":30,"sort_order":23},"🦍":{"category":"Animals & Nature","sheet_x":42,"sheet_y":31,"sort_order":3},"🦎":{"category":"Animals & Nature","sheet_x":42,"sheet_y":32,"sort_order":79},"🦏":{"category":"Animals & Nature","sheet_x":42,"sheet_y":33,"sort_order":40},"🦐":{"category":"Food & Drink","sheet_x":42,"sheet_y":34,"sort_order":82},"🦑":{"category":"Food & Drink","sheet_x":42,"sheet_y":35,"sort_order":83},"🦒":{"category":"Animals & Nature","sheet_x":42,"sheet_y":36,"sort_order":38},"🦓":{"category":"Animals & Nature","sheet_x":42,"sheet_y":37,"sort_order":22},"🦔":{"category":"Animals & Nature","sheet_x":42,"sheet_y":38,"sort_order":49},"🦕":{"category":"Animals & Nature","sheet_x":42,"sheet_y":39,"sort_order":83},"🦖":{"category":"Animals & Nature","sheet_x":42,"sheet_y":40,"sort_order":84},"🦗":{"category":"Animals & Nature","sheet_x":42,"sheet_y":41,"sort_order":100},"🦘":{"category":"Animals & Nature","sheet_x":42,"sheet_y":42,"sort_order":57},"🦙":{"category":"Animals & Nature","sheet_x":42,"sheet_y":43,"sort_order":37},"🦚":{"category":"Animals & Nature","sheet_x":42,"sheet_y":44,"sort_order":74},"🦛":{"category":"Animals & Nature","sheet_x":42,"sheet_y":45,"sort_order":41},"🦜":{"category":"Animals & Nature","sheet_x":42,"sheet_y":46,"sort_order":75},"🦝":{"category":"Animals & Nature","sheet_x":42,"sheet_y":47,"sort_order":12},"🦞":{"category":"Food & Drink","sheet_x":42,"sheet_y":48,"sort_order":81},"🦟":{"category":"Animals & Nature","sheet_x":42,"sheet_y":49,"sort_order":104},"🦠":{"category":"Animals & Nature","sheet_x":42,"sheet_y":50,"sort_order":105},"🦡":{"category":"Animals & Nature","sheet_x":42,"sheet_y":51,"sort_order":58},"🦢":{"category":"Animals & Nature","sheet_x":42,"sheet_y":52,"sort_order":71},"🦥":{"category":"Animals & Nature","sheet_x":42,"sheet_y":53,"sort_order":54},"🦦":{"category":"Animals & Nature","sheet_x":42,"sheet_y":54,"sort_order":55},"🦧":{"category":"Animals & Nature","sheet_x":42,"sheet_y":55,"sort_order":4},"🦨":{"category":"Animals & Nature","sheet_x":42,"sheet_y":56,"sort_order":56},"🦩":{"category":"Animals & Nature","sheet_x":43,"sheet_y":0,"sort_order":73},"🦪":{"category":"Food & Drink","sheet_x":43,"sheet_y":1,"sort_order":84},"🦮":{"category":"Animals & Nature","sheet_x":43,"sheet_y":2,"sort_order":7},"🦯":{"category":"Objects","sheet_x":43,"sheet_y":3,"sort_order":196},"🦴":{"category":"People & Body","sheet_x":43,"sheet_y":4,"sort_order":44},"🦵":{"category":"People & Body","sheet_x":43,"sheet_y":5,"sort_order":37},"🦶":{"category":"People & Body","sheet_x":43,"sheet_y":11,"sort_order":38},"🦷":{"category":"People & Body","sheet_x":43,"sheet_y":17,"sort_order":43},"🦸‍♀️":{"category":"People & Body","sheet_x":43,"sheet_y":18,"sort_order":181},"🦸‍♂️":{"category":"People & Body","sheet_x":43,"sheet_y":24,"sort_order":180},"🦸":{"category":"People & Body","sheet_x":43,"sheet_y":30,"sort_order":179},"🦹‍♀️":{"category":"People & Body","sheet_x":43,"sheet_y":36,"sort_order":184},"🦹‍♂️":{"category":"People & Body","sheet_x":43,"sheet_y":42,"sort_order":183},"🦹":{"category":"People & Body","sheet_x":43,"sheet_y":48,"sort_order":182},"🦺":{"category":"Objects","sheet_x":43,"sheet_y":54,"sort_order":5},"🦻":{"category":"People & Body","sheet_x":43,"sheet_y":55,"sort_order":40},"🦼":{"category":"Travel & Places","sheet_x":44,"sheet_y":4,"sort_order":95},"🦽":{"category":"Travel & Places","sheet_x":44,"sheet_y":5,"sort_order":94},"🦾":{"category":"People & Body","sheet_x":44,"sheet_y":6,"sort_order":35},"🦿":{"category":"People & Body","sheet_x":44,"sheet_y":7,"sort_order":36},"🧀":{"category":"Food & Drink","sheet_x":44,"sheet_y":8,"sort_order":39},"🧁":{"category":"Food & Drink","sheet_x":44,"sheet_y":9,"sort_order":92},"🧂":{"category":"Food & Drink","sheet_x":44,"sheet_y":10,"sort_order":61},"🧃":{"category":"Food & Drink","sheet_x":44,"sheet_y":11,"sort_order":113},"🧄":{"category":"Food & Drink","sheet_x":44,"sheet_y":12,"sort_order":27},"🧅":{"category":"Food & Drink","sheet_x":44,"sheet_y":13,"sort_order":28},"🧆":{"category":"Food & Drink","sheet_x":44,"sheet_y":14,"sort_order":52},"🧇":{"category":"Food & Drink","sheet_x":44,"sheet_y":15,"sort_order":38},"🧈":{"category":"Food & Drink","sheet_x":44,"sheet_y":16,"sort_order":60},"🧉":{"category":"Food & Drink","sheet_x":44,"sheet_y":17,"sort_order":114},"🧊":{"category":"Food & Drink","sheet_x":44,"sheet_y":18,"sort_order":115},"🧍‍♀️":{"category":"People & Body","sheet_x":44,"sheet_y":19,"sort_order":217},"🧍‍♂️":{"category":"People & Body","sheet_x":44,"sheet_y":25,"sort_order":216},"🧍":{"category":"People & Body","sheet_x":44,"sheet_y":31,"sort_order":215},"🧎‍♀️":{"category":"People & Body","sheet_x":44,"sheet_y":37,"sort_order":220},"🧎‍♂️":{"category":"People & Body","sheet_x":44,"sheet_y":43,"sort_order":219},"🧎":{"category":"People & Body","sheet_x":44,"sheet_y":49,"sort_order":218},"🧏‍♀️":{"category":"People & Body","sheet_x":44,"sheet_y":55,"sort_order":95},"🧏‍♂️":{"category":"People & Body","sheet_x":45,"sheet_y":4,"sort_order":94},"🧏":{"category":"People & Body","sheet_x":45,"sheet_y":10,"sort_order":93},"🧐":{"category":"Smileys & Emotion","sheet_x":45,"sheet_y":16,"sort_order":62},"🧑‍🌾":{"category":"People & Body","sheet_x":45,"sheet_y":17,"sort_order":117},"🧑‍🍳":{"category":"People & Body","sheet_x":45,"sheet_y":23,"sort_order":120},"🧑‍🎓":{"category":"People & Body","sheet_x":45,"sheet_y":29,"sort_order":108},"🧑‍🎤":{"category":"People & Body","sheet_x":45,"sheet_y":35,"sort_order":138},"🧑‍🎨":{"category":"People & Body","sheet_x":45,"sheet_y":41,"sort_order":141},"🧑‍🏫":{"category":"People & Body","sheet_x":45,"sheet_y":47,"sort_order":111},"🧑‍🏭":{"category":"People & Body","sheet_x":45,"sheet_y":53,"sort_order":126},"🧑‍💻":{"category":"People & Body","sheet_x":46,"sheet_y":2,"sort_order":135},"🧑‍💼":{"category":"People & Body","sheet_x":46,"sheet_y":8,"sort_order":129},"🧑‍🔧":{"category":"People & Body","sheet_x":46,"sheet_y":14,"sort_order":123},"🧑‍🔬":{"category":"People & Body","sheet_x":46,"sheet_y":20,"sort_order":132},"🧑‍🚀":{"category":"People & Body","sheet_x":46,"sheet_y":26,"sort_order":147},"🧑‍🚒":{"category":"People & Body","sheet_x":46,"sheet_y":32,"sort_order":150},"🧑‍🤝‍🧑":{"category":"People & Body","sheet_x":46,"sheet_y":38,"sort_order":293},"🧑‍🦯":{"category":"People & Body","sheet_x":47,"sheet_y":7,"sort_order":221},"🧑‍🦰":{"category":"People & Body","sheet_x":47,"sheet_y":13,"sort_order":63},"🧑‍🦱":{"category":"People & Body","sheet_x":47,"sheet_y":19,"sort_order":65},"🧑‍🦲":{"category":"People & Body","sheet_x":47,"sheet_y":25,"sort_order":69},"🧑‍🦳":{"category":"People & Body","sheet_x":47,"sheet_y":31,"sort_order":67},"🧑‍🦼":{"category":"People & Body","sheet_x":47,"sheet_y":37,"sort_order":224},"🧑‍🦽":{"category":"People & Body","sheet_x":47,"sheet_y":43,"sort_order":227},"🧑‍⚕️":{"category":"People & Body","sheet_x":47,"sheet_y":49,"sort_order":105},"🧑‍⚖️":{"category":"People & Body","sheet_x":47,"sheet_y":55,"sort_order":114},"🧑‍✈️":{"category":"People & Body","sheet_x":48,"sheet_y":4,"sort_order":144},"🧑":{"category":"People & Body","sheet_x":48,"sheet_y":10,"sort_order":53},"🧒":{"category":"People & Body","sheet_x":48,"sheet_y":16,"sort_order":50},"🧓":{"category":"People & Body","sheet_x":48,"sheet_y":22,"sort_order":72},"🧔":{"category":"People & Body","sheet_x":48,"sheet_y":28,"sort_order":56},"🧕":{"category":"People & Body","sheet_x":48,"sheet_y":34,"sort_order":171},"🧖‍♀️":{"category":"People & Body","sheet_x":48,"sheet_y":40,"sort_order":241},"🧖‍♂️":{"category":"People & Body","sheet_x":48,"sheet_y":46,"sort_order":240},"🧖":{"category":"People & Body","sheet_x":48,"sheet_y":52,"sort_order":239},"🧗‍♀️":{"category":"People & Body","sheet_x":49,"sheet_y":1,"sort_order":244},"🧗‍♂️":{"category":"People & Body","sheet_x":49,"sheet_y":7,"sort_order":243},"🧗":{"category":"People & Body","sheet_x":49,"sheet_y":13,"sort_order":242},"🧘‍♀️":{"category":"People & Body","sheet_x":49,"sheet_y":19,"sort_order":290},"🧘‍♂️":{"category":"People & Body","sheet_x":49,"sheet_y":25,"sort_order":289},"🧘":{"category":"People & Body","sheet_x":49,"sheet_y":31,"sort_order":288},"🧙‍♀️":{"category":"People & Body","sheet_x":49,"sheet_y":37,"sort_order":187},"🧙‍♂️":{"category":"People & Body","sheet_x":49,"sheet_y":43,"sort_order":186},"🧙":{"category":"People & Body","sheet_x":49,"sheet_y":49,"sort_order":185},"🧚‍♀️":{"category":"People & Body","sheet_x":49,"sheet_y":55,"sort_order":190},"🧚‍♂️":{"category":"People & Body","sheet_x":50,"sheet_y":4,"sort_order":189},"🧚":{"category":"People & Body","sheet_x":50,"sheet_y":10,"sort_order":188},"🧛‍♀️":{"category":"People & Body","sheet_x":50,"sheet_y":16,"sort_order":193},"🧛‍♂️":{"category":"People & Body","sheet_x":50,"sheet_y":22,"sort_order":192},"🧛":{"category":"People & Body","sheet_x":50,"sheet_y":28,"sort_order":191},"🧜‍♀️":{"category":"People & Body","sheet_x":50,"sheet_y":34,"sort_order":196},"🧜‍♂️":{"category":"People & Body","sheet_x":50,"sheet_y":40,"sort_order":195},"🧜":{"category":"People & Body","sheet_x":50,"sheet_y":46,"sort_order":194},"🧝‍♀️":{"category":"People & Body","sheet_x":50,"sheet_y":52,"sort_order":199},"🧝‍♂️":{"category":"People & Body","sheet_x":51,"sheet_y":1,"sort_order":198},"🧝":{"category":"People & Body","sheet_x":51,"sheet_y":7,"sort_order":197},"🧞‍♀️":{"category":"People & Body","sheet_x":51,"sheet_y":13,"sort_order":202},"🧞‍♂️":{"category":"People & Body","sheet_x":51,"sheet_y":14,"sort_order":201},"🧞":{"category":"People & Body","sheet_x":51,"sheet_y":15,"sort_order":200},"🧟‍♀️":{"category":"People & Body","sheet_x":51,"sheet_y":16,"sort_order":205},"🧟‍♂️":{"category":"People & Body","sheet_x":51,"sheet_y":17,"sort_order":204},"🧟":{"category":"People & Body","sheet_x":51,"sheet_y":18,"sort_order":203},"🧠":{"category":"People & Body","sheet_x":51,"sheet_y":19,"sort_order":42},"🧡":{"category":"Smileys & Emotion","sheet_x":51,"sheet_y":20,"sort_order":128},"🧢":{"category":"Objects","sheet_x":51,"sheet_y":21,"sort_order":38},"🧣":{"category":"Objects","sheet_x":51,"sheet_y":22,"sort_order":9},"🧤":{"category":"Objects","sheet_x":51,"sheet_y":23,"sort_order":10},"🧥":{"category":"Objects","sheet_x":51,"sheet_y":24,"sort_order":11},"🧦":{"category":"Objects","sheet_x":51,"sheet_y":25,"sort_order":12},"🧧":{"category":"Activities","sheet_x":51,"sheet_y":26,"sort_order":16},"🧨":{"category":"Activities","sheet_x":51,"sheet_y":27,"sort_order":5},"🧩":{"category":"Activities","sheet_x":51,"sheet_y":28,"sort_order":65},"🧪":{"category":"Objects","sheet_x":51,"sheet_y":29,"sort_order":202},"🧫":{"category":"Objects","sheet_x":51,"sheet_y":30,"sort_order":203},"🧬":{"category":"Objects","sheet_x":51,"sheet_y":31,"sort_order":204},"🧭":{"category":"Travel & Places","sheet_x":51,"sheet_y":32,"sort_order":7},"🧮":{"category":"Objects","sheet_x":51,"sheet_y":33,"sort_order":87},"🧯":{"category":"Objects","sheet_x":51,"sheet_y":34,"sort_order":228},"🧰":{"category":"Objects","sheet_x":51,"sheet_y":35,"sort_order":199},"🧱":{"category":"Travel & Places","sheet_x":51,"sheet_y":36,"sort_order":20},"🧲":{"category":"Objects","sheet_x":51,"sheet_y":37,"sort_order":200},"🧳":{"category":"Travel & Places","sheet_x":51,"sheet_y":38,"sort_order":132},"🧴":{"category":"Objects","sheet_x":51,"sheet_y":39,"sort_order":221},"🧵":{"category":"Activities","sheet_x":51,"sheet_y":40,"sort_order":78},"🧶":{"category":"Activities","sheet_x":51,"sheet_y":41,"sort_order":79},"🧷":{"category":"Objects","sheet_x":51,"sheet_y":42,"sort_order":222},"🧸":{"category":"Activities","sheet_x":51,"sheet_y":43,"sort_order":66},"🧹":{"category":"Objects","sheet_x":51,"sheet_y":44,"sort_order":223},"🧺":{"category":"Objects","sheet_x":51,"sheet_y":45,"sort_order":224},"🧻":{"category":"Objects","sheet_x":51,"sheet_y":46,"sort_order":225},"🧼":{"category":"Objects","sheet_x":51,"sheet_y":47,"sort_order":226},"🧽":{"category":"Objects","sheet_x":51,"sheet_y":48,"sort_order":227},"🧾":{"category":"Objects","sheet_x":51,"sheet_y":49,"sort_order":128},"🧿":{"category":"Activities","sheet_x":51,"sheet_y":50,"sort_order":60},"🩰":{"category":"Objects","sheet_x":51,"sheet_y":51,"sort_order":32},"🩱":{"category":"Objects","sheet_x":51,"sheet_y":52,"sort_order":16},"🩲":{"category":"Objects","sheet_x":51,"sheet_y":53,"sort_order":17},"🩳":{"category":"Objects","sheet_x":51,"sheet_y":54,"sort_order":18},"🩸":{"category":"Objects","sheet_x":51,"sheet_y":55,"sort_order":209},"🩹":{"category":"Objects","sheet_x":51,"sheet_y":56,"sort_order":211},"🩺":{"category":"Objects","sheet_x":52,"sheet_y":0,"sort_order":212},"🪀":{"category":"Activities","sheet_x":52,"sheet_y":1,"sort_order":56},"🪁":{"category":"Activities","sheet_x":52,"sheet_y":2,"sort_order":57},"🪂":{"category":"Travel & Places","sheet_x":52,"sheet_y":3,"sort_order":122},"🪐":{"category":"Travel & Places","sheet_x":52,"sheet_y":4,"sort_order":180},"🪑":{"category":"Objects","sheet_x":52,"sheet_y":5,"sort_order":216},"🪒":{"category":"Objects","sheet_x":52,"sheet_y":6,"sort_order":220},"🪓":{"category":"Objects","sheet_x":52,"sheet_y":7,"sort_order":182},"🪔":{"category":"Objects","sheet_x":52,"sheet_y":8,"sort_order":103},"🪕":{"category":"Objects","sheet_x":52,"sheet_y":9,"sort_order":67},"‼️":{"category":"Symbols","sheet_x":52,"sheet_y":10,"sort_order":122},"⁉️":{"category":"Symbols","sheet_x":52,"sheet_y":11,"sort_order":123},"™️":{"category":"Symbols","sheet_x":52,"sheet_y":12,"sort_order":131},"ℹ️":{"category":"Symbols","sheet_x":52,"sheet_y":13,"sort_order":156},"↔️":{"category":"Symbols","sheet_x":52,"sheet_y":14,"sort_order":36},"↕️":{"category":"Symbols","sheet_x":52,"sheet_y":15,"sort_order":35},"↖️":{"category":"Symbols","sheet_x":52,"sheet_y":16,"sort_order":34},"↗️":{"category":"Symbols","sheet_x":52,"sheet_y":17,"sort_order":28},"↘️":{"category":"Symbols","sheet_x":52,"sheet_y":18,"sort_order":30},"↙️":{"category":"Symbols","sheet_x":52,"sheet_y":19,"sort_order":32},"↩️":{"category":"Symbols","sheet_x":52,"sheet_y":20,"sort_order":37},"↪️":{"category":"Symbols","sheet_x":52,"sheet_y":21,"sort_order":38},"⌚":{"category":"Travel & Places","sheet_x":52,"sheet_y":22,"sort_order":135},"⌛":{"category":"Travel & Places","sheet_x":52,"sheet_y":23,"sort_order":133},"⌨️":{"category":"Objects","sheet_x":52,"sheet_y":24,"sort_order":80},"⏏️":{"category":"Symbols","sheet_x":52,"sheet_y":25,"sort_order":90},"⏩":{"category":"Symbols","sheet_x":52,"sheet_y":26,"sort_order":77},"⏪":{"category":"Symbols","sheet_x":52,"sheet_y":27,"sort_order":81},"⏫":{"category":"Symbols","sheet_x":52,"sheet_y":28,"sort_order":84},"⏬":{"category":"Symbols","sheet_x":52,"sheet_y":29,"sort_order":86},"⏭️":{"category":"Symbols","sheet_x":52,"sheet_y":30,"sort_order":78},"⏮️":{"category":"Symbols","sheet_x":52,"sheet_y":31,"sort_order":82},"⏯️":{"category":"Symbols","sheet_x":52,"sheet_y":32,"sort_order":79},"⏰":{"category":"Travel & Places","sheet_x":52,"sheet_y":33,"sort_order":136},"⏱️":{"category":"Travel & Places","sheet_x":52,"sheet_y":34,"sort_order":137},"⏲️":{"category":"Travel & Places","sheet_x":52,"sheet_y":35,"sort_order":138},"⏳":{"category":"Travel & Places","sheet_x":52,"sheet_y":36,"sort_order":134},"⏸️":{"category":"Symbols","sheet_x":52,"sheet_y":37,"sort_order":87},"⏹️":{"category":"Symbols","sheet_x":52,"sheet_y":38,"sort_order":88},"⏺️":{"category":"Symbols","sheet_x":52,"sheet_y":39,"sort_order":89},"Ⓜ️":{"category":"Symbols","sheet_x":52,"sheet_y":40,"sort_order":158},"▪️":{"category":"Symbols","sheet_x":52,"sheet_y":41,"sort_order":206},"▫️":{"category":"Symbols","sheet_x":52,"sheet_y":42,"sort_order":207},"▶️":{"category":"Symbols","sheet_x":52,"sheet_y":43,"sort_order":76},"◀️":{"category":"Symbols","sheet_x":52,"sheet_y":44,"sort_order":80},"◻️":{"category":"Symbols","sheet_x":52,"sheet_y":45,"sort_order":203},"◼️":{"category":"Symbols","sheet_x":52,"sheet_y":46,"sort_order":202},"◽":{"category":"Symbols","sheet_x":52,"sheet_y":47,"sort_order":205},"◾":{"category":"Symbols","sheet_x":52,"sheet_y":48,"sort_order":204},"☀️":{"category":"Travel & Places","sheet_x":52,"sheet_y":49,"sort_order":177},"☁️":{"category":"Travel & Places","sheet_x":52,"sheet_y":50,"sort_order":185},"☂️":{"category":"Travel & Places","sheet_x":52,"sheet_y":51,"sort_order":200},"☃️":{"category":"Travel & Places","sheet_x":52,"sheet_y":52,"sort_order":205},"☄️":{"category":"Travel & Places","sheet_x":52,"sheet_y":53,"sort_order":207},"☎️":{"category":"Objects","sheet_x":52,"sheet_y":54,"sort_order":71},"☑️":{"category":"Symbols","sheet_x":52,"sheet_y":55,"sort_order":108},"☔":{"category":"Travel & Places","sheet_x":52,"sheet_y":56,"sort_order":201},"☕":{"category":"Food & Drink","sheet_x":53,"sheet_y":0,"sort_order":101},"☘️":{"category":"Animals & Nature","sheet_x":53,"sheet_y":1,"sort_order":123},"☝️":{"category":"People & Body","sheet_x":53,"sheet_y":2,"sort_order":18},"☠️":{"category":"Smileys & Emotion","sheet_x":53,"sheet_y":8,"sort_order":94},"☢️":{"category":"Symbols","sheet_x":53,"sheet_y":9,"sort_order":25},"☣️":{"category":"Symbols","sheet_x":53,"sheet_y":10,"sort_order":26},"☦️":{"category":"Symbols","sheet_x":53,"sheet_y":11,"sort_order":55},"☪️":{"category":"Symbols","sheet_x":53,"sheet_y":12,"sort_order":56},"☮️":{"category":"Symbols","sheet_x":53,"sheet_y":13,"sort_order":57},"☯️":{"category":"Symbols","sheet_x":53,"sheet_y":14,"sort_order":53},"☸️":{"category":"Symbols","sheet_x":53,"sheet_y":15,"sort_order":52},"☹️":{"category":"Smileys & Emotion","sheet_x":53,"sheet_y":16,"sort_order":66},"☺️":{"category":"Smileys & Emotion","sheet_x":53,"sheet_y":17,"sort_order":19},"♈":{"category":"Symbols","sheet_x":53,"sheet_y":20,"sort_order":60},"♉":{"category":"Symbols","sheet_x":53,"sheet_y":21,"sort_order":61},"♊":{"category":"Symbols","sheet_x":53,"sheet_y":22,"sort_order":62},"♋":{"category":"Symbols","sheet_x":53,"sheet_y":23,"sort_order":63},"♌":{"category":"Symbols","sheet_x":53,"sheet_y":24,"sort_order":64},"♍":{"category":"Symbols","sheet_x":53,"sheet_y":25,"sort_order":65},"♎":{"category":"Symbols","sheet_x":53,"sheet_y":26,"sort_order":66},"♏":{"category":"Symbols","sheet_x":53,"sheet_y":27,"sort_order":67},"♐":{"category":"Symbols","sheet_x":53,"sheet_y":28,"sort_order":68},"♑":{"category":"Symbols","sheet_x":53,"sheet_y":29,"sort_order":69},"♒":{"category":"Symbols","sheet_x":53,"sheet_y":30,"sort_order":70},"♓":{"category":"Symbols","sheet_x":53,"sheet_y":31,"sort_order":71},"♟️":{"category":"Activities","sheet_x":53,"sheet_y":32,"sort_order":71},"♠️":{"category":"Activities","sheet_x":53,"sheet_y":33,"sort_order":67},"♣️":{"category":"Activities","sheet_x":53,"sheet_y":34,"sort_order":70},"♥️":{"category":"Activities","sheet_x":53,"sheet_y":35,"sort_order":68},"♦️":{"category":"Activities","sheet_x":53,"sheet_y":36,"sort_order":69},"♨️":{"category":"Travel & Places","sheet_x":53,"sheet_y":37,"sort_order":57},"♻️":{"category":"Symbols","sheet_x":53,"sheet_y":38,"sort_order":101},"♾️":{"category":"Symbols","sheet_x":53,"sheet_y":39,"sort_order":100},"♿":{"category":"Symbols","sheet_x":53,"sheet_y":40,"sort_order":4},"⚒️":{"category":"Objects","sheet_x":53,"sheet_y":41,"sort_order":184},"⚓":{"category":"Travel & Places","sheet_x":53,"sheet_y":42,"sort_order":110},"⚔️":{"category":"Objects","sheet_x":53,"sheet_y":43,"sort_order":187},"⚖️":{"category":"Objects","sheet_x":53,"sheet_y":45,"sort_order":195},"⚗️":{"category":"Objects","sheet_x":53,"sheet_y":46,"sort_order":201},"⚙️":{"category":"Objects","sheet_x":53,"sheet_y":47,"sort_order":193},"⚛️":{"category":"Symbols","sheet_x":53,"sheet_y":48,"sort_order":49},"⚜️":{"category":"Symbols","sheet_x":53,"sheet_y":49,"sort_order":102},"⚠️":{"category":"Symbols","sheet_x":53,"sheet_y":50,"sort_order":14},"⚡":{"category":"Travel & Places","sheet_x":53,"sheet_y":51,"sort_order":203},"⚪":{"category":"Symbols","sheet_x":53,"sheet_y":52,"sort_order":192},"⚫":{"category":"Symbols","sheet_x":53,"sheet_y":53,"sort_order":191},"⚰️":{"category":"Objects","sheet_x":53,"sheet_y":54,"sort_order":231},"⚱️":{"category":"Objects","sheet_x":53,"sheet_y":55,"sort_order":232},"⚽":{"category":"Activities","sheet_x":53,"sheet_y":56,"sort_order":28},"⚾":{"category":"Activities","sheet_x":54,"sheet_y":0,"sort_order":29},"⛄":{"category":"Travel & Places","sheet_x":54,"sheet_y":1,"sort_order":206},"⛅":{"category":"Travel & Places","sheet_x":54,"sheet_y":2,"sort_order":186},"⛈️":{"category":"Travel & Places","sheet_x":54,"sheet_y":3,"sort_order":187},"⛎":{"category":"Symbols","sheet_x":54,"sheet_y":4,"sort_order":72},"⛏️":{"category":"Objects","sheet_x":54,"sheet_y":5,"sort_order":183},"⛑️":{"category":"Objects","sheet_x":54,"sheet_y":6,"sort_order":39},"⛓️":{"category":"Objects","sheet_x":54,"sheet_y":7,"sort_order":198},"⛔":{"category":"Symbols","sheet_x":54,"sheet_y":8,"sort_order":16},"⛩️":{"category":"Travel & Places","sheet_x":54,"sheet_y":9,"sort_order":45},"⛪":{"category":"Travel & Places","sheet_x":54,"sheet_y":10,"sort_order":41},"⛰️":{"category":"Travel & Places","sheet_x":54,"sheet_y":11,"sort_order":9},"⛱️":{"category":"Travel & Places","sheet_x":54,"sheet_y":12,"sort_order":202},"⛲":{"category":"Travel & Places","sheet_x":54,"sheet_y":13,"sort_order":47},"⛳":{"category":"Activities","sheet_x":54,"sheet_y":14,"sort_order":47},"⛴️":{"category":"Travel & Places","sheet_x":54,"sheet_y":15,"sort_order":115},"⛵":{"category":"Travel & Places","sheet_x":54,"sheet_y":16,"sort_order":111},"⛷️":{"category":"People & Body","sheet_x":54,"sheet_y":17,"sort_order":247},"⛸️":{"category":"Activities","sheet_x":54,"sheet_y":18,"sort_order":48},"⛹️‍♀️":{"category":"People & Body","sheet_x":54,"sheet_y":19,"sort_order":263},"⛹️‍♂️":{"category":"People & Body","sheet_x":54,"sheet_y":25,"sort_order":262},"⛹️":{"category":"People & Body","sheet_x":54,"sheet_y":31,"sort_order":261},"⛺":{"category":"Travel & Places","sheet_x":54,"sheet_y":37,"sort_order":48},"⛽":{"category":"Travel & Places","sheet_x":54,"sheet_y":38,"sort_order":104},"✂️":{"category":"Objects","sheet_x":54,"sheet_y":39,"sort_order":171},"✅":{"category":"Symbols","sheet_x":54,"sheet_y":40,"sort_order":107},"✈️":{"category":"Travel & Places","sheet_x":54,"sheet_y":41,"sort_order":118},"✉️":{"category":"Objects","sheet_x":54,"sheet_y":42,"sort_order":132},"✊":{"category":"People & Body","sheet_x":54,"sheet_y":43,"sort_order":21},"✋":{"category":"People & Body","sheet_x":54,"sheet_y":49,"sort_order":4},"✌️":{"category":"People & Body","sheet_x":54,"sheet_y":55,"sort_order":8},"✍️":{"category":"People & Body","sheet_x":55,"sheet_y":4,"sort_order":31},"✏️":{"category":"Objects","sheet_x":55,"sheet_y":10,"sort_order":145},"✒️":{"category":"Objects","sheet_x":55,"sheet_y":11,"sort_order":146},"✔️":{"category":"Symbols","sheet_x":55,"sheet_y":12,"sort_order":109},"✖️":{"category":"Symbols","sheet_x":55,"sheet_y":13,"sort_order":110},"✝️":{"category":"Symbols","sheet_x":55,"sheet_y":14,"sort_order":54},"✡️":{"category":"Symbols","sheet_x":55,"sheet_y":15,"sort_order":51},"✨":{"category":"Activities","sheet_x":55,"sheet_y":16,"sort_order":6},"✳️":{"category":"Symbols","sheet_x":55,"sheet_y":17,"sort_order":119},"✴️":{"category":"Symbols","sheet_x":55,"sheet_y":18,"sort_order":120},"❄️":{"category":"Travel & Places","sheet_x":55,"sheet_y":19,"sort_order":204},"❇️":{"category":"Symbols","sheet_x":55,"sheet_y":20,"sort_order":121},"❌":{"category":"Symbols","sheet_x":55,"sheet_y":21,"sort_order":111},"❎":{"category":"Symbols","sheet_x":55,"sheet_y":22,"sort_order":112},"❓":{"category":"Symbols","sheet_x":55,"sheet_y":23,"sort_order":124},"❔":{"category":"Symbols","sheet_x":55,"sheet_y":24,"sort_order":125},"❕":{"category":"Symbols","sheet_x":55,"sheet_y":25,"sort_order":126},"❗":{"category":"Symbols","sheet_x":55,"sheet_y":26,"sort_order":127},"❣️":{"category":"Smileys & Emotion","sheet_x":55,"sheet_y":27,"sort_order":125},"❤️":{"category":"Smileys & Emotion","sheet_x":55,"sheet_y":28,"sort_order":127},"➕":{"category":"Symbols","sheet_x":55,"sheet_y":29,"sort_order":113},"➖":{"category":"Symbols","sheet_x":55,"sheet_y":30,"sort_order":114},"➗":{"category":"Symbols","sheet_x":55,"sheet_y":31,"sort_order":115},"➡️":{"category":"Symbols","sheet_x":55,"sheet_y":32,"sort_order":29},"➰":{"category":"Symbols","sheet_x":55,"sheet_y":33,"sort_order":116},"➿":{"category":"Symbols","sheet_x":55,"sheet_y":34,"sort_order":117},"⤴️":{"category":"Symbols","sheet_x":55,"sheet_y":35,"sort_order":39},"⤵️":{"category":"Symbols","sheet_x":55,"sheet_y":36,"sort_order":40},"⬅️":{"category":"Symbols","sheet_x":55,"sheet_y":37,"sort_order":33},"⬆️":{"category":"Symbols","sheet_x":55,"sheet_y":38,"sort_order":27},"⬇️":{"category":"Symbols","sheet_x":55,"sheet_y":39,"sort_order":31},"⬛":{"category":"Symbols","sheet_x":55,"sheet_y":40,"sort_order":200},"⬜":{"category":"Symbols","sheet_x":55,"sheet_y":41,"sort_order":201},"⭐":{"category":"Travel & Places","sheet_x":55,"sheet_y":42,"sort_order":181},"⭕":{"category":"Symbols","sheet_x":55,"sheet_y":43,"sort_order":106},"〰️":{"category":"Symbols","sheet_x":55,"sheet_y":44,"sort_order":128},"〽️":{"category":"Symbols","sheet_x":55,"sheet_y":45,"sort_order":118},"㊗️":{"category":"Symbols","sheet_x":55,"sheet_y":46,"sort_order":180},"㊙️":{"category":"Symbols","sheet_x":55,"sheet_y":47,"sort_order":181}} \ No newline at end of file diff --git a/src/emoji_pretty.json b/src/emoji_pretty.json new file mode 100644 index 00000000..240474c1 --- /dev/null +++ b/src/emoji_pretty.json @@ -0,0 +1,61686 @@ +[ + { + "name": "HASH KEY", + "unified": "0023-FE0F-20E3", + "non_qualified": "0023-20E3", + "docomo": "E6E0", + "au": "EB84", + "softbank": "E210", + "google": "FE82C", + "image": "0023-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 0, + "short_name": "hash", + "short_names": [ + "hash" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 132, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": null, + "unified": "002A-FE0F-20E3", + "non_qualified": "002A-20E3", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "002a-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 1, + "short_name": "keycap_star", + "short_names": [ + "keycap_star" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 133, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 0", + "unified": "0030-FE0F-20E3", + "non_qualified": "0030-20E3", + "docomo": "E6EB", + "au": "E5AC", + "softbank": "E225", + "google": "FE837", + "image": "0030-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 2, + "short_name": "zero", + "short_names": [ + "zero" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 134, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 1", + "unified": "0031-FE0F-20E3", + "non_qualified": "0031-20E3", + "docomo": "E6E2", + "au": "E522", + "softbank": "E21C", + "google": "FE82E", + "image": "0031-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 3, + "short_name": "one", + "short_names": [ + "one" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 135, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 2", + "unified": "0032-FE0F-20E3", + "non_qualified": "0032-20E3", + "docomo": "E6E3", + "au": "E523", + "softbank": "E21D", + "google": "FE82F", + "image": "0032-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 4, + "short_name": "two", + "short_names": [ + "two" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 136, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 3", + "unified": "0033-FE0F-20E3", + "non_qualified": "0033-20E3", + "docomo": "E6E4", + "au": "E524", + "softbank": "E21E", + "google": "FE830", + "image": "0033-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 5, + "short_name": "three", + "short_names": [ + "three" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 137, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 4", + "unified": "0034-FE0F-20E3", + "non_qualified": "0034-20E3", + "docomo": "E6E5", + "au": "E525", + "softbank": "E21F", + "google": "FE831", + "image": "0034-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 6, + "short_name": "four", + "short_names": [ + "four" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 138, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 5", + "unified": "0035-FE0F-20E3", + "non_qualified": "0035-20E3", + "docomo": "E6E6", + "au": "E526", + "softbank": "E220", + "google": "FE832", + "image": "0035-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 7, + "short_name": "five", + "short_names": [ + "five" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 139, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 6", + "unified": "0036-FE0F-20E3", + "non_qualified": "0036-20E3", + "docomo": "E6E7", + "au": "E527", + "softbank": "E221", + "google": "FE833", + "image": "0036-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 8, + "short_name": "six", + "short_names": [ + "six" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 140, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 7", + "unified": "0037-FE0F-20E3", + "non_qualified": "0037-20E3", + "docomo": "E6E8", + "au": "E528", + "softbank": "E222", + "google": "FE834", + "image": "0037-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 9, + "short_name": "seven", + "short_names": [ + "seven" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 141, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 8", + "unified": "0038-FE0F-20E3", + "non_qualified": "0038-20E3", + "docomo": "E6E9", + "au": "E529", + "softbank": "E223", + "google": "FE835", + "image": "0038-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 10, + "short_name": "eight", + "short_names": [ + "eight" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 142, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "KEYCAP 9", + "unified": "0039-FE0F-20E3", + "non_qualified": "0039-20E3", + "docomo": "E6EA", + "au": "E52A", + "softbank": "E224", + "google": "FE836", + "image": "0039-fe0f-20e3.png", + "sheet_x": 0, + "sheet_y": 11, + "short_name": "nine", + "short_names": [ + "nine" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 143, + "added_in": "0.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "COPYRIGHT SIGN", + "unified": "00A9-FE0F", + "non_qualified": "00A9", + "docomo": "E731", + "au": "E558", + "softbank": "E24E", + "google": "FEB29", + "image": "00a9-fe0f.png", + "sheet_x": 0, + "sheet_y": 12, + "short_name": "copyright", + "short_names": [ + "copyright" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 129, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "REGISTERED SIGN", + "unified": "00AE-FE0F", + "non_qualified": "00AE", + "docomo": "E736", + "au": "E559", + "softbank": "E24F", + "google": "FEB2D", + "image": "00ae-fe0f.png", + "sheet_x": 0, + "sheet_y": 13, + "short_name": "registered", + "short_names": [ + "registered" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 130, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + { + "name": "MAHJONG TILE RED DRAGON", + "unified": "1F004", + "non_qualified": null, + "docomo": null, + "au": "E5D1", + "softbank": "E12D", + "google": "FE80B", + "image": "1f004.png", + "sheet_x": 0, + "sheet_y": 14, + "short_name": "mahjong", + "short_names": [ + "mahjong" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 73, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PLAYING CARD BLACK JOKER", + "unified": "1F0CF", + "non_qualified": null, + "docomo": null, + "au": "EB6F", + "softbank": null, + "google": "FE812", + "image": "1f0cf.png", + "sheet_x": 0, + "sheet_y": 15, + "short_name": "black_joker", + "short_names": [ + "black_joker" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 72, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEGATIVE SQUARED LATIN CAPITAL LETTER A", + "unified": "1F170-FE0F", + "non_qualified": "1F170", + "docomo": null, + "au": "EB26", + "softbank": "E532", + "google": "FE50B", + "image": "1f170-fe0f.png", + "sheet_x": 0, + "sheet_y": 16, + "short_name": "a", + "short_names": [ + "a" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 150, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEGATIVE SQUARED LATIN CAPITAL LETTER B", + "unified": "1F171-FE0F", + "non_qualified": "1F171", + "docomo": null, + "au": "EB27", + "softbank": "E533", + "google": "FE50C", + "image": "1f171-fe0f.png", + "sheet_x": 0, + "sheet_y": 17, + "short_name": "b", + "short_names": [ + "b" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 152, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEGATIVE SQUARED LATIN CAPITAL LETTER O", + "unified": "1F17E-FE0F", + "non_qualified": "1F17E", + "docomo": null, + "au": "EB28", + "softbank": "E535", + "google": "FE50E", + "image": "1f17e-fe0f.png", + "sheet_x": 0, + "sheet_y": 18, + "short_name": "o2", + "short_names": [ + "o2" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 161, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEGATIVE SQUARED LATIN CAPITAL LETTER P", + "unified": "1F17F-FE0F", + "non_qualified": "1F17F", + "docomo": "E66C", + "au": "E4A6", + "softbank": "E14F", + "google": "FE7F6", + "image": "1f17f-fe0f.png", + "sheet_x": 0, + "sheet_y": 19, + "short_name": "parking", + "short_names": [ + "parking" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 163, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEGATIVE SQUARED AB", + "unified": "1F18E", + "non_qualified": null, + "docomo": null, + "au": "EB29", + "softbank": "E534", + "google": "FE50D", + "image": "1f18e.png", + "sheet_x": 0, + "sheet_y": 20, + "short_name": "ab", + "short_names": [ + "ab" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 151, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CL", + "unified": "1F191", + "non_qualified": null, + "docomo": "E6DB", + "au": "E5AB", + "softbank": null, + "google": "FEB84", + "image": "1f191.png", + "sheet_x": 0, + "sheet_y": 21, + "short_name": "cl", + "short_names": [ + "cl" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 153, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED COOL", + "unified": "1F192", + "non_qualified": null, + "docomo": null, + "au": "EA85", + "softbank": "E214", + "google": "FEB38", + "image": "1f192.png", + "sheet_x": 0, + "sheet_y": 22, + "short_name": "cool", + "short_names": [ + "cool" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 154, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED FREE", + "unified": "1F193", + "non_qualified": null, + "docomo": "E6D7", + "au": "E578", + "softbank": null, + "google": "FEB21", + "image": "1f193.png", + "sheet_x": 0, + "sheet_y": 23, + "short_name": "free", + "short_names": [ + "free" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 155, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED ID", + "unified": "1F194", + "non_qualified": null, + "docomo": "E6D8", + "au": "EA88", + "softbank": "E229", + "google": "FEB81", + "image": "1f194.png", + "sheet_x": 0, + "sheet_y": 24, + "short_name": "id", + "short_names": [ + "id" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 157, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED NEW", + "unified": "1F195", + "non_qualified": null, + "docomo": "E6DD", + "au": "E5B5", + "softbank": "E212", + "google": "FEB36", + "image": "1f195.png", + "sheet_x": 0, + "sheet_y": 25, + "short_name": "new", + "short_names": [ + "new" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 159, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED NG", + "unified": "1F196", + "non_qualified": null, + "docomo": "E72F", + "au": null, + "softbank": null, + "google": "FEB28", + "image": "1f196.png", + "sheet_x": 0, + "sheet_y": 26, + "short_name": "ng", + "short_names": [ + "ng" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 160, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED OK", + "unified": "1F197", + "non_qualified": null, + "docomo": "E70B", + "au": "E5AD", + "softbank": "E24D", + "google": "FEB27", + "image": "1f197.png", + "sheet_x": 0, + "sheet_y": 27, + "short_name": "ok", + "short_names": [ + "ok" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 162, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED SOS", + "unified": "1F198", + "non_qualified": null, + "docomo": null, + "au": "E4E8", + "softbank": null, + "google": "FEB4F", + "image": "1f198.png", + "sheet_x": 0, + "sheet_y": 28, + "short_name": "sos", + "short_names": [ + "sos" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 164, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED UP WITH EXCLAMATION MARK", + "unified": "1F199", + "non_qualified": null, + "docomo": null, + "au": "E50F", + "softbank": "E213", + "google": "FEB37", + "image": "1f199.png", + "sheet_x": 0, + "sheet_y": 29, + "short_name": "up", + "short_names": [ + "up" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 165, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED VS", + "unified": "1F19A", + "non_qualified": null, + "docomo": null, + "au": "E5D2", + "softbank": "E12E", + "google": "FEB32", + "image": "1f19a.png", + "sheet_x": 0, + "sheet_y": 30, + "short_name": "vs", + "short_names": [ + "vs" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 166, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Ascension Island Flag", + "unified": "1F1E6-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1e8.png", + "sheet_x": 0, + "sheet_y": 31, + "short_name": "flag-ac", + "short_names": [ + "flag-ac" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Andorra Flag", + "unified": "1F1E6-1F1E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1e9.png", + "sheet_x": 0, + "sheet_y": 32, + "short_name": "flag-ad", + "short_names": [ + "flag-ad" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "United Arab Emirates Flag", + "unified": "1F1E6-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1ea.png", + "sheet_x": 0, + "sheet_y": 33, + "short_name": "flag-ae", + "short_names": [ + "flag-ae" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Afghanistan Flag", + "unified": "1F1E6-1F1EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1eb.png", + "sheet_x": 0, + "sheet_y": 34, + "short_name": "flag-af", + "short_names": [ + "flag-af" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Antigua & Barbuda Flag", + "unified": "1F1E6-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1ec.png", + "sheet_x": 0, + "sheet_y": 35, + "short_name": "flag-ag", + "short_names": [ + "flag-ag" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Anguilla Flag", + "unified": "1F1E6-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1ee.png", + "sheet_x": 0, + "sheet_y": 36, + "short_name": "flag-ai", + "short_names": [ + "flag-ai" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Albania Flag", + "unified": "1F1E6-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1f1.png", + "sheet_x": 0, + "sheet_y": 37, + "short_name": "flag-al", + "short_names": [ + "flag-al" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Armenia Flag", + "unified": "1F1E6-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1f2.png", + "sheet_x": 0, + "sheet_y": 38, + "short_name": "flag-am", + "short_names": [ + "flag-am" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 15, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Angola Flag", + "unified": "1F1E6-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1f4.png", + "sheet_x": 0, + "sheet_y": 39, + "short_name": "flag-ao", + "short_names": [ + "flag-ao" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 16, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Antarctica Flag", + "unified": "1F1E6-1F1F6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1f6.png", + "sheet_x": 0, + "sheet_y": 40, + "short_name": "flag-aq", + "short_names": [ + "flag-aq" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 17, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Argentina Flag", + "unified": "1F1E6-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1f7.png", + "sheet_x": 0, + "sheet_y": 41, + "short_name": "flag-ar", + "short_names": [ + "flag-ar" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 18, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "American Samoa Flag", + "unified": "1F1E6-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1f8.png", + "sheet_x": 0, + "sheet_y": 42, + "short_name": "flag-as", + "short_names": [ + "flag-as" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Austria Flag", + "unified": "1F1E6-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1f9.png", + "sheet_x": 0, + "sheet_y": 43, + "short_name": "flag-at", + "short_names": [ + "flag-at" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Australia Flag", + "unified": "1F1E6-1F1FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1fa.png", + "sheet_x": 0, + "sheet_y": 44, + "short_name": "flag-au", + "short_names": [ + "flag-au" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Aruba Flag", + "unified": "1F1E6-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1fc.png", + "sheet_x": 0, + "sheet_y": 45, + "short_name": "flag-aw", + "short_names": [ + "flag-aw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "\u00c5land Islands Flag", + "unified": "1F1E6-1F1FD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1fd.png", + "sheet_x": 0, + "sheet_y": 46, + "short_name": "flag-ax", + "short_names": [ + "flag-ax" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Azerbaijan Flag", + "unified": "1F1E6-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e6-1f1ff.png", + "sheet_x": 0, + "sheet_y": 47, + "short_name": "flag-az", + "short_names": [ + "flag-az" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Bosnia & Herzegovina Flag", + "unified": "1F1E7-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1e6.png", + "sheet_x": 0, + "sheet_y": 48, + "short_name": "flag-ba", + "short_names": [ + "flag-ba" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Barbados Flag", + "unified": "1F1E7-1F1E7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1e7.png", + "sheet_x": 0, + "sheet_y": 49, + "short_name": "flag-bb", + "short_names": [ + "flag-bb" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Bangladesh Flag", + "unified": "1F1E7-1F1E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1e9.png", + "sheet_x": 0, + "sheet_y": 50, + "short_name": "flag-bd", + "short_names": [ + "flag-bd" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Belgium Flag", + "unified": "1F1E7-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1ea.png", + "sheet_x": 0, + "sheet_y": 51, + "short_name": "flag-be", + "short_names": [ + "flag-be" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Burkina Faso Flag", + "unified": "1F1E7-1F1EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1eb.png", + "sheet_x": 0, + "sheet_y": 52, + "short_name": "flag-bf", + "short_names": [ + "flag-bf" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Bulgaria Flag", + "unified": "1F1E7-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1ec.png", + "sheet_x": 0, + "sheet_y": 53, + "short_name": "flag-bg", + "short_names": [ + "flag-bg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Bahrain Flag", + "unified": "1F1E7-1F1ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1ed.png", + "sheet_x": 0, + "sheet_y": 54, + "short_name": "flag-bh", + "short_names": [ + "flag-bh" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Burundi Flag", + "unified": "1F1E7-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1ee.png", + "sheet_x": 0, + "sheet_y": 55, + "short_name": "flag-bi", + "short_names": [ + "flag-bi" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Benin Flag", + "unified": "1F1E7-1F1EF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1ef.png", + "sheet_x": 0, + "sheet_y": 56, + "short_name": "flag-bj", + "short_names": [ + "flag-bj" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "St. Barth\u00e9lemy Flag", + "unified": "1F1E7-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1f1.png", + "sheet_x": 1, + "sheet_y": 0, + "short_name": "flag-bl", + "short_names": [ + "flag-bl" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Bermuda Flag", + "unified": "1F1E7-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1f2.png", + "sheet_x": 1, + "sheet_y": 1, + "short_name": "flag-bm", + "short_names": [ + "flag-bm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Brunei Flag", + "unified": "1F1E7-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1f3.png", + "sheet_x": 1, + "sheet_y": 2, + "short_name": "flag-bn", + "short_names": [ + "flag-bn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Bolivia Flag", + "unified": "1F1E7-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1f4.png", + "sheet_x": 1, + "sheet_y": 3, + "short_name": "flag-bo", + "short_names": [ + "flag-bo" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Caribbean Netherlands Flag", + "unified": "1F1E7-1F1F6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1f6.png", + "sheet_x": 1, + "sheet_y": 4, + "short_name": "flag-bq", + "short_names": [ + "flag-bq" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 38, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Brazil Flag", + "unified": "1F1E7-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1f7.png", + "sheet_x": 1, + "sheet_y": 5, + "short_name": "flag-br", + "short_names": [ + "flag-br" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Bahamas Flag", + "unified": "1F1E7-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1f8.png", + "sheet_x": 1, + "sheet_y": 6, + "short_name": "flag-bs", + "short_names": [ + "flag-bs" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Bhutan Flag", + "unified": "1F1E7-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1f9.png", + "sheet_x": 1, + "sheet_y": 7, + "short_name": "flag-bt", + "short_names": [ + "flag-bt" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Bouvet Island Flag", + "unified": "1F1E7-1F1FB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1fb.png", + "sheet_x": 1, + "sheet_y": 8, + "short_name": "flag-bv", + "short_names": [ + "flag-bv" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Botswana Flag", + "unified": "1F1E7-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1fc.png", + "sheet_x": 1, + "sheet_y": 9, + "short_name": "flag-bw", + "short_names": [ + "flag-bw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Belarus Flag", + "unified": "1F1E7-1F1FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1fe.png", + "sheet_x": 1, + "sheet_y": 10, + "short_name": "flag-by", + "short_names": [ + "flag-by" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Belize Flag", + "unified": "1F1E7-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e7-1f1ff.png", + "sheet_x": 1, + "sheet_y": 11, + "short_name": "flag-bz", + "short_names": [ + "flag-bz" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Canada Flag", + "unified": "1F1E8-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1e6.png", + "sheet_x": 1, + "sheet_y": 12, + "short_name": "flag-ca", + "short_names": [ + "flag-ca" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Cocos (Keeling) Islands Flag", + "unified": "1F1E8-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1e8.png", + "sheet_x": 1, + "sheet_y": 13, + "short_name": "flag-cc", + "short_names": [ + "flag-cc" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Congo - Kinshasa Flag", + "unified": "1F1E8-1F1E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1e9.png", + "sheet_x": 1, + "sheet_y": 14, + "short_name": "flag-cd", + "short_names": [ + "flag-cd" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Central African Republic Flag", + "unified": "1F1E8-1F1EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1eb.png", + "sheet_x": 1, + "sheet_y": 15, + "short_name": "flag-cf", + "short_names": [ + "flag-cf" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Congo - Brazzaville Flag", + "unified": "1F1E8-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1ec.png", + "sheet_x": 1, + "sheet_y": 16, + "short_name": "flag-cg", + "short_names": [ + "flag-cg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Switzerland Flag", + "unified": "1F1E8-1F1ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1ed.png", + "sheet_x": 1, + "sheet_y": 17, + "short_name": "flag-ch", + "short_names": [ + "flag-ch" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "C\u00f4te d\u2019Ivoire Flag", + "unified": "1F1E8-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1ee.png", + "sheet_x": 1, + "sheet_y": 18, + "short_name": "flag-ci", + "short_names": [ + "flag-ci" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Cook Islands Flag", + "unified": "1F1E8-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1f0.png", + "sheet_x": 1, + "sheet_y": 19, + "short_name": "flag-ck", + "short_names": [ + "flag-ck" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Chile Flag", + "unified": "1F1E8-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1f1.png", + "sheet_x": 1, + "sheet_y": 20, + "short_name": "flag-cl", + "short_names": [ + "flag-cl" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Cameroon Flag", + "unified": "1F1E8-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1f2.png", + "sheet_x": 1, + "sheet_y": 21, + "short_name": "flag-cm", + "short_names": [ + "flag-cm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "China Flag", + "unified": "1F1E8-1F1F3", + "non_qualified": null, + "docomo": null, + "au": "EB11", + "softbank": "E513", + "google": "FE4ED", + "image": "1f1e8-1f1f3.png", + "sheet_x": 1, + "sheet_y": 22, + "short_name": "cn", + "short_names": [ + "cn", + "flag-cn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Colombia Flag", + "unified": "1F1E8-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1f4.png", + "sheet_x": 1, + "sheet_y": 23, + "short_name": "flag-co", + "short_names": [ + "flag-co" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 57, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Clipperton Island Flag", + "unified": "1F1E8-1F1F5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1f5.png", + "sheet_x": 1, + "sheet_y": 24, + "short_name": "flag-cp", + "short_names": [ + "flag-cp" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 58, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Costa Rica Flag", + "unified": "1F1E8-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1f7.png", + "sheet_x": 1, + "sheet_y": 25, + "short_name": "flag-cr", + "short_names": [ + "flag-cr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 59, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Cuba Flag", + "unified": "1F1E8-1F1FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1fa.png", + "sheet_x": 1, + "sheet_y": 26, + "short_name": "flag-cu", + "short_names": [ + "flag-cu" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 60, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Cape Verde Flag", + "unified": "1F1E8-1F1FB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1fb.png", + "sheet_x": 1, + "sheet_y": 27, + "short_name": "flag-cv", + "short_names": [ + "flag-cv" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 61, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Cura\u00e7ao Flag", + "unified": "1F1E8-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1fc.png", + "sheet_x": 1, + "sheet_y": 28, + "short_name": "flag-cw", + "short_names": [ + "flag-cw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 62, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Christmas Island Flag", + "unified": "1F1E8-1F1FD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1fd.png", + "sheet_x": 1, + "sheet_y": 29, + "short_name": "flag-cx", + "short_names": [ + "flag-cx" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 63, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Cyprus Flag", + "unified": "1F1E8-1F1FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1fe.png", + "sheet_x": 1, + "sheet_y": 30, + "short_name": "flag-cy", + "short_names": [ + "flag-cy" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 64, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Czechia Flag", + "unified": "1F1E8-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e8-1f1ff.png", + "sheet_x": 1, + "sheet_y": 31, + "short_name": "flag-cz", + "short_names": [ + "flag-cz" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 65, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Germany Flag", + "unified": "1F1E9-1F1EA", + "non_qualified": null, + "docomo": null, + "au": "EB0E", + "softbank": "E50E", + "google": "FE4E8", + "image": "1f1e9-1f1ea.png", + "sheet_x": 1, + "sheet_y": 32, + "short_name": "de", + "short_names": [ + "de", + "flag-de" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 66, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Diego Garcia Flag", + "unified": "1F1E9-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e9-1f1ec.png", + "sheet_x": 1, + "sheet_y": 33, + "short_name": "flag-dg", + "short_names": [ + "flag-dg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 67, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Djibouti Flag", + "unified": "1F1E9-1F1EF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e9-1f1ef.png", + "sheet_x": 1, + "sheet_y": 34, + "short_name": "flag-dj", + "short_names": [ + "flag-dj" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 68, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Denmark Flag", + "unified": "1F1E9-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e9-1f1f0.png", + "sheet_x": 1, + "sheet_y": 35, + "short_name": "flag-dk", + "short_names": [ + "flag-dk" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 69, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Dominica Flag", + "unified": "1F1E9-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e9-1f1f2.png", + "sheet_x": 1, + "sheet_y": 36, + "short_name": "flag-dm", + "short_names": [ + "flag-dm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 70, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Dominican Republic Flag", + "unified": "1F1E9-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e9-1f1f4.png", + "sheet_x": 1, + "sheet_y": 37, + "short_name": "flag-do", + "short_names": [ + "flag-do" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 71, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Algeria Flag", + "unified": "1F1E9-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1e9-1f1ff.png", + "sheet_x": 1, + "sheet_y": 38, + "short_name": "flag-dz", + "short_names": [ + "flag-dz" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 72, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Ceuta & Melilla Flag", + "unified": "1F1EA-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ea-1f1e6.png", + "sheet_x": 1, + "sheet_y": 39, + "short_name": "flag-ea", + "short_names": [ + "flag-ea" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 73, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Ecuador Flag", + "unified": "1F1EA-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ea-1f1e8.png", + "sheet_x": 1, + "sheet_y": 40, + "short_name": "flag-ec", + "short_names": [ + "flag-ec" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 74, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Estonia Flag", + "unified": "1F1EA-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ea-1f1ea.png", + "sheet_x": 1, + "sheet_y": 41, + "short_name": "flag-ee", + "short_names": [ + "flag-ee" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 75, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Egypt Flag", + "unified": "1F1EA-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ea-1f1ec.png", + "sheet_x": 1, + "sheet_y": 42, + "short_name": "flag-eg", + "short_names": [ + "flag-eg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 76, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Western Sahara Flag", + "unified": "1F1EA-1F1ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ea-1f1ed.png", + "sheet_x": 1, + "sheet_y": 43, + "short_name": "flag-eh", + "short_names": [ + "flag-eh" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 77, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Eritrea Flag", + "unified": "1F1EA-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ea-1f1f7.png", + "sheet_x": 1, + "sheet_y": 44, + "short_name": "flag-er", + "short_names": [ + "flag-er" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 78, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Spain Flag", + "unified": "1F1EA-1F1F8", + "non_qualified": null, + "docomo": null, + "au": "E5D5", + "softbank": "E511", + "google": "FE4EB", + "image": "1f1ea-1f1f8.png", + "sheet_x": 1, + "sheet_y": 45, + "short_name": "es", + "short_names": [ + "es", + "flag-es" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 79, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Ethiopia Flag", + "unified": "1F1EA-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ea-1f1f9.png", + "sheet_x": 1, + "sheet_y": 46, + "short_name": "flag-et", + "short_names": [ + "flag-et" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 80, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "European Union Flag", + "unified": "1F1EA-1F1FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ea-1f1fa.png", + "sheet_x": 1, + "sheet_y": 47, + "short_name": "flag-eu", + "short_names": [ + "flag-eu" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 81, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Finland Flag", + "unified": "1F1EB-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1eb-1f1ee.png", + "sheet_x": 1, + "sheet_y": 48, + "short_name": "flag-fi", + "short_names": [ + "flag-fi" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 82, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Fiji Flag", + "unified": "1F1EB-1F1EF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1eb-1f1ef.png", + "sheet_x": 1, + "sheet_y": 49, + "short_name": "flag-fj", + "short_names": [ + "flag-fj" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 83, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Falkland Islands Flag", + "unified": "1F1EB-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1eb-1f1f0.png", + "sheet_x": 1, + "sheet_y": 50, + "short_name": "flag-fk", + "short_names": [ + "flag-fk" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 84, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Micronesia Flag", + "unified": "1F1EB-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1eb-1f1f2.png", + "sheet_x": 1, + "sheet_y": 51, + "short_name": "flag-fm", + "short_names": [ + "flag-fm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 85, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Faroe Islands Flag", + "unified": "1F1EB-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1eb-1f1f4.png", + "sheet_x": 1, + "sheet_y": 52, + "short_name": "flag-fo", + "short_names": [ + "flag-fo" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 86, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "France Flag", + "unified": "1F1EB-1F1F7", + "non_qualified": null, + "docomo": null, + "au": "EAFA", + "softbank": "E50D", + "google": "FE4E7", + "image": "1f1eb-1f1f7.png", + "sheet_x": 1, + "sheet_y": 53, + "short_name": "fr", + "short_names": [ + "fr", + "flag-fr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 87, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Gabon Flag", + "unified": "1F1EC-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1e6.png", + "sheet_x": 1, + "sheet_y": 54, + "short_name": "flag-ga", + "short_names": [ + "flag-ga" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 88, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "United Kingdom Flag", + "unified": "1F1EC-1F1E7", + "non_qualified": null, + "docomo": null, + "au": "EB10", + "softbank": "E510", + "google": "FE4EA", + "image": "1f1ec-1f1e7.png", + "sheet_x": 1, + "sheet_y": 55, + "short_name": "gb", + "short_names": [ + "gb", + "uk", + "flag-gb" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 89, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Grenada Flag", + "unified": "1F1EC-1F1E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1e9.png", + "sheet_x": 1, + "sheet_y": 56, + "short_name": "flag-gd", + "short_names": [ + "flag-gd" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 90, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Georgia Flag", + "unified": "1F1EC-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1ea.png", + "sheet_x": 2, + "sheet_y": 0, + "short_name": "flag-ge", + "short_names": [ + "flag-ge" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 91, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "French Guiana Flag", + "unified": "1F1EC-1F1EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1eb.png", + "sheet_x": 2, + "sheet_y": 1, + "short_name": "flag-gf", + "short_names": [ + "flag-gf" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 92, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Guernsey Flag", + "unified": "1F1EC-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1ec.png", + "sheet_x": 2, + "sheet_y": 2, + "short_name": "flag-gg", + "short_names": [ + "flag-gg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 93, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Ghana Flag", + "unified": "1F1EC-1F1ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1ed.png", + "sheet_x": 2, + "sheet_y": 3, + "short_name": "flag-gh", + "short_names": [ + "flag-gh" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 94, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Gibraltar Flag", + "unified": "1F1EC-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1ee.png", + "sheet_x": 2, + "sheet_y": 4, + "short_name": "flag-gi", + "short_names": [ + "flag-gi" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 95, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Greenland Flag", + "unified": "1F1EC-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1f1.png", + "sheet_x": 2, + "sheet_y": 5, + "short_name": "flag-gl", + "short_names": [ + "flag-gl" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 96, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Gambia Flag", + "unified": "1F1EC-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1f2.png", + "sheet_x": 2, + "sheet_y": 6, + "short_name": "flag-gm", + "short_names": [ + "flag-gm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 97, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Guinea Flag", + "unified": "1F1EC-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1f3.png", + "sheet_x": 2, + "sheet_y": 7, + "short_name": "flag-gn", + "short_names": [ + "flag-gn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 98, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Guadeloupe Flag", + "unified": "1F1EC-1F1F5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1f5.png", + "sheet_x": 2, + "sheet_y": 8, + "short_name": "flag-gp", + "short_names": [ + "flag-gp" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 99, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Equatorial Guinea Flag", + "unified": "1F1EC-1F1F6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1f6.png", + "sheet_x": 2, + "sheet_y": 9, + "short_name": "flag-gq", + "short_names": [ + "flag-gq" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 100, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Greece Flag", + "unified": "1F1EC-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1f7.png", + "sheet_x": 2, + "sheet_y": 10, + "short_name": "flag-gr", + "short_names": [ + "flag-gr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 101, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "South Georgia & South Sandwich Islands Flag", + "unified": "1F1EC-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1f8.png", + "sheet_x": 2, + "sheet_y": 11, + "short_name": "flag-gs", + "short_names": [ + "flag-gs" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 102, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Guatemala Flag", + "unified": "1F1EC-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1f9.png", + "sheet_x": 2, + "sheet_y": 12, + "short_name": "flag-gt", + "short_names": [ + "flag-gt" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 103, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Guam Flag", + "unified": "1F1EC-1F1FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1fa.png", + "sheet_x": 2, + "sheet_y": 13, + "short_name": "flag-gu", + "short_names": [ + "flag-gu" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 104, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Guinea-Bissau Flag", + "unified": "1F1EC-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1fc.png", + "sheet_x": 2, + "sheet_y": 14, + "short_name": "flag-gw", + "short_names": [ + "flag-gw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 105, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Guyana Flag", + "unified": "1F1EC-1F1FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ec-1f1fe.png", + "sheet_x": 2, + "sheet_y": 15, + "short_name": "flag-gy", + "short_names": [ + "flag-gy" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 106, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Hong Kong SAR China Flag", + "unified": "1F1ED-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ed-1f1f0.png", + "sheet_x": 2, + "sheet_y": 16, + "short_name": "flag-hk", + "short_names": [ + "flag-hk" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 107, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Heard & McDonald Islands Flag", + "unified": "1F1ED-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ed-1f1f2.png", + "sheet_x": 2, + "sheet_y": 17, + "short_name": "flag-hm", + "short_names": [ + "flag-hm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 108, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Honduras Flag", + "unified": "1F1ED-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ed-1f1f3.png", + "sheet_x": 2, + "sheet_y": 18, + "short_name": "flag-hn", + "short_names": [ + "flag-hn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 109, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Croatia Flag", + "unified": "1F1ED-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ed-1f1f7.png", + "sheet_x": 2, + "sheet_y": 19, + "short_name": "flag-hr", + "short_names": [ + "flag-hr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 110, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Haiti Flag", + "unified": "1F1ED-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ed-1f1f9.png", + "sheet_x": 2, + "sheet_y": 20, + "short_name": "flag-ht", + "short_names": [ + "flag-ht" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 111, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Hungary Flag", + "unified": "1F1ED-1F1FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ed-1f1fa.png", + "sheet_x": 2, + "sheet_y": 21, + "short_name": "flag-hu", + "short_names": [ + "flag-hu" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 112, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Canary Islands Flag", + "unified": "1F1EE-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1e8.png", + "sheet_x": 2, + "sheet_y": 22, + "short_name": "flag-ic", + "short_names": [ + "flag-ic" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 113, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Indonesia Flag", + "unified": "1F1EE-1F1E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1e9.png", + "sheet_x": 2, + "sheet_y": 23, + "short_name": "flag-id", + "short_names": [ + "flag-id" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 114, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Ireland Flag", + "unified": "1F1EE-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1ea.png", + "sheet_x": 2, + "sheet_y": 24, + "short_name": "flag-ie", + "short_names": [ + "flag-ie" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 115, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Israel Flag", + "unified": "1F1EE-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1f1.png", + "sheet_x": 2, + "sheet_y": 25, + "short_name": "flag-il", + "short_names": [ + "flag-il" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 116, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Isle of Man Flag", + "unified": "1F1EE-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1f2.png", + "sheet_x": 2, + "sheet_y": 26, + "short_name": "flag-im", + "short_names": [ + "flag-im" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 117, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "India Flag", + "unified": "1F1EE-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1f3.png", + "sheet_x": 2, + "sheet_y": 27, + "short_name": "flag-in", + "short_names": [ + "flag-in" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 118, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "British Indian Ocean Territory Flag", + "unified": "1F1EE-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1f4.png", + "sheet_x": 2, + "sheet_y": 28, + "short_name": "flag-io", + "short_names": [ + "flag-io" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 119, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Iraq Flag", + "unified": "1F1EE-1F1F6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1f6.png", + "sheet_x": 2, + "sheet_y": 29, + "short_name": "flag-iq", + "short_names": [ + "flag-iq" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 120, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Iran Flag", + "unified": "1F1EE-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1f7.png", + "sheet_x": 2, + "sheet_y": 30, + "short_name": "flag-ir", + "short_names": [ + "flag-ir" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 121, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Iceland Flag", + "unified": "1F1EE-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ee-1f1f8.png", + "sheet_x": 2, + "sheet_y": 31, + "short_name": "flag-is", + "short_names": [ + "flag-is" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 122, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Italy Flag", + "unified": "1F1EE-1F1F9", + "non_qualified": null, + "docomo": null, + "au": "EB0F", + "softbank": "E50F", + "google": "FE4E9", + "image": "1f1ee-1f1f9.png", + "sheet_x": 2, + "sheet_y": 32, + "short_name": "it", + "short_names": [ + "it", + "flag-it" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 123, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Jersey Flag", + "unified": "1F1EF-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ef-1f1ea.png", + "sheet_x": 2, + "sheet_y": 33, + "short_name": "flag-je", + "short_names": [ + "flag-je" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 124, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Jamaica Flag", + "unified": "1F1EF-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ef-1f1f2.png", + "sheet_x": 2, + "sheet_y": 34, + "short_name": "flag-jm", + "short_names": [ + "flag-jm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 125, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Jordan Flag", + "unified": "1F1EF-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ef-1f1f4.png", + "sheet_x": 2, + "sheet_y": 35, + "short_name": "flag-jo", + "short_names": [ + "flag-jo" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 126, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Japan Flag", + "unified": "1F1EF-1F1F5", + "non_qualified": null, + "docomo": null, + "au": "E4CC", + "softbank": "E50B", + "google": "FE4E5", + "image": "1f1ef-1f1f5.png", + "sheet_x": 2, + "sheet_y": 36, + "short_name": "jp", + "short_names": [ + "jp", + "flag-jp" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 127, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Kenya Flag", + "unified": "1F1F0-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1ea.png", + "sheet_x": 2, + "sheet_y": 37, + "short_name": "flag-ke", + "short_names": [ + "flag-ke" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 128, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Kyrgyzstan Flag", + "unified": "1F1F0-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1ec.png", + "sheet_x": 2, + "sheet_y": 38, + "short_name": "flag-kg", + "short_names": [ + "flag-kg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 129, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Cambodia Flag", + "unified": "1F1F0-1F1ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1ed.png", + "sheet_x": 2, + "sheet_y": 39, + "short_name": "flag-kh", + "short_names": [ + "flag-kh" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 130, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Kiribati Flag", + "unified": "1F1F0-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1ee.png", + "sheet_x": 2, + "sheet_y": 40, + "short_name": "flag-ki", + "short_names": [ + "flag-ki" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 131, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Comoros Flag", + "unified": "1F1F0-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1f2.png", + "sheet_x": 2, + "sheet_y": 41, + "short_name": "flag-km", + "short_names": [ + "flag-km" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 132, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "St. Kitts & Nevis Flag", + "unified": "1F1F0-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1f3.png", + "sheet_x": 2, + "sheet_y": 42, + "short_name": "flag-kn", + "short_names": [ + "flag-kn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 133, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "North Korea Flag", + "unified": "1F1F0-1F1F5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1f5.png", + "sheet_x": 2, + "sheet_y": 43, + "short_name": "flag-kp", + "short_names": [ + "flag-kp" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 134, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "South Korea Flag", + "unified": "1F1F0-1F1F7", + "non_qualified": null, + "docomo": null, + "au": "EB12", + "softbank": "E514", + "google": "FE4EE", + "image": "1f1f0-1f1f7.png", + "sheet_x": 2, + "sheet_y": 44, + "short_name": "kr", + "short_names": [ + "kr", + "flag-kr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 135, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Kuwait Flag", + "unified": "1F1F0-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1fc.png", + "sheet_x": 2, + "sheet_y": 45, + "short_name": "flag-kw", + "short_names": [ + "flag-kw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 136, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Cayman Islands Flag", + "unified": "1F1F0-1F1FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1fe.png", + "sheet_x": 2, + "sheet_y": 46, + "short_name": "flag-ky", + "short_names": [ + "flag-ky" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 137, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Kazakhstan Flag", + "unified": "1F1F0-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f0-1f1ff.png", + "sheet_x": 2, + "sheet_y": 47, + "short_name": "flag-kz", + "short_names": [ + "flag-kz" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 138, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Laos Flag", + "unified": "1F1F1-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1e6.png", + "sheet_x": 2, + "sheet_y": 48, + "short_name": "flag-la", + "short_names": [ + "flag-la" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 139, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Lebanon Flag", + "unified": "1F1F1-1F1E7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1e7.png", + "sheet_x": 2, + "sheet_y": 49, + "short_name": "flag-lb", + "short_names": [ + "flag-lb" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 140, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "St. Lucia Flag", + "unified": "1F1F1-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1e8.png", + "sheet_x": 2, + "sheet_y": 50, + "short_name": "flag-lc", + "short_names": [ + "flag-lc" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 141, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Liechtenstein Flag", + "unified": "1F1F1-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1ee.png", + "sheet_x": 2, + "sheet_y": 51, + "short_name": "flag-li", + "short_names": [ + "flag-li" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 142, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Sri Lanka Flag", + "unified": "1F1F1-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1f0.png", + "sheet_x": 2, + "sheet_y": 52, + "short_name": "flag-lk", + "short_names": [ + "flag-lk" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 143, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Liberia Flag", + "unified": "1F1F1-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1f7.png", + "sheet_x": 2, + "sheet_y": 53, + "short_name": "flag-lr", + "short_names": [ + "flag-lr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 144, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Lesotho Flag", + "unified": "1F1F1-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1f8.png", + "sheet_x": 2, + "sheet_y": 54, + "short_name": "flag-ls", + "short_names": [ + "flag-ls" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 145, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Lithuania Flag", + "unified": "1F1F1-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1f9.png", + "sheet_x": 2, + "sheet_y": 55, + "short_name": "flag-lt", + "short_names": [ + "flag-lt" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 146, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Luxembourg Flag", + "unified": "1F1F1-1F1FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1fa.png", + "sheet_x": 2, + "sheet_y": 56, + "short_name": "flag-lu", + "short_names": [ + "flag-lu" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 147, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Latvia Flag", + "unified": "1F1F1-1F1FB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1fb.png", + "sheet_x": 3, + "sheet_y": 0, + "short_name": "flag-lv", + "short_names": [ + "flag-lv" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 148, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Libya Flag", + "unified": "1F1F1-1F1FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f1-1f1fe.png", + "sheet_x": 3, + "sheet_y": 1, + "short_name": "flag-ly", + "short_names": [ + "flag-ly" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 149, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Morocco Flag", + "unified": "1F1F2-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1e6.png", + "sheet_x": 3, + "sheet_y": 2, + "short_name": "flag-ma", + "short_names": [ + "flag-ma" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 150, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Monaco Flag", + "unified": "1F1F2-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1e8.png", + "sheet_x": 3, + "sheet_y": 3, + "short_name": "flag-mc", + "short_names": [ + "flag-mc" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 151, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Moldova Flag", + "unified": "1F1F2-1F1E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1e9.png", + "sheet_x": 3, + "sheet_y": 4, + "short_name": "flag-md", + "short_names": [ + "flag-md" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 152, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Montenegro Flag", + "unified": "1F1F2-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1ea.png", + "sheet_x": 3, + "sheet_y": 5, + "short_name": "flag-me", + "short_names": [ + "flag-me" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 153, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "St. Martin Flag", + "unified": "1F1F2-1F1EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1eb.png", + "sheet_x": 3, + "sheet_y": 6, + "short_name": "flag-mf", + "short_names": [ + "flag-mf" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 154, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Madagascar Flag", + "unified": "1F1F2-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1ec.png", + "sheet_x": 3, + "sheet_y": 7, + "short_name": "flag-mg", + "short_names": [ + "flag-mg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 155, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Marshall Islands Flag", + "unified": "1F1F2-1F1ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1ed.png", + "sheet_x": 3, + "sheet_y": 8, + "short_name": "flag-mh", + "short_names": [ + "flag-mh" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 156, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "North Macedonia Flag", + "unified": "1F1F2-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f0.png", + "sheet_x": 3, + "sheet_y": 9, + "short_name": "flag-mk", + "short_names": [ + "flag-mk" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 157, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Mali Flag", + "unified": "1F1F2-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f1.png", + "sheet_x": 3, + "sheet_y": 10, + "short_name": "flag-ml", + "short_names": [ + "flag-ml" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 158, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Myanmar (Burma) Flag", + "unified": "1F1F2-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f2.png", + "sheet_x": 3, + "sheet_y": 11, + "short_name": "flag-mm", + "short_names": [ + "flag-mm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 159, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Mongolia Flag", + "unified": "1F1F2-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f3.png", + "sheet_x": 3, + "sheet_y": 12, + "short_name": "flag-mn", + "short_names": [ + "flag-mn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 160, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Macao SAR China Flag", + "unified": "1F1F2-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f4.png", + "sheet_x": 3, + "sheet_y": 13, + "short_name": "flag-mo", + "short_names": [ + "flag-mo" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 161, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Northern Mariana Islands Flag", + "unified": "1F1F2-1F1F5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f5.png", + "sheet_x": 3, + "sheet_y": 14, + "short_name": "flag-mp", + "short_names": [ + "flag-mp" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 162, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Martinique Flag", + "unified": "1F1F2-1F1F6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f6.png", + "sheet_x": 3, + "sheet_y": 15, + "short_name": "flag-mq", + "short_names": [ + "flag-mq" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 163, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Mauritania Flag", + "unified": "1F1F2-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f7.png", + "sheet_x": 3, + "sheet_y": 16, + "short_name": "flag-mr", + "short_names": [ + "flag-mr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 164, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Montserrat Flag", + "unified": "1F1F2-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f8.png", + "sheet_x": 3, + "sheet_y": 17, + "short_name": "flag-ms", + "short_names": [ + "flag-ms" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 165, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Malta Flag", + "unified": "1F1F2-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1f9.png", + "sheet_x": 3, + "sheet_y": 18, + "short_name": "flag-mt", + "short_names": [ + "flag-mt" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 166, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Mauritius Flag", + "unified": "1F1F2-1F1FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1fa.png", + "sheet_x": 3, + "sheet_y": 19, + "short_name": "flag-mu", + "short_names": [ + "flag-mu" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 167, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Maldives Flag", + "unified": "1F1F2-1F1FB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1fb.png", + "sheet_x": 3, + "sheet_y": 20, + "short_name": "flag-mv", + "short_names": [ + "flag-mv" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 168, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Malawi Flag", + "unified": "1F1F2-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1fc.png", + "sheet_x": 3, + "sheet_y": 21, + "short_name": "flag-mw", + "short_names": [ + "flag-mw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 169, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Mexico Flag", + "unified": "1F1F2-1F1FD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1fd.png", + "sheet_x": 3, + "sheet_y": 22, + "short_name": "flag-mx", + "short_names": [ + "flag-mx" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 170, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Malaysia Flag", + "unified": "1F1F2-1F1FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1fe.png", + "sheet_x": 3, + "sheet_y": 23, + "short_name": "flag-my", + "short_names": [ + "flag-my" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 171, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Mozambique Flag", + "unified": "1F1F2-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f2-1f1ff.png", + "sheet_x": 3, + "sheet_y": 24, + "short_name": "flag-mz", + "short_names": [ + "flag-mz" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 172, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Namibia Flag", + "unified": "1F1F3-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1e6.png", + "sheet_x": 3, + "sheet_y": 25, + "short_name": "flag-na", + "short_names": [ + "flag-na" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 173, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "New Caledonia Flag", + "unified": "1F1F3-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1e8.png", + "sheet_x": 3, + "sheet_y": 26, + "short_name": "flag-nc", + "short_names": [ + "flag-nc" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 174, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Niger Flag", + "unified": "1F1F3-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1ea.png", + "sheet_x": 3, + "sheet_y": 27, + "short_name": "flag-ne", + "short_names": [ + "flag-ne" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 175, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Norfolk Island Flag", + "unified": "1F1F3-1F1EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1eb.png", + "sheet_x": 3, + "sheet_y": 28, + "short_name": "flag-nf", + "short_names": [ + "flag-nf" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 176, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Nigeria Flag", + "unified": "1F1F3-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1ec.png", + "sheet_x": 3, + "sheet_y": 29, + "short_name": "flag-ng", + "short_names": [ + "flag-ng" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 177, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Nicaragua Flag", + "unified": "1F1F3-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1ee.png", + "sheet_x": 3, + "sheet_y": 30, + "short_name": "flag-ni", + "short_names": [ + "flag-ni" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 178, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Netherlands Flag", + "unified": "1F1F3-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1f1.png", + "sheet_x": 3, + "sheet_y": 31, + "short_name": "flag-nl", + "short_names": [ + "flag-nl" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 179, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Norway Flag", + "unified": "1F1F3-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1f4.png", + "sheet_x": 3, + "sheet_y": 32, + "short_name": "flag-no", + "short_names": [ + "flag-no" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 180, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Nepal Flag", + "unified": "1F1F3-1F1F5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1f5.png", + "sheet_x": 3, + "sheet_y": 33, + "short_name": "flag-np", + "short_names": [ + "flag-np" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 181, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Nauru Flag", + "unified": "1F1F3-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1f7.png", + "sheet_x": 3, + "sheet_y": 34, + "short_name": "flag-nr", + "short_names": [ + "flag-nr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 182, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Niue Flag", + "unified": "1F1F3-1F1FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1fa.png", + "sheet_x": 3, + "sheet_y": 35, + "short_name": "flag-nu", + "short_names": [ + "flag-nu" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 183, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "New Zealand Flag", + "unified": "1F1F3-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f3-1f1ff.png", + "sheet_x": 3, + "sheet_y": 36, + "short_name": "flag-nz", + "short_names": [ + "flag-nz" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 184, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Oman Flag", + "unified": "1F1F4-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f4-1f1f2.png", + "sheet_x": 3, + "sheet_y": 37, + "short_name": "flag-om", + "short_names": [ + "flag-om" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 185, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Panama Flag", + "unified": "1F1F5-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1e6.png", + "sheet_x": 3, + "sheet_y": 38, + "short_name": "flag-pa", + "short_names": [ + "flag-pa" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 186, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Peru Flag", + "unified": "1F1F5-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1ea.png", + "sheet_x": 3, + "sheet_y": 39, + "short_name": "flag-pe", + "short_names": [ + "flag-pe" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 187, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "French Polynesia Flag", + "unified": "1F1F5-1F1EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1eb.png", + "sheet_x": 3, + "sheet_y": 40, + "short_name": "flag-pf", + "short_names": [ + "flag-pf" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 188, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Papua New Guinea Flag", + "unified": "1F1F5-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1ec.png", + "sheet_x": 3, + "sheet_y": 41, + "short_name": "flag-pg", + "short_names": [ + "flag-pg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 189, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Philippines Flag", + "unified": "1F1F5-1F1ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1ed.png", + "sheet_x": 3, + "sheet_y": 42, + "short_name": "flag-ph", + "short_names": [ + "flag-ph" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 190, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Pakistan Flag", + "unified": "1F1F5-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1f0.png", + "sheet_x": 3, + "sheet_y": 43, + "short_name": "flag-pk", + "short_names": [ + "flag-pk" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 191, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Poland Flag", + "unified": "1F1F5-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1f1.png", + "sheet_x": 3, + "sheet_y": 44, + "short_name": "flag-pl", + "short_names": [ + "flag-pl" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 192, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "St. Pierre & Miquelon Flag", + "unified": "1F1F5-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1f2.png", + "sheet_x": 3, + "sheet_y": 45, + "short_name": "flag-pm", + "short_names": [ + "flag-pm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 193, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Pitcairn Islands Flag", + "unified": "1F1F5-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1f3.png", + "sheet_x": 3, + "sheet_y": 46, + "short_name": "flag-pn", + "short_names": [ + "flag-pn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 194, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Puerto Rico Flag", + "unified": "1F1F5-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1f7.png", + "sheet_x": 3, + "sheet_y": 47, + "short_name": "flag-pr", + "short_names": [ + "flag-pr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 195, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Palestinian Territories Flag", + "unified": "1F1F5-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1f8.png", + "sheet_x": 3, + "sheet_y": 48, + "short_name": "flag-ps", + "short_names": [ + "flag-ps" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 196, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Portugal Flag", + "unified": "1F1F5-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1f9.png", + "sheet_x": 3, + "sheet_y": 49, + "short_name": "flag-pt", + "short_names": [ + "flag-pt" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 197, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Palau Flag", + "unified": "1F1F5-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1fc.png", + "sheet_x": 3, + "sheet_y": 50, + "short_name": "flag-pw", + "short_names": [ + "flag-pw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 198, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Paraguay Flag", + "unified": "1F1F5-1F1FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f5-1f1fe.png", + "sheet_x": 3, + "sheet_y": 51, + "short_name": "flag-py", + "short_names": [ + "flag-py" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 199, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Qatar Flag", + "unified": "1F1F6-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f6-1f1e6.png", + "sheet_x": 3, + "sheet_y": 52, + "short_name": "flag-qa", + "short_names": [ + "flag-qa" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 200, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "R\u00e9union Flag", + "unified": "1F1F7-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f7-1f1ea.png", + "sheet_x": 3, + "sheet_y": 53, + "short_name": "flag-re", + "short_names": [ + "flag-re" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 201, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Romania Flag", + "unified": "1F1F7-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f7-1f1f4.png", + "sheet_x": 3, + "sheet_y": 54, + "short_name": "flag-ro", + "short_names": [ + "flag-ro" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 202, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Serbia Flag", + "unified": "1F1F7-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f7-1f1f8.png", + "sheet_x": 3, + "sheet_y": 55, + "short_name": "flag-rs", + "short_names": [ + "flag-rs" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 203, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Russia Flag", + "unified": "1F1F7-1F1FA", + "non_qualified": null, + "docomo": null, + "au": "E5D6", + "softbank": "E512", + "google": "FE4EC", + "image": "1f1f7-1f1fa.png", + "sheet_x": 3, + "sheet_y": 56, + "short_name": "ru", + "short_names": [ + "ru", + "flag-ru" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 204, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Rwanda Flag", + "unified": "1F1F7-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f7-1f1fc.png", + "sheet_x": 4, + "sheet_y": 0, + "short_name": "flag-rw", + "short_names": [ + "flag-rw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 205, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Saudi Arabia Flag", + "unified": "1F1F8-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1e6.png", + "sheet_x": 4, + "sheet_y": 1, + "short_name": "flag-sa", + "short_names": [ + "flag-sa" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 206, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Solomon Islands Flag", + "unified": "1F1F8-1F1E7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1e7.png", + "sheet_x": 4, + "sheet_y": 2, + "short_name": "flag-sb", + "short_names": [ + "flag-sb" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 207, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Seychelles Flag", + "unified": "1F1F8-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1e8.png", + "sheet_x": 4, + "sheet_y": 3, + "short_name": "flag-sc", + "short_names": [ + "flag-sc" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 208, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Sudan Flag", + "unified": "1F1F8-1F1E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1e9.png", + "sheet_x": 4, + "sheet_y": 4, + "short_name": "flag-sd", + "short_names": [ + "flag-sd" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 209, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Sweden Flag", + "unified": "1F1F8-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1ea.png", + "sheet_x": 4, + "sheet_y": 5, + "short_name": "flag-se", + "short_names": [ + "flag-se" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 210, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Singapore Flag", + "unified": "1F1F8-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1ec.png", + "sheet_x": 4, + "sheet_y": 6, + "short_name": "flag-sg", + "short_names": [ + "flag-sg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 211, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "St. Helena Flag", + "unified": "1F1F8-1F1ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1ed.png", + "sheet_x": 4, + "sheet_y": 7, + "short_name": "flag-sh", + "short_names": [ + "flag-sh" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 212, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Slovenia Flag", + "unified": "1F1F8-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1ee.png", + "sheet_x": 4, + "sheet_y": 8, + "short_name": "flag-si", + "short_names": [ + "flag-si" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 213, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Svalbard & Jan Mayen Flag", + "unified": "1F1F8-1F1EF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1ef.png", + "sheet_x": 4, + "sheet_y": 9, + "short_name": "flag-sj", + "short_names": [ + "flag-sj" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 214, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Slovakia Flag", + "unified": "1F1F8-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1f0.png", + "sheet_x": 4, + "sheet_y": 10, + "short_name": "flag-sk", + "short_names": [ + "flag-sk" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 215, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Sierra Leone Flag", + "unified": "1F1F8-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1f1.png", + "sheet_x": 4, + "sheet_y": 11, + "short_name": "flag-sl", + "short_names": [ + "flag-sl" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 216, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "San Marino Flag", + "unified": "1F1F8-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1f2.png", + "sheet_x": 4, + "sheet_y": 12, + "short_name": "flag-sm", + "short_names": [ + "flag-sm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 217, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Senegal Flag", + "unified": "1F1F8-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1f3.png", + "sheet_x": 4, + "sheet_y": 13, + "short_name": "flag-sn", + "short_names": [ + "flag-sn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 218, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Somalia Flag", + "unified": "1F1F8-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1f4.png", + "sheet_x": 4, + "sheet_y": 14, + "short_name": "flag-so", + "short_names": [ + "flag-so" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 219, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Suriname Flag", + "unified": "1F1F8-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1f7.png", + "sheet_x": 4, + "sheet_y": 15, + "short_name": "flag-sr", + "short_names": [ + "flag-sr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 220, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "South Sudan Flag", + "unified": "1F1F8-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1f8.png", + "sheet_x": 4, + "sheet_y": 16, + "short_name": "flag-ss", + "short_names": [ + "flag-ss" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 221, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "S\u00e3o Tom\u00e9 & Pr\u00edncipe Flag", + "unified": "1F1F8-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1f9.png", + "sheet_x": 4, + "sheet_y": 17, + "short_name": "flag-st", + "short_names": [ + "flag-st" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 222, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "El Salvador Flag", + "unified": "1F1F8-1F1FB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1fb.png", + "sheet_x": 4, + "sheet_y": 18, + "short_name": "flag-sv", + "short_names": [ + "flag-sv" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 223, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Sint Maarten Flag", + "unified": "1F1F8-1F1FD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1fd.png", + "sheet_x": 4, + "sheet_y": 19, + "short_name": "flag-sx", + "short_names": [ + "flag-sx" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 224, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Syria Flag", + "unified": "1F1F8-1F1FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1fe.png", + "sheet_x": 4, + "sheet_y": 20, + "short_name": "flag-sy", + "short_names": [ + "flag-sy" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 225, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Eswatini Flag", + "unified": "1F1F8-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f8-1f1ff.png", + "sheet_x": 4, + "sheet_y": 21, + "short_name": "flag-sz", + "short_names": [ + "flag-sz" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 226, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Tristan da Cunha Flag", + "unified": "1F1F9-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1e6.png", + "sheet_x": 4, + "sheet_y": 22, + "short_name": "flag-ta", + "short_names": [ + "flag-ta" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 227, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Turks & Caicos Islands Flag", + "unified": "1F1F9-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1e8.png", + "sheet_x": 4, + "sheet_y": 23, + "short_name": "flag-tc", + "short_names": [ + "flag-tc" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 228, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Chad Flag", + "unified": "1F1F9-1F1E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1e9.png", + "sheet_x": 4, + "sheet_y": 24, + "short_name": "flag-td", + "short_names": [ + "flag-td" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 229, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "French Southern Territories Flag", + "unified": "1F1F9-1F1EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1eb.png", + "sheet_x": 4, + "sheet_y": 25, + "short_name": "flag-tf", + "short_names": [ + "flag-tf" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 230, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Togo Flag", + "unified": "1F1F9-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1ec.png", + "sheet_x": 4, + "sheet_y": 26, + "short_name": "flag-tg", + "short_names": [ + "flag-tg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 231, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Thailand Flag", + "unified": "1F1F9-1F1ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1ed.png", + "sheet_x": 4, + "sheet_y": 27, + "short_name": "flag-th", + "short_names": [ + "flag-th" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 232, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Tajikistan Flag", + "unified": "1F1F9-1F1EF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1ef.png", + "sheet_x": 4, + "sheet_y": 28, + "short_name": "flag-tj", + "short_names": [ + "flag-tj" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 233, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Tokelau Flag", + "unified": "1F1F9-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1f0.png", + "sheet_x": 4, + "sheet_y": 29, + "short_name": "flag-tk", + "short_names": [ + "flag-tk" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 234, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Timor-Leste Flag", + "unified": "1F1F9-1F1F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1f1.png", + "sheet_x": 4, + "sheet_y": 30, + "short_name": "flag-tl", + "short_names": [ + "flag-tl" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 235, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Turkmenistan Flag", + "unified": "1F1F9-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1f2.png", + "sheet_x": 4, + "sheet_y": 31, + "short_name": "flag-tm", + "short_names": [ + "flag-tm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 236, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Tunisia Flag", + "unified": "1F1F9-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1f3.png", + "sheet_x": 4, + "sheet_y": 32, + "short_name": "flag-tn", + "short_names": [ + "flag-tn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 237, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Tonga Flag", + "unified": "1F1F9-1F1F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1f4.png", + "sheet_x": 4, + "sheet_y": 33, + "short_name": "flag-to", + "short_names": [ + "flag-to" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 238, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Turkey Flag", + "unified": "1F1F9-1F1F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1f7.png", + "sheet_x": 4, + "sheet_y": 34, + "short_name": "flag-tr", + "short_names": [ + "flag-tr" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 239, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Trinidad & Tobago Flag", + "unified": "1F1F9-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1f9.png", + "sheet_x": 4, + "sheet_y": 35, + "short_name": "flag-tt", + "short_names": [ + "flag-tt" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 240, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Tuvalu Flag", + "unified": "1F1F9-1F1FB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1fb.png", + "sheet_x": 4, + "sheet_y": 36, + "short_name": "flag-tv", + "short_names": [ + "flag-tv" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 241, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Taiwan Flag", + "unified": "1F1F9-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1fc.png", + "sheet_x": 4, + "sheet_y": 37, + "short_name": "flag-tw", + "short_names": [ + "flag-tw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 242, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Tanzania Flag", + "unified": "1F1F9-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1f9-1f1ff.png", + "sheet_x": 4, + "sheet_y": 38, + "short_name": "flag-tz", + "short_names": [ + "flag-tz" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 243, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Ukraine Flag", + "unified": "1F1FA-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fa-1f1e6.png", + "sheet_x": 4, + "sheet_y": 39, + "short_name": "flag-ua", + "short_names": [ + "flag-ua" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 244, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Uganda Flag", + "unified": "1F1FA-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fa-1f1ec.png", + "sheet_x": 4, + "sheet_y": 40, + "short_name": "flag-ug", + "short_names": [ + "flag-ug" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 245, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "U.S. Outlying Islands Flag", + "unified": "1F1FA-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fa-1f1f2.png", + "sheet_x": 4, + "sheet_y": 41, + "short_name": "flag-um", + "short_names": [ + "flag-um" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 246, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "United Nations Flag", + "unified": "1F1FA-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fa-1f1f3.png", + "sheet_x": 4, + "sheet_y": 42, + "short_name": "flag-un", + "short_names": [ + "flag-un" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 247, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "United States Flag", + "unified": "1F1FA-1F1F8", + "non_qualified": null, + "docomo": null, + "au": "E573", + "softbank": "E50C", + "google": "FE4E6", + "image": "1f1fa-1f1f8.png", + "sheet_x": 4, + "sheet_y": 43, + "short_name": "us", + "short_names": [ + "us", + "flag-us" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 248, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Uruguay Flag", + "unified": "1F1FA-1F1FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fa-1f1fe.png", + "sheet_x": 4, + "sheet_y": 44, + "short_name": "flag-uy", + "short_names": [ + "flag-uy" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 249, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Uzbekistan Flag", + "unified": "1F1FA-1F1FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fa-1f1ff.png", + "sheet_x": 4, + "sheet_y": 45, + "short_name": "flag-uz", + "short_names": [ + "flag-uz" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 250, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Vatican City Flag", + "unified": "1F1FB-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fb-1f1e6.png", + "sheet_x": 4, + "sheet_y": 46, + "short_name": "flag-va", + "short_names": [ + "flag-va" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 251, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "St. Vincent & Grenadines Flag", + "unified": "1F1FB-1F1E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fb-1f1e8.png", + "sheet_x": 4, + "sheet_y": 47, + "short_name": "flag-vc", + "short_names": [ + "flag-vc" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 252, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Venezuela Flag", + "unified": "1F1FB-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fb-1f1ea.png", + "sheet_x": 4, + "sheet_y": 48, + "short_name": "flag-ve", + "short_names": [ + "flag-ve" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 253, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "British Virgin Islands Flag", + "unified": "1F1FB-1F1EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fb-1f1ec.png", + "sheet_x": 4, + "sheet_y": 49, + "short_name": "flag-vg", + "short_names": [ + "flag-vg" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 254, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "U.S. Virgin Islands Flag", + "unified": "1F1FB-1F1EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fb-1f1ee.png", + "sheet_x": 4, + "sheet_y": 50, + "short_name": "flag-vi", + "short_names": [ + "flag-vi" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 255, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Vietnam Flag", + "unified": "1F1FB-1F1F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fb-1f1f3.png", + "sheet_x": 4, + "sheet_y": 51, + "short_name": "flag-vn", + "short_names": [ + "flag-vn" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 256, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Vanuatu Flag", + "unified": "1F1FB-1F1FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fb-1f1fa.png", + "sheet_x": 4, + "sheet_y": 52, + "short_name": "flag-vu", + "short_names": [ + "flag-vu" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 257, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Wallis & Futuna Flag", + "unified": "1F1FC-1F1EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fc-1f1eb.png", + "sheet_x": 4, + "sheet_y": 53, + "short_name": "flag-wf", + "short_names": [ + "flag-wf" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 258, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Samoa Flag", + "unified": "1F1FC-1F1F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fc-1f1f8.png", + "sheet_x": 4, + "sheet_y": 54, + "short_name": "flag-ws", + "short_names": [ + "flag-ws" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 259, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Kosovo Flag", + "unified": "1F1FD-1F1F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fd-1f1f0.png", + "sheet_x": 4, + "sheet_y": 55, + "short_name": "flag-xk", + "short_names": [ + "flag-xk" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 260, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Yemen Flag", + "unified": "1F1FE-1F1EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fe-1f1ea.png", + "sheet_x": 4, + "sheet_y": 56, + "short_name": "flag-ye", + "short_names": [ + "flag-ye" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 261, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Mayotte Flag", + "unified": "1F1FE-1F1F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1fe-1f1f9.png", + "sheet_x": 5, + "sheet_y": 0, + "short_name": "flag-yt", + "short_names": [ + "flag-yt" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 262, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "South Africa Flag", + "unified": "1F1FF-1F1E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ff-1f1e6.png", + "sheet_x": 5, + "sheet_y": 1, + "short_name": "flag-za", + "short_names": [ + "flag-za" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 263, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Zambia Flag", + "unified": "1F1FF-1F1F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ff-1f1f2.png", + "sheet_x": 5, + "sheet_y": 2, + "short_name": "flag-zm", + "short_names": [ + "flag-zm" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 264, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Zimbabwe Flag", + "unified": "1F1FF-1F1FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f1ff-1f1fc.png", + "sheet_x": 5, + "sheet_y": 3, + "short_name": "flag-zw", + "short_names": [ + "flag-zw" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 265, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED KATAKANA KOKO", + "unified": "1F201", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E203", + "google": "FEB24", + "image": "1f201.png", + "sheet_x": 5, + "sheet_y": 4, + "short_name": "koko", + "short_names": [ + "koko" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 167, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED KATAKANA SA", + "unified": "1F202-FE0F", + "non_qualified": "1F202", + "docomo": null, + "au": "EA87", + "softbank": "E228", + "google": "FEB3F", + "image": "1f202-fe0f.png", + "sheet_x": 5, + "sheet_y": 5, + "short_name": "sa", + "short_names": [ + "sa" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 168, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-7121", + "unified": "1F21A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E216", + "google": "FEB3A", + "image": "1f21a.png", + "sheet_x": 5, + "sheet_y": 6, + "short_name": "u7121", + "short_names": [ + "u7121" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 174, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-6307", + "unified": "1F22F", + "non_qualified": null, + "docomo": null, + "au": "EA8B", + "softbank": "E22C", + "google": "FEB40", + "image": "1f22f.png", + "sheet_x": 5, + "sheet_y": 7, + "short_name": "u6307", + "short_names": [ + "u6307" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 171, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-7981", + "unified": "1F232", + "non_qualified": null, + "docomo": "E738", + "au": null, + "softbank": null, + "google": "FEB2E", + "image": "1f232.png", + "sheet_x": 5, + "sheet_y": 8, + "short_name": "u7981", + "short_names": [ + "u7981" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 175, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-7A7A", + "unified": "1F233", + "non_qualified": null, + "docomo": "E739", + "au": "EA8A", + "softbank": "E22B", + "google": "FEB2F", + "image": "1f233.png", + "sheet_x": 5, + "sheet_y": 9, + "short_name": "u7a7a", + "short_names": [ + "u7a7a" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 179, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-5408", + "unified": "1F234", + "non_qualified": null, + "docomo": "E73A", + "au": null, + "softbank": null, + "google": "FEB30", + "image": "1f234.png", + "sheet_x": 5, + "sheet_y": 10, + "short_name": "u5408", + "short_names": [ + "u5408" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 178, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-6E80", + "unified": "1F235", + "non_qualified": null, + "docomo": "E73B", + "au": "EA89", + "softbank": "E22A", + "google": "FEB31", + "image": "1f235.png", + "sheet_x": 5, + "sheet_y": 11, + "short_name": "u6e80", + "short_names": [ + "u6e80" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 183, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-6709", + "unified": "1F236", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E215", + "google": "FEB39", + "image": "1f236.png", + "sheet_x": 5, + "sheet_y": 12, + "short_name": "u6709", + "short_names": [ + "u6709" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 170, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-6708", + "unified": "1F237-FE0F", + "non_qualified": "1F237", + "docomo": null, + "au": null, + "softbank": "E217", + "google": "FEB3B", + "image": "1f237-fe0f.png", + "sheet_x": 5, + "sheet_y": 13, + "short_name": "u6708", + "short_names": [ + "u6708" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 169, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-7533", + "unified": "1F238", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E218", + "google": "FEB3C", + "image": "1f238.png", + "sheet_x": 5, + "sheet_y": 14, + "short_name": "u7533", + "short_names": [ + "u7533" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 177, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-5272", + "unified": "1F239", + "non_qualified": null, + "docomo": null, + "au": "EA86", + "softbank": "E227", + "google": "FEB3E", + "image": "1f239.png", + "sheet_x": 5, + "sheet_y": 15, + "short_name": "u5272", + "short_names": [ + "u5272" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 173, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUARED CJK UNIFIED IDEOGRAPH-55B6", + "unified": "1F23A", + "non_qualified": null, + "docomo": null, + "au": "EA8C", + "softbank": "E22D", + "google": "FEB41", + "image": "1f23a.png", + "sheet_x": 5, + "sheet_y": 16, + "short_name": "u55b6", + "short_names": [ + "u55b6" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 182, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CIRCLED IDEOGRAPH ADVANTAGE", + "unified": "1F250", + "non_qualified": null, + "docomo": null, + "au": "E4F7", + "softbank": "E226", + "google": "FEB3D", + "image": "1f250.png", + "sheet_x": 5, + "sheet_y": 17, + "short_name": "ideograph_advantage", + "short_names": [ + "ideograph_advantage" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 172, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CIRCLED IDEOGRAPH ACCEPT", + "unified": "1F251", + "non_qualified": null, + "docomo": null, + "au": "EB01", + "softbank": null, + "google": "FEB50", + "image": "1f251.png", + "sheet_x": 5, + "sheet_y": 18, + "short_name": "accept", + "short_names": [ + "accept" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 176, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CYCLONE", + "unified": "1F300", + "non_qualified": null, + "docomo": "E643", + "au": "E469", + "softbank": "E443", + "google": "FE005", + "image": "1f300.png", + "sheet_x": 5, + "sheet_y": 19, + "short_name": "cyclone", + "short_names": [ + "cyclone" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 197, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FOGGY", + "unified": "1F301", + "non_qualified": null, + "docomo": "E644", + "au": "E598", + "softbank": null, + "google": "FE006", + "image": "1f301.png", + "sheet_x": 5, + "sheet_y": 20, + "short_name": "foggy", + "short_names": [ + "foggy" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOSED UMBRELLA", + "unified": "1F302", + "non_qualified": null, + "docomo": "E645", + "au": "EAE8", + "softbank": "E43C", + "google": "FE007", + "image": "1f302.png", + "sheet_x": 5, + "sheet_y": 21, + "short_name": "closed_umbrella", + "short_names": [ + "closed_umbrella" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 199, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NIGHT WITH STARS", + "unified": "1F303", + "non_qualified": null, + "docomo": "E6B3", + "au": "EAF1", + "softbank": "E44B", + "google": "FE008", + "image": "1f303.png", + "sheet_x": 5, + "sheet_y": 22, + "short_name": "night_with_stars", + "short_names": [ + "night_with_stars" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SUNRISE OVER MOUNTAINS", + "unified": "1F304", + "non_qualified": null, + "docomo": "E63E", + "au": "EAF4", + "softbank": "E04D", + "google": "FE009", + "image": "1f304.png", + "sheet_x": 5, + "sheet_y": 23, + "short_name": "sunrise_over_mountains", + "short_names": [ + "sunrise_over_mountains" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SUNRISE", + "unified": "1F305", + "non_qualified": null, + "docomo": "E63E", + "au": "EAF4", + "softbank": "E449", + "google": "FE00A", + "image": "1f305.png", + "sheet_x": 5, + "sheet_y": 24, + "short_name": "sunrise", + "short_names": [ + "sunrise" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CITYSCAPE AT DUSK", + "unified": "1F306", + "non_qualified": null, + "docomo": null, + "au": "E5DA", + "softbank": "E146", + "google": "FE00B", + "image": "1f306.png", + "sheet_x": 5, + "sheet_y": 25, + "short_name": "city_sunset", + "short_names": [ + "city_sunset" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SUNSET OVER BUILDINGS", + "unified": "1F307", + "non_qualified": null, + "docomo": "E63E", + "au": "E5DA", + "softbank": "E44A", + "google": "FE00C", + "image": "1f307.png", + "sheet_x": 5, + "sheet_y": 26, + "short_name": "city_sunrise", + "short_names": [ + "city_sunrise" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RAINBOW", + "unified": "1F308", + "non_qualified": null, + "docomo": null, + "au": "EAF2", + "softbank": "E44C", + "google": "FE00D", + "image": "1f308.png", + "sheet_x": 5, + "sheet_y": 27, + "short_name": "rainbow", + "short_names": [ + "rainbow" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 198, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BRIDGE AT NIGHT", + "unified": "1F309", + "non_qualified": null, + "docomo": "E6B3", + "au": "E4BF", + "softbank": null, + "google": "FE010", + "image": "1f309.png", + "sheet_x": 5, + "sheet_y": 28, + "short_name": "bridge_at_night", + "short_names": [ + "bridge_at_night" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WATER WAVE", + "unified": "1F30A", + "non_qualified": null, + "docomo": "E73F", + "au": "EB7C", + "softbank": "E43E", + "google": "FE038", + "image": "1f30a.png", + "sheet_x": 5, + "sheet_y": 29, + "short_name": "ocean", + "short_names": [ + "ocean" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 210, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "VOLCANO", + "unified": "1F30B", + "non_qualified": null, + "docomo": null, + "au": "EB53", + "softbank": null, + "google": "FE03A", + "image": "1f30b.png", + "sheet_x": 5, + "sheet_y": 30, + "short_name": "volcano", + "short_names": [ + "volcano" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MILKY WAY", + "unified": "1F30C", + "non_qualified": null, + "docomo": "E6B3", + "au": "EB5F", + "softbank": null, + "google": "FE03B", + "image": "1f30c.png", + "sheet_x": 5, + "sheet_y": 31, + "short_name": "milky_way", + "short_names": [ + "milky_way" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 184, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EARTH GLOBE EUROPE-AFRICA", + "unified": "1F30D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f30d.png", + "sheet_x": 5, + "sheet_y": 32, + "short_name": "earth_africa", + "short_names": [ + "earth_africa" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EARTH GLOBE AMERICAS", + "unified": "1F30E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f30e.png", + "sheet_x": 5, + "sheet_y": 33, + "short_name": "earth_americas", + "short_names": [ + "earth_americas" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EARTH GLOBE ASIA-AUSTRALIA", + "unified": "1F30F", + "non_qualified": null, + "docomo": null, + "au": "E5B3", + "softbank": null, + "google": "FE039", + "image": "1f30f.png", + "sheet_x": 5, + "sheet_y": 34, + "short_name": "earth_asia", + "short_names": [ + "earth_asia" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GLOBE WITH MERIDIANS", + "unified": "1F310", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f310.png", + "sheet_x": 5, + "sheet_y": 35, + "short_name": "globe_with_meridians", + "short_names": [ + "globe_with_meridians" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEW MOON SYMBOL", + "unified": "1F311", + "non_qualified": null, + "docomo": "E69C", + "au": "E5A8", + "softbank": null, + "google": "FE011", + "image": "1f311.png", + "sheet_x": 5, + "sheet_y": 36, + "short_name": "new_moon", + "short_names": [ + "new_moon" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 164, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WAXING CRESCENT MOON SYMBOL", + "unified": "1F312", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f312.png", + "sheet_x": 5, + "sheet_y": 37, + "short_name": "waxing_crescent_moon", + "short_names": [ + "waxing_crescent_moon" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 165, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FIRST QUARTER MOON SYMBOL", + "unified": "1F313", + "non_qualified": null, + "docomo": "E69E", + "au": "E5AA", + "softbank": null, + "google": "FE013", + "image": "1f313.png", + "sheet_x": 5, + "sheet_y": 38, + "short_name": "first_quarter_moon", + "short_names": [ + "first_quarter_moon" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 166, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WAXING GIBBOUS MOON SYMBOL", + "unified": "1F314", + "non_qualified": null, + "docomo": "E69D", + "au": "E5A9", + "softbank": null, + "google": "FE012", + "image": "1f314.png", + "sheet_x": 5, + "sheet_y": 39, + "short_name": "moon", + "short_names": [ + "moon", + "waxing_gibbous_moon" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 167, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FULL MOON SYMBOL", + "unified": "1F315", + "non_qualified": null, + "docomo": "E6A0", + "au": null, + "softbank": null, + "google": "FE015", + "image": "1f315.png", + "sheet_x": 5, + "sheet_y": 40, + "short_name": "full_moon", + "short_names": [ + "full_moon" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 168, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WANING GIBBOUS MOON SYMBOL", + "unified": "1F316", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f316.png", + "sheet_x": 5, + "sheet_y": 41, + "short_name": "waning_gibbous_moon", + "short_names": [ + "waning_gibbous_moon" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 169, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LAST QUARTER MOON SYMBOL", + "unified": "1F317", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f317.png", + "sheet_x": 5, + "sheet_y": 42, + "short_name": "last_quarter_moon", + "short_names": [ + "last_quarter_moon" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 170, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WANING CRESCENT MOON SYMBOL", + "unified": "1F318", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f318.png", + "sheet_x": 5, + "sheet_y": 43, + "short_name": "waning_crescent_moon", + "short_names": [ + "waning_crescent_moon" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 171, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CRESCENT MOON", + "unified": "1F319", + "non_qualified": null, + "docomo": "E69F", + "au": "E486", + "softbank": "E04C", + "google": "FE014", + "image": "1f319.png", + "sheet_x": 5, + "sheet_y": 44, + "short_name": "crescent_moon", + "short_names": [ + "crescent_moon" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 172, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEW MOON WITH FACE", + "unified": "1F31A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f31a.png", + "sheet_x": 5, + "sheet_y": 45, + "short_name": "new_moon_with_face", + "short_names": [ + "new_moon_with_face" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 173, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FIRST QUARTER MOON WITH FACE", + "unified": "1F31B", + "non_qualified": null, + "docomo": "E69E", + "au": "E489", + "softbank": null, + "google": "FE016", + "image": "1f31b.png", + "sheet_x": 5, + "sheet_y": 46, + "short_name": "first_quarter_moon_with_face", + "short_names": [ + "first_quarter_moon_with_face" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 174, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LAST QUARTER MOON WITH FACE", + "unified": "1F31C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f31c.png", + "sheet_x": 5, + "sheet_y": 47, + "short_name": "last_quarter_moon_with_face", + "short_names": [ + "last_quarter_moon_with_face" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 175, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FULL MOON WITH FACE", + "unified": "1F31D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f31d.png", + "sheet_x": 5, + "sheet_y": 48, + "short_name": "full_moon_with_face", + "short_names": [ + "full_moon_with_face" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 178, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SUN WITH FACE", + "unified": "1F31E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f31e.png", + "sheet_x": 5, + "sheet_y": 49, + "short_name": "sun_with_face", + "short_names": [ + "sun_with_face" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 179, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GLOWING STAR", + "unified": "1F31F", + "non_qualified": null, + "docomo": null, + "au": "E48B", + "softbank": "E335", + "google": "FEB69", + "image": "1f31f.png", + "sheet_x": 5, + "sheet_y": 50, + "short_name": "star2", + "short_names": [ + "star2" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 182, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHOOTING STAR", + "unified": "1F320", + "non_qualified": null, + "docomo": null, + "au": "E468", + "softbank": null, + "google": "FEB6A", + "image": "1f320.png", + "sheet_x": 5, + "sheet_y": 51, + "short_name": "stars", + "short_names": [ + "stars" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 183, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F321-FE0F", + "non_qualified": "1F321", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f321-fe0f.png", + "sheet_x": 5, + "sheet_y": 52, + "short_name": "thermometer", + "short_names": [ + "thermometer" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 176, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F324-FE0F", + "non_qualified": "1F324", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f324-fe0f.png", + "sheet_x": 5, + "sheet_y": 53, + "short_name": "mostly_sunny", + "short_names": [ + "mostly_sunny", + "sun_small_cloud" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 188, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F325-FE0F", + "non_qualified": "1F325", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f325-fe0f.png", + "sheet_x": 5, + "sheet_y": 54, + "short_name": "barely_sunny", + "short_names": [ + "barely_sunny", + "sun_behind_cloud" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 189, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F326-FE0F", + "non_qualified": "1F326", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f326-fe0f.png", + "sheet_x": 5, + "sheet_y": 55, + "short_name": "partly_sunny_rain", + "short_names": [ + "partly_sunny_rain", + "sun_behind_rain_cloud" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 190, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F327-FE0F", + "non_qualified": "1F327", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f327-fe0f.png", + "sheet_x": 5, + "sheet_y": 56, + "short_name": "rain_cloud", + "short_names": [ + "rain_cloud" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 191, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F328-FE0F", + "non_qualified": "1F328", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f328-fe0f.png", + "sheet_x": 6, + "sheet_y": 0, + "short_name": "snow_cloud", + "short_names": [ + "snow_cloud" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 192, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F329-FE0F", + "non_qualified": "1F329", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f329-fe0f.png", + "sheet_x": 6, + "sheet_y": 1, + "short_name": "lightning", + "short_names": [ + "lightning", + "lightning_cloud" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 193, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F32A-FE0F", + "non_qualified": "1F32A", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f32a-fe0f.png", + "sheet_x": 6, + "sheet_y": 2, + "short_name": "tornado", + "short_names": [ + "tornado", + "tornado_cloud" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 194, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F32B-FE0F", + "non_qualified": "1F32B", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f32b-fe0f.png", + "sheet_x": 6, + "sheet_y": 3, + "short_name": "fog", + "short_names": [ + "fog" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 195, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F32C-FE0F", + "non_qualified": "1F32C", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f32c-fe0f.png", + "sheet_x": 6, + "sheet_y": 4, + "short_name": "wind_blowing_face", + "short_names": [ + "wind_blowing_face" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 196, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOT DOG", + "unified": "1F32D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f32d.png", + "sheet_x": 6, + "sheet_y": 5, + "short_name": "hotdog", + "short_names": [ + "hotdog" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TACO", + "unified": "1F32E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f32e.png", + "sheet_x": 6, + "sheet_y": 6, + "short_name": "taco", + "short_names": [ + "taco" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BURRITO", + "unified": "1F32F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f32f.png", + "sheet_x": 6, + "sheet_y": 7, + "short_name": "burrito", + "short_names": [ + "burrito" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHESTNUT", + "unified": "1F330", + "non_qualified": null, + "docomo": null, + "au": "EB38", + "softbank": null, + "google": "FE04C", + "image": "1f330.png", + "sheet_x": 6, + "sheet_y": 8, + "short_name": "chestnut", + "short_names": [ + "chestnut" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SEEDLING", + "unified": "1F331", + "non_qualified": null, + "docomo": "E746", + "au": "EB7D", + "softbank": null, + "google": "FE03E", + "image": "1f331.png", + "sheet_x": 6, + "sheet_y": 9, + "short_name": "seedling", + "short_names": [ + "seedling" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 116, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EVERGREEN TREE", + "unified": "1F332", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f332.png", + "sheet_x": 6, + "sheet_y": 10, + "short_name": "evergreen_tree", + "short_names": [ + "evergreen_tree" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 117, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DECIDUOUS TREE", + "unified": "1F333", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f333.png", + "sheet_x": 6, + "sheet_y": 11, + "short_name": "deciduous_tree", + "short_names": [ + "deciduous_tree" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 118, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PALM TREE", + "unified": "1F334", + "non_qualified": null, + "docomo": null, + "au": "E4E2", + "softbank": "E307", + "google": "FE047", + "image": "1f334.png", + "sheet_x": 6, + "sheet_y": 12, + "short_name": "palm_tree", + "short_names": [ + "palm_tree" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 119, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CACTUS", + "unified": "1F335", + "non_qualified": null, + "docomo": null, + "au": "EA96", + "softbank": "E308", + "google": "FE048", + "image": "1f335.png", + "sheet_x": 6, + "sheet_y": 13, + "short_name": "cactus", + "short_names": [ + "cactus" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 120, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F336-FE0F", + "non_qualified": "1F336", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f336-fe0f.png", + "sheet_x": 6, + "sheet_y": 14, + "short_name": "hot_pepper", + "short_names": [ + "hot_pepper" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TULIP", + "unified": "1F337", + "non_qualified": null, + "docomo": "E743", + "au": "E4E4", + "softbank": "E304", + "google": "FE03D", + "image": "1f337.png", + "sheet_x": 6, + "sheet_y": 15, + "short_name": "tulip", + "short_names": [ + "tulip" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 115, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHERRY BLOSSOM", + "unified": "1F338", + "non_qualified": null, + "docomo": "E748", + "au": "E4CA", + "softbank": "E030", + "google": "FE040", + "image": "1f338.png", + "sheet_x": 6, + "sheet_y": 16, + "short_name": "cherry_blossom", + "short_names": [ + "cherry_blossom" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 107, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ROSE", + "unified": "1F339", + "non_qualified": null, + "docomo": null, + "au": "E5BA", + "softbank": "E032", + "google": "FE041", + "image": "1f339.png", + "sheet_x": 6, + "sheet_y": 17, + "short_name": "rose", + "short_names": [ + "rose" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 110, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HIBISCUS", + "unified": "1F33A", + "non_qualified": null, + "docomo": null, + "au": "EA94", + "softbank": "E303", + "google": "FE045", + "image": "1f33a.png", + "sheet_x": 6, + "sheet_y": 18, + "short_name": "hibiscus", + "short_names": [ + "hibiscus" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 112, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SUNFLOWER", + "unified": "1F33B", + "non_qualified": null, + "docomo": null, + "au": "E4E3", + "softbank": "E305", + "google": "FE046", + "image": "1f33b.png", + "sheet_x": 6, + "sheet_y": 19, + "short_name": "sunflower", + "short_names": [ + "sunflower" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 113, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLOSSOM", + "unified": "1F33C", + "non_qualified": null, + "docomo": null, + "au": "EB49", + "softbank": null, + "google": "FE04D", + "image": "1f33c.png", + "sheet_x": 6, + "sheet_y": 20, + "short_name": "blossom", + "short_names": [ + "blossom" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 114, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EAR OF MAIZE", + "unified": "1F33D", + "non_qualified": null, + "docomo": null, + "au": "EB36", + "softbank": null, + "google": "FE04A", + "image": "1f33d.png", + "sheet_x": 6, + "sheet_y": 21, + "short_name": "corn", + "short_names": [ + "corn" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EAR OF RICE", + "unified": "1F33E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E444", + "google": "FE049", + "image": "1f33e.png", + "sheet_x": 6, + "sheet_y": 22, + "short_name": "ear_of_rice", + "short_names": [ + "ear_of_rice" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 121, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HERB", + "unified": "1F33F", + "non_qualified": null, + "docomo": "E741", + "au": "EB82", + "softbank": null, + "google": "FE04E", + "image": "1f33f.png", + "sheet_x": 6, + "sheet_y": 23, + "short_name": "herb", + "short_names": [ + "herb" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 122, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FOUR LEAF CLOVER", + "unified": "1F340", + "non_qualified": null, + "docomo": "E741", + "au": "E513", + "softbank": "E110", + "google": "FE03C", + "image": "1f340.png", + "sheet_x": 6, + "sheet_y": 24, + "short_name": "four_leaf_clover", + "short_names": [ + "four_leaf_clover" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 124, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MAPLE LEAF", + "unified": "1F341", + "non_qualified": null, + "docomo": "E747", + "au": "E4CE", + "softbank": "E118", + "google": "FE03F", + "image": "1f341.png", + "sheet_x": 6, + "sheet_y": 25, + "short_name": "maple_leaf", + "short_names": [ + "maple_leaf" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 125, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FALLEN LEAF", + "unified": "1F342", + "non_qualified": null, + "docomo": "E747", + "au": "E5CD", + "softbank": "E119", + "google": "FE042", + "image": "1f342.png", + "sheet_x": 6, + "sheet_y": 26, + "short_name": "fallen_leaf", + "short_names": [ + "fallen_leaf" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 126, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEAF FLUTTERING IN WIND", + "unified": "1F343", + "non_qualified": null, + "docomo": null, + "au": "E5CD", + "softbank": "E447", + "google": "FE043", + "image": "1f343.png", + "sheet_x": 6, + "sheet_y": 27, + "short_name": "leaves", + "short_names": [ + "leaves" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 127, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MUSHROOM", + "unified": "1F344", + "non_qualified": null, + "docomo": null, + "au": "EB37", + "softbank": null, + "google": "FE04B", + "image": "1f344.png", + "sheet_x": 6, + "sheet_y": 28, + "short_name": "mushroom", + "short_names": [ + "mushroom" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TOMATO", + "unified": "1F345", + "non_qualified": null, + "docomo": null, + "au": "EABB", + "softbank": "E349", + "google": "FE055", + "image": "1f345.png", + "sheet_x": 6, + "sheet_y": 29, + "short_name": "tomato", + "short_names": [ + "tomato" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 16, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AUBERGINE", + "unified": "1F346", + "non_qualified": null, + "docomo": null, + "au": "EABC", + "softbank": "E34A", + "google": "FE056", + "image": "1f346.png", + "sheet_x": 6, + "sheet_y": 30, + "short_name": "eggplant", + "short_names": [ + "eggplant" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GRAPES", + "unified": "1F347", + "non_qualified": null, + "docomo": null, + "au": "EB34", + "softbank": null, + "google": "FE059", + "image": "1f347.png", + "sheet_x": 6, + "sheet_y": 31, + "short_name": "grapes", + "short_names": [ + "grapes" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MELON", + "unified": "1F348", + "non_qualified": null, + "docomo": null, + "au": "EB32", + "softbank": null, + "google": "FE057", + "image": "1f348.png", + "sheet_x": 6, + "sheet_y": 32, + "short_name": "melon", + "short_names": [ + "melon" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WATERMELON", + "unified": "1F349", + "non_qualified": null, + "docomo": null, + "au": "E4CD", + "softbank": "E348", + "google": "FE054", + "image": "1f349.png", + "sheet_x": 6, + "sheet_y": 33, + "short_name": "watermelon", + "short_names": [ + "watermelon" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TANGERINE", + "unified": "1F34A", + "non_qualified": null, + "docomo": null, + "au": "EABA", + "softbank": "E346", + "google": "FE052", + "image": "1f34a.png", + "sheet_x": 6, + "sheet_y": 34, + "short_name": "tangerine", + "short_names": [ + "tangerine" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEMON", + "unified": "1F34B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f34b.png", + "sheet_x": 6, + "sheet_y": 35, + "short_name": "lemon", + "short_names": [ + "lemon" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BANANA", + "unified": "1F34C", + "non_qualified": null, + "docomo": "E744", + "au": "EB35", + "softbank": null, + "google": "FE050", + "image": "1f34c.png", + "sheet_x": 6, + "sheet_y": 36, + "short_name": "banana", + "short_names": [ + "banana" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PINEAPPLE", + "unified": "1F34D", + "non_qualified": null, + "docomo": null, + "au": "EB33", + "softbank": null, + "google": "FE058", + "image": "1f34d.png", + "sheet_x": 6, + "sheet_y": 37, + "short_name": "pineapple", + "short_names": [ + "pineapple" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RED APPLE", + "unified": "1F34E", + "non_qualified": null, + "docomo": "E745", + "au": "EAB9", + "softbank": "E345", + "google": "FE051", + "image": "1f34e.png", + "sheet_x": 6, + "sheet_y": 38, + "short_name": "apple", + "short_names": [ + "apple" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GREEN APPLE", + "unified": "1F34F", + "non_qualified": null, + "docomo": "E745", + "au": "EB5A", + "softbank": null, + "google": "FE05B", + "image": "1f34f.png", + "sheet_x": 6, + "sheet_y": 39, + "short_name": "green_apple", + "short_names": [ + "green_apple" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PEAR", + "unified": "1F350", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f350.png", + "sheet_x": 6, + "sheet_y": 40, + "short_name": "pear", + "short_names": [ + "pear" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PEACH", + "unified": "1F351", + "non_qualified": null, + "docomo": null, + "au": "EB39", + "softbank": null, + "google": "FE05A", + "image": "1f351.png", + "sheet_x": 6, + "sheet_y": 41, + "short_name": "peach", + "short_names": [ + "peach" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHERRIES", + "unified": "1F352", + "non_qualified": null, + "docomo": "E742", + "au": "E4D2", + "softbank": null, + "google": "FE04F", + "image": "1f352.png", + "sheet_x": 6, + "sheet_y": 42, + "short_name": "cherries", + "short_names": [ + "cherries" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "STRAWBERRY", + "unified": "1F353", + "non_qualified": null, + "docomo": null, + "au": "E4D4", + "softbank": "E347", + "google": "FE053", + "image": "1f353.png", + "sheet_x": 6, + "sheet_y": 43, + "short_name": "strawberry", + "short_names": [ + "strawberry" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HAMBURGER", + "unified": "1F354", + "non_qualified": null, + "docomo": "E673", + "au": "E4D6", + "softbank": "E120", + "google": "FE960", + "image": "1f354.png", + "sheet_x": 6, + "sheet_y": 44, + "short_name": "hamburger", + "short_names": [ + "hamburger" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLICE OF PIZZA", + "unified": "1F355", + "non_qualified": null, + "docomo": null, + "au": "EB3B", + "softbank": null, + "google": "FE975", + "image": "1f355.png", + "sheet_x": 6, + "sheet_y": 45, + "short_name": "pizza", + "short_names": [ + "pizza" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MEAT ON BONE", + "unified": "1F356", + "non_qualified": null, + "docomo": null, + "au": "E4C4", + "softbank": null, + "google": "FE972", + "image": "1f356.png", + "sheet_x": 6, + "sheet_y": 46, + "short_name": "meat_on_bone", + "short_names": [ + "meat_on_bone" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POULTRY LEG", + "unified": "1F357", + "non_qualified": null, + "docomo": null, + "au": "EB3C", + "softbank": null, + "google": "FE976", + "image": "1f357.png", + "sheet_x": 6, + "sheet_y": 47, + "short_name": "poultry_leg", + "short_names": [ + "poultry_leg" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RICE CRACKER", + "unified": "1F358", + "non_qualified": null, + "docomo": null, + "au": "EAB3", + "softbank": "E33D", + "google": "FE969", + "image": "1f358.png", + "sheet_x": 6, + "sheet_y": 48, + "short_name": "rice_cracker", + "short_names": [ + "rice_cracker" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 64, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RICE BALL", + "unified": "1F359", + "non_qualified": null, + "docomo": "E749", + "au": "E4D5", + "softbank": "E342", + "google": "FE961", + "image": "1f359.png", + "sheet_x": 6, + "sheet_y": 49, + "short_name": "rice_ball", + "short_names": [ + "rice_ball" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 65, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COOKED RICE", + "unified": "1F35A", + "non_qualified": null, + "docomo": "E74C", + "au": "EAB4", + "softbank": "E33E", + "google": "FE96A", + "image": "1f35a.png", + "sheet_x": 6, + "sheet_y": 50, + "short_name": "rice", + "short_names": [ + "rice" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 66, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CURRY AND RICE", + "unified": "1F35B", + "non_qualified": null, + "docomo": null, + "au": "EAB6", + "softbank": "E341", + "google": "FE96C", + "image": "1f35b.png", + "sheet_x": 6, + "sheet_y": 51, + "short_name": "curry", + "short_names": [ + "curry" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 67, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "STEAMING BOWL", + "unified": "1F35C", + "non_qualified": null, + "docomo": "E74C", + "au": "E5B4", + "softbank": "E340", + "google": "FE963", + "image": "1f35c.png", + "sheet_x": 6, + "sheet_y": 52, + "short_name": "ramen", + "short_names": [ + "ramen" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 68, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPAGHETTI", + "unified": "1F35D", + "non_qualified": null, + "docomo": null, + "au": "EAB5", + "softbank": "E33F", + "google": "FE96B", + "image": "1f35d.png", + "sheet_x": 6, + "sheet_y": 53, + "short_name": "spaghetti", + "short_names": [ + "spaghetti" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 69, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BREAD", + "unified": "1F35E", + "non_qualified": null, + "docomo": "E74D", + "au": "EAAF", + "softbank": "E339", + "google": "FE964", + "image": "1f35e.png", + "sheet_x": 6, + "sheet_y": 54, + "short_name": "bread", + "short_names": [ + "bread" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FRENCH FRIES", + "unified": "1F35F", + "non_qualified": null, + "docomo": null, + "au": "EAB1", + "softbank": "E33B", + "google": "FE967", + "image": "1f35f.png", + "sheet_x": 6, + "sheet_y": 55, + "short_name": "fries", + "short_names": [ + "fries" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ROASTED SWEET POTATO", + "unified": "1F360", + "non_qualified": null, + "docomo": null, + "au": "EB3A", + "softbank": null, + "google": "FE974", + "image": "1f360.png", + "sheet_x": 6, + "sheet_y": 56, + "short_name": "sweet_potato", + "short_names": [ + "sweet_potato" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 70, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DANGO", + "unified": "1F361", + "non_qualified": null, + "docomo": null, + "au": "EAB2", + "softbank": "E33C", + "google": "FE968", + "image": "1f361.png", + "sheet_x": 7, + "sheet_y": 0, + "short_name": "dango", + "short_names": [ + "dango" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 76, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ODEN", + "unified": "1F362", + "non_qualified": null, + "docomo": null, + "au": "EAB7", + "softbank": "E343", + "google": "FE96D", + "image": "1f362.png", + "sheet_x": 7, + "sheet_y": 1, + "short_name": "oden", + "short_names": [ + "oden" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 71, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SUSHI", + "unified": "1F363", + "non_qualified": null, + "docomo": null, + "au": "EAB8", + "softbank": "E344", + "google": "FE96E", + "image": "1f363.png", + "sheet_x": 7, + "sheet_y": 2, + "short_name": "sushi", + "short_names": [ + "sushi" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 72, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FRIED SHRIMP", + "unified": "1F364", + "non_qualified": null, + "docomo": null, + "au": "EB70", + "softbank": null, + "google": "FE97F", + "image": "1f364.png", + "sheet_x": 7, + "sheet_y": 3, + "short_name": "fried_shrimp", + "short_names": [ + "fried_shrimp" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 73, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FISH CAKE WITH SWIRL DESIGN", + "unified": "1F365", + "non_qualified": null, + "docomo": "E643", + "au": "E4ED", + "softbank": null, + "google": "FE973", + "image": "1f365.png", + "sheet_x": 7, + "sheet_y": 4, + "short_name": "fish_cake", + "short_names": [ + "fish_cake" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 74, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SOFT ICE CREAM", + "unified": "1F366", + "non_qualified": null, + "docomo": null, + "au": "EAB0", + "softbank": "E33A", + "google": "FE966", + "image": "1f366.png", + "sheet_x": 7, + "sheet_y": 5, + "short_name": "icecream", + "short_names": [ + "icecream" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 85, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHAVED ICE", + "unified": "1F367", + "non_qualified": null, + "docomo": null, + "au": "EAEA", + "softbank": "E43F", + "google": "FE971", + "image": "1f367.png", + "sheet_x": 7, + "sheet_y": 6, + "short_name": "shaved_ice", + "short_names": [ + "shaved_ice" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 86, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ICE CREAM", + "unified": "1F368", + "non_qualified": null, + "docomo": null, + "au": "EB4A", + "softbank": null, + "google": "FE977", + "image": "1f368.png", + "sheet_x": 7, + "sheet_y": 7, + "short_name": "ice_cream", + "short_names": [ + "ice_cream" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 87, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOUGHNUT", + "unified": "1F369", + "non_qualified": null, + "docomo": null, + "au": "EB4B", + "softbank": null, + "google": "FE978", + "image": "1f369.png", + "sheet_x": 7, + "sheet_y": 8, + "short_name": "doughnut", + "short_names": [ + "doughnut" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 88, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COOKIE", + "unified": "1F36A", + "non_qualified": null, + "docomo": null, + "au": "EB4C", + "softbank": null, + "google": "FE979", + "image": "1f36a.png", + "sheet_x": 7, + "sheet_y": 9, + "short_name": "cookie", + "short_names": [ + "cookie" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 89, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHOCOLATE BAR", + "unified": "1F36B", + "non_qualified": null, + "docomo": null, + "au": "EB4D", + "softbank": null, + "google": "FE97A", + "image": "1f36b.png", + "sheet_x": 7, + "sheet_y": 10, + "short_name": "chocolate_bar", + "short_names": [ + "chocolate_bar" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 94, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CANDY", + "unified": "1F36C", + "non_qualified": null, + "docomo": null, + "au": "EB4E", + "softbank": null, + "google": "FE97B", + "image": "1f36c.png", + "sheet_x": 7, + "sheet_y": 11, + "short_name": "candy", + "short_names": [ + "candy" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 95, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LOLLIPOP", + "unified": "1F36D", + "non_qualified": null, + "docomo": null, + "au": "EB4F", + "softbank": null, + "google": "FE97C", + "image": "1f36d.png", + "sheet_x": 7, + "sheet_y": 12, + "short_name": "lollipop", + "short_names": [ + "lollipop" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 96, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CUSTARD", + "unified": "1F36E", + "non_qualified": null, + "docomo": null, + "au": "EB56", + "softbank": null, + "google": "FE97D", + "image": "1f36e.png", + "sheet_x": 7, + "sheet_y": 13, + "short_name": "custard", + "short_names": [ + "custard" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 97, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HONEY POT", + "unified": "1F36F", + "non_qualified": null, + "docomo": null, + "au": "EB59", + "softbank": null, + "google": "FE97E", + "image": "1f36f.png", + "sheet_x": 7, + "sheet_y": 14, + "short_name": "honey_pot", + "short_names": [ + "honey_pot" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 98, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHORTCAKE", + "unified": "1F370", + "non_qualified": null, + "docomo": "E74A", + "au": "E4D0", + "softbank": "E046", + "google": "FE962", + "image": "1f370.png", + "sheet_x": 7, + "sheet_y": 15, + "short_name": "cake", + "short_names": [ + "cake" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 91, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BENTO BOX", + "unified": "1F371", + "non_qualified": null, + "docomo": null, + "au": "EABD", + "softbank": "E34C", + "google": "FE96F", + "image": "1f371.png", + "sheet_x": 7, + "sheet_y": 16, + "short_name": "bento", + "short_names": [ + "bento" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 63, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POT OF FOOD", + "unified": "1F372", + "non_qualified": null, + "docomo": null, + "au": "EABE", + "softbank": "E34D", + "google": "FE970", + "image": "1f372.png", + "sheet_x": 7, + "sheet_y": 17, + "short_name": "stew", + "short_names": [ + "stew" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COOKING", + "unified": "1F373", + "non_qualified": null, + "docomo": null, + "au": "E4D1", + "softbank": "E147", + "google": "FE965", + "image": "1f373.png", + "sheet_x": 7, + "sheet_y": 18, + "short_name": "fried_egg", + "short_names": [ + "fried_egg", + "cooking" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FORK AND KNIFE", + "unified": "1F374", + "non_qualified": null, + "docomo": "E66F", + "au": "E4AC", + "softbank": "E043", + "google": "FE980", + "image": "1f374.png", + "sheet_x": 7, + "sheet_y": 19, + "short_name": "fork_and_knife", + "short_names": [ + "fork_and_knife" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 118, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TEACUP WITHOUT HANDLE", + "unified": "1F375", + "non_qualified": null, + "docomo": "E71E", + "au": "EAAE", + "softbank": "E338", + "google": "FE984", + "image": "1f375.png", + "sheet_x": 7, + "sheet_y": 20, + "short_name": "tea", + "short_names": [ + "tea" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 102, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SAKE BOTTLE AND CUP", + "unified": "1F376", + "non_qualified": null, + "docomo": "E74B", + "au": "EA97", + "softbank": "E30B", + "google": "FE985", + "image": "1f376.png", + "sheet_x": 7, + "sheet_y": 21, + "short_name": "sake", + "short_names": [ + "sake" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 103, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WINE GLASS", + "unified": "1F377", + "non_qualified": null, + "docomo": "E756", + "au": "E4C1", + "softbank": null, + "google": "FE986", + "image": "1f377.png", + "sheet_x": 7, + "sheet_y": 22, + "short_name": "wine_glass", + "short_names": [ + "wine_glass" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 105, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COCKTAIL GLASS", + "unified": "1F378", + "non_qualified": null, + "docomo": "E671", + "au": "E4C2", + "softbank": "E044", + "google": "FE982", + "image": "1f378.png", + "sheet_x": 7, + "sheet_y": 23, + "short_name": "cocktail", + "short_names": [ + "cocktail" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 106, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TROPICAL DRINK", + "unified": "1F379", + "non_qualified": null, + "docomo": "E671", + "au": "EB3E", + "softbank": null, + "google": "FE988", + "image": "1f379.png", + "sheet_x": 7, + "sheet_y": 24, + "short_name": "tropical_drink", + "short_names": [ + "tropical_drink" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 107, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BEER MUG", + "unified": "1F37A", + "non_qualified": null, + "docomo": "E672", + "au": "E4C3", + "softbank": "E047", + "google": "FE983", + "image": "1f37a.png", + "sheet_x": 7, + "sheet_y": 25, + "short_name": "beer", + "short_names": [ + "beer" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 108, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLINKING BEER MUGS", + "unified": "1F37B", + "non_qualified": null, + "docomo": "E672", + "au": "EA98", + "softbank": "E30C", + "google": "FE987", + "image": "1f37b.png", + "sheet_x": 7, + "sheet_y": 26, + "short_name": "beers", + "short_names": [ + "beers" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 109, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BABY BOTTLE", + "unified": "1F37C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f37c.png", + "sheet_x": 7, + "sheet_y": 27, + "short_name": "baby_bottle", + "short_names": [ + "baby_bottle" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 99, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F37D-FE0F", + "non_qualified": "1F37D", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f37d-fe0f.png", + "sheet_x": 7, + "sheet_y": 28, + "short_name": "knife_fork_plate", + "short_names": [ + "knife_fork_plate" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 117, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOTTLE WITH POPPING CORK", + "unified": "1F37E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f37e.png", + "sheet_x": 7, + "sheet_y": 29, + "short_name": "champagne", + "short_names": [ + "champagne" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 104, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POPCORN", + "unified": "1F37F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f37f.png", + "sheet_x": 7, + "sheet_y": 30, + "short_name": "popcorn", + "short_names": [ + "popcorn" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 59, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RIBBON", + "unified": "1F380", + "non_qualified": null, + "docomo": "E684", + "au": "E59F", + "softbank": "E314", + "google": "FE50F", + "image": "1f380.png", + "sheet_x": 7, + "sheet_y": 31, + "short_name": "ribbon", + "short_names": [ + "ribbon" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 17, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WRAPPED PRESENT", + "unified": "1F381", + "non_qualified": null, + "docomo": "E685", + "au": "E4CF", + "softbank": "E112", + "google": "FE510", + "image": "1f381.png", + "sheet_x": 7, + "sheet_y": 32, + "short_name": "gift", + "short_names": [ + "gift" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 18, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BIRTHDAY CAKE", + "unified": "1F382", + "non_qualified": null, + "docomo": "E686", + "au": "E5A0", + "softbank": "E34B", + "google": "FE511", + "image": "1f382.png", + "sheet_x": 7, + "sheet_y": 33, + "short_name": "birthday", + "short_names": [ + "birthday" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 90, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "JACK-O-LANTERN", + "unified": "1F383", + "non_qualified": null, + "docomo": null, + "au": "EAEE", + "softbank": "E445", + "google": "FE51F", + "image": "1f383.png", + "sheet_x": 7, + "sheet_y": 34, + "short_name": "jack_o_lantern", + "short_names": [ + "jack_o_lantern" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHRISTMAS TREE", + "unified": "1F384", + "non_qualified": null, + "docomo": "E6A4", + "au": "E4C9", + "softbank": "E033", + "google": "FE512", + "image": "1f384.png", + "sheet_x": 7, + "sheet_y": 35, + "short_name": "christmas_tree", + "short_names": [ + "christmas_tree" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FATHER CHRISTMAS", + "unified": "1F385", + "non_qualified": null, + "docomo": null, + "au": "EAF0", + "softbank": "E448", + "google": "FE513", + "image": "1f385.png", + "sheet_x": 7, + "sheet_y": 36, + "short_name": "santa", + "short_names": [ + "santa" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 177, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F385-1F3FB", + "non_qualified": null, + "image": "1f385-1f3fb.png", + "sheet_x": 7, + "sheet_y": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F385-1F3FC", + "non_qualified": null, + "image": "1f385-1f3fc.png", + "sheet_x": 7, + "sheet_y": 38, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F385-1F3FD", + "non_qualified": null, + "image": "1f385-1f3fd.png", + "sheet_x": 7, + "sheet_y": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F385-1F3FE", + "non_qualified": null, + "image": "1f385-1f3fe.png", + "sheet_x": 7, + "sheet_y": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F385-1F3FF", + "non_qualified": null, + "image": "1f385-1f3ff.png", + "sheet_x": 7, + "sheet_y": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FIREWORKS", + "unified": "1F386", + "non_qualified": null, + "docomo": null, + "au": "E5CC", + "softbank": "E117", + "google": "FE515", + "image": "1f386.png", + "sheet_x": 7, + "sheet_y": 42, + "short_name": "fireworks", + "short_names": [ + "fireworks" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FIREWORK SPARKLER", + "unified": "1F387", + "non_qualified": null, + "docomo": null, + "au": "EAEB", + "softbank": "E440", + "google": "FE51D", + "image": "1f387.png", + "sheet_x": 7, + "sheet_y": 43, + "short_name": "sparkler", + "short_names": [ + "sparkler" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BALLOON", + "unified": "1F388", + "non_qualified": null, + "docomo": null, + "au": "EA9B", + "softbank": "E310", + "google": "FE516", + "image": "1f388.png", + "sheet_x": 7, + "sheet_y": 44, + "short_name": "balloon", + "short_names": [ + "balloon" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PARTY POPPER", + "unified": "1F389", + "non_qualified": null, + "docomo": null, + "au": "EA9C", + "softbank": "E312", + "google": "FE517", + "image": "1f389.png", + "sheet_x": 7, + "sheet_y": 45, + "short_name": "tada", + "short_names": [ + "tada" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CONFETTI BALL", + "unified": "1F38A", + "non_qualified": null, + "docomo": null, + "au": "E46F", + "softbank": null, + "google": "FE520", + "image": "1f38a.png", + "sheet_x": 7, + "sheet_y": 46, + "short_name": "confetti_ball", + "short_names": [ + "confetti_ball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TANABATA TREE", + "unified": "1F38B", + "non_qualified": null, + "docomo": null, + "au": "EB3D", + "softbank": null, + "google": "FE521", + "image": "1f38b.png", + "sheet_x": 7, + "sheet_y": 47, + "short_name": "tanabata_tree", + "short_names": [ + "tanabata_tree" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CROSSED FLAGS", + "unified": "1F38C", + "non_qualified": null, + "docomo": null, + "au": "E5D9", + "softbank": "E143", + "google": "FE514", + "image": "1f38c.png", + "sheet_x": 7, + "sheet_y": 48, + "short_name": "crossed_flags", + "short_names": [ + "crossed_flags" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PINE DECORATION", + "unified": "1F38D", + "non_qualified": null, + "docomo": null, + "au": "EAE3", + "softbank": "E436", + "google": "FE518", + "image": "1f38d.png", + "sheet_x": 7, + "sheet_y": 49, + "short_name": "bamboo", + "short_names": [ + "bamboo" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "JAPANESE DOLLS", + "unified": "1F38E", + "non_qualified": null, + "docomo": null, + "au": "EAE4", + "softbank": "E438", + "google": "FE519", + "image": "1f38e.png", + "sheet_x": 7, + "sheet_y": 50, + "short_name": "dolls", + "short_names": [ + "dolls" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CARP STREAMER", + "unified": "1F38F", + "non_qualified": null, + "docomo": null, + "au": "EAE7", + "softbank": "E43B", + "google": "FE51C", + "image": "1f38f.png", + "sheet_x": 7, + "sheet_y": 51, + "short_name": "flags", + "short_names": [ + "flags" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WIND CHIME", + "unified": "1F390", + "non_qualified": null, + "docomo": null, + "au": "EAED", + "softbank": "E442", + "google": "FE51E", + "image": "1f390.png", + "sheet_x": 7, + "sheet_y": 52, + "short_name": "wind_chime", + "short_names": [ + "wind_chime" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOON VIEWING CEREMONY", + "unified": "1F391", + "non_qualified": null, + "docomo": null, + "au": "EAEF", + "softbank": "E446", + "google": "FE017", + "image": "1f391.png", + "sheet_x": 7, + "sheet_y": 53, + "short_name": "rice_scene", + "short_names": [ + "rice_scene" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 15, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SCHOOL SATCHEL", + "unified": "1F392", + "non_qualified": null, + "docomo": null, + "au": "EAE6", + "softbank": "E43A", + "google": "FE51B", + "image": "1f392.png", + "sheet_x": 7, + "sheet_y": 54, + "short_name": "school_satchel", + "short_names": [ + "school_satchel" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GRADUATION CAP", + "unified": "1F393", + "non_qualified": null, + "docomo": null, + "au": "EAE5", + "softbank": "E439", + "google": "FE51A", + "image": "1f393.png", + "sheet_x": 7, + "sheet_y": 55, + "short_name": "mortar_board", + "short_names": [ + "mortar_board" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F396-FE0F", + "non_qualified": "1F396", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f396-fe0f.png", + "sheet_x": 7, + "sheet_y": 56, + "short_name": "medal", + "short_names": [ + "medal" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F397-FE0F", + "non_qualified": "1F397", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f397-fe0f.png", + "sheet_x": 8, + "sheet_y": 0, + "short_name": "reminder_ribbon", + "short_names": [ + "reminder_ribbon" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F399-FE0F", + "non_qualified": "1F399", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f399-fe0f.png", + "sheet_x": 8, + "sheet_y": 1, + "short_name": "studio_microphone", + "short_names": [ + "studio_microphone" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F39A-FE0F", + "non_qualified": "1F39A", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f39a-fe0f.png", + "sheet_x": 8, + "sheet_y": 2, + "short_name": "level_slider", + "short_names": [ + "level_slider" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 57, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F39B-FE0F", + "non_qualified": "1F39B", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f39b-fe0f.png", + "sheet_x": 8, + "sheet_y": 3, + "short_name": "control_knobs", + "short_names": [ + "control_knobs" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 58, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F39E-FE0F", + "non_qualified": "1F39E", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f39e-fe0f.png", + "sheet_x": 8, + "sheet_y": 4, + "short_name": "film_frames", + "short_names": [ + "film_frames" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 89, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F39F-FE0F", + "non_qualified": "1F39F", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f39f-fe0f.png", + "sheet_x": 8, + "sheet_y": 5, + "short_name": "admission_tickets", + "short_names": [ + "admission_tickets" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CAROUSEL HORSE", + "unified": "1F3A0", + "non_qualified": null, + "docomo": "E679", + "au": null, + "softbank": null, + "google": "FE7FC", + "image": "1f3a0.png", + "sheet_x": 8, + "sheet_y": 6, + "short_name": "carousel_horse", + "short_names": [ + "carousel_horse" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 58, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FERRIS WHEEL", + "unified": "1F3A1", + "non_qualified": null, + "docomo": null, + "au": "E46D", + "softbank": "E124", + "google": "FE7FD", + "image": "1f3a1.png", + "sheet_x": 8, + "sheet_y": 7, + "short_name": "ferris_wheel", + "short_names": [ + "ferris_wheel" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 59, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ROLLER COASTER", + "unified": "1F3A2", + "non_qualified": null, + "docomo": null, + "au": "EAE2", + "softbank": "E433", + "google": "FE7FE", + "image": "1f3a2.png", + "sheet_x": 8, + "sheet_y": 8, + "short_name": "roller_coaster", + "short_names": [ + "roller_coaster" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 60, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FISHING POLE AND FISH", + "unified": "1F3A3", + "non_qualified": null, + "docomo": "E751", + "au": "EB42", + "softbank": null, + "google": "FE7FF", + "image": "1f3a3.png", + "sheet_x": 8, + "sheet_y": 9, + "short_name": "fishing_pole_and_fish", + "short_names": [ + "fishing_pole_and_fish" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MICROPHONE", + "unified": "1F3A4", + "non_qualified": null, + "docomo": "E676", + "au": "E503", + "softbank": "E03C", + "google": "FE800", + "image": "1f3a4.png", + "sheet_x": 8, + "sheet_y": 10, + "short_name": "microphone", + "short_names": [ + "microphone" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 59, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOVIE CAMERA", + "unified": "1F3A5", + "non_qualified": null, + "docomo": "E677", + "au": "E517", + "softbank": "E03D", + "google": "FE801", + "image": "1f3a5.png", + "sheet_x": 8, + "sheet_y": 11, + "short_name": "movie_camera", + "short_names": [ + "movie_camera" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 88, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CINEMA", + "unified": "1F3A6", + "non_qualified": null, + "docomo": "E677", + "au": "E517", + "softbank": "E507", + "google": "FE802", + "image": "1f3a6.png", + "sheet_x": 8, + "sheet_y": 12, + "short_name": "cinema", + "short_names": [ + "cinema" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 91, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEADPHONE", + "unified": "1F3A7", + "non_qualified": null, + "docomo": "E67A", + "au": "E508", + "softbank": "E30A", + "google": "FE803", + "image": "1f3a7.png", + "sheet_x": 8, + "sheet_y": 13, + "short_name": "headphones", + "short_names": [ + "headphones" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 60, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ARTIST PALETTE", + "unified": "1F3A8", + "non_qualified": null, + "docomo": "E67B", + "au": "E59C", + "softbank": "E502", + "google": "FE804", + "image": "1f3a8.png", + "sheet_x": 8, + "sheet_y": 14, + "short_name": "art", + "short_names": [ + "art" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 77, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TOP HAT", + "unified": "1F3A9", + "non_qualified": null, + "docomo": "E67C", + "au": "EAF5", + "softbank": "E503", + "google": "FE805", + "image": "1f3a9.png", + "sheet_x": 8, + "sheet_y": 15, + "short_name": "tophat", + "short_names": [ + "tophat" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CIRCUS TENT", + "unified": "1F3AA", + "non_qualified": null, + "docomo": "E67D", + "au": "E59E", + "softbank": null, + "google": "FE806", + "image": "1f3aa.png", + "sheet_x": 8, + "sheet_y": 16, + "short_name": "circus_tent", + "short_names": [ + "circus_tent" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 62, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TICKET", + "unified": "1F3AB", + "non_qualified": null, + "docomo": "E67E", + "au": "E49E", + "softbank": "E125", + "google": "FE807", + "image": "1f3ab.png", + "sheet_x": 8, + "sheet_y": 17, + "short_name": "ticket", + "short_names": [ + "ticket" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLAPPER BOARD", + "unified": "1F3AC", + "non_qualified": null, + "docomo": "E6AC", + "au": "E4BE", + "softbank": "E324", + "google": "FE808", + "image": "1f3ac.png", + "sheet_x": 8, + "sheet_y": 18, + "short_name": "clapper", + "short_names": [ + "clapper" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 91, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PERFORMING ARTS", + "unified": "1F3AD", + "non_qualified": null, + "docomo": null, + "au": "E59D", + "softbank": null, + "google": "FE809", + "image": "1f3ad.png", + "sheet_x": 8, + "sheet_y": 19, + "short_name": "performing_arts", + "short_names": [ + "performing_arts" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 75, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "VIDEO GAME", + "unified": "1F3AE", + "non_qualified": null, + "docomo": "E68B", + "au": "E4C6", + "softbank": null, + "google": "FE80A", + "image": "1f3ae.png", + "sheet_x": 8, + "sheet_y": 20, + "short_name": "video_game", + "short_names": [ + "video_game" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 61, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DIRECT HIT", + "unified": "1F3AF", + "non_qualified": null, + "docomo": null, + "au": "E4C5", + "softbank": "E130", + "google": "FE80C", + "image": "1f3af.png", + "sheet_x": 8, + "sheet_y": 21, + "short_name": "dart", + "short_names": [ + "dart" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLOT MACHINE", + "unified": "1F3B0", + "non_qualified": null, + "docomo": null, + "au": "E46E", + "softbank": "E133", + "google": "FE80D", + "image": "1f3b0.png", + "sheet_x": 8, + "sheet_y": 22, + "short_name": "slot_machine", + "short_names": [ + "slot_machine" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 63, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BILLIARDS", + "unified": "1F3B1", + "non_qualified": null, + "docomo": null, + "au": "EADD", + "softbank": "E42C", + "google": "FE80E", + "image": "1f3b1.png", + "sheet_x": 8, + "sheet_y": 23, + "short_name": "8ball", + "short_names": [ + "8ball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 58, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GAME DIE", + "unified": "1F3B2", + "non_qualified": null, + "docomo": null, + "au": "E4C8", + "softbank": null, + "google": "FE80F", + "image": "1f3b2.png", + "sheet_x": 8, + "sheet_y": 24, + "short_name": "game_die", + "short_names": [ + "game_die" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 64, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOWLING", + "unified": "1F3B3", + "non_qualified": null, + "docomo": null, + "au": "EB43", + "softbank": null, + "google": "FE810", + "image": "1f3b3.png", + "sheet_x": 8, + "sheet_y": 25, + "short_name": "bowling", + "short_names": [ + "bowling" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FLOWER PLAYING CARDS", + "unified": "1F3B4", + "non_qualified": null, + "docomo": null, + "au": "EB6E", + "softbank": null, + "google": "FE811", + "image": "1f3b4.png", + "sheet_x": 8, + "sheet_y": 26, + "short_name": "flower_playing_cards", + "short_names": [ + "flower_playing_cards" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 74, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MUSICAL NOTE", + "unified": "1F3B5", + "non_qualified": null, + "docomo": "E6F6", + "au": "E5BE", + "softbank": "E03E", + "google": "FE813", + "image": "1f3b5.png", + "sheet_x": 8, + "sheet_y": 27, + "short_name": "musical_note", + "short_names": [ + "musical_note" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MULTIPLE MUSICAL NOTES", + "unified": "1F3B6", + "non_qualified": null, + "docomo": "E6FF", + "au": "E505", + "softbank": "E326", + "google": "FE814", + "image": "1f3b6.png", + "sheet_x": 8, + "sheet_y": 28, + "short_name": "notes", + "short_names": [ + "notes" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SAXOPHONE", + "unified": "1F3B7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E040", + "google": "FE815", + "image": "1f3b7.png", + "sheet_x": 8, + "sheet_y": 29, + "short_name": "saxophone", + "short_names": [ + "saxophone" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 62, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GUITAR", + "unified": "1F3B8", + "non_qualified": null, + "docomo": null, + "au": "E506", + "softbank": "E041", + "google": "FE816", + "image": "1f3b8.png", + "sheet_x": 8, + "sheet_y": 30, + "short_name": "guitar", + "short_names": [ + "guitar" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 63, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MUSICAL KEYBOARD", + "unified": "1F3B9", + "non_qualified": null, + "docomo": null, + "au": "EB40", + "softbank": null, + "google": "FE817", + "image": "1f3b9.png", + "sheet_x": 8, + "sheet_y": 31, + "short_name": "musical_keyboard", + "short_names": [ + "musical_keyboard" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 64, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TRUMPET", + "unified": "1F3BA", + "non_qualified": null, + "docomo": null, + "au": "EADC", + "softbank": "E042", + "google": "FE818", + "image": "1f3ba.png", + "sheet_x": 8, + "sheet_y": 32, + "short_name": "trumpet", + "short_names": [ + "trumpet" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 65, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "VIOLIN", + "unified": "1F3BB", + "non_qualified": null, + "docomo": null, + "au": "E507", + "softbank": null, + "google": "FE819", + "image": "1f3bb.png", + "sheet_x": 8, + "sheet_y": 33, + "short_name": "violin", + "short_names": [ + "violin" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 66, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MUSICAL SCORE", + "unified": "1F3BC", + "non_qualified": null, + "docomo": "E6FF", + "au": "EACC", + "softbank": null, + "google": "FE81A", + "image": "1f3bc.png", + "sheet_x": 8, + "sheet_y": 34, + "short_name": "musical_score", + "short_names": [ + "musical_score" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RUNNING SHIRT WITH SASH", + "unified": "1F3BD", + "non_qualified": null, + "docomo": "E652", + "au": null, + "softbank": null, + "google": "FE7D0", + "image": "1f3bd.png", + "sheet_x": 8, + "sheet_y": 35, + "short_name": "running_shirt_with_sash", + "short_names": [ + "running_shirt_with_sash" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TENNIS RACQUET AND BALL", + "unified": "1F3BE", + "non_qualified": null, + "docomo": "E655", + "au": "E4B7", + "softbank": "E015", + "google": "FE7D3", + "image": "1f3be.png", + "sheet_x": 8, + "sheet_y": 36, + "short_name": "tennis", + "short_names": [ + "tennis" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SKI AND SKI BOOT", + "unified": "1F3BF", + "non_qualified": null, + "docomo": "E657", + "au": "EAAC", + "softbank": "E013", + "google": "FE7D5", + "image": "1f3bf.png", + "sheet_x": 8, + "sheet_y": 37, + "short_name": "ski", + "short_names": [ + "ski" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BASKETBALL AND HOOP", + "unified": "1F3C0", + "non_qualified": null, + "docomo": "E658", + "au": "E59A", + "softbank": "E42A", + "google": "FE7D6", + "image": "1f3c0.png", + "sheet_x": 8, + "sheet_y": 38, + "short_name": "basketball", + "short_names": [ + "basketball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHEQUERED FLAG", + "unified": "1F3C1", + "non_qualified": null, + "docomo": "E659", + "au": "E4B9", + "softbank": "E132", + "google": "FE7D7", + "image": "1f3c1.png", + "sheet_x": 8, + "sheet_y": 39, + "short_name": "checkered_flag", + "short_names": [ + "checkered_flag" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SNOWBOARDER", + "unified": "1F3C2", + "non_qualified": null, + "docomo": "E712", + "au": "E4B8", + "softbank": null, + "google": "FE7D8", + "image": "1f3c2.png", + "sheet_x": 8, + "sheet_y": 40, + "short_name": "snowboarder", + "short_names": [ + "snowboarder" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 248, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F3C2-1F3FB", + "non_qualified": null, + "image": "1f3c2-1f3fb.png", + "sheet_x": 8, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3C2-1F3FC", + "non_qualified": null, + "image": "1f3c2-1f3fc.png", + "sheet_x": 8, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3C2-1F3FD", + "non_qualified": null, + "image": "1f3c2-1f3fd.png", + "sheet_x": 8, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3C2-1F3FE", + "non_qualified": null, + "image": "1f3c2-1f3fe.png", + "sheet_x": 8, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3C2-1F3FF", + "non_qualified": null, + "image": "1f3c2-1f3ff.png", + "sheet_x": 8, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F3C3-200D-2640-FE0F", + "non_qualified": "1F3C3-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3c3-200d-2640-fe0f.png", + "sheet_x": 8, + "sheet_y": 46, + "short_name": "woman-running", + "short_names": [ + "woman-running" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 232, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F3C3-1F3FB-200D-2640-FE0F", + "non_qualified": "1F3C3-1F3FB-200D-2640", + "image": "1f3c3-1f3fb-200d-2640-fe0f.png", + "sheet_x": 8, + "sheet_y": 47, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3C3-1F3FC-200D-2640-FE0F", + "non_qualified": "1F3C3-1F3FC-200D-2640", + "image": "1f3c3-1f3fc-200d-2640-fe0f.png", + "sheet_x": 8, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3C3-1F3FD-200D-2640-FE0F", + "non_qualified": "1F3C3-1F3FD-200D-2640", + "image": "1f3c3-1f3fd-200d-2640-fe0f.png", + "sheet_x": 8, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3C3-1F3FE-200D-2640-FE0F", + "non_qualified": "1F3C3-1F3FE-200D-2640", + "image": "1f3c3-1f3fe-200d-2640-fe0f.png", + "sheet_x": 8, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3C3-1F3FF-200D-2640-FE0F", + "non_qualified": "1F3C3-1F3FF-200D-2640", + "image": "1f3c3-1f3ff-200d-2640-fe0f.png", + "sheet_x": 8, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F3C3-200D-2642-FE0F", + "non_qualified": "1F3C3-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3c3-200d-2642-fe0f.png", + "sheet_x": 8, + "sheet_y": 52, + "short_name": "man-running", + "short_names": [ + "man-running" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 231, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F3C3-1F3FB-200D-2642-FE0F", + "non_qualified": "1F3C3-1F3FB-200D-2642", + "image": "1f3c3-1f3fb-200d-2642-fe0f.png", + "sheet_x": 8, + "sheet_y": 53, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3C3-1F3FC-200D-2642-FE0F", + "non_qualified": "1F3C3-1F3FC-200D-2642", + "image": "1f3c3-1f3fc-200d-2642-fe0f.png", + "sheet_x": 8, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3C3-1F3FD-200D-2642-FE0F", + "non_qualified": "1F3C3-1F3FD-200D-2642", + "image": "1f3c3-1f3fd-200d-2642-fe0f.png", + "sheet_x": 8, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3C3-1F3FE-200D-2642-FE0F", + "non_qualified": "1F3C3-1F3FE-200D-2642", + "image": "1f3c3-1f3fe-200d-2642-fe0f.png", + "sheet_x": 8, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3C3-1F3FF-200D-2642-FE0F", + "non_qualified": "1F3C3-1F3FF-200D-2642", + "image": "1f3c3-1f3ff-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F3C3" + }, + { + "name": "RUNNER", + "unified": "1F3C3", + "non_qualified": null, + "docomo": "E733", + "au": "E46B", + "softbank": "E115", + "google": "FE7D9", + "image": "1f3c3.png", + "sheet_x": 9, + "sheet_y": 1, + "short_name": "runner", + "short_names": [ + "runner", + "running" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 230, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F3C3-1F3FB", + "non_qualified": null, + "image": "1f3c3-1f3fb.png", + "sheet_x": 9, + "sheet_y": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F3C3-1F3FC", + "non_qualified": null, + "image": "1f3c3-1f3fc.png", + "sheet_x": 9, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F3C3-1F3FD", + "non_qualified": null, + "image": "1f3c3-1f3fd.png", + "sheet_x": 9, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F3C3-1F3FE", + "non_qualified": null, + "image": "1f3c3-1f3fe.png", + "sheet_x": 9, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F3C3-1F3FF", + "non_qualified": null, + "image": "1f3c3-1f3ff.png", + "sheet_x": 9, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F3C3-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F3C4-200D-2640-FE0F", + "non_qualified": "1F3C4-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3c4-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 7, + "short_name": "woman-surfing", + "short_names": [ + "woman-surfing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 254, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F3C4-1F3FB-200D-2640-FE0F", + "non_qualified": "1F3C4-1F3FB-200D-2640", + "image": "1f3c4-1f3fb-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 8, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3C4-1F3FC-200D-2640-FE0F", + "non_qualified": "1F3C4-1F3FC-200D-2640", + "image": "1f3c4-1f3fc-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3C4-1F3FD-200D-2640-FE0F", + "non_qualified": "1F3C4-1F3FD-200D-2640", + "image": "1f3c4-1f3fd-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3C4-1F3FE-200D-2640-FE0F", + "non_qualified": "1F3C4-1F3FE-200D-2640", + "image": "1f3c4-1f3fe-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3C4-1F3FF-200D-2640-FE0F", + "non_qualified": "1F3C4-1F3FF-200D-2640", + "image": "1f3c4-1f3ff-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F3C4-200D-2642-FE0F", + "non_qualified": "1F3C4-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3c4-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 13, + "short_name": "man-surfing", + "short_names": [ + "man-surfing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 253, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F3C4-1F3FB-200D-2642-FE0F", + "non_qualified": "1F3C4-1F3FB-200D-2642", + "image": "1f3c4-1f3fb-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 14, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3C4-1F3FC-200D-2642-FE0F", + "non_qualified": "1F3C4-1F3FC-200D-2642", + "image": "1f3c4-1f3fc-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3C4-1F3FD-200D-2642-FE0F", + "non_qualified": "1F3C4-1F3FD-200D-2642", + "image": "1f3c4-1f3fd-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3C4-1F3FE-200D-2642-FE0F", + "non_qualified": "1F3C4-1F3FE-200D-2642", + "image": "1f3c4-1f3fe-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3C4-1F3FF-200D-2642-FE0F", + "non_qualified": "1F3C4-1F3FF-200D-2642", + "image": "1f3c4-1f3ff-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F3C4" + }, + { + "name": "SURFER", + "unified": "1F3C4", + "non_qualified": null, + "docomo": "E712", + "au": "EB41", + "softbank": "E017", + "google": "FE7DA", + "image": "1f3c4.png", + "sheet_x": 9, + "sheet_y": 19, + "short_name": "surfer", + "short_names": [ + "surfer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 252, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F3C4-1F3FB", + "non_qualified": null, + "image": "1f3c4-1f3fb.png", + "sheet_x": 9, + "sheet_y": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F3C4-1F3FC", + "non_qualified": null, + "image": "1f3c4-1f3fc.png", + "sheet_x": 9, + "sheet_y": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F3C4-1F3FD", + "non_qualified": null, + "image": "1f3c4-1f3fd.png", + "sheet_x": 9, + "sheet_y": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F3C4-1F3FE", + "non_qualified": null, + "image": "1f3c4-1f3fe.png", + "sheet_x": 9, + "sheet_y": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F3C4-1F3FF", + "non_qualified": null, + "image": "1f3c4-1f3ff.png", + "sheet_x": 9, + "sheet_y": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F3C4-200D-2642-FE0F" + }, + { + "name": "SPORTS MEDAL", + "unified": "1F3C5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3c5.png", + "sheet_x": 9, + "sheet_y": 25, + "short_name": "sports_medal", + "short_names": [ + "sports_medal" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TROPHY", + "unified": "1F3C6", + "non_qualified": null, + "docomo": null, + "au": "E5D3", + "softbank": "E131", + "google": "FE7DB", + "image": "1f3c6.png", + "sheet_x": 9, + "sheet_y": 26, + "short_name": "trophy", + "short_names": [ + "trophy" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HORSE RACING", + "unified": "1F3C7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3c7.png", + "sheet_x": 9, + "sheet_y": 27, + "short_name": "horse_racing", + "short_names": [ + "horse_racing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 246, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F3C7-1F3FB", + "non_qualified": null, + "image": "1f3c7-1f3fb.png", + "sheet_x": 9, + "sheet_y": 28, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3C7-1F3FC", + "non_qualified": null, + "image": "1f3c7-1f3fc.png", + "sheet_x": 9, + "sheet_y": 29, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3C7-1F3FD", + "non_qualified": null, + "image": "1f3c7-1f3fd.png", + "sheet_x": 9, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3C7-1F3FE", + "non_qualified": null, + "image": "1f3c7-1f3fe.png", + "sheet_x": 9, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3C7-1F3FF", + "non_qualified": null, + "image": "1f3c7-1f3ff.png", + "sheet_x": 9, + "sheet_y": 32, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "AMERICAN FOOTBALL", + "unified": "1F3C8", + "non_qualified": null, + "docomo": null, + "au": "E4BB", + "softbank": "E42B", + "google": "FE7DD", + "image": "1f3c8.png", + "sheet_x": 9, + "sheet_y": 33, + "short_name": "football", + "short_names": [ + "football" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RUGBY FOOTBALL", + "unified": "1F3C9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3c9.png", + "sheet_x": 9, + "sheet_y": 34, + "short_name": "rugby_football", + "short_names": [ + "rugby_football" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3CA-200D-2640-FE0F", + "non_qualified": "1F3CA-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3ca-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 35, + "short_name": "woman-swimming", + "short_names": [ + "woman-swimming" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 260, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F3CA-1F3FB-200D-2640-FE0F", + "non_qualified": "1F3CA-1F3FB-200D-2640", + "image": "1f3ca-1f3fb-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3CA-1F3FC-200D-2640-FE0F", + "non_qualified": "1F3CA-1F3FC-200D-2640", + "image": "1f3ca-1f3fc-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3CA-1F3FD-200D-2640-FE0F", + "non_qualified": "1F3CA-1F3FD-200D-2640", + "image": "1f3ca-1f3fd-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3CA-1F3FE-200D-2640-FE0F", + "non_qualified": "1F3CA-1F3FE-200D-2640", + "image": "1f3ca-1f3fe-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3CA-1F3FF-200D-2640-FE0F", + "non_qualified": "1F3CA-1F3FF-200D-2640", + "image": "1f3ca-1f3ff-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F3CA-200D-2642-FE0F", + "non_qualified": "1F3CA-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3ca-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 41, + "short_name": "man-swimming", + "short_names": [ + "man-swimming" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 259, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F3CA-1F3FB-200D-2642-FE0F", + "non_qualified": "1F3CA-1F3FB-200D-2642", + "image": "1f3ca-1f3fb-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3CA-1F3FC-200D-2642-FE0F", + "non_qualified": "1F3CA-1F3FC-200D-2642", + "image": "1f3ca-1f3fc-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3CA-1F3FD-200D-2642-FE0F", + "non_qualified": "1F3CA-1F3FD-200D-2642", + "image": "1f3ca-1f3fd-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3CA-1F3FE-200D-2642-FE0F", + "non_qualified": "1F3CA-1F3FE-200D-2642", + "image": "1f3ca-1f3fe-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3CA-1F3FF-200D-2642-FE0F", + "non_qualified": "1F3CA-1F3FF-200D-2642", + "image": "1f3ca-1f3ff-200d-2642-fe0f.png", + "sheet_x": 9, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F3CA" + }, + { + "name": "SWIMMER", + "unified": "1F3CA", + "non_qualified": null, + "docomo": null, + "au": "EADE", + "softbank": "E42D", + "google": "FE7DE", + "image": "1f3ca.png", + "sheet_x": 9, + "sheet_y": 47, + "short_name": "swimmer", + "short_names": [ + "swimmer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 258, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F3CA-1F3FB", + "non_qualified": null, + "image": "1f3ca-1f3fb.png", + "sheet_x": 9, + "sheet_y": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F3CA-1F3FC", + "non_qualified": null, + "image": "1f3ca-1f3fc.png", + "sheet_x": 9, + "sheet_y": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F3CA-1F3FD", + "non_qualified": null, + "image": "1f3ca-1f3fd.png", + "sheet_x": 9, + "sheet_y": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F3CA-1F3FE", + "non_qualified": null, + "image": "1f3ca-1f3fe.png", + "sheet_x": 9, + "sheet_y": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F3CA-1F3FF", + "non_qualified": null, + "image": "1f3ca-1f3ff.png", + "sheet_x": 9, + "sheet_y": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F3CA-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F3CB-FE0F-200D-2640-FE0F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3cb-fe0f-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 53, + "short_name": "woman-lifting-weights", + "short_names": [ + "woman-lifting-weights" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 266, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F3CB-1F3FB-200D-2640-FE0F", + "non_qualified": "1F3CB-1F3FB-200D-2640", + "image": "1f3cb-1f3fb-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3CB-1F3FC-200D-2640-FE0F", + "non_qualified": "1F3CB-1F3FC-200D-2640", + "image": "1f3cb-1f3fc-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3CB-1F3FD-200D-2640-FE0F", + "non_qualified": "1F3CB-1F3FD-200D-2640", + "image": "1f3cb-1f3fd-200d-2640-fe0f.png", + "sheet_x": 9, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3CB-1F3FE-200D-2640-FE0F", + "non_qualified": "1F3CB-1F3FE-200D-2640", + "image": "1f3cb-1f3fe-200d-2640-fe0f.png", + "sheet_x": 10, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3CB-1F3FF-200D-2640-FE0F", + "non_qualified": "1F3CB-1F3FF-200D-2640", + "image": "1f3cb-1f3ff-200d-2640-fe0f.png", + "sheet_x": 10, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F3CB-FE0F-200D-2642-FE0F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3cb-fe0f-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 2, + "short_name": "man-lifting-weights", + "short_names": [ + "man-lifting-weights" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 265, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F3CB-1F3FB-200D-2642-FE0F", + "non_qualified": "1F3CB-1F3FB-200D-2642", + "image": "1f3cb-1f3fb-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3CB-1F3FC-200D-2642-FE0F", + "non_qualified": "1F3CB-1F3FC-200D-2642", + "image": "1f3cb-1f3fc-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 4, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3CB-1F3FD-200D-2642-FE0F", + "non_qualified": "1F3CB-1F3FD-200D-2642", + "image": "1f3cb-1f3fd-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 5, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3CB-1F3FE-200D-2642-FE0F", + "non_qualified": "1F3CB-1F3FE-200D-2642", + "image": "1f3cb-1f3fe-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 6, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3CB-1F3FF-200D-2642-FE0F", + "non_qualified": "1F3CB-1F3FF-200D-2642", + "image": "1f3cb-1f3ff-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 7, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F3CB-FE0F" + }, + { + "name": null, + "unified": "1F3CB-FE0F", + "non_qualified": "1F3CB", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3cb-fe0f.png", + "sheet_x": 10, + "sheet_y": 8, + "short_name": "weight_lifter", + "short_names": [ + "weight_lifter" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 264, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F3CB-1F3FB", + "non_qualified": null, + "image": "1f3cb-1f3fb.png", + "sheet_x": 10, + "sheet_y": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F3CB-1F3FC", + "non_qualified": null, + "image": "1f3cb-1f3fc.png", + "sheet_x": 10, + "sheet_y": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F3CB-1F3FD", + "non_qualified": null, + "image": "1f3cb-1f3fd.png", + "sheet_x": 10, + "sheet_y": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F3CB-1F3FE", + "non_qualified": null, + "image": "1f3cb-1f3fe.png", + "sheet_x": 10, + "sheet_y": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F3CB-1F3FF", + "non_qualified": null, + "image": "1f3cb-1f3ff.png", + "sheet_x": 10, + "sheet_y": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F3CB-FE0F-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F3CC-FE0F-200D-2640-FE0F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3cc-fe0f-200d-2640-fe0f.png", + "sheet_x": 10, + "sheet_y": 14, + "short_name": "woman-golfing", + "short_names": [ + "woman-golfing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 251, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F3CC-1F3FB-200D-2640-FE0F", + "non_qualified": "1F3CC-1F3FB-200D-2640", + "image": "1f3cc-1f3fb-200d-2640-fe0f.png", + "sheet_x": 10, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3CC-1F3FC-200D-2640-FE0F", + "non_qualified": "1F3CC-1F3FC-200D-2640", + "image": "1f3cc-1f3fc-200d-2640-fe0f.png", + "sheet_x": 10, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3CC-1F3FD-200D-2640-FE0F", + "non_qualified": "1F3CC-1F3FD-200D-2640", + "image": "1f3cc-1f3fd-200d-2640-fe0f.png", + "sheet_x": 10, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3CC-1F3FE-200D-2640-FE0F", + "non_qualified": "1F3CC-1F3FE-200D-2640", + "image": "1f3cc-1f3fe-200d-2640-fe0f.png", + "sheet_x": 10, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3CC-1F3FF-200D-2640-FE0F", + "non_qualified": "1F3CC-1F3FF-200D-2640", + "image": "1f3cc-1f3ff-200d-2640-fe0f.png", + "sheet_x": 10, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F3CC-FE0F-200D-2642-FE0F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3cc-fe0f-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 20, + "short_name": "man-golfing", + "short_names": [ + "man-golfing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 250, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F3CC-1F3FB-200D-2642-FE0F", + "non_qualified": "1F3CC-1F3FB-200D-2642", + "image": "1f3cc-1f3fb-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 21, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F3CC-1F3FC-200D-2642-FE0F", + "non_qualified": "1F3CC-1F3FC-200D-2642", + "image": "1f3cc-1f3fc-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 22, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F3CC-1F3FD-200D-2642-FE0F", + "non_qualified": "1F3CC-1F3FD-200D-2642", + "image": "1f3cc-1f3fd-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 23, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F3CC-1F3FE-200D-2642-FE0F", + "non_qualified": "1F3CC-1F3FE-200D-2642", + "image": "1f3cc-1f3fe-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F3CC-1F3FF-200D-2642-FE0F", + "non_qualified": "1F3CC-1F3FF-200D-2642", + "image": "1f3cc-1f3ff-200d-2642-fe0f.png", + "sheet_x": 10, + "sheet_y": 25, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F3CC-FE0F" + }, + { + "name": null, + "unified": "1F3CC-FE0F", + "non_qualified": "1F3CC", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3cc-fe0f.png", + "sheet_x": 10, + "sheet_y": 26, + "short_name": "golfer", + "short_names": [ + "golfer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 249, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F3CC-1F3FB", + "non_qualified": null, + "image": "1f3cc-1f3fb.png", + "sheet_x": 10, + "sheet_y": 27, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F3CC-1F3FC", + "non_qualified": null, + "image": "1f3cc-1f3fc.png", + "sheet_x": 10, + "sheet_y": 28, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F3CC-1F3FD", + "non_qualified": null, + "image": "1f3cc-1f3fd.png", + "sheet_x": 10, + "sheet_y": 29, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F3CC-1F3FE", + "non_qualified": null, + "image": "1f3cc-1f3fe.png", + "sheet_x": 10, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F3CC-1F3FF", + "non_qualified": null, + "image": "1f3cc-1f3ff.png", + "sheet_x": 10, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F3CC-FE0F-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F3CD-FE0F", + "non_qualified": "1F3CD", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3cd-fe0f.png", + "sheet_x": 10, + "sheet_y": 32, + "short_name": "racing_motorcycle", + "short_names": [ + "racing_motorcycle" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 92, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3CE-FE0F", + "non_qualified": "1F3CE", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3ce-fe0f.png", + "sheet_x": 10, + "sheet_y": 33, + "short_name": "racing_car", + "short_names": [ + "racing_car" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 91, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CRICKET BAT AND BALL", + "unified": "1F3CF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3cf.png", + "sheet_x": 10, + "sheet_y": 34, + "short_name": "cricket_bat_and_ball", + "short_names": [ + "cricket_bat_and_ball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 38, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "VOLLEYBALL", + "unified": "1F3D0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d0.png", + "sheet_x": 10, + "sheet_y": 35, + "short_name": "volleyball", + "short_names": [ + "volleyball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FIELD HOCKEY STICK AND BALL", + "unified": "1F3D1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d1.png", + "sheet_x": 10, + "sheet_y": 36, + "short_name": "field_hockey_stick_and_ball", + "short_names": [ + "field_hockey_stick_and_ball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ICE HOCKEY STICK AND PUCK", + "unified": "1F3D2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d2.png", + "sheet_x": 10, + "sheet_y": 37, + "short_name": "ice_hockey_stick_and_puck", + "short_names": [ + "ice_hockey_stick_and_puck" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TABLE TENNIS PADDLE AND BALL", + "unified": "1F3D3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d3.png", + "sheet_x": 10, + "sheet_y": 38, + "short_name": "table_tennis_paddle_and_ball", + "short_names": [ + "table_tennis_paddle_and_ball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3D4-FE0F", + "non_qualified": "1F3D4", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d4-fe0f.png", + "sheet_x": 10, + "sheet_y": 39, + "short_name": "snow_capped_mountain", + "short_names": [ + "snow_capped_mountain" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3D5-FE0F", + "non_qualified": "1F3D5", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d5-fe0f.png", + "sheet_x": 10, + "sheet_y": 40, + "short_name": "camping", + "short_names": [ + "camping" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3D6-FE0F", + "non_qualified": "1F3D6", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d6-fe0f.png", + "sheet_x": 10, + "sheet_y": 41, + "short_name": "beach_with_umbrella", + "short_names": [ + "beach_with_umbrella" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3D7-FE0F", + "non_qualified": "1F3D7", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d7-fe0f.png", + "sheet_x": 10, + "sheet_y": 42, + "short_name": "building_construction", + "short_names": [ + "building_construction" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3D8-FE0F", + "non_qualified": "1F3D8", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d8-fe0f.png", + "sheet_x": 10, + "sheet_y": 43, + "short_name": "house_buildings", + "short_names": [ + "house_buildings" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3D9-FE0F", + "non_qualified": "1F3D9", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3d9-fe0f.png", + "sheet_x": 10, + "sheet_y": 44, + "short_name": "cityscape", + "short_names": [ + "cityscape" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3DA-FE0F", + "non_qualified": "1F3DA", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3da-fe0f.png", + "sheet_x": 10, + "sheet_y": 45, + "short_name": "derelict_house_building", + "short_names": [ + "derelict_house_building" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3DB-FE0F", + "non_qualified": "1F3DB", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3db-fe0f.png", + "sheet_x": 10, + "sheet_y": 46, + "short_name": "classical_building", + "short_names": [ + "classical_building" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 18, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3DC-FE0F", + "non_qualified": "1F3DC", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3dc-fe0f.png", + "sheet_x": 10, + "sheet_y": 47, + "short_name": "desert", + "short_names": [ + "desert" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3DD-FE0F", + "non_qualified": "1F3DD", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3dd-fe0f.png", + "sheet_x": 10, + "sheet_y": 48, + "short_name": "desert_island", + "short_names": [ + "desert_island" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 15, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3DE-FE0F", + "non_qualified": "1F3DE", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3de-fe0f.png", + "sheet_x": 10, + "sheet_y": 49, + "short_name": "national_park", + "short_names": [ + "national_park" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 16, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3DF-FE0F", + "non_qualified": "1F3DF", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3df-fe0f.png", + "sheet_x": 10, + "sheet_y": 50, + "short_name": "stadium", + "short_names": [ + "stadium" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 17, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOUSE BUILDING", + "unified": "1F3E0", + "non_qualified": null, + "docomo": "E663", + "au": "E4AB", + "softbank": "E036", + "google": "FE4B0", + "image": "1f3e0.png", + "sheet_x": 10, + "sheet_y": 51, + "short_name": "house", + "short_names": [ + "house" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOUSE WITH GARDEN", + "unified": "1F3E1", + "non_qualified": null, + "docomo": "E663", + "au": "EB09", + "softbank": null, + "google": "FE4B1", + "image": "1f3e1.png", + "sheet_x": 10, + "sheet_y": 52, + "short_name": "house_with_garden", + "short_names": [ + "house_with_garden" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OFFICE BUILDING", + "unified": "1F3E2", + "non_qualified": null, + "docomo": "E664", + "au": "E4AD", + "softbank": "E038", + "google": "FE4B2", + "image": "1f3e2.png", + "sheet_x": 10, + "sheet_y": 53, + "short_name": "office", + "short_names": [ + "office" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "JAPANESE POST OFFICE", + "unified": "1F3E3", + "non_qualified": null, + "docomo": "E665", + "au": "E5DE", + "softbank": "E153", + "google": "FE4B3", + "image": "1f3e3.png", + "sheet_x": 10, + "sheet_y": 54, + "short_name": "post_office", + "short_names": [ + "post_office" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EUROPEAN POST OFFICE", + "unified": "1F3E4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3e4.png", + "sheet_x": 10, + "sheet_y": 55, + "short_name": "european_post_office", + "short_names": [ + "european_post_office" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOSPITAL", + "unified": "1F3E5", + "non_qualified": null, + "docomo": "E666", + "au": "E5DF", + "softbank": "E155", + "google": "FE4B4", + "image": "1f3e5.png", + "sheet_x": 10, + "sheet_y": 56, + "short_name": "hospital", + "short_names": [ + "hospital" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BANK", + "unified": "1F3E6", + "non_qualified": null, + "docomo": "E667", + "au": "E4AA", + "softbank": "E14D", + "google": "FE4B5", + "image": "1f3e6.png", + "sheet_x": 11, + "sheet_y": 0, + "short_name": "bank", + "short_names": [ + "bank" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AUTOMATED TELLER MACHINE", + "unified": "1F3E7", + "non_qualified": null, + "docomo": "E668", + "au": "E4A3", + "softbank": "E154", + "google": "FE4B6", + "image": "1f3e7.png", + "sheet_x": 11, + "sheet_y": 1, + "short_name": "atm", + "short_names": [ + "atm" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOTEL", + "unified": "1F3E8", + "non_qualified": null, + "docomo": "E669", + "au": "EA81", + "softbank": "E158", + "google": "FE4B7", + "image": "1f3e8.png", + "sheet_x": 11, + "sheet_y": 2, + "short_name": "hotel", + "short_names": [ + "hotel" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LOVE HOTEL", + "unified": "1F3E9", + "non_qualified": null, + "docomo": "E669-E6EF", + "au": "EAF3", + "softbank": "E501", + "google": "FE4B8", + "image": "1f3e9.png", + "sheet_x": 11, + "sheet_y": 3, + "short_name": "love_hotel", + "short_names": [ + "love_hotel" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CONVENIENCE STORE", + "unified": "1F3EA", + "non_qualified": null, + "docomo": "E66A", + "au": "E4A4", + "softbank": "E156", + "google": "FE4B9", + "image": "1f3ea.png", + "sheet_x": 11, + "sheet_y": 4, + "short_name": "convenience_store", + "short_names": [ + "convenience_store" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SCHOOL", + "unified": "1F3EB", + "non_qualified": null, + "docomo": "E73E", + "au": "EA80", + "softbank": "E157", + "google": "FE4BA", + "image": "1f3eb.png", + "sheet_x": 11, + "sheet_y": 5, + "short_name": "school", + "short_names": [ + "school" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DEPARTMENT STORE", + "unified": "1F3EC", + "non_qualified": null, + "docomo": null, + "au": "EAF6", + "softbank": "E504", + "google": "FE4BD", + "image": "1f3ec.png", + "sheet_x": 11, + "sheet_y": 6, + "short_name": "department_store", + "short_names": [ + "department_store" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACTORY", + "unified": "1F3ED", + "non_qualified": null, + "docomo": null, + "au": "EAF9", + "softbank": "E508", + "google": "FE4C0", + "image": "1f3ed.png", + "sheet_x": 11, + "sheet_y": 7, + "short_name": "factory", + "short_names": [ + "factory" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "IZAKAYA LANTERN", + "unified": "1F3EE", + "non_qualified": null, + "docomo": "E74B", + "au": "E4BD", + "softbank": null, + "google": "FE4C2", + "image": "1f3ee.png", + "sheet_x": 11, + "sheet_y": 8, + "short_name": "izakaya_lantern", + "short_names": [ + "izakaya_lantern", + "lantern" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 102, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "JAPANESE CASTLE", + "unified": "1F3EF", + "non_qualified": null, + "docomo": null, + "au": "EAF7", + "softbank": "E505", + "google": "FE4BE", + "image": "1f3ef.png", + "sheet_x": 11, + "sheet_y": 9, + "short_name": "japanese_castle", + "short_names": [ + "japanese_castle" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EUROPEAN CASTLE", + "unified": "1F3F0", + "non_qualified": null, + "docomo": null, + "au": "EAF8", + "softbank": "E506", + "google": "FE4BF", + "image": "1f3f0.png", + "sheet_x": 11, + "sheet_y": 10, + "short_name": "european_castle", + "short_names": [ + "european_castle" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3F3-FE0F-200D-1F308", + "non_qualified": "1F3F3-200D-1F308", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f3-fe0f-200d-1f308.png", + "sheet_x": 11, + "sheet_y": 11, + "short_name": "rainbow-flag", + "short_names": [ + "rainbow-flag" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 6, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3F3-FE0F", + "non_qualified": "1F3F3", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f3-fe0f.png", + "sheet_x": 11, + "sheet_y": 12, + "short_name": "waving_white_flag", + "short_names": [ + "waving_white_flag" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3F4-200D-2620-FE0F", + "non_qualified": "1F3F4-200D-2620", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f4-200d-2620-fe0f.png", + "sheet_x": 11, + "sheet_y": 13, + "short_name": "pirate_flag", + "short_names": [ + "pirate_flag" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 7, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "England Flag", + "unified": "1F3F4-E0067-E0062-E0065-E006E-E0067-E007F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png", + "sheet_x": 11, + "sheet_y": 14, + "short_name": "flag-england", + "short_names": [ + "flag-england" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 266, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Scotland Flag", + "unified": "1F3F4-E0067-E0062-E0073-E0063-E0074-E007F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png", + "sheet_x": 11, + "sheet_y": 15, + "short_name": "flag-scotland", + "short_names": [ + "flag-scotland" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 267, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "Wales Flag", + "unified": "1F3F4-E0067-E0062-E0077-E006C-E0073-E007F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png", + "sheet_x": 11, + "sheet_y": 16, + "short_name": "flag-wales", + "short_names": [ + "flag-wales" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 268, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WAVING BLACK FLAG", + "unified": "1F3F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f4.png", + "sheet_x": 11, + "sheet_y": 17, + "short_name": "waving_black_flag", + "short_names": [ + "waving_black_flag" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3F5-FE0F", + "non_qualified": "1F3F5", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f5-fe0f.png", + "sheet_x": 11, + "sheet_y": 18, + "short_name": "rosette", + "short_names": [ + "rosette" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 109, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F3F7-FE0F", + "non_qualified": "1F3F7", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f7-fe0f.png", + "sheet_x": 11, + "sheet_y": 19, + "short_name": "label", + "short_names": [ + "label" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 120, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BADMINTON RACQUET AND SHUTTLECOCK", + "unified": "1F3F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f8.png", + "sheet_x": 11, + "sheet_y": 20, + "short_name": "badminton_racquet_and_shuttlecock", + "short_names": [ + "badminton_racquet_and_shuttlecock" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOW AND ARROW", + "unified": "1F3F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3f9.png", + "sheet_x": 11, + "sheet_y": 21, + "short_name": "bow_and_arrow", + "short_names": [ + "bow_and_arrow" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 189, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AMPHORA", + "unified": "1F3FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3fa.png", + "sheet_x": 11, + "sheet_y": 22, + "short_name": "amphora", + "short_names": [ + "amphora" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 121, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EMOJI MODIFIER FITZPATRICK TYPE-1-2", + "unified": "1F3FB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3fb.png", + "sheet_x": 11, + "sheet_y": 23, + "short_name": "skin-tone-2", + "short_names": [ + "skin-tone-2" + ], + "text": null, + "texts": null, + "category": "Skin Tones", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EMOJI MODIFIER FITZPATRICK TYPE-3", + "unified": "1F3FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3fc.png", + "sheet_x": 11, + "sheet_y": 24, + "short_name": "skin-tone-3", + "short_names": [ + "skin-tone-3" + ], + "text": null, + "texts": null, + "category": "Skin Tones", + "sort_order": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EMOJI MODIFIER FITZPATRICK TYPE-4", + "unified": "1F3FD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3fd.png", + "sheet_x": 11, + "sheet_y": 25, + "short_name": "skin-tone-4", + "short_names": [ + "skin-tone-4" + ], + "text": null, + "texts": null, + "category": "Skin Tones", + "sort_order": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EMOJI MODIFIER FITZPATRICK TYPE-5", + "unified": "1F3FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3fe.png", + "sheet_x": 11, + "sheet_y": 26, + "short_name": "skin-tone-5", + "short_names": [ + "skin-tone-5" + ], + "text": null, + "texts": null, + "category": "Skin Tones", + "sort_order": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EMOJI MODIFIER FITZPATRICK TYPE-6", + "unified": "1F3FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f3ff.png", + "sheet_x": 11, + "sheet_y": 27, + "short_name": "skin-tone-6", + "short_names": [ + "skin-tone-6" + ], + "text": null, + "texts": null, + "category": "Skin Tones", + "sort_order": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RAT", + "unified": "1F400", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f400.png", + "sheet_x": 11, + "sheet_y": 28, + "short_name": "rat", + "short_names": [ + "rat" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOUSE", + "unified": "1F401", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f401.png", + "sheet_x": 11, + "sheet_y": 29, + "short_name": "mouse2", + "short_names": [ + "mouse2" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OX", + "unified": "1F402", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f402.png", + "sheet_x": 11, + "sheet_y": 30, + "short_name": "ox", + "short_names": [ + "ox" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WATER BUFFALO", + "unified": "1F403", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f403.png", + "sheet_x": 11, + "sheet_y": 31, + "short_name": "water_buffalo", + "short_names": [ + "water_buffalo" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COW", + "unified": "1F404", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f404.png", + "sheet_x": 11, + "sheet_y": 32, + "short_name": "cow2", + "short_names": [ + "cow2" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TIGER", + "unified": "1F405", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f405.png", + "sheet_x": 11, + "sheet_y": 33, + "short_name": "tiger2", + "short_names": [ + "tiger2" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 17, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEOPARD", + "unified": "1F406", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f406.png", + "sheet_x": 11, + "sheet_y": 34, + "short_name": "leopard", + "short_names": [ + "leopard" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 18, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RABBIT", + "unified": "1F407", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f407.png", + "sheet_x": 11, + "sheet_y": 35, + "short_name": "rabbit2", + "short_names": [ + "rabbit2" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CAT", + "unified": "1F408", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f408.png", + "sheet_x": 11, + "sheet_y": 36, + "short_name": "cat2", + "short_names": [ + "cat2" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DRAGON", + "unified": "1F409", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f409.png", + "sheet_x": 11, + "sheet_y": 37, + "short_name": "dragon", + "short_names": [ + "dragon" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 82, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CROCODILE", + "unified": "1F40A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f40a.png", + "sheet_x": 11, + "sheet_y": 38, + "short_name": "crocodile", + "short_names": [ + "crocodile" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 77, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHALE", + "unified": "1F40B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f40b.png", + "sheet_x": 11, + "sheet_y": 39, + "short_name": "whale2", + "short_names": [ + "whale2" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 86, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SNAIL", + "unified": "1F40C", + "non_qualified": null, + "docomo": "E74E", + "au": "EB7E", + "softbank": null, + "google": "FE1B9", + "image": "1f40c.png", + "sheet_x": 11, + "sheet_y": 40, + "short_name": "snail", + "short_names": [ + "snail" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 94, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SNAKE", + "unified": "1F40D", + "non_qualified": null, + "docomo": null, + "au": "EB22", + "softbank": "E52D", + "google": "FE1D3", + "image": "1f40d.png", + "sheet_x": 11, + "sheet_y": 41, + "short_name": "snake", + "short_names": [ + "snake" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 80, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HORSE", + "unified": "1F40E", + "non_qualified": null, + "docomo": "E754", + "au": "E4D8", + "softbank": "E134", + "google": "FE7DC", + "image": "1f40e.png", + "sheet_x": 11, + "sheet_y": 42, + "short_name": "racehorse", + "short_names": [ + "racehorse" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RAM", + "unified": "1F40F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f40f.png", + "sheet_x": 11, + "sheet_y": 43, + "short_name": "ram", + "short_names": [ + "ram" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GOAT", + "unified": "1F410", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f410.png", + "sheet_x": 11, + "sheet_y": 44, + "short_name": "goat", + "short_names": [ + "goat" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHEEP", + "unified": "1F411", + "non_qualified": null, + "docomo": null, + "au": "E48F", + "softbank": "E529", + "google": "FE1CF", + "image": "1f411.png", + "sheet_x": 11, + "sheet_y": 45, + "short_name": "sheep", + "short_names": [ + "sheep" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MONKEY", + "unified": "1F412", + "non_qualified": null, + "docomo": null, + "au": "E4D9", + "softbank": "E528", + "google": "FE1CE", + "image": "1f412.png", + "sheet_x": 11, + "sheet_y": 46, + "short_name": "monkey", + "short_names": [ + "monkey" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ROOSTER", + "unified": "1F413", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f413.png", + "sheet_x": 11, + "sheet_y": 47, + "short_name": "rooster", + "short_names": [ + "rooster" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 62, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHICKEN", + "unified": "1F414", + "non_qualified": null, + "docomo": null, + "au": "EB23", + "softbank": "E52E", + "google": "FE1D4", + "image": "1f414.png", + "sheet_x": 11, + "sheet_y": 48, + "short_name": "chicken", + "short_names": [ + "chicken" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 61, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F415-200D-1F9BA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f415-200d-1f9ba.png", + "sheet_x": 11, + "sheet_y": 49, + "short_name": "service_dog", + "short_names": [ + "service_dog" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 8, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOG", + "unified": "1F415", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f415.png", + "sheet_x": 11, + "sheet_y": 50, + "short_name": "dog2", + "short_names": [ + "dog2" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PIG", + "unified": "1F416", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f416.png", + "sheet_x": 11, + "sheet_y": 51, + "short_name": "pig2", + "short_names": [ + "pig2" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOAR", + "unified": "1F417", + "non_qualified": null, + "docomo": null, + "au": "EB24", + "softbank": "E52F", + "google": "FE1D5", + "image": "1f417.png", + "sheet_x": 11, + "sheet_y": 52, + "short_name": "boar", + "short_names": [ + "boar" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ELEPHANT", + "unified": "1F418", + "non_qualified": null, + "docomo": null, + "au": "EB1F", + "softbank": "E526", + "google": "FE1CC", + "image": "1f418.png", + "sheet_x": 11, + "sheet_y": 53, + "short_name": "elephant", + "short_names": [ + "elephant" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OCTOPUS", + "unified": "1F419", + "non_qualified": null, + "docomo": null, + "au": "E5C7", + "softbank": "E10A", + "google": "FE1C5", + "image": "1f419.png", + "sheet_x": 11, + "sheet_y": 54, + "short_name": "octopus", + "short_names": [ + "octopus" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 92, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPIRAL SHELL", + "unified": "1F41A", + "non_qualified": null, + "docomo": null, + "au": "EAEC", + "softbank": "E441", + "google": "FE1C6", + "image": "1f41a.png", + "sheet_x": 11, + "sheet_y": 55, + "short_name": "shell", + "short_names": [ + "shell" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 93, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BUG", + "unified": "1F41B", + "non_qualified": null, + "docomo": null, + "au": "EB1E", + "softbank": "E525", + "google": "FE1CB", + "image": "1f41b.png", + "sheet_x": 11, + "sheet_y": 56, + "short_name": "bug", + "short_names": [ + "bug" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 96, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ANT", + "unified": "1F41C", + "non_qualified": null, + "docomo": null, + "au": "E4DD", + "softbank": null, + "google": "FE1DA", + "image": "1f41c.png", + "sheet_x": 12, + "sheet_y": 0, + "short_name": "ant", + "short_names": [ + "ant" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 97, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HONEYBEE", + "unified": "1F41D", + "non_qualified": null, + "docomo": null, + "au": "EB57", + "softbank": null, + "google": "FE1E1", + "image": "1f41d.png", + "sheet_x": 12, + "sheet_y": 1, + "short_name": "bee", + "short_names": [ + "bee", + "honeybee" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 98, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LADY BEETLE", + "unified": "1F41E", + "non_qualified": null, + "docomo": null, + "au": "EB58", + "softbank": null, + "google": "FE1E2", + "image": "1f41e.png", + "sheet_x": 12, + "sheet_y": 2, + "short_name": "beetle", + "short_names": [ + "beetle" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 99, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FISH", + "unified": "1F41F", + "non_qualified": null, + "docomo": "E751", + "au": "E49A", + "softbank": "E019", + "google": "FE1BD", + "image": "1f41f.png", + "sheet_x": 12, + "sheet_y": 3, + "short_name": "fish", + "short_names": [ + "fish" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 88, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TROPICAL FISH", + "unified": "1F420", + "non_qualified": null, + "docomo": "E751", + "au": "EB1D", + "softbank": "E522", + "google": "FE1C9", + "image": "1f420.png", + "sheet_x": 12, + "sheet_y": 4, + "short_name": "tropical_fish", + "short_names": [ + "tropical_fish" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 89, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLOWFISH", + "unified": "1F421", + "non_qualified": null, + "docomo": "E751", + "au": "E4D3", + "softbank": null, + "google": "FE1D9", + "image": "1f421.png", + "sheet_x": 12, + "sheet_y": 5, + "short_name": "blowfish", + "short_names": [ + "blowfish" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 90, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TURTLE", + "unified": "1F422", + "non_qualified": null, + "docomo": null, + "au": "E5D4", + "softbank": null, + "google": "FE1DC", + "image": "1f422.png", + "sheet_x": 12, + "sheet_y": 6, + "short_name": "turtle", + "short_names": [ + "turtle" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 78, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HATCHING CHICK", + "unified": "1F423", + "non_qualified": null, + "docomo": "E74F", + "au": "E5DB", + "softbank": null, + "google": "FE1DD", + "image": "1f423.png", + "sheet_x": 12, + "sheet_y": 7, + "short_name": "hatching_chick", + "short_names": [ + "hatching_chick" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 63, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BABY CHICK", + "unified": "1F424", + "non_qualified": null, + "docomo": "E74F", + "au": "E4E0", + "softbank": "E523", + "google": "FE1BA", + "image": "1f424.png", + "sheet_x": 12, + "sheet_y": 8, + "short_name": "baby_chick", + "short_names": [ + "baby_chick" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 64, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FRONT-FACING BABY CHICK", + "unified": "1F425", + "non_qualified": null, + "docomo": "E74F", + "au": "EB76", + "softbank": null, + "google": "FE1BB", + "image": "1f425.png", + "sheet_x": 12, + "sheet_y": 9, + "short_name": "hatched_chick", + "short_names": [ + "hatched_chick" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 65, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BIRD", + "unified": "1F426", + "non_qualified": null, + "docomo": "E74F", + "au": "E4E0", + "softbank": "E521", + "google": "FE1C8", + "image": "1f426.png", + "sheet_x": 12, + "sheet_y": 10, + "short_name": "bird", + "short_names": [ + "bird" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 66, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PENGUIN", + "unified": "1F427", + "non_qualified": null, + "docomo": "E750", + "au": "E4DC", + "softbank": "E055", + "google": "FE1BC", + "image": "1f427.png", + "sheet_x": 12, + "sheet_y": 11, + "short_name": "penguin", + "short_names": [ + "penguin" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 67, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KOALA", + "unified": "1F428", + "non_qualified": null, + "docomo": null, + "au": "EB20", + "softbank": "E527", + "google": "FE1CD", + "image": "1f428.png", + "sheet_x": 12, + "sheet_y": 12, + "short_name": "koala", + "short_names": [ + "koala" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POODLE", + "unified": "1F429", + "non_qualified": null, + "docomo": "E6A1", + "au": "E4DF", + "softbank": null, + "google": "FE1D8", + "image": "1f429.png", + "sheet_x": 12, + "sheet_y": 13, + "short_name": "poodle", + "short_names": [ + "poodle" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DROMEDARY CAMEL", + "unified": "1F42A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f42a.png", + "sheet_x": 12, + "sheet_y": 14, + "short_name": "dromedary_camel", + "short_names": [ + "dromedary_camel" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BACTRIAN CAMEL", + "unified": "1F42B", + "non_qualified": null, + "docomo": null, + "au": "EB25", + "softbank": "E530", + "google": "FE1D6", + "image": "1f42b.png", + "sheet_x": 12, + "sheet_y": 15, + "short_name": "camel", + "short_names": [ + "camel" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOLPHIN", + "unified": "1F42C", + "non_qualified": null, + "docomo": null, + "au": "EB1B", + "softbank": "E520", + "google": "FE1C7", + "image": "1f42c.png", + "sheet_x": 12, + "sheet_y": 16, + "short_name": "dolphin", + "short_names": [ + "dolphin", + "flipper" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 87, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOUSE FACE", + "unified": "1F42D", + "non_qualified": null, + "docomo": null, + "au": "E5C2", + "softbank": "E053", + "google": "FE1C2", + "image": "1f42d.png", + "sheet_x": 12, + "sheet_y": 17, + "short_name": "mouse", + "short_names": [ + "mouse" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COW FACE", + "unified": "1F42E", + "non_qualified": null, + "docomo": null, + "au": "EB21", + "softbank": "E52B", + "google": "FE1D1", + "image": "1f42e.png", + "sheet_x": 12, + "sheet_y": 18, + "short_name": "cow", + "short_names": [ + "cow" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TIGER FACE", + "unified": "1F42F", + "non_qualified": null, + "docomo": null, + "au": "E5C0", + "softbank": "E050", + "google": "FE1C0", + "image": "1f42f.png", + "sheet_x": 12, + "sheet_y": 19, + "short_name": "tiger", + "short_names": [ + "tiger" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 16, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RABBIT FACE", + "unified": "1F430", + "non_qualified": null, + "docomo": null, + "au": "E4D7", + "softbank": "E52C", + "google": "FE1D2", + "image": "1f430.png", + "sheet_x": 12, + "sheet_y": 20, + "short_name": "rabbit", + "short_names": [ + "rabbit" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CAT FACE", + "unified": "1F431", + "non_qualified": null, + "docomo": "E6A2", + "au": "E4DB", + "softbank": "E04F", + "google": "FE1B8", + "image": "1f431.png", + "sheet_x": 12, + "sheet_y": 21, + "short_name": "cat", + "short_names": [ + "cat" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DRAGON FACE", + "unified": "1F432", + "non_qualified": null, + "docomo": null, + "au": "EB3F", + "softbank": null, + "google": "FE1DE", + "image": "1f432.png", + "sheet_x": 12, + "sheet_y": 22, + "short_name": "dragon_face", + "short_names": [ + "dragon_face" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 81, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPOUTING WHALE", + "unified": "1F433", + "non_qualified": null, + "docomo": null, + "au": "E470", + "softbank": "E054", + "google": "FE1C3", + "image": "1f433.png", + "sheet_x": 12, + "sheet_y": 23, + "short_name": "whale", + "short_names": [ + "whale" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 85, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HORSE FACE", + "unified": "1F434", + "non_qualified": null, + "docomo": "E754", + "au": "E4D8", + "softbank": "E01A", + "google": "FE1BE", + "image": "1f434.png", + "sheet_x": 12, + "sheet_y": 24, + "short_name": "horse", + "short_names": [ + "horse" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MONKEY FACE", + "unified": "1F435", + "non_qualified": null, + "docomo": null, + "au": "E4D9", + "softbank": "E109", + "google": "FE1C4", + "image": "1f435.png", + "sheet_x": 12, + "sheet_y": 25, + "short_name": "monkey_face", + "short_names": [ + "monkey_face" + ], + "text": null, + "texts": [ + ":o)" + ], + "category": "Animals & Nature", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOG FACE", + "unified": "1F436", + "non_qualified": null, + "docomo": "E6A1", + "au": "E4E1", + "softbank": "E052", + "google": "FE1B7", + "image": "1f436.png", + "sheet_x": 12, + "sheet_y": 26, + "short_name": "dog", + "short_names": [ + "dog" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PIG FACE", + "unified": "1F437", + "non_qualified": null, + "docomo": "E755", + "au": "E4DE", + "softbank": "E10B", + "google": "FE1BF", + "image": "1f437.png", + "sheet_x": 12, + "sheet_y": 27, + "short_name": "pig", + "short_names": [ + "pig" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FROG FACE", + "unified": "1F438", + "non_qualified": null, + "docomo": null, + "au": "E4DA", + "softbank": "E531", + "google": "FE1D7", + "image": "1f438.png", + "sheet_x": 12, + "sheet_y": 28, + "short_name": "frog", + "short_names": [ + "frog" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 76, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HAMSTER FACE", + "unified": "1F439", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E524", + "google": "FE1CA", + "image": "1f439.png", + "sheet_x": 12, + "sheet_y": 29, + "short_name": "hamster", + "short_names": [ + "hamster" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WOLF FACE", + "unified": "1F43A", + "non_qualified": null, + "docomo": "E6A1", + "au": "E4E1", + "softbank": "E52A", + "google": "FE1D0", + "image": "1f43a.png", + "sheet_x": 12, + "sheet_y": 30, + "short_name": "wolf", + "short_names": [ + "wolf" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BEAR FACE", + "unified": "1F43B", + "non_qualified": null, + "docomo": null, + "au": "E5C1", + "softbank": "E051", + "google": "FE1C1", + "image": "1f43b.png", + "sheet_x": 12, + "sheet_y": 31, + "short_name": "bear", + "short_names": [ + "bear" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PANDA FACE", + "unified": "1F43C", + "non_qualified": null, + "docomo": null, + "au": "EB46", + "softbank": null, + "google": "FE1DF", + "image": "1f43c.png", + "sheet_x": 12, + "sheet_y": 32, + "short_name": "panda_face", + "short_names": [ + "panda_face" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PIG NOSE", + "unified": "1F43D", + "non_qualified": null, + "docomo": "E755", + "au": "EB48", + "softbank": null, + "google": "FE1E0", + "image": "1f43d.png", + "sheet_x": 12, + "sheet_y": 33, + "short_name": "pig_nose", + "short_names": [ + "pig_nose" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PAW PRINTS", + "unified": "1F43E", + "non_qualified": null, + "docomo": "E698", + "au": "E4EE", + "softbank": null, + "google": "FE1DB", + "image": "1f43e.png", + "sheet_x": 12, + "sheet_y": 34, + "short_name": "feet", + "short_names": [ + "feet", + "paw_prints" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 59, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F43F-FE0F", + "non_qualified": "1F43F", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f43f-fe0f.png", + "sheet_x": 12, + "sheet_y": 35, + "short_name": "chipmunk", + "short_names": [ + "chipmunk" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EYES", + "unified": "1F440", + "non_qualified": null, + "docomo": "E691", + "au": "E5A4", + "softbank": "E419", + "google": "FE190", + "image": "1f440.png", + "sheet_x": 12, + "sheet_y": 36, + "short_name": "eyes", + "short_names": [ + "eyes" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F441-FE0F-200D-1F5E8-FE0F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f441-fe0f-200d-1f5e8-fe0f.png", + "sheet_x": 12, + "sheet_y": 37, + "short_name": "eye-in-speech-bubble", + "short_names": [ + "eye-in-speech-bubble" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 145, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": false, + "has_img_facebook": false + }, + { + "name": null, + "unified": "1F441-FE0F", + "non_qualified": "1F441", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f441-fe0f.png", + "sheet_x": 12, + "sheet_y": 38, + "short_name": "eye", + "short_names": [ + "eye" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EAR", + "unified": "1F442", + "non_qualified": null, + "docomo": "E692", + "au": "E5A5", + "softbank": "E41B", + "google": "FE191", + "image": "1f442.png", + "sheet_x": 12, + "sheet_y": 39, + "short_name": "ear", + "short_names": [ + "ear" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F442-1F3FB", + "non_qualified": null, + "image": "1f442-1f3fb.png", + "sheet_x": 12, + "sheet_y": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F442-1F3FC", + "non_qualified": null, + "image": "1f442-1f3fc.png", + "sheet_x": 12, + "sheet_y": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F442-1F3FD", + "non_qualified": null, + "image": "1f442-1f3fd.png", + "sheet_x": 12, + "sheet_y": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F442-1F3FE", + "non_qualified": null, + "image": "1f442-1f3fe.png", + "sheet_x": 12, + "sheet_y": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F442-1F3FF", + "non_qualified": null, + "image": "1f442-1f3ff.png", + "sheet_x": 12, + "sheet_y": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "NOSE", + "unified": "1F443", + "non_qualified": null, + "docomo": null, + "au": "EAD0", + "softbank": "E41A", + "google": "FE192", + "image": "1f443.png", + "sheet_x": 12, + "sheet_y": 45, + "short_name": "nose", + "short_names": [ + "nose" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F443-1F3FB", + "non_qualified": null, + "image": "1f443-1f3fb.png", + "sheet_x": 12, + "sheet_y": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F443-1F3FC", + "non_qualified": null, + "image": "1f443-1f3fc.png", + "sheet_x": 12, + "sheet_y": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F443-1F3FD", + "non_qualified": null, + "image": "1f443-1f3fd.png", + "sheet_x": 12, + "sheet_y": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F443-1F3FE", + "non_qualified": null, + "image": "1f443-1f3fe.png", + "sheet_x": 12, + "sheet_y": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F443-1F3FF", + "non_qualified": null, + "image": "1f443-1f3ff.png", + "sheet_x": 12, + "sheet_y": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "MOUTH", + "unified": "1F444", + "non_qualified": null, + "docomo": "E6F9", + "au": "EAD1", + "softbank": "E41C", + "google": "FE193", + "image": "1f444.png", + "sheet_x": 12, + "sheet_y": 51, + "short_name": "lips", + "short_names": [ + "lips" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TONGUE", + "unified": "1F445", + "non_qualified": null, + "docomo": "E728", + "au": "EB47", + "softbank": null, + "google": "FE194", + "image": "1f445.png", + "sheet_x": 12, + "sheet_y": 52, + "short_name": "tongue", + "short_names": [ + "tongue" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE UP POINTING BACKHAND INDEX", + "unified": "1F446", + "non_qualified": null, + "docomo": null, + "au": "EA8D", + "softbank": "E22E", + "google": "FEB99", + "image": "1f446.png", + "sheet_x": 12, + "sheet_y": 53, + "short_name": "point_up_2", + "short_names": [ + "point_up_2" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 15, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F446-1F3FB", + "non_qualified": null, + "image": "1f446-1f3fb.png", + "sheet_x": 12, + "sheet_y": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F446-1F3FC", + "non_qualified": null, + "image": "1f446-1f3fc.png", + "sheet_x": 12, + "sheet_y": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F446-1F3FD", + "non_qualified": null, + "image": "1f446-1f3fd.png", + "sheet_x": 12, + "sheet_y": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F446-1F3FE", + "non_qualified": null, + "image": "1f446-1f3fe.png", + "sheet_x": 13, + "sheet_y": 0, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F446-1F3FF", + "non_qualified": null, + "image": "1f446-1f3ff.png", + "sheet_x": 13, + "sheet_y": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "WHITE DOWN POINTING BACKHAND INDEX", + "unified": "1F447", + "non_qualified": null, + "docomo": null, + "au": "EA8E", + "softbank": "E22F", + "google": "FEB9A", + "image": "1f447.png", + "sheet_x": 13, + "sheet_y": 2, + "short_name": "point_down", + "short_names": [ + "point_down" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 17, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F447-1F3FB", + "non_qualified": null, + "image": "1f447-1f3fb.png", + "sheet_x": 13, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F447-1F3FC", + "non_qualified": null, + "image": "1f447-1f3fc.png", + "sheet_x": 13, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F447-1F3FD", + "non_qualified": null, + "image": "1f447-1f3fd.png", + "sheet_x": 13, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F447-1F3FE", + "non_qualified": null, + "image": "1f447-1f3fe.png", + "sheet_x": 13, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F447-1F3FF", + "non_qualified": null, + "image": "1f447-1f3ff.png", + "sheet_x": 13, + "sheet_y": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "WHITE LEFT POINTING BACKHAND INDEX", + "unified": "1F448", + "non_qualified": null, + "docomo": null, + "au": "E4FF", + "softbank": "E230", + "google": "FEB9B", + "image": "1f448.png", + "sheet_x": 13, + "sheet_y": 8, + "short_name": "point_left", + "short_names": [ + "point_left" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F448-1F3FB", + "non_qualified": null, + "image": "1f448-1f3fb.png", + "sheet_x": 13, + "sheet_y": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F448-1F3FC", + "non_qualified": null, + "image": "1f448-1f3fc.png", + "sheet_x": 13, + "sheet_y": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F448-1F3FD", + "non_qualified": null, + "image": "1f448-1f3fd.png", + "sheet_x": 13, + "sheet_y": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F448-1F3FE", + "non_qualified": null, + "image": "1f448-1f3fe.png", + "sheet_x": 13, + "sheet_y": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F448-1F3FF", + "non_qualified": null, + "image": "1f448-1f3ff.png", + "sheet_x": 13, + "sheet_y": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "WHITE RIGHT POINTING BACKHAND INDEX", + "unified": "1F449", + "non_qualified": null, + "docomo": null, + "au": "E500", + "softbank": "E231", + "google": "FEB9C", + "image": "1f449.png", + "sheet_x": 13, + "sheet_y": 14, + "short_name": "point_right", + "short_names": [ + "point_right" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F449-1F3FB", + "non_qualified": null, + "image": "1f449-1f3fb.png", + "sheet_x": 13, + "sheet_y": 15, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F449-1F3FC", + "non_qualified": null, + "image": "1f449-1f3fc.png", + "sheet_x": 13, + "sheet_y": 16, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F449-1F3FD", + "non_qualified": null, + "image": "1f449-1f3fd.png", + "sheet_x": 13, + "sheet_y": 17, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F449-1F3FE", + "non_qualified": null, + "image": "1f449-1f3fe.png", + "sheet_x": 13, + "sheet_y": 18, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F449-1F3FF", + "non_qualified": null, + "image": "1f449-1f3ff.png", + "sheet_x": 13, + "sheet_y": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FISTED HAND SIGN", + "unified": "1F44A", + "non_qualified": null, + "docomo": "E6FD", + "au": "E4F3", + "softbank": "E00D", + "google": "FEB96", + "image": "1f44a.png", + "sheet_x": 13, + "sheet_y": 20, + "short_name": "facepunch", + "short_names": [ + "facepunch", + "punch" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F44A-1F3FB", + "non_qualified": null, + "image": "1f44a-1f3fb.png", + "sheet_x": 13, + "sheet_y": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F44A-1F3FC", + "non_qualified": null, + "image": "1f44a-1f3fc.png", + "sheet_x": 13, + "sheet_y": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F44A-1F3FD", + "non_qualified": null, + "image": "1f44a-1f3fd.png", + "sheet_x": 13, + "sheet_y": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F44A-1F3FE", + "non_qualified": null, + "image": "1f44a-1f3fe.png", + "sheet_x": 13, + "sheet_y": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F44A-1F3FF", + "non_qualified": null, + "image": "1f44a-1f3ff.png", + "sheet_x": 13, + "sheet_y": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "WAVING HAND SIGN", + "unified": "1F44B", + "non_qualified": null, + "docomo": "E695", + "au": "EAD6", + "softbank": "E41E", + "google": "FEB9D", + "image": "1f44b.png", + "sheet_x": 13, + "sheet_y": 26, + "short_name": "wave", + "short_names": [ + "wave" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F44B-1F3FB", + "non_qualified": null, + "image": "1f44b-1f3fb.png", + "sheet_x": 13, + "sheet_y": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F44B-1F3FC", + "non_qualified": null, + "image": "1f44b-1f3fc.png", + "sheet_x": 13, + "sheet_y": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F44B-1F3FD", + "non_qualified": null, + "image": "1f44b-1f3fd.png", + "sheet_x": 13, + "sheet_y": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F44B-1F3FE", + "non_qualified": null, + "image": "1f44b-1f3fe.png", + "sheet_x": 13, + "sheet_y": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F44B-1F3FF", + "non_qualified": null, + "image": "1f44b-1f3ff.png", + "sheet_x": 13, + "sheet_y": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "OK HAND SIGN", + "unified": "1F44C", + "non_qualified": null, + "docomo": "E70B", + "au": "EAD4", + "softbank": "E420", + "google": "FEB9F", + "image": "1f44c.png", + "sheet_x": 13, + "sheet_y": 32, + "short_name": "ok_hand", + "short_names": [ + "ok_hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F44C-1F3FB", + "non_qualified": null, + "image": "1f44c-1f3fb.png", + "sheet_x": 13, + "sheet_y": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F44C-1F3FC", + "non_qualified": null, + "image": "1f44c-1f3fc.png", + "sheet_x": 13, + "sheet_y": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F44C-1F3FD", + "non_qualified": null, + "image": "1f44c-1f3fd.png", + "sheet_x": 13, + "sheet_y": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F44C-1F3FE", + "non_qualified": null, + "image": "1f44c-1f3fe.png", + "sheet_x": 13, + "sheet_y": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F44C-1F3FF", + "non_qualified": null, + "image": "1f44c-1f3ff.png", + "sheet_x": 13, + "sheet_y": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "THUMBS UP SIGN", + "unified": "1F44D", + "non_qualified": null, + "docomo": "E727", + "au": "E4F9", + "softbank": "E00E", + "google": "FEB97", + "image": "1f44d.png", + "sheet_x": 13, + "sheet_y": 38, + "short_name": "+1", + "short_names": [ + "+1", + "thumbsup" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F44D-1F3FB", + "non_qualified": null, + "image": "1f44d-1f3fb.png", + "sheet_x": 13, + "sheet_y": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F44D-1F3FC", + "non_qualified": null, + "image": "1f44d-1f3fc.png", + "sheet_x": 13, + "sheet_y": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F44D-1F3FD", + "non_qualified": null, + "image": "1f44d-1f3fd.png", + "sheet_x": 13, + "sheet_y": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F44D-1F3FE", + "non_qualified": null, + "image": "1f44d-1f3fe.png", + "sheet_x": 13, + "sheet_y": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F44D-1F3FF", + "non_qualified": null, + "image": "1f44d-1f3ff.png", + "sheet_x": 13, + "sheet_y": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "THUMBS DOWN SIGN", + "unified": "1F44E", + "non_qualified": null, + "docomo": "E700", + "au": "EAD5", + "softbank": "E421", + "google": "FEBA0", + "image": "1f44e.png", + "sheet_x": 13, + "sheet_y": 44, + "short_name": "-1", + "short_names": [ + "-1", + "thumbsdown" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F44E-1F3FB", + "non_qualified": null, + "image": "1f44e-1f3fb.png", + "sheet_x": 13, + "sheet_y": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F44E-1F3FC", + "non_qualified": null, + "image": "1f44e-1f3fc.png", + "sheet_x": 13, + "sheet_y": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F44E-1F3FD", + "non_qualified": null, + "image": "1f44e-1f3fd.png", + "sheet_x": 13, + "sheet_y": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F44E-1F3FE", + "non_qualified": null, + "image": "1f44e-1f3fe.png", + "sheet_x": 13, + "sheet_y": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F44E-1F3FF", + "non_qualified": null, + "image": "1f44e-1f3ff.png", + "sheet_x": 13, + "sheet_y": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "CLAPPING HANDS SIGN", + "unified": "1F44F", + "non_qualified": null, + "docomo": null, + "au": "EAD3", + "softbank": "E41F", + "google": "FEB9E", + "image": "1f44f.png", + "sheet_x": 13, + "sheet_y": 50, + "short_name": "clap", + "short_names": [ + "clap" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F44F-1F3FB", + "non_qualified": null, + "image": "1f44f-1f3fb.png", + "sheet_x": 13, + "sheet_y": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F44F-1F3FC", + "non_qualified": null, + "image": "1f44f-1f3fc.png", + "sheet_x": 13, + "sheet_y": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F44F-1F3FD", + "non_qualified": null, + "image": "1f44f-1f3fd.png", + "sheet_x": 13, + "sheet_y": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F44F-1F3FE", + "non_qualified": null, + "image": "1f44f-1f3fe.png", + "sheet_x": 13, + "sheet_y": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F44F-1F3FF", + "non_qualified": null, + "image": "1f44f-1f3ff.png", + "sheet_x": 13, + "sheet_y": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "OPEN HANDS SIGN", + "unified": "1F450", + "non_qualified": null, + "docomo": "E695", + "au": "EAD6", + "softbank": "E422", + "google": "FEBA1", + "image": "1f450.png", + "sheet_x": 13, + "sheet_y": 56, + "short_name": "open_hands", + "short_names": [ + "open_hands" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F450-1F3FB", + "non_qualified": null, + "image": "1f450-1f3fb.png", + "sheet_x": 14, + "sheet_y": 0, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F450-1F3FC", + "non_qualified": null, + "image": "1f450-1f3fc.png", + "sheet_x": 14, + "sheet_y": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F450-1F3FD", + "non_qualified": null, + "image": "1f450-1f3fd.png", + "sheet_x": 14, + "sheet_y": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F450-1F3FE", + "non_qualified": null, + "image": "1f450-1f3fe.png", + "sheet_x": 14, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F450-1F3FF", + "non_qualified": null, + "image": "1f450-1f3ff.png", + "sheet_x": 14, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "CROWN", + "unified": "1F451", + "non_qualified": null, + "docomo": "E71A", + "au": "E5C9", + "softbank": "E10E", + "google": "FE4D1", + "image": "1f451.png", + "sheet_x": 14, + "sheet_y": 5, + "short_name": "crown", + "short_names": [ + "crown" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WOMANS HAT", + "unified": "1F452", + "non_qualified": null, + "docomo": null, + "au": "EA9E", + "softbank": "E318", + "google": "FE4D4", + "image": "1f452.png", + "sheet_x": 14, + "sheet_y": 6, + "short_name": "womans_hat", + "short_names": [ + "womans_hat" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EYEGLASSES", + "unified": "1F453", + "non_qualified": null, + "docomo": "E69A", + "au": "E4FE", + "softbank": null, + "google": "FE4CE", + "image": "1f453.png", + "sheet_x": 14, + "sheet_y": 7, + "short_name": "eyeglasses", + "short_names": [ + "eyeglasses" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NECKTIE", + "unified": "1F454", + "non_qualified": null, + "docomo": null, + "au": "EA93", + "softbank": "E302", + "google": "FE4D3", + "image": "1f454.png", + "sheet_x": 14, + "sheet_y": 8, + "short_name": "necktie", + "short_names": [ + "necktie" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "T-SHIRT", + "unified": "1F455", + "non_qualified": null, + "docomo": "E70E", + "au": "E5B6", + "softbank": "E006", + "google": "FE4CF", + "image": "1f455.png", + "sheet_x": 14, + "sheet_y": 9, + "short_name": "shirt", + "short_names": [ + "shirt", + "tshirt" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "JEANS", + "unified": "1F456", + "non_qualified": null, + "docomo": "E711", + "au": "EB77", + "softbank": null, + "google": "FE4D0", + "image": "1f456.png", + "sheet_x": 14, + "sheet_y": 10, + "short_name": "jeans", + "short_names": [ + "jeans" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DRESS", + "unified": "1F457", + "non_qualified": null, + "docomo": null, + "au": "EB6B", + "softbank": "E319", + "google": "FE4D5", + "image": "1f457.png", + "sheet_x": 14, + "sheet_y": 11, + "short_name": "dress", + "short_names": [ + "dress" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KIMONO", + "unified": "1F458", + "non_qualified": null, + "docomo": null, + "au": "EAA3", + "softbank": "E321", + "google": "FE4D9", + "image": "1f458.png", + "sheet_x": 14, + "sheet_y": 12, + "short_name": "kimono", + "short_names": [ + "kimono" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BIKINI", + "unified": "1F459", + "non_qualified": null, + "docomo": null, + "au": "EAA4", + "softbank": "E322", + "google": "FE4DA", + "image": "1f459.png", + "sheet_x": 14, + "sheet_y": 13, + "short_name": "bikini", + "short_names": [ + "bikini" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WOMANS CLOTHES", + "unified": "1F45A", + "non_qualified": null, + "docomo": "E70E", + "au": "E50D", + "softbank": null, + "google": "FE4DB", + "image": "1f45a.png", + "sheet_x": 14, + "sheet_y": 14, + "short_name": "womans_clothes", + "short_names": [ + "womans_clothes" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PURSE", + "unified": "1F45B", + "non_qualified": null, + "docomo": "E70F", + "au": "E504", + "softbank": null, + "google": "FE4DC", + "image": "1f45b.png", + "sheet_x": 14, + "sheet_y": 15, + "short_name": "purse", + "short_names": [ + "purse" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HANDBAG", + "unified": "1F45C", + "non_qualified": null, + "docomo": "E682", + "au": "E49C", + "softbank": "E323", + "google": "FE4F0", + "image": "1f45c.png", + "sheet_x": 14, + "sheet_y": 16, + "short_name": "handbag", + "short_names": [ + "handbag" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POUCH", + "unified": "1F45D", + "non_qualified": null, + "docomo": "E6AD", + "au": null, + "softbank": null, + "google": "FE4F1", + "image": "1f45d.png", + "sheet_x": 14, + "sheet_y": 17, + "short_name": "pouch", + "short_names": [ + "pouch" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MANS SHOE", + "unified": "1F45E", + "non_qualified": null, + "docomo": "E699", + "au": "E5B7", + "softbank": null, + "google": "FE4CC", + "image": "1f45e.png", + "sheet_x": 14, + "sheet_y": 18, + "short_name": "mans_shoe", + "short_names": [ + "mans_shoe", + "shoe" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ATHLETIC SHOE", + "unified": "1F45F", + "non_qualified": null, + "docomo": "E699", + "au": "EB2B", + "softbank": "E007", + "google": "FE4CD", + "image": "1f45f.png", + "sheet_x": 14, + "sheet_y": 19, + "short_name": "athletic_shoe", + "short_names": [ + "athletic_shoe" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HIGH-HEELED SHOE", + "unified": "1F460", + "non_qualified": null, + "docomo": "E674", + "au": "E51A", + "softbank": "E13E", + "google": "FE4D6", + "image": "1f460.png", + "sheet_x": 14, + "sheet_y": 20, + "short_name": "high_heel", + "short_names": [ + "high_heel" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WOMANS SANDAL", + "unified": "1F461", + "non_qualified": null, + "docomo": "E674", + "au": "E51A", + "softbank": "E31A", + "google": "FE4D7", + "image": "1f461.png", + "sheet_x": 14, + "sheet_y": 21, + "short_name": "sandal", + "short_names": [ + "sandal" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WOMANS BOOTS", + "unified": "1F462", + "non_qualified": null, + "docomo": null, + "au": "EA9F", + "softbank": "E31B", + "google": "FE4D8", + "image": "1f462.png", + "sheet_x": 14, + "sheet_y": 22, + "short_name": "boot", + "short_names": [ + "boot" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FOOTPRINTS", + "unified": "1F463", + "non_qualified": null, + "docomo": "E698", + "au": "EB2A", + "softbank": "E536", + "google": "FE553", + "image": "1f463.png", + "sheet_x": 14, + "sheet_y": 23, + "short_name": "footprints", + "short_names": [ + "footprints" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 334, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BUST IN SILHOUETTE", + "unified": "1F464", + "non_qualified": null, + "docomo": "E6B1", + "au": null, + "softbank": null, + "google": "FE19A", + "image": "1f464.png", + "sheet_x": 14, + "sheet_y": 24, + "short_name": "bust_in_silhouette", + "short_names": [ + "bust_in_silhouette" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 332, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BUSTS IN SILHOUETTE", + "unified": "1F465", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f465.png", + "sheet_x": 14, + "sheet_y": 25, + "short_name": "busts_in_silhouette", + "short_names": [ + "busts_in_silhouette" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 333, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOY", + "unified": "1F466", + "non_qualified": null, + "docomo": "E6F0", + "au": "E4FC", + "softbank": "E001", + "google": "FE19B", + "image": "1f466.png", + "sheet_x": 14, + "sheet_y": 26, + "short_name": "boy", + "short_names": [ + "boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F466-1F3FB", + "non_qualified": null, + "image": "1f466-1f3fb.png", + "sheet_x": 14, + "sheet_y": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F466-1F3FC", + "non_qualified": null, + "image": "1f466-1f3fc.png", + "sheet_x": 14, + "sheet_y": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F466-1F3FD", + "non_qualified": null, + "image": "1f466-1f3fd.png", + "sheet_x": 14, + "sheet_y": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F466-1F3FE", + "non_qualified": null, + "image": "1f466-1f3fe.png", + "sheet_x": 14, + "sheet_y": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F466-1F3FF", + "non_qualified": null, + "image": "1f466-1f3ff.png", + "sheet_x": 14, + "sheet_y": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "GIRL", + "unified": "1F467", + "non_qualified": null, + "docomo": "E6F0", + "au": "E4FA", + "softbank": "E002", + "google": "FE19C", + "image": "1f467.png", + "sheet_x": 14, + "sheet_y": 32, + "short_name": "girl", + "short_names": [ + "girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F467-1F3FB", + "non_qualified": null, + "image": "1f467-1f3fb.png", + "sheet_x": 14, + "sheet_y": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F467-1F3FC", + "non_qualified": null, + "image": "1f467-1f3fc.png", + "sheet_x": 14, + "sheet_y": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F467-1F3FD", + "non_qualified": null, + "image": "1f467-1f3fd.png", + "sheet_x": 14, + "sheet_y": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F467-1F3FE", + "non_qualified": null, + "image": "1f467-1f3fe.png", + "sheet_x": 14, + "sheet_y": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F467-1F3FF", + "non_qualified": null, + "image": "1f467-1f3ff.png", + "sheet_x": 14, + "sheet_y": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F33E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f33e.png", + "sheet_x": 14, + "sheet_y": 38, + "short_name": "male-farmer", + "short_names": [ + "male-farmer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 118, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F33E", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f33e.png", + "sheet_x": 14, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F33E", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f33e.png", + "sheet_x": 14, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F33E", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f33e.png", + "sheet_x": 14, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F33E", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f33e.png", + "sheet_x": 14, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F33E", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f33e.png", + "sheet_x": 14, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F373", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f373.png", + "sheet_x": 14, + "sheet_y": 44, + "short_name": "male-cook", + "short_names": [ + "male-cook" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 121, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F373", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f373.png", + "sheet_x": 14, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F373", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f373.png", + "sheet_x": 14, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F373", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f373.png", + "sheet_x": 14, + "sheet_y": 47, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F373", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f373.png", + "sheet_x": 14, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F373", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f373.png", + "sheet_x": 14, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F393", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f393.png", + "sheet_x": 14, + "sheet_y": 50, + "short_name": "male-student", + "short_names": [ + "male-student" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 109, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F393", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f393.png", + "sheet_x": 14, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F393", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f393.png", + "sheet_x": 14, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F393", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f393.png", + "sheet_x": 14, + "sheet_y": 53, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F393", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f393.png", + "sheet_x": 14, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F393", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f393.png", + "sheet_x": 14, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F3A4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f3a4.png", + "sheet_x": 14, + "sheet_y": 56, + "short_name": "male-singer", + "short_names": [ + "male-singer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 139, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F3A4", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f3a4.png", + "sheet_x": 15, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F3A4", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f3a4.png", + "sheet_x": 15, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F3A4", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f3a4.png", + "sheet_x": 15, + "sheet_y": 2, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F3A4", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f3a4.png", + "sheet_x": 15, + "sheet_y": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F3A4", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f3a4.png", + "sheet_x": 15, + "sheet_y": 4, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F3A8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f3a8.png", + "sheet_x": 15, + "sheet_y": 5, + "short_name": "male-artist", + "short_names": [ + "male-artist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 142, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F3A8", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f3a8.png", + "sheet_x": 15, + "sheet_y": 6, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F3A8", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f3a8.png", + "sheet_x": 15, + "sheet_y": 7, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F3A8", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f3a8.png", + "sheet_x": 15, + "sheet_y": 8, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F3A8", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f3a8.png", + "sheet_x": 15, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F3A8", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f3a8.png", + "sheet_x": 15, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F3EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f3eb.png", + "sheet_x": 15, + "sheet_y": 11, + "short_name": "male-teacher", + "short_names": [ + "male-teacher" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 112, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F3EB", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f3eb.png", + "sheet_x": 15, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F3EB", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f3eb.png", + "sheet_x": 15, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F3EB", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f3eb.png", + "sheet_x": 15, + "sheet_y": 14, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F3EB", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f3eb.png", + "sheet_x": 15, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F3EB", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f3eb.png", + "sheet_x": 15, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F3ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f3ed.png", + "sheet_x": 15, + "sheet_y": 17, + "short_name": "male-factory-worker", + "short_names": [ + "male-factory-worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 127, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F3ED", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f3ed.png", + "sheet_x": 15, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F3ED", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f3ed.png", + "sheet_x": 15, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F3ED", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f3ed.png", + "sheet_x": 15, + "sheet_y": 20, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F3ED", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f3ed.png", + "sheet_x": 15, + "sheet_y": 21, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F3ED", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f3ed.png", + "sheet_x": 15, + "sheet_y": 22, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F466-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f466-200d-1f466.png", + "sheet_x": 15, + "sheet_y": 23, + "short_name": "man-boy-boy", + "short_names": [ + "man-boy-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 322, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f466.png", + "sheet_x": 15, + "sheet_y": 24, + "short_name": "man-boy", + "short_names": [ + "man-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 321, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F467-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f467-200d-1f466.png", + "sheet_x": 15, + "sheet_y": 25, + "short_name": "man-girl-boy", + "short_names": [ + "man-girl-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 324, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F467-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f467-200d-1f467.png", + "sheet_x": 15, + "sheet_y": 26, + "short_name": "man-girl-girl", + "short_names": [ + "man-girl-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 325, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f467.png", + "sheet_x": 15, + "sheet_y": 27, + "short_name": "man-girl", + "short_names": [ + "man-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 323, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F468-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f468-200d-1f466.png", + "sheet_x": 15, + "sheet_y": 28, + "short_name": "man-man-boy", + "short_names": [ + "man-man-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 311, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F468-200D-1F466-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f468-200d-1f466-200d-1f466.png", + "sheet_x": 15, + "sheet_y": 29, + "short_name": "man-man-boy-boy", + "short_names": [ + "man-man-boy-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 314, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F468-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f468-200d-1f467.png", + "sheet_x": 15, + "sheet_y": 30, + "short_name": "man-man-girl", + "short_names": [ + "man-man-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 312, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F468-200D-1F467-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f468-200d-1f467-200d-1f466.png", + "sheet_x": 15, + "sheet_y": 31, + "short_name": "man-man-girl-boy", + "short_names": [ + "man-man-girl-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 313, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F468-200D-1F467-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f468-200d-1f467-200d-1f467.png", + "sheet_x": 15, + "sheet_y": 32, + "short_name": "man-man-girl-girl", + "short_names": [ + "man-man-girl-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 315, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F469-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f469-200d-1f466.png", + "sheet_x": 15, + "sheet_y": 33, + "short_name": "man-woman-boy", + "short_names": [ + "man-woman-boy", + "family" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 306, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F46A" + }, + { + "name": null, + "unified": "1F468-200D-1F469-200D-1F466-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f469-200d-1f466-200d-1f466.png", + "sheet_x": 15, + "sheet_y": 34, + "short_name": "man-woman-boy-boy", + "short_names": [ + "man-woman-boy-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 309, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F469-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f469-200d-1f467.png", + "sheet_x": 15, + "sheet_y": 35, + "short_name": "man-woman-girl", + "short_names": [ + "man-woman-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 307, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F469-200D-1F467-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f469-200d-1f467-200d-1f466.png", + "sheet_x": 15, + "sheet_y": 36, + "short_name": "man-woman-girl-boy", + "short_names": [ + "man-woman-girl-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 308, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F469-200D-1F467-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f469-200d-1f467-200d-1f467.png", + "sheet_x": 15, + "sheet_y": 37, + "short_name": "man-woman-girl-girl", + "short_names": [ + "man-woman-girl-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 310, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-1F4BB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f4bb.png", + "sheet_x": 15, + "sheet_y": 38, + "short_name": "male-technologist", + "short_names": [ + "male-technologist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 136, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F4BB", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f4bb.png", + "sheet_x": 15, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F4BB", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f4bb.png", + "sheet_x": 15, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F4BB", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f4bb.png", + "sheet_x": 15, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F4BB", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f4bb.png", + "sheet_x": 15, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F4BB", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f4bb.png", + "sheet_x": 15, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F4BC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f4bc.png", + "sheet_x": 15, + "sheet_y": 44, + "short_name": "male-office-worker", + "short_names": [ + "male-office-worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 130, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F4BC", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f4bc.png", + "sheet_x": 15, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F4BC", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f4bc.png", + "sheet_x": 15, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F4BC", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f4bc.png", + "sheet_x": 15, + "sheet_y": 47, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F4BC", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f4bc.png", + "sheet_x": 15, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F4BC", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f4bc.png", + "sheet_x": 15, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F527", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f527.png", + "sheet_x": 15, + "sheet_y": 50, + "short_name": "male-mechanic", + "short_names": [ + "male-mechanic" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 124, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F527", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f527.png", + "sheet_x": 15, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F527", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f527.png", + "sheet_x": 15, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F527", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f527.png", + "sheet_x": 15, + "sheet_y": 53, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F527", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f527.png", + "sheet_x": 15, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F527", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f527.png", + "sheet_x": 15, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F52C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f52c.png", + "sheet_x": 15, + "sheet_y": 56, + "short_name": "male-scientist", + "short_names": [ + "male-scientist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 133, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F52C", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f52c.png", + "sheet_x": 16, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F52C", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f52c.png", + "sheet_x": 16, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F52C", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f52c.png", + "sheet_x": 16, + "sheet_y": 2, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F52C", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f52c.png", + "sheet_x": 16, + "sheet_y": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F52C", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f52c.png", + "sheet_x": 16, + "sheet_y": 4, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F680", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f680.png", + "sheet_x": 16, + "sheet_y": 5, + "short_name": "male-astronaut", + "short_names": [ + "male-astronaut" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 148, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F680", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f680.png", + "sheet_x": 16, + "sheet_y": 6, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F680", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f680.png", + "sheet_x": 16, + "sheet_y": 7, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F680", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f680.png", + "sheet_x": 16, + "sheet_y": 8, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F680", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f680.png", + "sheet_x": 16, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F680", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f680.png", + "sheet_x": 16, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F692", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f692.png", + "sheet_x": 16, + "sheet_y": 11, + "short_name": "male-firefighter", + "short_names": [ + "male-firefighter" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 151, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F692", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f692.png", + "sheet_x": 16, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F692", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f692.png", + "sheet_x": 16, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F692", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f692.png", + "sheet_x": 16, + "sheet_y": 14, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F692", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f692.png", + "sheet_x": 16, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F692", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f692.png", + "sheet_x": 16, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F9AF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f9af.png", + "sheet_x": 16, + "sheet_y": 17, + "short_name": "man_with_probing_cane", + "short_names": [ + "man_with_probing_cane" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 222, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F9AF", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f9af.png", + "sheet_x": 16, + "sheet_y": 18, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F9AF", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f9af.png", + "sheet_x": 16, + "sheet_y": 19, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F9AF", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f9af.png", + "sheet_x": 16, + "sheet_y": 20, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F9AF", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f9af.png", + "sheet_x": 16, + "sheet_y": 21, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F9AF", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f9af.png", + "sheet_x": 16, + "sheet_y": 22, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F9B0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f9b0.png", + "sheet_x": 16, + "sheet_y": 23, + "short_name": "red_haired_man", + "short_names": [ + "red_haired_man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 57, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F9B0", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f9b0.png", + "sheet_x": 16, + "sheet_y": 24, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F9B0", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f9b0.png", + "sheet_x": 16, + "sheet_y": 25, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F9B0", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f9b0.png", + "sheet_x": 16, + "sheet_y": 26, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F9B0", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f9b0.png", + "sheet_x": 16, + "sheet_y": 27, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F9B0", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f9b0.png", + "sheet_x": 16, + "sheet_y": 28, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F9B1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f9b1.png", + "sheet_x": 16, + "sheet_y": 29, + "short_name": "curly_haired_man", + "short_names": [ + "curly_haired_man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 58, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F9B1", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f9b1.png", + "sheet_x": 16, + "sheet_y": 30, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F9B1", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f9b1.png", + "sheet_x": 16, + "sheet_y": 31, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F9B1", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f9b1.png", + "sheet_x": 16, + "sheet_y": 32, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F9B1", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f9b1.png", + "sheet_x": 16, + "sheet_y": 33, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F9B1", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f9b1.png", + "sheet_x": 16, + "sheet_y": 34, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F9B2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f9b2.png", + "sheet_x": 16, + "sheet_y": 35, + "short_name": "bald_man", + "short_names": [ + "bald_man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 60, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F9B2", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f9b2.png", + "sheet_x": 16, + "sheet_y": 36, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F9B2", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f9b2.png", + "sheet_x": 16, + "sheet_y": 37, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F9B2", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f9b2.png", + "sheet_x": 16, + "sheet_y": 38, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F9B2", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f9b2.png", + "sheet_x": 16, + "sheet_y": 39, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F9B2", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f9b2.png", + "sheet_x": 16, + "sheet_y": 40, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F9B3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f9b3.png", + "sheet_x": 16, + "sheet_y": 41, + "short_name": "white_haired_man", + "short_names": [ + "white_haired_man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 59, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F9B3", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f9b3.png", + "sheet_x": 16, + "sheet_y": 42, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F9B3", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f9b3.png", + "sheet_x": 16, + "sheet_y": 43, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F9B3", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f9b3.png", + "sheet_x": 16, + "sheet_y": 44, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F9B3", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f9b3.png", + "sheet_x": 16, + "sheet_y": 45, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F9B3", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f9b3.png", + "sheet_x": 16, + "sheet_y": 46, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F9BC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f9bc.png", + "sheet_x": 16, + "sheet_y": 47, + "short_name": "man_in_motorized_wheelchair", + "short_names": [ + "man_in_motorized_wheelchair" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 225, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F9BC", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f9bc.png", + "sheet_x": 16, + "sheet_y": 48, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F9BC", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f9bc.png", + "sheet_x": 16, + "sheet_y": 49, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F9BC", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f9bc.png", + "sheet_x": 16, + "sheet_y": 50, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F9BC", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f9bc.png", + "sheet_x": 16, + "sheet_y": 51, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F9BC", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f9bc.png", + "sheet_x": 16, + "sheet_y": 52, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-1F9BD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-1f9bd.png", + "sheet_x": 16, + "sheet_y": 53, + "short_name": "man_in_manual_wheelchair", + "short_names": [ + "man_in_manual_wheelchair" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 228, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-1F9BD", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f9bd.png", + "sheet_x": 16, + "sheet_y": 54, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-1F9BD", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f9bd.png", + "sheet_x": 16, + "sheet_y": 55, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-1F9BD", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f9bd.png", + "sheet_x": 16, + "sheet_y": 56, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-1F9BD", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f9bd.png", + "sheet_x": 17, + "sheet_y": 0, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-1F9BD", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f9bd.png", + "sheet_x": 17, + "sheet_y": 1, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-2695-FE0F", + "non_qualified": "1F468-200D-2695", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-2695-fe0f.png", + "sheet_x": 17, + "sheet_y": 2, + "short_name": "male-doctor", + "short_names": [ + "male-doctor" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 106, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-2695-FE0F", + "non_qualified": "1F468-1F3FB-200D-2695", + "image": "1f468-1f3fb-200d-2695-fe0f.png", + "sheet_x": 17, + "sheet_y": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-2695-FE0F", + "non_qualified": "1F468-1F3FC-200D-2695", + "image": "1f468-1f3fc-200d-2695-fe0f.png", + "sheet_x": 17, + "sheet_y": 4, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-2695-FE0F", + "non_qualified": "1F468-1F3FD-200D-2695", + "image": "1f468-1f3fd-200d-2695-fe0f.png", + "sheet_x": 17, + "sheet_y": 5, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-2695-FE0F", + "non_qualified": "1F468-1F3FE-200D-2695", + "image": "1f468-1f3fe-200d-2695-fe0f.png", + "sheet_x": 17, + "sheet_y": 6, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-2695-FE0F", + "non_qualified": "1F468-1F3FF-200D-2695", + "image": "1f468-1f3ff-200d-2695-fe0f.png", + "sheet_x": 17, + "sheet_y": 7, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-2696-FE0F", + "non_qualified": "1F468-200D-2696", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-2696-fe0f.png", + "sheet_x": 17, + "sheet_y": 8, + "short_name": "male-judge", + "short_names": [ + "male-judge" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 115, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-2696-FE0F", + "non_qualified": "1F468-1F3FB-200D-2696", + "image": "1f468-1f3fb-200d-2696-fe0f.png", + "sheet_x": 17, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-2696-FE0F", + "non_qualified": "1F468-1F3FC-200D-2696", + "image": "1f468-1f3fc-200d-2696-fe0f.png", + "sheet_x": 17, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-2696-FE0F", + "non_qualified": "1F468-1F3FD-200D-2696", + "image": "1f468-1f3fd-200d-2696-fe0f.png", + "sheet_x": 17, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-2696-FE0F", + "non_qualified": "1F468-1F3FE-200D-2696", + "image": "1f468-1f3fe-200d-2696-fe0f.png", + "sheet_x": 17, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-2696-FE0F", + "non_qualified": "1F468-1F3FF-200D-2696", + "image": "1f468-1f3ff-200d-2696-fe0f.png", + "sheet_x": 17, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-2708-FE0F", + "non_qualified": "1F468-200D-2708", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-2708-fe0f.png", + "sheet_x": 17, + "sheet_y": 14, + "short_name": "male-pilot", + "short_names": [ + "male-pilot" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 145, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB-200D-2708-FE0F", + "non_qualified": "1F468-1F3FB-200D-2708", + "image": "1f468-1f3fb-200d-2708-fe0f.png", + "sheet_x": 17, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC-200D-2708-FE0F", + "non_qualified": "1F468-1F3FC-200D-2708", + "image": "1f468-1f3fc-200d-2708-fe0f.png", + "sheet_x": 17, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD-200D-2708-FE0F", + "non_qualified": "1F468-1F3FD-200D-2708", + "image": "1f468-1f3fd-200d-2708-fe0f.png", + "sheet_x": 17, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE-200D-2708-FE0F", + "non_qualified": "1F468-1F3FE-200D-2708", + "image": "1f468-1f3fe-200d-2708-fe0f.png", + "sheet_x": 17, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF-200D-2708-FE0F", + "non_qualified": "1F468-1F3FF-200D-2708", + "image": "1f468-1f3ff-200d-2708-fe0f.png", + "sheet_x": 17, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F468-200D-2764-FE0F-200D-1F468", + "non_qualified": "1F468-200D-2764-200D-1F468", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-2764-fe0f-200d-1f468.png", + "sheet_x": 17, + "sheet_y": 20, + "short_name": "man-heart-man", + "short_names": [ + "man-heart-man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 303, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F468-200D-2764-FE0F-200D-1F48B-200D-1F468", + "non_qualified": "1F468-200D-2764-200D-1F48B-200D-1F468", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png", + "sheet_x": 17, + "sheet_y": 21, + "short_name": "man-kiss-man", + "short_names": [ + "man-kiss-man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 299, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MAN", + "unified": "1F468", + "non_qualified": null, + "docomo": "E6F0", + "au": "E4FC", + "softbank": "E004", + "google": "FE19D", + "image": "1f468.png", + "sheet_x": 17, + "sheet_y": 22, + "short_name": "man", + "short_names": [ + "man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F468-1F3FB", + "non_qualified": null, + "image": "1f468-1f3fb.png", + "sheet_x": 17, + "sheet_y": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F468-1F3FC", + "non_qualified": null, + "image": "1f468-1f3fc.png", + "sheet_x": 17, + "sheet_y": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F468-1F3FD", + "non_qualified": null, + "image": "1f468-1f3fd.png", + "sheet_x": 17, + "sheet_y": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F468-1F3FE", + "non_qualified": null, + "image": "1f468-1f3fe.png", + "sheet_x": 17, + "sheet_y": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F468-1F3FF", + "non_qualified": null, + "image": "1f468-1f3ff.png", + "sheet_x": 17, + "sheet_y": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F33E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f33e.png", + "sheet_x": 17, + "sheet_y": 28, + "short_name": "female-farmer", + "short_names": [ + "female-farmer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 119, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F33E", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f33e.png", + "sheet_x": 17, + "sheet_y": 29, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F33E", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f33e.png", + "sheet_x": 17, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F33E", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f33e.png", + "sheet_x": 17, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F33E", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f33e.png", + "sheet_x": 17, + "sheet_y": 32, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F33E", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f33e.png", + "sheet_x": 17, + "sheet_y": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F373", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f373.png", + "sheet_x": 17, + "sheet_y": 34, + "short_name": "female-cook", + "short_names": [ + "female-cook" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 122, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F373", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f373.png", + "sheet_x": 17, + "sheet_y": 35, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F373", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f373.png", + "sheet_x": 17, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F373", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f373.png", + "sheet_x": 17, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F373", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f373.png", + "sheet_x": 17, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F373", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f373.png", + "sheet_x": 17, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F393", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f393.png", + "sheet_x": 17, + "sheet_y": 40, + "short_name": "female-student", + "short_names": [ + "female-student" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 110, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F393", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f393.png", + "sheet_x": 17, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F393", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f393.png", + "sheet_x": 17, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F393", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f393.png", + "sheet_x": 17, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F393", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f393.png", + "sheet_x": 17, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F393", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f393.png", + "sheet_x": 17, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F3A4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f3a4.png", + "sheet_x": 17, + "sheet_y": 46, + "short_name": "female-singer", + "short_names": [ + "female-singer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 140, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F3A4", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f3a4.png", + "sheet_x": 17, + "sheet_y": 47, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F3A4", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f3a4.png", + "sheet_x": 17, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F3A4", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f3a4.png", + "sheet_x": 17, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F3A4", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f3a4.png", + "sheet_x": 17, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F3A4", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f3a4.png", + "sheet_x": 17, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F3A8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f3a8.png", + "sheet_x": 17, + "sheet_y": 52, + "short_name": "female-artist", + "short_names": [ + "female-artist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 143, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F3A8", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f3a8.png", + "sheet_x": 17, + "sheet_y": 53, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F3A8", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f3a8.png", + "sheet_x": 17, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F3A8", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f3a8.png", + "sheet_x": 17, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F3A8", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f3a8.png", + "sheet_x": 17, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F3A8", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f3a8.png", + "sheet_x": 18, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F3EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f3eb.png", + "sheet_x": 18, + "sheet_y": 1, + "short_name": "female-teacher", + "short_names": [ + "female-teacher" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 113, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F3EB", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f3eb.png", + "sheet_x": 18, + "sheet_y": 2, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F3EB", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f3eb.png", + "sheet_x": 18, + "sheet_y": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F3EB", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f3eb.png", + "sheet_x": 18, + "sheet_y": 4, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F3EB", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f3eb.png", + "sheet_x": 18, + "sheet_y": 5, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F3EB", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f3eb.png", + "sheet_x": 18, + "sheet_y": 6, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F3ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f3ed.png", + "sheet_x": 18, + "sheet_y": 7, + "short_name": "female-factory-worker", + "short_names": [ + "female-factory-worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 128, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F3ED", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f3ed.png", + "sheet_x": 18, + "sheet_y": 8, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F3ED", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f3ed.png", + "sheet_x": 18, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F3ED", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f3ed.png", + "sheet_x": 18, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F3ED", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f3ed.png", + "sheet_x": 18, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F3ED", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f3ed.png", + "sheet_x": 18, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F466-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f466-200d-1f466.png", + "sheet_x": 18, + "sheet_y": 13, + "short_name": "woman-boy-boy", + "short_names": [ + "woman-boy-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 327, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f466.png", + "sheet_x": 18, + "sheet_y": 14, + "short_name": "woman-boy", + "short_names": [ + "woman-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 326, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F467-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f467-200d-1f466.png", + "sheet_x": 18, + "sheet_y": 15, + "short_name": "woman-girl-boy", + "short_names": [ + "woman-girl-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 329, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F467-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f467-200d-1f467.png", + "sheet_x": 18, + "sheet_y": 16, + "short_name": "woman-girl-girl", + "short_names": [ + "woman-girl-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 330, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f467.png", + "sheet_x": 18, + "sheet_y": 17, + "short_name": "woman-girl", + "short_names": [ + "woman-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 328, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F469-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f469-200d-1f466.png", + "sheet_x": 18, + "sheet_y": 18, + "short_name": "woman-woman-boy", + "short_names": [ + "woman-woman-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 316, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F469-200D-1F466-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f469-200d-1f466-200d-1f466.png", + "sheet_x": 18, + "sheet_y": 19, + "short_name": "woman-woman-boy-boy", + "short_names": [ + "woman-woman-boy-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 319, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F469-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f469-200d-1f467.png", + "sheet_x": 18, + "sheet_y": 20, + "short_name": "woman-woman-girl", + "short_names": [ + "woman-woman-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 317, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F469-200D-1F467-200D-1F466", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f469-200d-1f467-200d-1f466.png", + "sheet_x": 18, + "sheet_y": 21, + "short_name": "woman-woman-girl-boy", + "short_names": [ + "woman-woman-girl-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 318, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F469-200D-1F467-200D-1F467", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f469-200d-1f467-200d-1f467.png", + "sheet_x": 18, + "sheet_y": 22, + "short_name": "woman-woman-girl-girl", + "short_names": [ + "woman-woman-girl-girl" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 320, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-1F4BB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f4bb.png", + "sheet_x": 18, + "sheet_y": 23, + "short_name": "female-technologist", + "short_names": [ + "female-technologist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 137, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F4BB", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f4bb.png", + "sheet_x": 18, + "sheet_y": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F4BB", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f4bb.png", + "sheet_x": 18, + "sheet_y": 25, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F4BB", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f4bb.png", + "sheet_x": 18, + "sheet_y": 26, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F4BB", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f4bb.png", + "sheet_x": 18, + "sheet_y": 27, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F4BB", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f4bb.png", + "sheet_x": 18, + "sheet_y": 28, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F4BC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f4bc.png", + "sheet_x": 18, + "sheet_y": 29, + "short_name": "female-office-worker", + "short_names": [ + "female-office-worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 131, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F4BC", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f4bc.png", + "sheet_x": 18, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F4BC", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f4bc.png", + "sheet_x": 18, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F4BC", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f4bc.png", + "sheet_x": 18, + "sheet_y": 32, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F4BC", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f4bc.png", + "sheet_x": 18, + "sheet_y": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F4BC", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f4bc.png", + "sheet_x": 18, + "sheet_y": 34, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F527", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f527.png", + "sheet_x": 18, + "sheet_y": 35, + "short_name": "female-mechanic", + "short_names": [ + "female-mechanic" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 125, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F527", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f527.png", + "sheet_x": 18, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F527", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f527.png", + "sheet_x": 18, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F527", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f527.png", + "sheet_x": 18, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F527", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f527.png", + "sheet_x": 18, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F527", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f527.png", + "sheet_x": 18, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F52C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f52c.png", + "sheet_x": 18, + "sheet_y": 41, + "short_name": "female-scientist", + "short_names": [ + "female-scientist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 134, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F52C", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f52c.png", + "sheet_x": 18, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F52C", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f52c.png", + "sheet_x": 18, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F52C", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f52c.png", + "sheet_x": 18, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F52C", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f52c.png", + "sheet_x": 18, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F52C", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f52c.png", + "sheet_x": 18, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F680", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f680.png", + "sheet_x": 18, + "sheet_y": 47, + "short_name": "female-astronaut", + "short_names": [ + "female-astronaut" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 149, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F680", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f680.png", + "sheet_x": 18, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F680", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f680.png", + "sheet_x": 18, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F680", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f680.png", + "sheet_x": 18, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F680", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f680.png", + "sheet_x": 18, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F680", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f680.png", + "sheet_x": 18, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F692", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f692.png", + "sheet_x": 18, + "sheet_y": 53, + "short_name": "female-firefighter", + "short_names": [ + "female-firefighter" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 152, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F692", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f692.png", + "sheet_x": 18, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F692", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f692.png", + "sheet_x": 18, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F692", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f692.png", + "sheet_x": 18, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F692", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f692.png", + "sheet_x": 19, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F692", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f692.png", + "sheet_x": 19, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F9AF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f9af.png", + "sheet_x": 19, + "sheet_y": 2, + "short_name": "woman_with_probing_cane", + "short_names": [ + "woman_with_probing_cane" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 223, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F9AF", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f9af.png", + "sheet_x": 19, + "sheet_y": 3, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F9AF", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f9af.png", + "sheet_x": 19, + "sheet_y": 4, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F9AF", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f9af.png", + "sheet_x": 19, + "sheet_y": 5, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F9AF", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f9af.png", + "sheet_x": 19, + "sheet_y": 6, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F9AF", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f9af.png", + "sheet_x": 19, + "sheet_y": 7, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F9B0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f9b0.png", + "sheet_x": 19, + "sheet_y": 8, + "short_name": "red_haired_woman", + "short_names": [ + "red_haired_woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 62, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F9B0", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f9b0.png", + "sheet_x": 19, + "sheet_y": 9, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F9B0", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f9b0.png", + "sheet_x": 19, + "sheet_y": 10, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F9B0", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f9b0.png", + "sheet_x": 19, + "sheet_y": 11, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F9B0", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f9b0.png", + "sheet_x": 19, + "sheet_y": 12, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F9B0", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f9b0.png", + "sheet_x": 19, + "sheet_y": 13, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F9B1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f9b1.png", + "sheet_x": 19, + "sheet_y": 14, + "short_name": "curly_haired_woman", + "short_names": [ + "curly_haired_woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 64, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F9B1", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f9b1.png", + "sheet_x": 19, + "sheet_y": 15, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F9B1", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f9b1.png", + "sheet_x": 19, + "sheet_y": 16, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F9B1", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f9b1.png", + "sheet_x": 19, + "sheet_y": 17, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F9B1", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f9b1.png", + "sheet_x": 19, + "sheet_y": 18, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F9B1", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f9b1.png", + "sheet_x": 19, + "sheet_y": 19, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F9B2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f9b2.png", + "sheet_x": 19, + "sheet_y": 20, + "short_name": "bald_woman", + "short_names": [ + "bald_woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 68, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F9B2", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f9b2.png", + "sheet_x": 19, + "sheet_y": 21, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F9B2", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f9b2.png", + "sheet_x": 19, + "sheet_y": 22, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F9B2", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f9b2.png", + "sheet_x": 19, + "sheet_y": 23, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F9B2", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f9b2.png", + "sheet_x": 19, + "sheet_y": 24, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F9B2", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f9b2.png", + "sheet_x": 19, + "sheet_y": 25, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F9B3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f9b3.png", + "sheet_x": 19, + "sheet_y": 26, + "short_name": "white_haired_woman", + "short_names": [ + "white_haired_woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 66, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F9B3", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f9b3.png", + "sheet_x": 19, + "sheet_y": 27, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F9B3", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f9b3.png", + "sheet_x": 19, + "sheet_y": 28, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F9B3", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f9b3.png", + "sheet_x": 19, + "sheet_y": 29, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F9B3", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f9b3.png", + "sheet_x": 19, + "sheet_y": 30, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F9B3", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f9b3.png", + "sheet_x": 19, + "sheet_y": 31, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F9BC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f9bc.png", + "sheet_x": 19, + "sheet_y": 32, + "short_name": "woman_in_motorized_wheelchair", + "short_names": [ + "woman_in_motorized_wheelchair" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 226, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F9BC", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f9bc.png", + "sheet_x": 19, + "sheet_y": 33, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F9BC", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f9bc.png", + "sheet_x": 19, + "sheet_y": 34, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F9BC", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f9bc.png", + "sheet_x": 19, + "sheet_y": 35, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F9BC", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f9bc.png", + "sheet_x": 19, + "sheet_y": 36, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F9BC", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f9bc.png", + "sheet_x": 19, + "sheet_y": 37, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-1F9BD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-1f9bd.png", + "sheet_x": 19, + "sheet_y": 38, + "short_name": "woman_in_manual_wheelchair", + "short_names": [ + "woman_in_manual_wheelchair" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 229, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-1F9BD", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f9bd.png", + "sheet_x": 19, + "sheet_y": 39, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-1F9BD", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f9bd.png", + "sheet_x": 19, + "sheet_y": 40, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-1F9BD", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f9bd.png", + "sheet_x": 19, + "sheet_y": 41, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-1F9BD", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f9bd.png", + "sheet_x": 19, + "sheet_y": 42, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-1F9BD", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f9bd.png", + "sheet_x": 19, + "sheet_y": 43, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-2695-FE0F", + "non_qualified": "1F469-200D-2695", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-2695-fe0f.png", + "sheet_x": 19, + "sheet_y": 44, + "short_name": "female-doctor", + "short_names": [ + "female-doctor" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 107, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-2695-FE0F", + "non_qualified": "1F469-1F3FB-200D-2695", + "image": "1f469-1f3fb-200d-2695-fe0f.png", + "sheet_x": 19, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-2695-FE0F", + "non_qualified": "1F469-1F3FC-200D-2695", + "image": "1f469-1f3fc-200d-2695-fe0f.png", + "sheet_x": 19, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-2695-FE0F", + "non_qualified": "1F469-1F3FD-200D-2695", + "image": "1f469-1f3fd-200d-2695-fe0f.png", + "sheet_x": 19, + "sheet_y": 47, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-2695-FE0F", + "non_qualified": "1F469-1F3FE-200D-2695", + "image": "1f469-1f3fe-200d-2695-fe0f.png", + "sheet_x": 19, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-2695-FE0F", + "non_qualified": "1F469-1F3FF-200D-2695", + "image": "1f469-1f3ff-200d-2695-fe0f.png", + "sheet_x": 19, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-2696-FE0F", + "non_qualified": "1F469-200D-2696", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-2696-fe0f.png", + "sheet_x": 19, + "sheet_y": 50, + "short_name": "female-judge", + "short_names": [ + "female-judge" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 116, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-2696-FE0F", + "non_qualified": "1F469-1F3FB-200D-2696", + "image": "1f469-1f3fb-200d-2696-fe0f.png", + "sheet_x": 19, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-2696-FE0F", + "non_qualified": "1F469-1F3FC-200D-2696", + "image": "1f469-1f3fc-200d-2696-fe0f.png", + "sheet_x": 19, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-2696-FE0F", + "non_qualified": "1F469-1F3FD-200D-2696", + "image": "1f469-1f3fd-200d-2696-fe0f.png", + "sheet_x": 19, + "sheet_y": 53, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-2696-FE0F", + "non_qualified": "1F469-1F3FE-200D-2696", + "image": "1f469-1f3fe-200d-2696-fe0f.png", + "sheet_x": 19, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-2696-FE0F", + "non_qualified": "1F469-1F3FF-200D-2696", + "image": "1f469-1f3ff-200d-2696-fe0f.png", + "sheet_x": 19, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-2708-FE0F", + "non_qualified": "1F469-200D-2708", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-2708-fe0f.png", + "sheet_x": 19, + "sheet_y": 56, + "short_name": "female-pilot", + "short_names": [ + "female-pilot" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 146, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB-200D-2708-FE0F", + "non_qualified": "1F469-1F3FB-200D-2708", + "image": "1f469-1f3fb-200d-2708-fe0f.png", + "sheet_x": 20, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC-200D-2708-FE0F", + "non_qualified": "1F469-1F3FC-200D-2708", + "image": "1f469-1f3fc-200d-2708-fe0f.png", + "sheet_x": 20, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD-200D-2708-FE0F", + "non_qualified": "1F469-1F3FD-200D-2708", + "image": "1f469-1f3fd-200d-2708-fe0f.png", + "sheet_x": 20, + "sheet_y": 2, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE-200D-2708-FE0F", + "non_qualified": "1F469-1F3FE-200D-2708", + "image": "1f469-1f3fe-200d-2708-fe0f.png", + "sheet_x": 20, + "sheet_y": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF-200D-2708-FE0F", + "non_qualified": "1F469-1F3FF-200D-2708", + "image": "1f469-1f3ff-200d-2708-fe0f.png", + "sheet_x": 20, + "sheet_y": 4, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F469-200D-2764-FE0F-200D-1F468", + "non_qualified": "1F469-200D-2764-200D-1F468", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-2764-fe0f-200d-1f468.png", + "sheet_x": 20, + "sheet_y": 5, + "short_name": "woman-heart-man", + "short_names": [ + "woman-heart-man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 302, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F491" + }, + { + "name": null, + "unified": "1F469-200D-2764-FE0F-200D-1F469", + "non_qualified": "1F469-200D-2764-200D-1F469", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-2764-fe0f-200d-1f469.png", + "sheet_x": 20, + "sheet_y": 6, + "short_name": "woman-heart-woman", + "short_names": [ + "woman-heart-woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 304, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F469-200D-2764-FE0F-200D-1F48B-200D-1F468", + "non_qualified": "1F469-200D-2764-200D-1F48B-200D-1F468", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.png", + "sheet_x": 20, + "sheet_y": 7, + "short_name": "woman-kiss-man", + "short_names": [ + "woman-kiss-man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 298, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F48F" + }, + { + "name": null, + "unified": "1F469-200D-2764-FE0F-200D-1F48B-200D-1F469", + "non_qualified": "1F469-200D-2764-200D-1F48B-200D-1F469", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png", + "sheet_x": 20, + "sheet_y": 8, + "short_name": "woman-kiss-woman", + "short_names": [ + "woman-kiss-woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 300, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WOMAN", + "unified": "1F469", + "non_qualified": null, + "docomo": "E6F0", + "au": "E4FA", + "softbank": "E005", + "google": "FE19E", + "image": "1f469.png", + "sheet_x": 20, + "sheet_y": 9, + "short_name": "woman", + "short_names": [ + "woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 61, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F469-1F3FB", + "non_qualified": null, + "image": "1f469-1f3fb.png", + "sheet_x": 20, + "sheet_y": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F469-1F3FC", + "non_qualified": null, + "image": "1f469-1f3fc.png", + "sheet_x": 20, + "sheet_y": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F469-1F3FD", + "non_qualified": null, + "image": "1f469-1f3fd.png", + "sheet_x": 20, + "sheet_y": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F469-1F3FE", + "non_qualified": null, + "image": "1f469-1f3fe.png", + "sheet_x": 20, + "sheet_y": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F469-1F3FF", + "non_qualified": null, + "image": "1f469-1f3ff.png", + "sheet_x": 20, + "sheet_y": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FAMILY", + "unified": "1F46A", + "non_qualified": null, + "docomo": null, + "au": "E501", + "softbank": null, + "google": "FE19F", + "image": "1f46a.png", + "sheet_x": 20, + "sheet_y": 15, + "short_name": "family", + "short_names": [ + "family", + "man-woman-boy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 305, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F468-200D-1F469-200D-1F466" + }, + { + "name": "MAN AND WOMAN HOLDING HANDS", + "unified": "1F46B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E428", + "google": "FE1A0", + "image": "1f46b.png", + "sheet_x": 20, + "sheet_y": 16, + "short_name": "couple", + "short_names": [ + "couple", + "man_and_woman_holding_hands", + "woman_and_man_holding_hands" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 295, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F46B-1F3FB", + "non_qualified": null, + "image": "1f46b-1f3fb.png", + "sheet_x": 20, + "sheet_y": 17, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F46B-1F3FC", + "non_qualified": null, + "image": "1f46b-1f3fc.png", + "sheet_x": 20, + "sheet_y": 18, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F46B-1F3FD", + "non_qualified": null, + "image": "1f46b-1f3fd.png", + "sheet_x": 20, + "sheet_y": 19, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F46B-1F3FE", + "non_qualified": null, + "image": "1f46b-1f3fe.png", + "sheet_x": 20, + "sheet_y": 20, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F46B-1F3FF", + "non_qualified": null, + "image": "1f46b-1f3ff.png", + "sheet_x": 20, + "sheet_y": 21, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FB-1F3FC": { + "unified": "1F469-1F3FB-200D-1F91D-200D-1F468-1F3FC", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc.png", + "sheet_x": 20, + "sheet_y": 22, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FB-1F3FD": { + "unified": "1F469-1F3FB-200D-1F91D-200D-1F468-1F3FD", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd.png", + "sheet_x": 20, + "sheet_y": 23, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FB-1F3FE": { + "unified": "1F469-1F3FB-200D-1F91D-200D-1F468-1F3FE", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe.png", + "sheet_x": 20, + "sheet_y": 24, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FB-1F3FF": { + "unified": "1F469-1F3FB-200D-1F91D-200D-1F468-1F3FF", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff.png", + "sheet_x": 20, + "sheet_y": 25, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC-1F3FB": { + "unified": "1F469-1F3FC-200D-1F91D-200D-1F468-1F3FB", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb.png", + "sheet_x": 20, + "sheet_y": 26, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC-1F3FD": { + "unified": "1F469-1F3FC-200D-1F91D-200D-1F468-1F3FD", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd.png", + "sheet_x": 20, + "sheet_y": 27, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC-1F3FE": { + "unified": "1F469-1F3FC-200D-1F91D-200D-1F468-1F3FE", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe.png", + "sheet_x": 20, + "sheet_y": 28, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC-1F3FF": { + "unified": "1F469-1F3FC-200D-1F91D-200D-1F468-1F3FF", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff.png", + "sheet_x": 20, + "sheet_y": 29, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FB": { + "unified": "1F469-1F3FD-200D-1F91D-200D-1F468-1F3FB", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb.png", + "sheet_x": 20, + "sheet_y": 30, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FC": { + "unified": "1F469-1F3FD-200D-1F91D-200D-1F468-1F3FC", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc.png", + "sheet_x": 20, + "sheet_y": 31, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FE": { + "unified": "1F469-1F3FD-200D-1F91D-200D-1F468-1F3FE", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe.png", + "sheet_x": 20, + "sheet_y": 32, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FF": { + "unified": "1F469-1F3FD-200D-1F91D-200D-1F468-1F3FF", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff.png", + "sheet_x": 20, + "sheet_y": 33, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FB": { + "unified": "1F469-1F3FE-200D-1F91D-200D-1F468-1F3FB", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb.png", + "sheet_x": 20, + "sheet_y": 34, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FC": { + "unified": "1F469-1F3FE-200D-1F91D-200D-1F468-1F3FC", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc.png", + "sheet_x": 20, + "sheet_y": 35, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FD": { + "unified": "1F469-1F3FE-200D-1F91D-200D-1F468-1F3FD", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd.png", + "sheet_x": 20, + "sheet_y": 36, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FF": { + "unified": "1F469-1F3FE-200D-1F91D-200D-1F468-1F3FF", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff.png", + "sheet_x": 20, + "sheet_y": 37, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FB": { + "unified": "1F469-1F3FF-200D-1F91D-200D-1F468-1F3FB", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb.png", + "sheet_x": 20, + "sheet_y": 38, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FC": { + "unified": "1F469-1F3FF-200D-1F91D-200D-1F468-1F3FC", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc.png", + "sheet_x": 20, + "sheet_y": 39, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FD": { + "unified": "1F469-1F3FF-200D-1F91D-200D-1F468-1F3FD", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd.png", + "sheet_x": 20, + "sheet_y": 40, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FE": { + "unified": "1F469-1F3FF-200D-1F91D-200D-1F468-1F3FE", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe.png", + "sheet_x": 20, + "sheet_y": 41, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "TWO MEN HOLDING HANDS", + "unified": "1F46C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f46c.png", + "sheet_x": 20, + "sheet_y": 42, + "short_name": "two_men_holding_hands", + "short_names": [ + "two_men_holding_hands", + "men_holding_hands" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 296, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F46C-1F3FB", + "non_qualified": null, + "image": "1f46c-1f3fb.png", + "sheet_x": 20, + "sheet_y": 43, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F46C-1F3FC", + "non_qualified": null, + "image": "1f46c-1f3fc.png", + "sheet_x": 20, + "sheet_y": 44, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F46C-1F3FD", + "non_qualified": null, + "image": "1f46c-1f3fd.png", + "sheet_x": 20, + "sheet_y": 45, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F46C-1F3FE", + "non_qualified": null, + "image": "1f46c-1f3fe.png", + "sheet_x": 20, + "sheet_y": 46, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F46C-1F3FF", + "non_qualified": null, + "image": "1f46c-1f3ff.png", + "sheet_x": 20, + "sheet_y": 47, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FB-1F3FC": { + "unified": "1F468-1F3FB-200D-1F91D-200D-1F468-1F3FC", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc.png", + "sheet_x": 20, + "sheet_y": 48, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FB-1F3FD": { + "unified": "1F468-1F3FB-200D-1F91D-200D-1F468-1F3FD", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd.png", + "sheet_x": 20, + "sheet_y": 49, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FB-1F3FE": { + "unified": "1F468-1F3FB-200D-1F91D-200D-1F468-1F3FE", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe.png", + "sheet_x": 20, + "sheet_y": 50, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FB-1F3FF": { + "unified": "1F468-1F3FB-200D-1F91D-200D-1F468-1F3FF", + "non_qualified": null, + "image": "1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff.png", + "sheet_x": 20, + "sheet_y": 51, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC-1F3FB": { + "unified": "1F468-1F3FC-200D-1F91D-200D-1F468-1F3FB", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb.png", + "sheet_x": 20, + "sheet_y": 52, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC-1F3FD": { + "unified": "1F468-1F3FC-200D-1F91D-200D-1F468-1F3FD", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd.png", + "sheet_x": 20, + "sheet_y": 53, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC-1F3FE": { + "unified": "1F468-1F3FC-200D-1F91D-200D-1F468-1F3FE", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe.png", + "sheet_x": 20, + "sheet_y": 54, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC-1F3FF": { + "unified": "1F468-1F3FC-200D-1F91D-200D-1F468-1F3FF", + "non_qualified": null, + "image": "1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff.png", + "sheet_x": 20, + "sheet_y": 55, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD-1F3FB": { + "unified": "1F468-1F3FD-200D-1F91D-200D-1F468-1F3FB", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb.png", + "sheet_x": 20, + "sheet_y": 56, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FC": { + "unified": "1F468-1F3FD-200D-1F91D-200D-1F468-1F3FC", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc.png", + "sheet_x": 21, + "sheet_y": 0, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FE": { + "unified": "1F468-1F3FD-200D-1F91D-200D-1F468-1F3FE", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe.png", + "sheet_x": 21, + "sheet_y": 1, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD-1F3FF": { + "unified": "1F468-1F3FD-200D-1F91D-200D-1F468-1F3FF", + "non_qualified": null, + "image": "1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff.png", + "sheet_x": 21, + "sheet_y": 2, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE-1F3FB": { + "unified": "1F468-1F3FE-200D-1F91D-200D-1F468-1F3FB", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb.png", + "sheet_x": 21, + "sheet_y": 3, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FC": { + "unified": "1F468-1F3FE-200D-1F91D-200D-1F468-1F3FC", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc.png", + "sheet_x": 21, + "sheet_y": 4, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FD": { + "unified": "1F468-1F3FE-200D-1F91D-200D-1F468-1F3FD", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd.png", + "sheet_x": 21, + "sheet_y": 5, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FF": { + "unified": "1F468-1F3FE-200D-1F91D-200D-1F468-1F3FF", + "non_qualified": null, + "image": "1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff.png", + "sheet_x": 21, + "sheet_y": 6, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF-1F3FB": { + "unified": "1F468-1F3FF-200D-1F91D-200D-1F468-1F3FB", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb.png", + "sheet_x": 21, + "sheet_y": 7, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FC": { + "unified": "1F468-1F3FF-200D-1F91D-200D-1F468-1F3FC", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc.png", + "sheet_x": 21, + "sheet_y": 8, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FD": { + "unified": "1F468-1F3FF-200D-1F91D-200D-1F468-1F3FD", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd.png", + "sheet_x": 21, + "sheet_y": 9, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FE": { + "unified": "1F468-1F3FF-200D-1F91D-200D-1F468-1F3FE", + "non_qualified": null, + "image": "1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe.png", + "sheet_x": 21, + "sheet_y": 10, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "TWO WOMEN HOLDING HANDS", + "unified": "1F46D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f46d.png", + "sheet_x": 21, + "sheet_y": 11, + "short_name": "two_women_holding_hands", + "short_names": [ + "two_women_holding_hands", + "women_holding_hands" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 294, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F46D-1F3FB", + "non_qualified": null, + "image": "1f46d-1f3fb.png", + "sheet_x": 21, + "sheet_y": 12, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F46D-1F3FC", + "non_qualified": null, + "image": "1f46d-1f3fc.png", + "sheet_x": 21, + "sheet_y": 13, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F46D-1F3FD", + "non_qualified": null, + "image": "1f46d-1f3fd.png", + "sheet_x": 21, + "sheet_y": 14, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F46D-1F3FE", + "non_qualified": null, + "image": "1f46d-1f3fe.png", + "sheet_x": 21, + "sheet_y": 15, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F46D-1F3FF", + "non_qualified": null, + "image": "1f46d-1f3ff.png", + "sheet_x": 21, + "sheet_y": 16, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FB-1F3FC": { + "unified": "1F469-1F3FB-200D-1F91D-200D-1F469-1F3FC", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc.png", + "sheet_x": 21, + "sheet_y": 17, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FB-1F3FD": { + "unified": "1F469-1F3FB-200D-1F91D-200D-1F469-1F3FD", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd.png", + "sheet_x": 21, + "sheet_y": 18, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FB-1F3FE": { + "unified": "1F469-1F3FB-200D-1F91D-200D-1F469-1F3FE", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe.png", + "sheet_x": 21, + "sheet_y": 19, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FB-1F3FF": { + "unified": "1F469-1F3FB-200D-1F91D-200D-1F469-1F3FF", + "non_qualified": null, + "image": "1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff.png", + "sheet_x": 21, + "sheet_y": 20, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC-1F3FB": { + "unified": "1F469-1F3FC-200D-1F91D-200D-1F469-1F3FB", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb.png", + "sheet_x": 21, + "sheet_y": 21, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC-1F3FD": { + "unified": "1F469-1F3FC-200D-1F91D-200D-1F469-1F3FD", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd.png", + "sheet_x": 21, + "sheet_y": 22, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC-1F3FE": { + "unified": "1F469-1F3FC-200D-1F91D-200D-1F469-1F3FE", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe.png", + "sheet_x": 21, + "sheet_y": 23, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC-1F3FF": { + "unified": "1F469-1F3FC-200D-1F91D-200D-1F469-1F3FF", + "non_qualified": null, + "image": "1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff.png", + "sheet_x": 21, + "sheet_y": 24, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD-1F3FB": { + "unified": "1F469-1F3FD-200D-1F91D-200D-1F469-1F3FB", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb.png", + "sheet_x": 21, + "sheet_y": 25, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FC": { + "unified": "1F469-1F3FD-200D-1F91D-200D-1F469-1F3FC", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc.png", + "sheet_x": 21, + "sheet_y": 26, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FE": { + "unified": "1F469-1F3FD-200D-1F91D-200D-1F469-1F3FE", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe.png", + "sheet_x": 21, + "sheet_y": 27, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD-1F3FF": { + "unified": "1F469-1F3FD-200D-1F91D-200D-1F469-1F3FF", + "non_qualified": null, + "image": "1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff.png", + "sheet_x": 21, + "sheet_y": 28, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE-1F3FB": { + "unified": "1F469-1F3FE-200D-1F91D-200D-1F469-1F3FB", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb.png", + "sheet_x": 21, + "sheet_y": 29, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FC": { + "unified": "1F469-1F3FE-200D-1F91D-200D-1F469-1F3FC", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc.png", + "sheet_x": 21, + "sheet_y": 30, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FD": { + "unified": "1F469-1F3FE-200D-1F91D-200D-1F469-1F3FD", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd.png", + "sheet_x": 21, + "sheet_y": 31, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FF": { + "unified": "1F469-1F3FE-200D-1F91D-200D-1F469-1F3FF", + "non_qualified": null, + "image": "1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff.png", + "sheet_x": 21, + "sheet_y": 32, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF-1F3FB": { + "unified": "1F469-1F3FF-200D-1F91D-200D-1F469-1F3FB", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb.png", + "sheet_x": 21, + "sheet_y": 33, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FC": { + "unified": "1F469-1F3FF-200D-1F91D-200D-1F469-1F3FC", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc.png", + "sheet_x": 21, + "sheet_y": 34, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FD": { + "unified": "1F469-1F3FF-200D-1F91D-200D-1F469-1F3FD", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd.png", + "sheet_x": 21, + "sheet_y": 35, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FE": { + "unified": "1F469-1F3FF-200D-1F91D-200D-1F469-1F3FE", + "non_qualified": null, + "image": "1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe.png", + "sheet_x": 21, + "sheet_y": 36, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F46E-200D-2640-FE0F", + "non_qualified": "1F46E-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f46e-200d-2640-fe0f.png", + "sheet_x": 21, + "sheet_y": 37, + "short_name": "female-police-officer", + "short_names": [ + "female-police-officer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 155, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F46E-1F3FB-200D-2640-FE0F", + "non_qualified": "1F46E-1F3FB-200D-2640", + "image": "1f46e-1f3fb-200d-2640-fe0f.png", + "sheet_x": 21, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F46E-1F3FC-200D-2640-FE0F", + "non_qualified": "1F46E-1F3FC-200D-2640", + "image": "1f46e-1f3fc-200d-2640-fe0f.png", + "sheet_x": 21, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F46E-1F3FD-200D-2640-FE0F", + "non_qualified": "1F46E-1F3FD-200D-2640", + "image": "1f46e-1f3fd-200d-2640-fe0f.png", + "sheet_x": 21, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F46E-1F3FE-200D-2640-FE0F", + "non_qualified": "1F46E-1F3FE-200D-2640", + "image": "1f46e-1f3fe-200d-2640-fe0f.png", + "sheet_x": 21, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F46E-1F3FF-200D-2640-FE0F", + "non_qualified": "1F46E-1F3FF-200D-2640", + "image": "1f46e-1f3ff-200d-2640-fe0f.png", + "sheet_x": 21, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F46E-200D-2642-FE0F", + "non_qualified": "1F46E-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f46e-200d-2642-fe0f.png", + "sheet_x": 21, + "sheet_y": 43, + "short_name": "male-police-officer", + "short_names": [ + "male-police-officer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 154, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F46E-1F3FB-200D-2642-FE0F", + "non_qualified": "1F46E-1F3FB-200D-2642", + "image": "1f46e-1f3fb-200d-2642-fe0f.png", + "sheet_x": 21, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F46E-1F3FC-200D-2642-FE0F", + "non_qualified": "1F46E-1F3FC-200D-2642", + "image": "1f46e-1f3fc-200d-2642-fe0f.png", + "sheet_x": 21, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F46E-1F3FD-200D-2642-FE0F", + "non_qualified": "1F46E-1F3FD-200D-2642", + "image": "1f46e-1f3fd-200d-2642-fe0f.png", + "sheet_x": 21, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F46E-1F3FE-200D-2642-FE0F", + "non_qualified": "1F46E-1F3FE-200D-2642", + "image": "1f46e-1f3fe-200d-2642-fe0f.png", + "sheet_x": 21, + "sheet_y": 47, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F46E-1F3FF-200D-2642-FE0F", + "non_qualified": "1F46E-1F3FF-200D-2642", + "image": "1f46e-1f3ff-200d-2642-fe0f.png", + "sheet_x": 21, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F46E" + }, + { + "name": "POLICE OFFICER", + "unified": "1F46E", + "non_qualified": null, + "docomo": null, + "au": "E5DD", + "softbank": "E152", + "google": "FE1A1", + "image": "1f46e.png", + "sheet_x": 21, + "sheet_y": 49, + "short_name": "cop", + "short_names": [ + "cop" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 153, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F46E-1F3FB", + "non_qualified": null, + "image": "1f46e-1f3fb.png", + "sheet_x": 21, + "sheet_y": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F46E-1F3FC", + "non_qualified": null, + "image": "1f46e-1f3fc.png", + "sheet_x": 21, + "sheet_y": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F46E-1F3FD", + "non_qualified": null, + "image": "1f46e-1f3fd.png", + "sheet_x": 21, + "sheet_y": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F46E-1F3FE", + "non_qualified": null, + "image": "1f46e-1f3fe.png", + "sheet_x": 21, + "sheet_y": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F46E-1F3FF", + "non_qualified": null, + "image": "1f46e-1f3ff.png", + "sheet_x": 21, + "sheet_y": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F46E-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F46F-200D-2640-FE0F", + "non_qualified": "1F46F-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f46f-200d-2640-fe0f.png", + "sheet_x": 21, + "sheet_y": 55, + "short_name": "woman-with-bunny-ears-partying", + "short_names": [ + "woman-with-bunny-ears-partying" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 238, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F46F" + }, + { + "name": null, + "unified": "1F46F-200D-2642-FE0F", + "non_qualified": "1F46F-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f46f-200d-2642-fe0f.png", + "sheet_x": 21, + "sheet_y": 56, + "short_name": "man-with-bunny-ears-partying", + "short_names": [ + "man-with-bunny-ears-partying" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 237, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WOMAN WITH BUNNY EARS", + "unified": "1F46F", + "non_qualified": null, + "docomo": null, + "au": "EADB", + "softbank": "E429", + "google": "FE1A2", + "image": "1f46f.png", + "sheet_x": 22, + "sheet_y": 0, + "short_name": "dancers", + "short_names": [ + "dancers" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 236, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F46F-200D-2640-FE0F" + }, + { + "name": "BRIDE WITH VEIL", + "unified": "1F470", + "non_qualified": null, + "docomo": null, + "au": "EAE9", + "softbank": null, + "google": "FE1A3", + "image": "1f470.png", + "sheet_x": 22, + "sheet_y": 1, + "short_name": "bride_with_veil", + "short_names": [ + "bride_with_veil" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 173, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F470-1F3FB", + "non_qualified": null, + "image": "1f470-1f3fb.png", + "sheet_x": 22, + "sheet_y": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F470-1F3FC", + "non_qualified": null, + "image": "1f470-1f3fc.png", + "sheet_x": 22, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F470-1F3FD", + "non_qualified": null, + "image": "1f470-1f3fd.png", + "sheet_x": 22, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F470-1F3FE", + "non_qualified": null, + "image": "1f470-1f3fe.png", + "sheet_x": 22, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F470-1F3FF", + "non_qualified": null, + "image": "1f470-1f3ff.png", + "sheet_x": 22, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F471-200D-2640-FE0F", + "non_qualified": "1F471-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f471-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 7, + "short_name": "blond-haired-woman", + "short_names": [ + "blond-haired-woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 70, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F471-1F3FB-200D-2640-FE0F", + "non_qualified": "1F471-1F3FB-200D-2640", + "image": "1f471-1f3fb-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 8, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F471-1F3FC-200D-2640-FE0F", + "non_qualified": "1F471-1F3FC-200D-2640", + "image": "1f471-1f3fc-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F471-1F3FD-200D-2640-FE0F", + "non_qualified": "1F471-1F3FD-200D-2640", + "image": "1f471-1f3fd-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F471-1F3FE-200D-2640-FE0F", + "non_qualified": "1F471-1F3FE-200D-2640", + "image": "1f471-1f3fe-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F471-1F3FF-200D-2640-FE0F", + "non_qualified": "1F471-1F3FF-200D-2640", + "image": "1f471-1f3ff-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F471-200D-2642-FE0F", + "non_qualified": "1F471-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f471-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 13, + "short_name": "blond-haired-man", + "short_names": [ + "blond-haired-man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 71, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F471-1F3FB-200D-2642-FE0F", + "non_qualified": "1F471-1F3FB-200D-2642", + "image": "1f471-1f3fb-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 14, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F471-1F3FC-200D-2642-FE0F", + "non_qualified": "1F471-1F3FC-200D-2642", + "image": "1f471-1f3fc-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F471-1F3FD-200D-2642-FE0F", + "non_qualified": "1F471-1F3FD-200D-2642", + "image": "1f471-1f3fd-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F471-1F3FE-200D-2642-FE0F", + "non_qualified": "1F471-1F3FE-200D-2642", + "image": "1f471-1f3fe-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F471-1F3FF-200D-2642-FE0F", + "non_qualified": "1F471-1F3FF-200D-2642", + "image": "1f471-1f3ff-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F471" + }, + { + "name": "PERSON WITH BLOND HAIR", + "unified": "1F471", + "non_qualified": null, + "docomo": null, + "au": "EB13", + "softbank": "E515", + "google": "FE1A4", + "image": "1f471.png", + "sheet_x": 22, + "sheet_y": 19, + "short_name": "person_with_blond_hair", + "short_names": [ + "person_with_blond_hair" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F471-1F3FB", + "non_qualified": null, + "image": "1f471-1f3fb.png", + "sheet_x": 22, + "sheet_y": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F471-1F3FC", + "non_qualified": null, + "image": "1f471-1f3fc.png", + "sheet_x": 22, + "sheet_y": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F471-1F3FD", + "non_qualified": null, + "image": "1f471-1f3fd.png", + "sheet_x": 22, + "sheet_y": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F471-1F3FE", + "non_qualified": null, + "image": "1f471-1f3fe.png", + "sheet_x": 22, + "sheet_y": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F471-1F3FF", + "non_qualified": null, + "image": "1f471-1f3ff.png", + "sheet_x": 22, + "sheet_y": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F471-200D-2642-FE0F" + }, + { + "name": "MAN WITH GUA PI MAO", + "unified": "1F472", + "non_qualified": null, + "docomo": null, + "au": "EB14", + "softbank": "E516", + "google": "FE1A5", + "image": "1f472.png", + "sheet_x": 22, + "sheet_y": 25, + "short_name": "man_with_gua_pi_mao", + "short_names": [ + "man_with_gua_pi_mao" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 170, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F472-1F3FB", + "non_qualified": null, + "image": "1f472-1f3fb.png", + "sheet_x": 22, + "sheet_y": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F472-1F3FC", + "non_qualified": null, + "image": "1f472-1f3fc.png", + "sheet_x": 22, + "sheet_y": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F472-1F3FD", + "non_qualified": null, + "image": "1f472-1f3fd.png", + "sheet_x": 22, + "sheet_y": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F472-1F3FE", + "non_qualified": null, + "image": "1f472-1f3fe.png", + "sheet_x": 22, + "sheet_y": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F472-1F3FF", + "non_qualified": null, + "image": "1f472-1f3ff.png", + "sheet_x": 22, + "sheet_y": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F473-200D-2640-FE0F", + "non_qualified": "1F473-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f473-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 31, + "short_name": "woman-wearing-turban", + "short_names": [ + "woman-wearing-turban" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 169, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F473-1F3FB-200D-2640-FE0F", + "non_qualified": "1F473-1F3FB-200D-2640", + "image": "1f473-1f3fb-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 32, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F473-1F3FC-200D-2640-FE0F", + "non_qualified": "1F473-1F3FC-200D-2640", + "image": "1f473-1f3fc-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F473-1F3FD-200D-2640-FE0F", + "non_qualified": "1F473-1F3FD-200D-2640", + "image": "1f473-1f3fd-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 34, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F473-1F3FE-200D-2640-FE0F", + "non_qualified": "1F473-1F3FE-200D-2640", + "image": "1f473-1f3fe-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 35, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F473-1F3FF-200D-2640-FE0F", + "non_qualified": "1F473-1F3FF-200D-2640", + "image": "1f473-1f3ff-200d-2640-fe0f.png", + "sheet_x": 22, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F473-200D-2642-FE0F", + "non_qualified": "1F473-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f473-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 37, + "short_name": "man-wearing-turban", + "short_names": [ + "man-wearing-turban" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 168, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F473-1F3FB-200D-2642-FE0F", + "non_qualified": "1F473-1F3FB-200D-2642", + "image": "1f473-1f3fb-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F473-1F3FC-200D-2642-FE0F", + "non_qualified": "1F473-1F3FC-200D-2642", + "image": "1f473-1f3fc-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F473-1F3FD-200D-2642-FE0F", + "non_qualified": "1F473-1F3FD-200D-2642", + "image": "1f473-1f3fd-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F473-1F3FE-200D-2642-FE0F", + "non_qualified": "1F473-1F3FE-200D-2642", + "image": "1f473-1f3fe-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F473-1F3FF-200D-2642-FE0F", + "non_qualified": "1F473-1F3FF-200D-2642", + "image": "1f473-1f3ff-200d-2642-fe0f.png", + "sheet_x": 22, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F473" + }, + { + "name": "MAN WITH TURBAN", + "unified": "1F473", + "non_qualified": null, + "docomo": null, + "au": "EB15", + "softbank": "E517", + "google": "FE1A6", + "image": "1f473.png", + "sheet_x": 22, + "sheet_y": 43, + "short_name": "man_with_turban", + "short_names": [ + "man_with_turban" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 167, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F473-1F3FB", + "non_qualified": null, + "image": "1f473-1f3fb.png", + "sheet_x": 22, + "sheet_y": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F473-1F3FC", + "non_qualified": null, + "image": "1f473-1f3fc.png", + "sheet_x": 22, + "sheet_y": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F473-1F3FD", + "non_qualified": null, + "image": "1f473-1f3fd.png", + "sheet_x": 22, + "sheet_y": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F473-1F3FE", + "non_qualified": null, + "image": "1f473-1f3fe.png", + "sheet_x": 22, + "sheet_y": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F473-1F3FF", + "non_qualified": null, + "image": "1f473-1f3ff.png", + "sheet_x": 22, + "sheet_y": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F473-200D-2642-FE0F" + }, + { + "name": "OLDER MAN", + "unified": "1F474", + "non_qualified": null, + "docomo": null, + "au": "EB16", + "softbank": "E518", + "google": "FE1A7", + "image": "1f474.png", + "sheet_x": 22, + "sheet_y": 49, + "short_name": "older_man", + "short_names": [ + "older_man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 73, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F474-1F3FB", + "non_qualified": null, + "image": "1f474-1f3fb.png", + "sheet_x": 22, + "sheet_y": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F474-1F3FC", + "non_qualified": null, + "image": "1f474-1f3fc.png", + "sheet_x": 22, + "sheet_y": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F474-1F3FD", + "non_qualified": null, + "image": "1f474-1f3fd.png", + "sheet_x": 22, + "sheet_y": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F474-1F3FE", + "non_qualified": null, + "image": "1f474-1f3fe.png", + "sheet_x": 22, + "sheet_y": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F474-1F3FF", + "non_qualified": null, + "image": "1f474-1f3ff.png", + "sheet_x": 22, + "sheet_y": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "OLDER WOMAN", + "unified": "1F475", + "non_qualified": null, + "docomo": null, + "au": "EB17", + "softbank": "E519", + "google": "FE1A8", + "image": "1f475.png", + "sheet_x": 22, + "sheet_y": 55, + "short_name": "older_woman", + "short_names": [ + "older_woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 74, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F475-1F3FB", + "non_qualified": null, + "image": "1f475-1f3fb.png", + "sheet_x": 22, + "sheet_y": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F475-1F3FC", + "non_qualified": null, + "image": "1f475-1f3fc.png", + "sheet_x": 23, + "sheet_y": 0, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F475-1F3FD", + "non_qualified": null, + "image": "1f475-1f3fd.png", + "sheet_x": 23, + "sheet_y": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F475-1F3FE", + "non_qualified": null, + "image": "1f475-1f3fe.png", + "sheet_x": 23, + "sheet_y": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F475-1F3FF", + "non_qualified": null, + "image": "1f475-1f3ff.png", + "sheet_x": 23, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "BABY", + "unified": "1F476", + "non_qualified": null, + "docomo": null, + "au": "EB18", + "softbank": "E51A", + "google": "FE1A9", + "image": "1f476.png", + "sheet_x": 23, + "sheet_y": 4, + "short_name": "baby", + "short_names": [ + "baby" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F476-1F3FB", + "non_qualified": null, + "image": "1f476-1f3fb.png", + "sheet_x": 23, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F476-1F3FC", + "non_qualified": null, + "image": "1f476-1f3fc.png", + "sheet_x": 23, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F476-1F3FD", + "non_qualified": null, + "image": "1f476-1f3fd.png", + "sheet_x": 23, + "sheet_y": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F476-1F3FE", + "non_qualified": null, + "image": "1f476-1f3fe.png", + "sheet_x": 23, + "sheet_y": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F476-1F3FF", + "non_qualified": null, + "image": "1f476-1f3ff.png", + "sheet_x": 23, + "sheet_y": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F477-200D-2640-FE0F", + "non_qualified": "1F477-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f477-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 10, + "short_name": "female-construction-worker", + "short_names": [ + "female-construction-worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 164, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F477-1F3FB-200D-2640-FE0F", + "non_qualified": "1F477-1F3FB-200D-2640", + "image": "1f477-1f3fb-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F477-1F3FC-200D-2640-FE0F", + "non_qualified": "1F477-1F3FC-200D-2640", + "image": "1f477-1f3fc-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F477-1F3FD-200D-2640-FE0F", + "non_qualified": "1F477-1F3FD-200D-2640", + "image": "1f477-1f3fd-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F477-1F3FE-200D-2640-FE0F", + "non_qualified": "1F477-1F3FE-200D-2640", + "image": "1f477-1f3fe-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 14, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F477-1F3FF-200D-2640-FE0F", + "non_qualified": "1F477-1F3FF-200D-2640", + "image": "1f477-1f3ff-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F477-200D-2642-FE0F", + "non_qualified": "1F477-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f477-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 16, + "short_name": "male-construction-worker", + "short_names": [ + "male-construction-worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 163, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F477-1F3FB-200D-2642-FE0F", + "non_qualified": "1F477-1F3FB-200D-2642", + "image": "1f477-1f3fb-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F477-1F3FC-200D-2642-FE0F", + "non_qualified": "1F477-1F3FC-200D-2642", + "image": "1f477-1f3fc-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F477-1F3FD-200D-2642-FE0F", + "non_qualified": "1F477-1F3FD-200D-2642", + "image": "1f477-1f3fd-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F477-1F3FE-200D-2642-FE0F", + "non_qualified": "1F477-1F3FE-200D-2642", + "image": "1f477-1f3fe-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 20, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F477-1F3FF-200D-2642-FE0F", + "non_qualified": "1F477-1F3FF-200D-2642", + "image": "1f477-1f3ff-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 21, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F477" + }, + { + "name": "CONSTRUCTION WORKER", + "unified": "1F477", + "non_qualified": null, + "docomo": null, + "au": "EB19", + "softbank": "E51B", + "google": "FE1AA", + "image": "1f477.png", + "sheet_x": 23, + "sheet_y": 22, + "short_name": "construction_worker", + "short_names": [ + "construction_worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 162, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F477-1F3FB", + "non_qualified": null, + "image": "1f477-1f3fb.png", + "sheet_x": 23, + "sheet_y": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F477-1F3FC", + "non_qualified": null, + "image": "1f477-1f3fc.png", + "sheet_x": 23, + "sheet_y": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F477-1F3FD", + "non_qualified": null, + "image": "1f477-1f3fd.png", + "sheet_x": 23, + "sheet_y": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F477-1F3FE", + "non_qualified": null, + "image": "1f477-1f3fe.png", + "sheet_x": 23, + "sheet_y": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F477-1F3FF", + "non_qualified": null, + "image": "1f477-1f3ff.png", + "sheet_x": 23, + "sheet_y": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F477-200D-2642-FE0F" + }, + { + "name": "PRINCESS", + "unified": "1F478", + "non_qualified": null, + "docomo": null, + "au": "EB1A", + "softbank": "E51C", + "google": "FE1AB", + "image": "1f478.png", + "sheet_x": 23, + "sheet_y": 28, + "short_name": "princess", + "short_names": [ + "princess" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 166, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F478-1F3FB", + "non_qualified": null, + "image": "1f478-1f3fb.png", + "sheet_x": 23, + "sheet_y": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F478-1F3FC", + "non_qualified": null, + "image": "1f478-1f3fc.png", + "sheet_x": 23, + "sheet_y": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F478-1F3FD", + "non_qualified": null, + "image": "1f478-1f3fd.png", + "sheet_x": 23, + "sheet_y": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F478-1F3FE", + "non_qualified": null, + "image": "1f478-1f3fe.png", + "sheet_x": 23, + "sheet_y": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F478-1F3FF", + "non_qualified": null, + "image": "1f478-1f3ff.png", + "sheet_x": 23, + "sheet_y": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "JAPANESE OGRE", + "unified": "1F479", + "non_qualified": null, + "docomo": null, + "au": "EB44", + "softbank": null, + "google": "FE1AC", + "image": "1f479.png", + "sheet_x": 23, + "sheet_y": 34, + "short_name": "japanese_ogre", + "short_names": [ + "japanese_ogre" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 97, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "JAPANESE GOBLIN", + "unified": "1F47A", + "non_qualified": null, + "docomo": null, + "au": "EB45", + "softbank": null, + "google": "FE1AD", + "image": "1f47a.png", + "sheet_x": 23, + "sheet_y": 35, + "short_name": "japanese_goblin", + "short_names": [ + "japanese_goblin" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 98, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GHOST", + "unified": "1F47B", + "non_qualified": null, + "docomo": null, + "au": "E4CB", + "softbank": "E11B", + "google": "FE1AE", + "image": "1f47b.png", + "sheet_x": 23, + "sheet_y": 36, + "short_name": "ghost", + "short_names": [ + "ghost" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 99, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BABY ANGEL", + "unified": "1F47C", + "non_qualified": null, + "docomo": null, + "au": "E5BF", + "softbank": "E04E", + "google": "FE1AF", + "image": "1f47c.png", + "sheet_x": 23, + "sheet_y": 37, + "short_name": "angel", + "short_names": [ + "angel" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 176, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F47C-1F3FB", + "non_qualified": null, + "image": "1f47c-1f3fb.png", + "sheet_x": 23, + "sheet_y": 38, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F47C-1F3FC", + "non_qualified": null, + "image": "1f47c-1f3fc.png", + "sheet_x": 23, + "sheet_y": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F47C-1F3FD", + "non_qualified": null, + "image": "1f47c-1f3fd.png", + "sheet_x": 23, + "sheet_y": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F47C-1F3FE", + "non_qualified": null, + "image": "1f47c-1f3fe.png", + "sheet_x": 23, + "sheet_y": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F47C-1F3FF", + "non_qualified": null, + "image": "1f47c-1f3ff.png", + "sheet_x": 23, + "sheet_y": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "EXTRATERRESTRIAL ALIEN", + "unified": "1F47D", + "non_qualified": null, + "docomo": null, + "au": "E50E", + "softbank": "E10C", + "google": "FE1B0", + "image": "1f47d.png", + "sheet_x": 23, + "sheet_y": 43, + "short_name": "alien", + "short_names": [ + "alien" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 100, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ALIEN MONSTER", + "unified": "1F47E", + "non_qualified": null, + "docomo": null, + "au": "E4EC", + "softbank": "E12B", + "google": "FE1B1", + "image": "1f47e.png", + "sheet_x": 23, + "sheet_y": 44, + "short_name": "space_invader", + "short_names": [ + "space_invader" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 101, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "IMP", + "unified": "1F47F", + "non_qualified": null, + "docomo": null, + "au": "E4EF", + "softbank": "E11A", + "google": "FE1B2", + "image": "1f47f.png", + "sheet_x": 23, + "sheet_y": 45, + "short_name": "imp", + "short_names": [ + "imp" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 92, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SKULL", + "unified": "1F480", + "non_qualified": null, + "docomo": null, + "au": "E4F8", + "softbank": "E11C", + "google": "FE1B3", + "image": "1f480.png", + "sheet_x": 23, + "sheet_y": 46, + "short_name": "skull", + "short_names": [ + "skull" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 93, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F481-200D-2640-FE0F", + "non_qualified": "1F481-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f481-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 47, + "short_name": "woman-tipping-hand", + "short_names": [ + "woman-tipping-hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 89, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F481-1F3FB-200D-2640-FE0F", + "non_qualified": "1F481-1F3FB-200D-2640", + "image": "1f481-1f3fb-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F481-1F3FC-200D-2640-FE0F", + "non_qualified": "1F481-1F3FC-200D-2640", + "image": "1f481-1f3fc-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F481-1F3FD-200D-2640-FE0F", + "non_qualified": "1F481-1F3FD-200D-2640", + "image": "1f481-1f3fd-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F481-1F3FE-200D-2640-FE0F", + "non_qualified": "1F481-1F3FE-200D-2640", + "image": "1f481-1f3fe-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F481-1F3FF-200D-2640-FE0F", + "non_qualified": "1F481-1F3FF-200D-2640", + "image": "1f481-1f3ff-200d-2640-fe0f.png", + "sheet_x": 23, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F481" + }, + { + "name": null, + "unified": "1F481-200D-2642-FE0F", + "non_qualified": "1F481-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f481-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 53, + "short_name": "man-tipping-hand", + "short_names": [ + "man-tipping-hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 88, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F481-1F3FB-200D-2642-FE0F", + "non_qualified": "1F481-1F3FB-200D-2642", + "image": "1f481-1f3fb-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F481-1F3FC-200D-2642-FE0F", + "non_qualified": "1F481-1F3FC-200D-2642", + "image": "1f481-1f3fc-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F481-1F3FD-200D-2642-FE0F", + "non_qualified": "1F481-1F3FD-200D-2642", + "image": "1f481-1f3fd-200d-2642-fe0f.png", + "sheet_x": 23, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F481-1F3FE-200D-2642-FE0F", + "non_qualified": "1F481-1F3FE-200D-2642", + "image": "1f481-1f3fe-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F481-1F3FF-200D-2642-FE0F", + "non_qualified": "1F481-1F3FF-200D-2642", + "image": "1f481-1f3ff-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "INFORMATION DESK PERSON", + "unified": "1F481", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E253", + "google": "FE1B4", + "image": "1f481.png", + "sheet_x": 24, + "sheet_y": 2, + "short_name": "information_desk_person", + "short_names": [ + "information_desk_person" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 87, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F481-1F3FB", + "non_qualified": null, + "image": "1f481-1f3fb.png", + "sheet_x": 24, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F481-1F3FC", + "non_qualified": null, + "image": "1f481-1f3fc.png", + "sheet_x": 24, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F481-1F3FD", + "non_qualified": null, + "image": "1f481-1f3fd.png", + "sheet_x": 24, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F481-1F3FE", + "non_qualified": null, + "image": "1f481-1f3fe.png", + "sheet_x": 24, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F481-1F3FF", + "non_qualified": null, + "image": "1f481-1f3ff.png", + "sheet_x": 24, + "sheet_y": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F481-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F482-200D-2640-FE0F", + "non_qualified": "1F482-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f482-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 8, + "short_name": "female-guard", + "short_names": [ + "female-guard" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 161, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F482-1F3FB-200D-2640-FE0F", + "non_qualified": "1F482-1F3FB-200D-2640", + "image": "1f482-1f3fb-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F482-1F3FC-200D-2640-FE0F", + "non_qualified": "1F482-1F3FC-200D-2640", + "image": "1f482-1f3fc-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F482-1F3FD-200D-2640-FE0F", + "non_qualified": "1F482-1F3FD-200D-2640", + "image": "1f482-1f3fd-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F482-1F3FE-200D-2640-FE0F", + "non_qualified": "1F482-1F3FE-200D-2640", + "image": "1f482-1f3fe-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F482-1F3FF-200D-2640-FE0F", + "non_qualified": "1F482-1F3FF-200D-2640", + "image": "1f482-1f3ff-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F482-200D-2642-FE0F", + "non_qualified": "1F482-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f482-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 14, + "short_name": "male-guard", + "short_names": [ + "male-guard" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 160, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F482-1F3FB-200D-2642-FE0F", + "non_qualified": "1F482-1F3FB-200D-2642", + "image": "1f482-1f3fb-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F482-1F3FC-200D-2642-FE0F", + "non_qualified": "1F482-1F3FC-200D-2642", + "image": "1f482-1f3fc-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F482-1F3FD-200D-2642-FE0F", + "non_qualified": "1F482-1F3FD-200D-2642", + "image": "1f482-1f3fd-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F482-1F3FE-200D-2642-FE0F", + "non_qualified": "1F482-1F3FE-200D-2642", + "image": "1f482-1f3fe-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F482-1F3FF-200D-2642-FE0F", + "non_qualified": "1F482-1F3FF-200D-2642", + "image": "1f482-1f3ff-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F482" + }, + { + "name": "GUARDSMAN", + "unified": "1F482", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E51E", + "google": "FE1B5", + "image": "1f482.png", + "sheet_x": 24, + "sheet_y": 20, + "short_name": "guardsman", + "short_names": [ + "guardsman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 159, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F482-1F3FB", + "non_qualified": null, + "image": "1f482-1f3fb.png", + "sheet_x": 24, + "sheet_y": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F482-1F3FC", + "non_qualified": null, + "image": "1f482-1f3fc.png", + "sheet_x": 24, + "sheet_y": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F482-1F3FD", + "non_qualified": null, + "image": "1f482-1f3fd.png", + "sheet_x": 24, + "sheet_y": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F482-1F3FE", + "non_qualified": null, + "image": "1f482-1f3fe.png", + "sheet_x": 24, + "sheet_y": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F482-1F3FF", + "non_qualified": null, + "image": "1f482-1f3ff.png", + "sheet_x": 24, + "sheet_y": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F482-200D-2642-FE0F" + }, + { + "name": "DANCER", + "unified": "1F483", + "non_qualified": null, + "docomo": null, + "au": "EB1C", + "softbank": "E51F", + "google": "FE1B6", + "image": "1f483.png", + "sheet_x": 24, + "sheet_y": 26, + "short_name": "dancer", + "short_names": [ + "dancer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 233, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F483-1F3FB", + "non_qualified": null, + "image": "1f483-1f3fb.png", + "sheet_x": 24, + "sheet_y": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F483-1F3FC", + "non_qualified": null, + "image": "1f483-1f3fc.png", + "sheet_x": 24, + "sheet_y": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F483-1F3FD", + "non_qualified": null, + "image": "1f483-1f3fd.png", + "sheet_x": 24, + "sheet_y": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F483-1F3FE", + "non_qualified": null, + "image": "1f483-1f3fe.png", + "sheet_x": 24, + "sheet_y": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F483-1F3FF", + "non_qualified": null, + "image": "1f483-1f3ff.png", + "sheet_x": 24, + "sheet_y": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "LIPSTICK", + "unified": "1F484", + "non_qualified": null, + "docomo": "E710", + "au": "E509", + "softbank": "E31C", + "google": "FE195", + "image": "1f484.png", + "sheet_x": 24, + "sheet_y": 32, + "short_name": "lipstick", + "short_names": [ + "lipstick" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NAIL POLISH", + "unified": "1F485", + "non_qualified": null, + "docomo": null, + "au": "EAA0", + "softbank": "E31D", + "google": "FE196", + "image": "1f485.png", + "sheet_x": 24, + "sheet_y": 33, + "short_name": "nail_care", + "short_names": [ + "nail_care" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F485-1F3FB", + "non_qualified": null, + "image": "1f485-1f3fb.png", + "sheet_x": 24, + "sheet_y": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F485-1F3FC", + "non_qualified": null, + "image": "1f485-1f3fc.png", + "sheet_x": 24, + "sheet_y": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F485-1F3FD", + "non_qualified": null, + "image": "1f485-1f3fd.png", + "sheet_x": 24, + "sheet_y": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F485-1F3FE", + "non_qualified": null, + "image": "1f485-1f3fe.png", + "sheet_x": 24, + "sheet_y": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F485-1F3FF", + "non_qualified": null, + "image": "1f485-1f3ff.png", + "sheet_x": 24, + "sheet_y": 38, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F486-200D-2640-FE0F", + "non_qualified": "1F486-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f486-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 39, + "short_name": "woman-getting-massage", + "short_names": [ + "woman-getting-massage" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 208, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F486-1F3FB-200D-2640-FE0F", + "non_qualified": "1F486-1F3FB-200D-2640", + "image": "1f486-1f3fb-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F486-1F3FC-200D-2640-FE0F", + "non_qualified": "1F486-1F3FC-200D-2640", + "image": "1f486-1f3fc-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F486-1F3FD-200D-2640-FE0F", + "non_qualified": "1F486-1F3FD-200D-2640", + "image": "1f486-1f3fd-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F486-1F3FE-200D-2640-FE0F", + "non_qualified": "1F486-1F3FE-200D-2640", + "image": "1f486-1f3fe-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F486-1F3FF-200D-2640-FE0F", + "non_qualified": "1F486-1F3FF-200D-2640", + "image": "1f486-1f3ff-200d-2640-fe0f.png", + "sheet_x": 24, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F486" + }, + { + "name": null, + "unified": "1F486-200D-2642-FE0F", + "non_qualified": "1F486-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f486-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 45, + "short_name": "man-getting-massage", + "short_names": [ + "man-getting-massage" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 207, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F486-1F3FB-200D-2642-FE0F", + "non_qualified": "1F486-1F3FB-200D-2642", + "image": "1f486-1f3fb-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F486-1F3FC-200D-2642-FE0F", + "non_qualified": "1F486-1F3FC-200D-2642", + "image": "1f486-1f3fc-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 47, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F486-1F3FD-200D-2642-FE0F", + "non_qualified": "1F486-1F3FD-200D-2642", + "image": "1f486-1f3fd-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F486-1F3FE-200D-2642-FE0F", + "non_qualified": "1F486-1F3FE-200D-2642", + "image": "1f486-1f3fe-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F486-1F3FF-200D-2642-FE0F", + "non_qualified": "1F486-1F3FF-200D-2642", + "image": "1f486-1f3ff-200d-2642-fe0f.png", + "sheet_x": 24, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FACE MASSAGE", + "unified": "1F486", + "non_qualified": null, + "docomo": null, + "au": "E50B", + "softbank": "E31E", + "google": "FE197", + "image": "1f486.png", + "sheet_x": 24, + "sheet_y": 51, + "short_name": "massage", + "short_names": [ + "massage" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 206, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F486-1F3FB", + "non_qualified": null, + "image": "1f486-1f3fb.png", + "sheet_x": 24, + "sheet_y": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F486-1F3FC", + "non_qualified": null, + "image": "1f486-1f3fc.png", + "sheet_x": 24, + "sheet_y": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F486-1F3FD", + "non_qualified": null, + "image": "1f486-1f3fd.png", + "sheet_x": 24, + "sheet_y": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F486-1F3FE", + "non_qualified": null, + "image": "1f486-1f3fe.png", + "sheet_x": 24, + "sheet_y": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F486-1F3FF", + "non_qualified": null, + "image": "1f486-1f3ff.png", + "sheet_x": 24, + "sheet_y": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F486-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F487-200D-2640-FE0F", + "non_qualified": "1F487-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f487-200d-2640-fe0f.png", + "sheet_x": 25, + "sheet_y": 0, + "short_name": "woman-getting-haircut", + "short_names": [ + "woman-getting-haircut" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 211, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F487-1F3FB-200D-2640-FE0F", + "non_qualified": "1F487-1F3FB-200D-2640", + "image": "1f487-1f3fb-200d-2640-fe0f.png", + "sheet_x": 25, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F487-1F3FC-200D-2640-FE0F", + "non_qualified": "1F487-1F3FC-200D-2640", + "image": "1f487-1f3fc-200d-2640-fe0f.png", + "sheet_x": 25, + "sheet_y": 2, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F487-1F3FD-200D-2640-FE0F", + "non_qualified": "1F487-1F3FD-200D-2640", + "image": "1f487-1f3fd-200d-2640-fe0f.png", + "sheet_x": 25, + "sheet_y": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F487-1F3FE-200D-2640-FE0F", + "non_qualified": "1F487-1F3FE-200D-2640", + "image": "1f487-1f3fe-200d-2640-fe0f.png", + "sheet_x": 25, + "sheet_y": 4, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F487-1F3FF-200D-2640-FE0F", + "non_qualified": "1F487-1F3FF-200D-2640", + "image": "1f487-1f3ff-200d-2640-fe0f.png", + "sheet_x": 25, + "sheet_y": 5, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F487" + }, + { + "name": null, + "unified": "1F487-200D-2642-FE0F", + "non_qualified": "1F487-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f487-200d-2642-fe0f.png", + "sheet_x": 25, + "sheet_y": 6, + "short_name": "man-getting-haircut", + "short_names": [ + "man-getting-haircut" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 210, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F487-1F3FB-200D-2642-FE0F", + "non_qualified": "1F487-1F3FB-200D-2642", + "image": "1f487-1f3fb-200d-2642-fe0f.png", + "sheet_x": 25, + "sheet_y": 7, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F487-1F3FC-200D-2642-FE0F", + "non_qualified": "1F487-1F3FC-200D-2642", + "image": "1f487-1f3fc-200d-2642-fe0f.png", + "sheet_x": 25, + "sheet_y": 8, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F487-1F3FD-200D-2642-FE0F", + "non_qualified": "1F487-1F3FD-200D-2642", + "image": "1f487-1f3fd-200d-2642-fe0f.png", + "sheet_x": 25, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F487-1F3FE-200D-2642-FE0F", + "non_qualified": "1F487-1F3FE-200D-2642", + "image": "1f487-1f3fe-200d-2642-fe0f.png", + "sheet_x": 25, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F487-1F3FF-200D-2642-FE0F", + "non_qualified": "1F487-1F3FF-200D-2642", + "image": "1f487-1f3ff-200d-2642-fe0f.png", + "sheet_x": 25, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "HAIRCUT", + "unified": "1F487", + "non_qualified": null, + "docomo": "E675", + "au": "EAA1", + "softbank": "E31F", + "google": "FE198", + "image": "1f487.png", + "sheet_x": 25, + "sheet_y": 12, + "short_name": "haircut", + "short_names": [ + "haircut" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 209, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F487-1F3FB", + "non_qualified": null, + "image": "1f487-1f3fb.png", + "sheet_x": 25, + "sheet_y": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F487-1F3FC", + "non_qualified": null, + "image": "1f487-1f3fc.png", + "sheet_x": 25, + "sheet_y": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F487-1F3FD", + "non_qualified": null, + "image": "1f487-1f3fd.png", + "sheet_x": 25, + "sheet_y": 15, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F487-1F3FE", + "non_qualified": null, + "image": "1f487-1f3fe.png", + "sheet_x": 25, + "sheet_y": 16, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F487-1F3FF", + "non_qualified": null, + "image": "1f487-1f3ff.png", + "sheet_x": 25, + "sheet_y": 17, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F487-200D-2640-FE0F" + }, + { + "name": "BARBER POLE", + "unified": "1F488", + "non_qualified": null, + "docomo": null, + "au": "EAA2", + "softbank": "E320", + "google": "FE199", + "image": "1f488.png", + "sheet_x": 25, + "sheet_y": 18, + "short_name": "barber", + "short_names": [ + "barber" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 61, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SYRINGE", + "unified": "1F489", + "non_qualified": null, + "docomo": null, + "au": "E510", + "softbank": "E13B", + "google": "FE509", + "image": "1f489.png", + "sheet_x": 25, + "sheet_y": 19, + "short_name": "syringe", + "short_names": [ + "syringe" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 208, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PILL", + "unified": "1F48A", + "non_qualified": null, + "docomo": null, + "au": "EA9A", + "softbank": "E30F", + "google": "FE50A", + "image": "1f48a.png", + "sheet_x": 25, + "sheet_y": 20, + "short_name": "pill", + "short_names": [ + "pill" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 210, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KISS MARK", + "unified": "1F48B", + "non_qualified": null, + "docomo": "E6F9", + "au": "E4EB", + "softbank": "E003", + "google": "FE823", + "image": "1f48b.png", + "sheet_x": 25, + "sheet_y": 21, + "short_name": "kiss", + "short_names": [ + "kiss" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 115, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LOVE LETTER", + "unified": "1F48C", + "non_qualified": null, + "docomo": "E717", + "au": "EB78", + "softbank": null, + "google": "FE824", + "image": "1f48c.png", + "sheet_x": 25, + "sheet_y": 22, + "short_name": "love_letter", + "short_names": [ + "love_letter" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 116, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RING", + "unified": "1F48D", + "non_qualified": null, + "docomo": "E71B", + "au": "E514", + "softbank": "E034", + "google": "FE825", + "image": "1f48d.png", + "sheet_x": 25, + "sheet_y": 23, + "short_name": "ring", + "short_names": [ + "ring" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GEM STONE", + "unified": "1F48E", + "non_qualified": null, + "docomo": "E71B", + "au": "E514", + "softbank": "E035", + "google": "FE826", + "image": "1f48e.png", + "sheet_x": 25, + "sheet_y": 24, + "short_name": "gem", + "short_names": [ + "gem" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KISS", + "unified": "1F48F", + "non_qualified": null, + "docomo": "E6F9", + "au": "E5CA", + "softbank": "E111", + "google": "FE827", + "image": "1f48f.png", + "sheet_x": 25, + "sheet_y": 25, + "short_name": "couplekiss", + "short_names": [ + "couplekiss" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 297, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F469-200D-2764-FE0F-200D-1F48B-200D-1F468" + }, + { + "name": "BOUQUET", + "unified": "1F490", + "non_qualified": null, + "docomo": null, + "au": "EA95", + "softbank": "E306", + "google": "FE828", + "image": "1f490.png", + "sheet_x": 25, + "sheet_y": 26, + "short_name": "bouquet", + "short_names": [ + "bouquet" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 106, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COUPLE WITH HEART", + "unified": "1F491", + "non_qualified": null, + "docomo": "E6ED", + "au": "EADA", + "softbank": "E425", + "google": "FE829", + "image": "1f491.png", + "sheet_x": 25, + "sheet_y": 27, + "short_name": "couple_with_heart", + "short_names": [ + "couple_with_heart" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 301, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F469-200D-2764-FE0F-200D-1F468" + }, + { + "name": "WEDDING", + "unified": "1F492", + "non_qualified": null, + "docomo": null, + "au": "E5BB", + "softbank": "E43D", + "google": "FE82A", + "image": "1f492.png", + "sheet_x": 25, + "sheet_y": 28, + "short_name": "wedding", + "short_names": [ + "wedding" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 38, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BEATING HEART", + "unified": "1F493", + "non_qualified": null, + "docomo": "E6ED", + "au": "EB75", + "softbank": "E327", + "google": "FEB0D", + "image": "1f493.png", + "sheet_x": 25, + "sheet_y": 29, + "short_name": "heartbeat", + "short_names": [ + "heartbeat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 121, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BROKEN HEART", + "unified": "1F494", + "non_qualified": null, + "docomo": "E6EE", + "au": "E477", + "softbank": "E023", + "google": "FEB0E", + "image": "1f494.png", + "sheet_x": 25, + "sheet_y": 30, + "short_name": "broken_heart", + "short_names": [ + "broken_heart" + ], + "text": "<\/3", + "texts": [ + "<\/3" + ], + "category": "Smileys & Emotion", + "sort_order": 126, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TWO HEARTS", + "unified": "1F495", + "non_qualified": null, + "docomo": "E6EF", + "au": "E478", + "softbank": null, + "google": "FEB0F", + "image": "1f495.png", + "sheet_x": 25, + "sheet_y": 31, + "short_name": "two_hearts", + "short_names": [ + "two_hearts" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 123, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPARKLING HEART", + "unified": "1F496", + "non_qualified": null, + "docomo": "E6EC", + "au": "EAA6", + "softbank": null, + "google": "FEB10", + "image": "1f496.png", + "sheet_x": 25, + "sheet_y": 32, + "short_name": "sparkling_heart", + "short_names": [ + "sparkling_heart" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 119, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GROWING HEART", + "unified": "1F497", + "non_qualified": null, + "docomo": "E6ED", + "au": "EB75", + "softbank": "E328", + "google": "FEB11", + "image": "1f497.png", + "sheet_x": 25, + "sheet_y": 33, + "short_name": "heartpulse", + "short_names": [ + "heartpulse" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 120, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEART WITH ARROW", + "unified": "1F498", + "non_qualified": null, + "docomo": "E6EC", + "au": "E4EA", + "softbank": "E329", + "google": "FEB12", + "image": "1f498.png", + "sheet_x": 25, + "sheet_y": 34, + "short_name": "cupid", + "short_names": [ + "cupid" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 117, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLUE HEART", + "unified": "1F499", + "non_qualified": null, + "docomo": "E6EC", + "au": "EAA7", + "softbank": "E32A", + "google": "FEB13", + "image": "1f499.png", + "sheet_x": 25, + "sheet_y": 35, + "short_name": "blue_heart", + "short_names": [ + "blue_heart" + ], + "text": "<3", + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 131, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GREEN HEART", + "unified": "1F49A", + "non_qualified": null, + "docomo": "E6EC", + "au": "EAA8", + "softbank": "E32B", + "google": "FEB14", + "image": "1f49a.png", + "sheet_x": 25, + "sheet_y": 36, + "short_name": "green_heart", + "short_names": [ + "green_heart" + ], + "text": "<3", + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 130, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "YELLOW HEART", + "unified": "1F49B", + "non_qualified": null, + "docomo": "E6EC", + "au": "EAA9", + "softbank": "E32C", + "google": "FEB15", + "image": "1f49b.png", + "sheet_x": 25, + "sheet_y": 37, + "short_name": "yellow_heart", + "short_names": [ + "yellow_heart" + ], + "text": "<3", + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 129, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PURPLE HEART", + "unified": "1F49C", + "non_qualified": null, + "docomo": "E6EC", + "au": "EAAA", + "softbank": "E32D", + "google": "FEB16", + "image": "1f49c.png", + "sheet_x": 25, + "sheet_y": 38, + "short_name": "purple_heart", + "short_names": [ + "purple_heart" + ], + "text": "<3", + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 132, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEART WITH RIBBON", + "unified": "1F49D", + "non_qualified": null, + "docomo": "E6EC", + "au": "EB54", + "softbank": "E437", + "google": "FEB17", + "image": "1f49d.png", + "sheet_x": 25, + "sheet_y": 39, + "short_name": "gift_heart", + "short_names": [ + "gift_heart" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 118, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "REVOLVING HEARTS", + "unified": "1F49E", + "non_qualified": null, + "docomo": "E6ED", + "au": "E5AF", + "softbank": null, + "google": "FEB18", + "image": "1f49e.png", + "sheet_x": 25, + "sheet_y": 40, + "short_name": "revolving_hearts", + "short_names": [ + "revolving_hearts" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 122, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEART DECORATION", + "unified": "1F49F", + "non_qualified": null, + "docomo": "E6F8", + "au": "E595", + "softbank": "E204", + "google": "FEB19", + "image": "1f49f.png", + "sheet_x": 25, + "sheet_y": 41, + "short_name": "heart_decoration", + "short_names": [ + "heart_decoration" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 124, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DIAMOND SHAPE WITH A DOT INSIDE", + "unified": "1F4A0", + "non_qualified": null, + "docomo": "E6F8", + "au": null, + "softbank": null, + "google": "FEB55", + "image": "1f4a0.png", + "sheet_x": 25, + "sheet_y": 42, + "short_name": "diamond_shape_with_a_dot_inside", + "short_names": [ + "diamond_shape_with_a_dot_inside" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 214, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ELECTRIC LIGHT BULB", + "unified": "1F4A1", + "non_qualified": null, + "docomo": "E6FB", + "au": "E476", + "softbank": "E10F", + "google": "FEB56", + "image": "1f4a1.png", + "sheet_x": 25, + "sheet_y": 43, + "short_name": "bulb", + "short_names": [ + "bulb" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 100, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ANGER SYMBOL", + "unified": "1F4A2", + "non_qualified": null, + "docomo": "E6FC", + "au": "E4E5", + "softbank": "E334", + "google": "FEB57", + "image": "1f4a2.png", + "sheet_x": 25, + "sheet_y": 44, + "short_name": "anger", + "short_names": [ + "anger" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 137, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOMB", + "unified": "1F4A3", + "non_qualified": null, + "docomo": "E6FE", + "au": "E47A", + "softbank": "E311", + "google": "FEB58", + "image": "1f4a3.png", + "sheet_x": 25, + "sheet_y": 45, + "short_name": "bomb", + "short_names": [ + "bomb" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 143, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLEEPING SYMBOL", + "unified": "1F4A4", + "non_qualified": null, + "docomo": "E701", + "au": "E475", + "softbank": "E13C", + "google": "FEB59", + "image": "1f4a4.png", + "sheet_x": 25, + "sheet_y": 46, + "short_name": "zzz", + "short_names": [ + "zzz" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 149, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COLLISION SYMBOL", + "unified": "1F4A5", + "non_qualified": null, + "docomo": "E705", + "au": "E5B0", + "softbank": null, + "google": "FEB5A", + "image": "1f4a5.png", + "sheet_x": 25, + "sheet_y": 47, + "short_name": "boom", + "short_names": [ + "boom", + "collision" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 138, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPLASHING SWEAT SYMBOL", + "unified": "1F4A6", + "non_qualified": null, + "docomo": "E706", + "au": "E5B1", + "softbank": "E331", + "google": "FEB5B", + "image": "1f4a6.png", + "sheet_x": 25, + "sheet_y": 48, + "short_name": "sweat_drops", + "short_names": [ + "sweat_drops" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 140, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DROPLET", + "unified": "1F4A7", + "non_qualified": null, + "docomo": "E707", + "au": "E4E6", + "softbank": null, + "google": "FEB5C", + "image": "1f4a7.png", + "sheet_x": 25, + "sheet_y": 49, + "short_name": "droplet", + "short_names": [ + "droplet" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 209, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DASH SYMBOL", + "unified": "1F4A8", + "non_qualified": null, + "docomo": "E708", + "au": "E4F4", + "softbank": "E330", + "google": "FEB5D", + "image": "1f4a8.png", + "sheet_x": 25, + "sheet_y": 50, + "short_name": "dash", + "short_names": [ + "dash" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 141, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PILE OF POO", + "unified": "1F4A9", + "non_qualified": null, + "docomo": null, + "au": "E4F5", + "softbank": "E05A", + "google": "FE4F4", + "image": "1f4a9.png", + "sheet_x": 25, + "sheet_y": 51, + "short_name": "hankey", + "short_names": [ + "hankey", + "poop", + "shit" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 95, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FLEXED BICEPS", + "unified": "1F4AA", + "non_qualified": null, + "docomo": null, + "au": "E4E9", + "softbank": "E14C", + "google": "FEB5E", + "image": "1f4aa.png", + "sheet_x": 25, + "sheet_y": 52, + "short_name": "muscle", + "short_names": [ + "muscle" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F4AA-1F3FB", + "non_qualified": null, + "image": "1f4aa-1f3fb.png", + "sheet_x": 25, + "sheet_y": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F4AA-1F3FC", + "non_qualified": null, + "image": "1f4aa-1f3fc.png", + "sheet_x": 25, + "sheet_y": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F4AA-1F3FD", + "non_qualified": null, + "image": "1f4aa-1f3fd.png", + "sheet_x": 25, + "sheet_y": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F4AA-1F3FE", + "non_qualified": null, + "image": "1f4aa-1f3fe.png", + "sheet_x": 25, + "sheet_y": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F4AA-1F3FF", + "non_qualified": null, + "image": "1f4aa-1f3ff.png", + "sheet_x": 26, + "sheet_y": 0, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "DIZZY SYMBOL", + "unified": "1F4AB", + "non_qualified": null, + "docomo": null, + "au": "EB5C", + "softbank": null, + "google": "FEB5F", + "image": "1f4ab.png", + "sheet_x": 26, + "sheet_y": 1, + "short_name": "dizzy", + "short_names": [ + "dizzy" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 139, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPEECH BALLOON", + "unified": "1F4AC", + "non_qualified": null, + "docomo": null, + "au": "E4FD", + "softbank": null, + "google": "FE532", + "image": "1f4ac.png", + "sheet_x": 26, + "sheet_y": 2, + "short_name": "speech_balloon", + "short_names": [ + "speech_balloon" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 144, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "THOUGHT BALLOON", + "unified": "1F4AD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4ad.png", + "sheet_x": 26, + "sheet_y": 3, + "short_name": "thought_balloon", + "short_names": [ + "thought_balloon" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 148, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE FLOWER", + "unified": "1F4AE", + "non_qualified": null, + "docomo": null, + "au": "E4F0", + "softbank": null, + "google": "FEB7A", + "image": "1f4ae.png", + "sheet_x": 26, + "sheet_y": 4, + "short_name": "white_flower", + "short_names": [ + "white_flower" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 108, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HUNDRED POINTS SYMBOL", + "unified": "1F4AF", + "non_qualified": null, + "docomo": null, + "au": "E4F2", + "softbank": null, + "google": "FEB7B", + "image": "1f4af.png", + "sheet_x": 26, + "sheet_y": 5, + "short_name": "100", + "short_names": [ + "100" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 136, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MONEY BAG", + "unified": "1F4B0", + "non_qualified": null, + "docomo": "E715", + "au": "E4C7", + "softbank": "E12F", + "google": "FE4DD", + "image": "1f4b0.png", + "sheet_x": 26, + "sheet_y": 6, + "short_name": "moneybag", + "short_names": [ + "moneybag" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 121, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CURRENCY EXCHANGE", + "unified": "1F4B1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E149", + "google": "FE4DE", + "image": "1f4b1.png", + "sheet_x": 26, + "sheet_y": 7, + "short_name": "currency_exchange", + "short_names": [ + "currency_exchange" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 130, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAVY DOLLAR SIGN", + "unified": "1F4B2", + "non_qualified": null, + "docomo": "E715", + "au": "E579", + "softbank": null, + "google": "FE4E0", + "image": "1f4b2.png", + "sheet_x": 26, + "sheet_y": 8, + "short_name": "heavy_dollar_sign", + "short_names": [ + "heavy_dollar_sign" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 131, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CREDIT CARD", + "unified": "1F4B3", + "non_qualified": null, + "docomo": null, + "au": "E57C", + "softbank": null, + "google": "FE4E1", + "image": "1f4b3.png", + "sheet_x": 26, + "sheet_y": 9, + "short_name": "credit_card", + "short_names": [ + "credit_card" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 127, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BANKNOTE WITH YEN SIGN", + "unified": "1F4B4", + "non_qualified": null, + "docomo": "E6D6", + "au": "E57D", + "softbank": null, + "google": "FE4E2", + "image": "1f4b4.png", + "sheet_x": 26, + "sheet_y": 10, + "short_name": "yen", + "short_names": [ + "yen" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 122, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BANKNOTE WITH DOLLAR SIGN", + "unified": "1F4B5", + "non_qualified": null, + "docomo": "E715", + "au": "E585", + "softbank": null, + "google": "FE4E3", + "image": "1f4b5.png", + "sheet_x": 26, + "sheet_y": 11, + "short_name": "dollar", + "short_names": [ + "dollar" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 123, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BANKNOTE WITH EURO SIGN", + "unified": "1F4B6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4b6.png", + "sheet_x": 26, + "sheet_y": 12, + "short_name": "euro", + "short_names": [ + "euro" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 124, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BANKNOTE WITH POUND SIGN", + "unified": "1F4B7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4b7.png", + "sheet_x": 26, + "sheet_y": 13, + "short_name": "pound", + "short_names": [ + "pound" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 125, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MONEY WITH WINGS", + "unified": "1F4B8", + "non_qualified": null, + "docomo": null, + "au": "EB5B", + "softbank": null, + "google": "FE4E4", + "image": "1f4b8.png", + "sheet_x": 26, + "sheet_y": 14, + "short_name": "money_with_wings", + "short_names": [ + "money_with_wings" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 126, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHART WITH UPWARDS TREND AND YEN SIGN", + "unified": "1F4B9", + "non_qualified": null, + "docomo": null, + "au": "E5DC", + "softbank": "E14A", + "google": "FE4DF", + "image": "1f4b9.png", + "sheet_x": 26, + "sheet_y": 15, + "short_name": "chart", + "short_names": [ + "chart" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 129, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SEAT", + "unified": "1F4BA", + "non_qualified": null, + "docomo": "E6B2", + "au": null, + "softbank": "E11F", + "google": "FE537", + "image": "1f4ba.png", + "sheet_x": 26, + "sheet_y": 16, + "short_name": "seat", + "short_names": [ + "seat" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 123, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PERSONAL COMPUTER", + "unified": "1F4BB", + "non_qualified": null, + "docomo": "E716", + "au": "E5B8", + "softbank": "E00C", + "google": "FE538", + "image": "1f4bb.png", + "sheet_x": 26, + "sheet_y": 17, + "short_name": "computer", + "short_names": [ + "computer" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 77, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BRIEFCASE", + "unified": "1F4BC", + "non_qualified": null, + "docomo": "E682", + "au": "E5CE", + "softbank": "E11E", + "google": "FE53B", + "image": "1f4bc.png", + "sheet_x": 26, + "sheet_y": 18, + "short_name": "briefcase", + "short_names": [ + "briefcase" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 152, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MINIDISC", + "unified": "1F4BD", + "non_qualified": null, + "docomo": null, + "au": "E582", + "softbank": "E316", + "google": "FE53C", + "image": "1f4bd.png", + "sheet_x": 26, + "sheet_y": 19, + "short_name": "minidisc", + "short_names": [ + "minidisc" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 83, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FLOPPY DISK", + "unified": "1F4BE", + "non_qualified": null, + "docomo": null, + "au": "E562", + "softbank": null, + "google": "FE53D", + "image": "1f4be.png", + "sheet_x": 26, + "sheet_y": 20, + "short_name": "floppy_disk", + "short_names": [ + "floppy_disk" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 84, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OPTICAL DISC", + "unified": "1F4BF", + "non_qualified": null, + "docomo": "E68C", + "au": "E50C", + "softbank": "E126", + "google": "FE81D", + "image": "1f4bf.png", + "sheet_x": 26, + "sheet_y": 21, + "short_name": "cd", + "short_names": [ + "cd" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 85, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DVD", + "unified": "1F4C0", + "non_qualified": null, + "docomo": "E68C", + "au": "E50C", + "softbank": "E127", + "google": "FE81E", + "image": "1f4c0.png", + "sheet_x": 26, + "sheet_y": 22, + "short_name": "dvd", + "short_names": [ + "dvd" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 86, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FILE FOLDER", + "unified": "1F4C1", + "non_qualified": null, + "docomo": null, + "au": "E58F", + "softbank": null, + "google": "FE543", + "image": "1f4c1.png", + "sheet_x": 26, + "sheet_y": 23, + "short_name": "file_folder", + "short_names": [ + "file_folder" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 153, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OPEN FILE FOLDER", + "unified": "1F4C2", + "non_qualified": null, + "docomo": null, + "au": "E590", + "softbank": null, + "google": "FE544", + "image": "1f4c2.png", + "sheet_x": 26, + "sheet_y": 24, + "short_name": "open_file_folder", + "short_names": [ + "open_file_folder" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 154, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PAGE WITH CURL", + "unified": "1F4C3", + "non_qualified": null, + "docomo": "E689", + "au": "E561", + "softbank": null, + "google": "FE540", + "image": "1f4c3.png", + "sheet_x": 26, + "sheet_y": 25, + "short_name": "page_with_curl", + "short_names": [ + "page_with_curl" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 113, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PAGE FACING UP", + "unified": "1F4C4", + "non_qualified": null, + "docomo": "E689", + "au": "E569", + "softbank": null, + "google": "FE541", + "image": "1f4c4.png", + "sheet_x": 26, + "sheet_y": 26, + "short_name": "page_facing_up", + "short_names": [ + "page_facing_up" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 115, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CALENDAR", + "unified": "1F4C5", + "non_qualified": null, + "docomo": null, + "au": "E563", + "softbank": null, + "google": "FE542", + "image": "1f4c5.png", + "sheet_x": 26, + "sheet_y": 27, + "short_name": "date", + "short_names": [ + "date" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 156, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TEAR-OFF CALENDAR", + "unified": "1F4C6", + "non_qualified": null, + "docomo": null, + "au": "E56A", + "softbank": null, + "google": "FE549", + "image": "1f4c6.png", + "sheet_x": 26, + "sheet_y": 28, + "short_name": "calendar", + "short_names": [ + "calendar" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 157, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CARD INDEX", + "unified": "1F4C7", + "non_qualified": null, + "docomo": "E683", + "au": "E56C", + "softbank": null, + "google": "FE54D", + "image": "1f4c7.png", + "sheet_x": 26, + "sheet_y": 29, + "short_name": "card_index", + "short_names": [ + "card_index" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 160, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHART WITH UPWARDS TREND", + "unified": "1F4C8", + "non_qualified": null, + "docomo": null, + "au": "E575", + "softbank": null, + "google": "FE54B", + "image": "1f4c8.png", + "sheet_x": 26, + "sheet_y": 30, + "short_name": "chart_with_upwards_trend", + "short_names": [ + "chart_with_upwards_trend" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 161, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHART WITH DOWNWARDS TREND", + "unified": "1F4C9", + "non_qualified": null, + "docomo": null, + "au": "E576", + "softbank": null, + "google": "FE54C", + "image": "1f4c9.png", + "sheet_x": 26, + "sheet_y": 31, + "short_name": "chart_with_downwards_trend", + "short_names": [ + "chart_with_downwards_trend" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 162, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BAR CHART", + "unified": "1F4CA", + "non_qualified": null, + "docomo": null, + "au": "E574", + "softbank": null, + "google": "FE54A", + "image": "1f4ca.png", + "sheet_x": 26, + "sheet_y": 32, + "short_name": "bar_chart", + "short_names": [ + "bar_chart" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 163, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLIPBOARD", + "unified": "1F4CB", + "non_qualified": null, + "docomo": "E689", + "au": "E564", + "softbank": null, + "google": "FE548", + "image": "1f4cb.png", + "sheet_x": 26, + "sheet_y": 33, + "short_name": "clipboard", + "short_names": [ + "clipboard" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 164, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PUSHPIN", + "unified": "1F4CC", + "non_qualified": null, + "docomo": null, + "au": "E56D", + "softbank": null, + "google": "FE54E", + "image": "1f4cc.png", + "sheet_x": 26, + "sheet_y": 34, + "short_name": "pushpin", + "short_names": [ + "pushpin" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 165, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ROUND PUSHPIN", + "unified": "1F4CD", + "non_qualified": null, + "docomo": null, + "au": "E560", + "softbank": null, + "google": "FE53F", + "image": "1f4cd.png", + "sheet_x": 26, + "sheet_y": 35, + "short_name": "round_pushpin", + "short_names": [ + "round_pushpin" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 166, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PAPERCLIP", + "unified": "1F4CE", + "non_qualified": null, + "docomo": "E730", + "au": "E4A0", + "softbank": null, + "google": "FE53A", + "image": "1f4ce.png", + "sheet_x": 26, + "sheet_y": 36, + "short_name": "paperclip", + "short_names": [ + "paperclip" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 167, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "STRAIGHT RULER", + "unified": "1F4CF", + "non_qualified": null, + "docomo": null, + "au": "E570", + "softbank": null, + "google": "FE550", + "image": "1f4cf.png", + "sheet_x": 26, + "sheet_y": 37, + "short_name": "straight_ruler", + "short_names": [ + "straight_ruler" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 169, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TRIANGULAR RULER", + "unified": "1F4D0", + "non_qualified": null, + "docomo": null, + "au": "E4A2", + "softbank": null, + "google": "FE551", + "image": "1f4d0.png", + "sheet_x": 26, + "sheet_y": 38, + "short_name": "triangular_ruler", + "short_names": [ + "triangular_ruler" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 170, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOOKMARK TABS", + "unified": "1F4D1", + "non_qualified": null, + "docomo": "E689", + "au": "EB0B", + "softbank": null, + "google": "FE552", + "image": "1f4d1.png", + "sheet_x": 26, + "sheet_y": 39, + "short_name": "bookmark_tabs", + "short_names": [ + "bookmark_tabs" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 118, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEDGER", + "unified": "1F4D2", + "non_qualified": null, + "docomo": "E683", + "au": "E56E", + "softbank": null, + "google": "FE54F", + "image": "1f4d2.png", + "sheet_x": 26, + "sheet_y": 40, + "short_name": "ledger", + "short_names": [ + "ledger" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 112, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NOTEBOOK", + "unified": "1F4D3", + "non_qualified": null, + "docomo": "E683", + "au": "E56B", + "softbank": null, + "google": "FE545", + "image": "1f4d3.png", + "sheet_x": 26, + "sheet_y": 41, + "short_name": "notebook", + "short_names": [ + "notebook" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 111, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NOTEBOOK WITH DECORATIVE COVER", + "unified": "1F4D4", + "non_qualified": null, + "docomo": "E683", + "au": "E49D", + "softbank": null, + "google": "FE547", + "image": "1f4d4.png", + "sheet_x": 26, + "sheet_y": 42, + "short_name": "notebook_with_decorative_cover", + "short_names": [ + "notebook_with_decorative_cover" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 104, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOSED BOOK", + "unified": "1F4D5", + "non_qualified": null, + "docomo": "E683", + "au": "E568", + "softbank": null, + "google": "FE502", + "image": "1f4d5.png", + "sheet_x": 26, + "sheet_y": 43, + "short_name": "closed_book", + "short_names": [ + "closed_book" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 105, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OPEN BOOK", + "unified": "1F4D6", + "non_qualified": null, + "docomo": "E683", + "au": "E49F", + "softbank": "E148", + "google": "FE546", + "image": "1f4d6.png", + "sheet_x": 26, + "sheet_y": 44, + "short_name": "book", + "short_names": [ + "book", + "open_book" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 106, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GREEN BOOK", + "unified": "1F4D7", + "non_qualified": null, + "docomo": "E683", + "au": "E565", + "softbank": null, + "google": "FE4FF", + "image": "1f4d7.png", + "sheet_x": 26, + "sheet_y": 45, + "short_name": "green_book", + "short_names": [ + "green_book" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 107, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLUE BOOK", + "unified": "1F4D8", + "non_qualified": null, + "docomo": "E683", + "au": "E566", + "softbank": null, + "google": "FE500", + "image": "1f4d8.png", + "sheet_x": 26, + "sheet_y": 46, + "short_name": "blue_book", + "short_names": [ + "blue_book" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 108, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ORANGE BOOK", + "unified": "1F4D9", + "non_qualified": null, + "docomo": "E683", + "au": "E567", + "softbank": null, + "google": "FE501", + "image": "1f4d9.png", + "sheet_x": 26, + "sheet_y": 47, + "short_name": "orange_book", + "short_names": [ + "orange_book" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 109, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOOKS", + "unified": "1F4DA", + "non_qualified": null, + "docomo": "E683", + "au": "E56F", + "softbank": null, + "google": "FE503", + "image": "1f4da.png", + "sheet_x": 26, + "sheet_y": 48, + "short_name": "books", + "short_names": [ + "books" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 110, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NAME BADGE", + "unified": "1F4DB", + "non_qualified": null, + "docomo": null, + "au": "E51D", + "softbank": null, + "google": "FE504", + "image": "1f4db.png", + "sheet_x": 26, + "sheet_y": 49, + "short_name": "name_badge", + "short_names": [ + "name_badge" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 104, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SCROLL", + "unified": "1F4DC", + "non_qualified": null, + "docomo": "E70A", + "au": "E55F", + "softbank": null, + "google": "FE4FD", + "image": "1f4dc.png", + "sheet_x": 26, + "sheet_y": 50, + "short_name": "scroll", + "short_names": [ + "scroll" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 114, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MEMO", + "unified": "1F4DD", + "non_qualified": null, + "docomo": "E689", + "au": "EA92", + "softbank": "E301", + "google": "FE527", + "image": "1f4dd.png", + "sheet_x": 26, + "sheet_y": 51, + "short_name": "memo", + "short_names": [ + "memo", + "pencil" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 151, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TELEPHONE RECEIVER", + "unified": "1F4DE", + "non_qualified": null, + "docomo": "E687", + "au": "E51E", + "softbank": null, + "google": "FE524", + "image": "1f4de.png", + "sheet_x": 26, + "sheet_y": 52, + "short_name": "telephone_receiver", + "short_names": [ + "telephone_receiver" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 72, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PAGER", + "unified": "1F4DF", + "non_qualified": null, + "docomo": "E65A", + "au": "E59B", + "softbank": null, + "google": "FE522", + "image": "1f4df.png", + "sheet_x": 26, + "sheet_y": 53, + "short_name": "pager", + "short_names": [ + "pager" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 73, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FAX MACHINE", + "unified": "1F4E0", + "non_qualified": null, + "docomo": "E6D0", + "au": "E520", + "softbank": "E00B", + "google": "FE528", + "image": "1f4e0.png", + "sheet_x": 26, + "sheet_y": 54, + "short_name": "fax", + "short_names": [ + "fax" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 74, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SATELLITE ANTENNA", + "unified": "1F4E1", + "non_qualified": null, + "docomo": null, + "au": "E4A8", + "softbank": "E14B", + "google": "FE531", + "image": "1f4e1.png", + "sheet_x": 26, + "sheet_y": 55, + "short_name": "satellite_antenna", + "short_names": [ + "satellite_antenna" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 207, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PUBLIC ADDRESS LOUDSPEAKER", + "unified": "1F4E2", + "non_qualified": null, + "docomo": null, + "au": "E511", + "softbank": "E142", + "google": "FE52F", + "image": "1f4e2.png", + "sheet_x": 26, + "sheet_y": 56, + "short_name": "loudspeaker", + "short_names": [ + "loudspeaker" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHEERING MEGAPHONE", + "unified": "1F4E3", + "non_qualified": null, + "docomo": null, + "au": "E511", + "softbank": "E317", + "google": "FE530", + "image": "1f4e3.png", + "sheet_x": 27, + "sheet_y": 0, + "short_name": "mega", + "short_names": [ + "mega" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OUTBOX TRAY", + "unified": "1F4E4", + "non_qualified": null, + "docomo": null, + "au": "E592", + "softbank": null, + "google": "FE533", + "image": "1f4e4.png", + "sheet_x": 27, + "sheet_y": 1, + "short_name": "outbox_tray", + "short_names": [ + "outbox_tray" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 136, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "INBOX TRAY", + "unified": "1F4E5", + "non_qualified": null, + "docomo": null, + "au": "E593", + "softbank": null, + "google": "FE534", + "image": "1f4e5.png", + "sheet_x": 27, + "sheet_y": 2, + "short_name": "inbox_tray", + "short_names": [ + "inbox_tray" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 137, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PACKAGE", + "unified": "1F4E6", + "non_qualified": null, + "docomo": "E685", + "au": "E51F", + "softbank": null, + "google": "FE535", + "image": "1f4e6.png", + "sheet_x": 27, + "sheet_y": 3, + "short_name": "package", + "short_names": [ + "package" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 138, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "E-MAIL SYMBOL", + "unified": "1F4E7", + "non_qualified": null, + "docomo": "E6D3", + "au": "EB71", + "softbank": null, + "google": "FEB92", + "image": "1f4e7.png", + "sheet_x": 27, + "sheet_y": 4, + "short_name": "e-mail", + "short_names": [ + "e-mail" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 133, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "INCOMING ENVELOPE", + "unified": "1F4E8", + "non_qualified": null, + "docomo": "E6CF", + "au": "E591", + "softbank": null, + "google": "FE52A", + "image": "1f4e8.png", + "sheet_x": 27, + "sheet_y": 5, + "short_name": "incoming_envelope", + "short_names": [ + "incoming_envelope" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 134, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ENVELOPE WITH DOWNWARDS ARROW ABOVE", + "unified": "1F4E9", + "non_qualified": null, + "docomo": "E6CF", + "au": "EB62", + "softbank": "E103", + "google": "FE52B", + "image": "1f4e9.png", + "sheet_x": 27, + "sheet_y": 6, + "short_name": "envelope_with_arrow", + "short_names": [ + "envelope_with_arrow" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 135, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOSED MAILBOX WITH LOWERED FLAG", + "unified": "1F4EA", + "non_qualified": null, + "docomo": "E665", + "au": "E51B", + "softbank": null, + "google": "FE52C", + "image": "1f4ea.png", + "sheet_x": 27, + "sheet_y": 7, + "short_name": "mailbox_closed", + "short_names": [ + "mailbox_closed" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 140, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOSED MAILBOX WITH RAISED FLAG", + "unified": "1F4EB", + "non_qualified": null, + "docomo": "E665", + "au": "EB0A", + "softbank": "E101", + "google": "FE52D", + "image": "1f4eb.png", + "sheet_x": 27, + "sheet_y": 8, + "short_name": "mailbox", + "short_names": [ + "mailbox" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 139, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OPEN MAILBOX WITH RAISED FLAG", + "unified": "1F4EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4ec.png", + "sheet_x": 27, + "sheet_y": 9, + "short_name": "mailbox_with_mail", + "short_names": [ + "mailbox_with_mail" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 141, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OPEN MAILBOX WITH LOWERED FLAG", + "unified": "1F4ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4ed.png", + "sheet_x": 27, + "sheet_y": 10, + "short_name": "mailbox_with_no_mail", + "short_names": [ + "mailbox_with_no_mail" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 142, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POSTBOX", + "unified": "1F4EE", + "non_qualified": null, + "docomo": "E665", + "au": "E51B", + "softbank": "E102", + "google": "FE52E", + "image": "1f4ee.png", + "sheet_x": 27, + "sheet_y": 11, + "short_name": "postbox", + "short_names": [ + "postbox" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 143, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POSTAL HORN", + "unified": "1F4EF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4ef.png", + "sheet_x": 27, + "sheet_y": 12, + "short_name": "postal_horn", + "short_names": [ + "postal_horn" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEWSPAPER", + "unified": "1F4F0", + "non_qualified": null, + "docomo": null, + "au": "E58B", + "softbank": null, + "google": "FE822", + "image": "1f4f0.png", + "sheet_x": 27, + "sheet_y": 13, + "short_name": "newspaper", + "short_names": [ + "newspaper" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 116, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOBILE PHONE", + "unified": "1F4F1", + "non_qualified": null, + "docomo": "E688", + "au": "E588", + "softbank": "E00A", + "google": "FE525", + "image": "1f4f1.png", + "sheet_x": 27, + "sheet_y": 14, + "short_name": "iphone", + "short_names": [ + "iphone" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 69, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT", + "unified": "1F4F2", + "non_qualified": null, + "docomo": "E6CE", + "au": "EB08", + "softbank": "E104", + "google": "FE526", + "image": "1f4f2.png", + "sheet_x": 27, + "sheet_y": 15, + "short_name": "calling", + "short_names": [ + "calling" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 70, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "VIBRATION MODE", + "unified": "1F4F3", + "non_qualified": null, + "docomo": null, + "au": "EA90", + "softbank": "E250", + "google": "FE839", + "image": "1f4f3.png", + "sheet_x": 27, + "sheet_y": 16, + "short_name": "vibration_mode", + "short_names": [ + "vibration_mode" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 95, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOBILE PHONE OFF", + "unified": "1F4F4", + "non_qualified": null, + "docomo": null, + "au": "EA91", + "softbank": "E251", + "google": "FE83A", + "image": "1f4f4.png", + "sheet_x": 27, + "sheet_y": 17, + "short_name": "mobile_phone_off", + "short_names": [ + "mobile_phone_off" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 96, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NO MOBILE PHONES", + "unified": "1F4F5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4f5.png", + "sheet_x": 27, + "sheet_y": 18, + "short_name": "no_mobile_phones", + "short_names": [ + "no_mobile_phones" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ANTENNA WITH BARS", + "unified": "1F4F6", + "non_qualified": null, + "docomo": null, + "au": "EA84", + "softbank": "E20B", + "google": "FE838", + "image": "1f4f6.png", + "sheet_x": 27, + "sheet_y": 19, + "short_name": "signal_strength", + "short_names": [ + "signal_strength" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 94, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CAMERA", + "unified": "1F4F7", + "non_qualified": null, + "docomo": "E681", + "au": "E515", + "softbank": "E008", + "google": "FE4EF", + "image": "1f4f7.png", + "sheet_x": 27, + "sheet_y": 20, + "short_name": "camera", + "short_names": [ + "camera" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 93, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CAMERA WITH FLASH", + "unified": "1F4F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4f8.png", + "sheet_x": 27, + "sheet_y": 21, + "short_name": "camera_with_flash", + "short_names": [ + "camera_with_flash" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 94, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "VIDEO CAMERA", + "unified": "1F4F9", + "non_qualified": null, + "docomo": "E677", + "au": "E57E", + "softbank": null, + "google": "FE4F9", + "image": "1f4f9.png", + "sheet_x": 27, + "sheet_y": 22, + "short_name": "video_camera", + "short_names": [ + "video_camera" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 95, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TELEVISION", + "unified": "1F4FA", + "non_qualified": null, + "docomo": "E68A", + "au": "E502", + "softbank": "E12A", + "google": "FE81C", + "image": "1f4fa.png", + "sheet_x": 27, + "sheet_y": 23, + "short_name": "tv", + "short_names": [ + "tv" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 92, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RADIO", + "unified": "1F4FB", + "non_qualified": null, + "docomo": null, + "au": "E5B9", + "softbank": "E128", + "google": "FE81F", + "image": "1f4fb.png", + "sheet_x": 27, + "sheet_y": 24, + "short_name": "radio", + "short_names": [ + "radio" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 61, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "VIDEOCASSETTE", + "unified": "1F4FC", + "non_qualified": null, + "docomo": null, + "au": "E580", + "softbank": "E129", + "google": "FE820", + "image": "1f4fc.png", + "sheet_x": 27, + "sheet_y": 25, + "short_name": "vhs", + "short_names": [ + "vhs" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 96, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F4FD-FE0F", + "non_qualified": "1F4FD", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4fd-fe0f.png", + "sheet_x": 27, + "sheet_y": 26, + "short_name": "film_projector", + "short_names": [ + "film_projector" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 90, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PRAYER BEADS", + "unified": "1F4FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f4ff.png", + "sheet_x": 27, + "sheet_y": 27, + "short_name": "prayer_beads", + "short_names": [ + "prayer_beads" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TWISTED RIGHTWARDS ARROWS", + "unified": "1F500", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f500.png", + "sheet_x": 27, + "sheet_y": 28, + "short_name": "twisted_rightwards_arrows", + "short_names": [ + "twisted_rightwards_arrows" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 73, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS", + "unified": "1F501", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f501.png", + "sheet_x": 27, + "sheet_y": 29, + "short_name": "repeat", + "short_names": [ + "repeat" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 74, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY", + "unified": "1F502", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f502.png", + "sheet_x": 27, + "sheet_y": 30, + "short_name": "repeat_one", + "short_names": [ + "repeat_one" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 75, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS", + "unified": "1F503", + "non_qualified": null, + "docomo": "E735", + "au": "EB0D", + "softbank": null, + "google": "FEB91", + "image": "1f503.png", + "sheet_x": 27, + "sheet_y": 31, + "short_name": "arrows_clockwise", + "short_names": [ + "arrows_clockwise" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS", + "unified": "1F504", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f504.png", + "sheet_x": 27, + "sheet_y": 32, + "short_name": "arrows_counterclockwise", + "short_names": [ + "arrows_counterclockwise" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LOW BRIGHTNESS SYMBOL", + "unified": "1F505", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f505.png", + "sheet_x": 27, + "sheet_y": 33, + "short_name": "low_brightness", + "short_names": [ + "low_brightness" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 92, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HIGH BRIGHTNESS SYMBOL", + "unified": "1F506", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f506.png", + "sheet_x": 27, + "sheet_y": 34, + "short_name": "high_brightness", + "short_names": [ + "high_brightness" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 93, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPEAKER WITH CANCELLATION STROKE", + "unified": "1F507", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f507.png", + "sheet_x": 27, + "sheet_y": 35, + "short_name": "mute", + "short_names": [ + "mute" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPEAKER", + "unified": "1F508", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f508.png", + "sheet_x": 27, + "sheet_y": 36, + "short_name": "speaker", + "short_names": [ + "speaker" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPEAKER WITH ONE SOUND WAVE", + "unified": "1F509", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f509.png", + "sheet_x": 27, + "sheet_y": 37, + "short_name": "sound", + "short_names": [ + "sound" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPEAKER WITH THREE SOUND WAVES", + "unified": "1F50A", + "non_qualified": null, + "docomo": null, + "au": "E511", + "softbank": "E141", + "google": "FE821", + "image": "1f50a.png", + "sheet_x": 27, + "sheet_y": 38, + "short_name": "loud_sound", + "short_names": [ + "loud_sound" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BATTERY", + "unified": "1F50B", + "non_qualified": null, + "docomo": null, + "au": "E584", + "softbank": null, + "google": "FE4FC", + "image": "1f50b.png", + "sheet_x": 27, + "sheet_y": 39, + "short_name": "battery", + "short_names": [ + "battery" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 75, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ELECTRIC PLUG", + "unified": "1F50C", + "non_qualified": null, + "docomo": null, + "au": "E589", + "softbank": null, + "google": "FE4FE", + "image": "1f50c.png", + "sheet_x": 27, + "sheet_y": 40, + "short_name": "electric_plug", + "short_names": [ + "electric_plug" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 76, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEFT-POINTING MAGNIFYING GLASS", + "unified": "1F50D", + "non_qualified": null, + "docomo": "E6DC", + "au": "E518", + "softbank": "E114", + "google": "FEB85", + "image": "1f50d.png", + "sheet_x": 27, + "sheet_y": 41, + "short_name": "mag", + "short_names": [ + "mag" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 97, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RIGHT-POINTING MAGNIFYING GLASS", + "unified": "1F50E", + "non_qualified": null, + "docomo": "E6DC", + "au": "EB05", + "softbank": null, + "google": "FEB8D", + "image": "1f50e.png", + "sheet_x": 27, + "sheet_y": 42, + "short_name": "mag_right", + "short_names": [ + "mag_right" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 98, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LOCK WITH INK PEN", + "unified": "1F50F", + "non_qualified": null, + "docomo": "E6D9", + "au": "EB0C", + "softbank": null, + "google": "FEB90", + "image": "1f50f.png", + "sheet_x": 27, + "sheet_y": 43, + "short_name": "lock_with_ink_pen", + "short_names": [ + "lock_with_ink_pen" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 177, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOSED LOCK WITH KEY", + "unified": "1F510", + "non_qualified": null, + "docomo": "E6D9", + "au": "EAFC", + "softbank": null, + "google": "FEB8A", + "image": "1f510.png", + "sheet_x": 27, + "sheet_y": 44, + "short_name": "closed_lock_with_key", + "short_names": [ + "closed_lock_with_key" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 178, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KEY", + "unified": "1F511", + "non_qualified": null, + "docomo": "E6D9", + "au": "E519", + "softbank": "E03F", + "google": "FEB82", + "image": "1f511.png", + "sheet_x": 27, + "sheet_y": 45, + "short_name": "key", + "short_names": [ + "key" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 179, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LOCK", + "unified": "1F512", + "non_qualified": null, + "docomo": "E6D9", + "au": "E51C", + "softbank": "E144", + "google": "FEB86", + "image": "1f512.png", + "sheet_x": 27, + "sheet_y": 46, + "short_name": "lock", + "short_names": [ + "lock" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 175, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OPEN LOCK", + "unified": "1F513", + "non_qualified": null, + "docomo": "E6D9", + "au": "E51C", + "softbank": "E145", + "google": "FEB87", + "image": "1f513.png", + "sheet_x": 27, + "sheet_y": 47, + "short_name": "unlock", + "short_names": [ + "unlock" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 176, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BELL", + "unified": "1F514", + "non_qualified": null, + "docomo": "E713", + "au": "E512", + "softbank": "E325", + "google": "FE4F2", + "image": "1f514.png", + "sheet_x": 27, + "sheet_y": 48, + "short_name": "bell", + "short_names": [ + "bell" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BELL WITH CANCELLATION STROKE", + "unified": "1F515", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f515.png", + "sheet_x": 27, + "sheet_y": 49, + "short_name": "no_bell", + "short_names": [ + "no_bell" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOOKMARK", + "unified": "1F516", + "non_qualified": null, + "docomo": null, + "au": "EB07", + "softbank": null, + "google": "FEB8F", + "image": "1f516.png", + "sheet_x": 27, + "sheet_y": 50, + "short_name": "bookmark", + "short_names": [ + "bookmark" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 119, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LINK SYMBOL", + "unified": "1F517", + "non_qualified": null, + "docomo": null, + "au": "E58A", + "softbank": null, + "google": "FEB4B", + "image": "1f517.png", + "sheet_x": 27, + "sheet_y": 51, + "short_name": "link", + "short_names": [ + "link" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 197, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RADIO BUTTON", + "unified": "1F518", + "non_qualified": null, + "docomo": null, + "au": "EB04", + "softbank": null, + "google": "FEB8C", + "image": "1f518.png", + "sheet_x": 27, + "sheet_y": 52, + "short_name": "radio_button", + "short_names": [ + "radio_button" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 215, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BACK WITH LEFTWARDS ARROW ABOVE", + "unified": "1F519", + "non_qualified": null, + "docomo": null, + "au": "EB06", + "softbank": null, + "google": "FEB8E", + "image": "1f519.png", + "sheet_x": 27, + "sheet_y": 53, + "short_name": "back", + "short_names": [ + "back" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "END WITH LEFTWARDS ARROW ABOVE", + "unified": "1F51A", + "non_qualified": null, + "docomo": "E6B9", + "au": null, + "softbank": null, + "google": "FE01A", + "image": "1f51a.png", + "sheet_x": 27, + "sheet_y": 54, + "short_name": "end", + "short_names": [ + "end" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE", + "unified": "1F51B", + "non_qualified": null, + "docomo": "E6B8", + "au": null, + "softbank": null, + "google": "FE019", + "image": "1f51b.png", + "sheet_x": 27, + "sheet_y": 55, + "short_name": "on", + "short_names": [ + "on" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SOON WITH RIGHTWARDS ARROW ABOVE", + "unified": "1F51C", + "non_qualified": null, + "docomo": "E6B7", + "au": null, + "softbank": null, + "google": "FE018", + "image": "1f51c.png", + "sheet_x": 27, + "sheet_y": 56, + "short_name": "soon", + "short_names": [ + "soon" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TOP WITH UPWARDS ARROW ABOVE", + "unified": "1F51D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E24C", + "google": "FEB42", + "image": "1f51d.png", + "sheet_x": 28, + "sheet_y": 0, + "short_name": "top", + "short_names": [ + "top" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NO ONE UNDER EIGHTEEN SYMBOL", + "unified": "1F51E", + "non_qualified": null, + "docomo": null, + "au": "EA83", + "softbank": "E207", + "google": "FEB25", + "image": "1f51e.png", + "sheet_x": 28, + "sheet_y": 1, + "short_name": "underage", + "short_names": [ + "underage" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KEYCAP TEN", + "unified": "1F51F", + "non_qualified": null, + "docomo": null, + "au": "E52B", + "softbank": null, + "google": "FE83B", + "image": "1f51f.png", + "sheet_x": 28, + "sheet_y": 2, + "short_name": "keycap_ten", + "short_names": [ + "keycap_ten" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 144, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "INPUT SYMBOL FOR LATIN CAPITAL LETTERS", + "unified": "1F520", + "non_qualified": null, + "docomo": null, + "au": "EAFD", + "softbank": null, + "google": "FEB7C", + "image": "1f520.png", + "sheet_x": 28, + "sheet_y": 3, + "short_name": "capital_abcd", + "short_names": [ + "capital_abcd" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 145, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "INPUT SYMBOL FOR LATIN SMALL LETTERS", + "unified": "1F521", + "non_qualified": null, + "docomo": null, + "au": "EAFE", + "softbank": null, + "google": "FEB7D", + "image": "1f521.png", + "sheet_x": 28, + "sheet_y": 4, + "short_name": "abcd", + "short_names": [ + "abcd" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 146, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "INPUT SYMBOL FOR NUMBERS", + "unified": "1F522", + "non_qualified": null, + "docomo": null, + "au": "EAFF", + "softbank": null, + "google": "FEB7E", + "image": "1f522.png", + "sheet_x": 28, + "sheet_y": 5, + "short_name": "1234", + "short_names": [ + "1234" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 147, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "INPUT SYMBOL FOR SYMBOLS", + "unified": "1F523", + "non_qualified": null, + "docomo": null, + "au": "EB00", + "softbank": null, + "google": "FEB7F", + "image": "1f523.png", + "sheet_x": 28, + "sheet_y": 6, + "short_name": "symbols", + "short_names": [ + "symbols" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 148, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "INPUT SYMBOL FOR LATIN LETTERS", + "unified": "1F524", + "non_qualified": null, + "docomo": null, + "au": "EB55", + "softbank": null, + "google": "FEB80", + "image": "1f524.png", + "sheet_x": 28, + "sheet_y": 7, + "short_name": "abc", + "short_names": [ + "abc" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 149, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FIRE", + "unified": "1F525", + "non_qualified": null, + "docomo": null, + "au": "E47B", + "softbank": "E11D", + "google": "FE4F6", + "image": "1f525.png", + "sheet_x": 28, + "sheet_y": 8, + "short_name": "fire", + "short_names": [ + "fire" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 208, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ELECTRIC TORCH", + "unified": "1F526", + "non_qualified": null, + "docomo": "E6FB", + "au": "E583", + "softbank": null, + "google": "FE4FB", + "image": "1f526.png", + "sheet_x": 28, + "sheet_y": 9, + "short_name": "flashlight", + "short_names": [ + "flashlight" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 101, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WRENCH", + "unified": "1F527", + "non_qualified": null, + "docomo": "E718", + "au": "E587", + "softbank": null, + "google": "FE4C9", + "image": "1f527.png", + "sheet_x": 28, + "sheet_y": 10, + "short_name": "wrench", + "short_names": [ + "wrench" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 191, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HAMMER", + "unified": "1F528", + "non_qualified": null, + "docomo": null, + "au": "E5CB", + "softbank": "E116", + "google": "FE4CA", + "image": "1f528.png", + "sheet_x": 28, + "sheet_y": 11, + "short_name": "hammer", + "short_names": [ + "hammer" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 181, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NUT AND BOLT", + "unified": "1F529", + "non_qualified": null, + "docomo": null, + "au": "E581", + "softbank": null, + "google": "FE4CB", + "image": "1f529.png", + "sheet_x": 28, + "sheet_y": 12, + "short_name": "nut_and_bolt", + "short_names": [ + "nut_and_bolt" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 192, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOCHO", + "unified": "1F52A", + "non_qualified": null, + "docomo": null, + "au": "E57F", + "softbank": null, + "google": "FE4FA", + "image": "1f52a.png", + "sheet_x": 28, + "sheet_y": 13, + "short_name": "hocho", + "short_names": [ + "hocho", + "knife" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 120, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PISTOL", + "unified": "1F52B", + "non_qualified": null, + "docomo": null, + "au": "E50A", + "softbank": "E113", + "google": "FE4F5", + "image": "1f52b.png", + "sheet_x": 28, + "sheet_y": 14, + "short_name": "gun", + "short_names": [ + "gun" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 188, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MICROSCOPE", + "unified": "1F52C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f52c.png", + "sheet_x": 28, + "sheet_y": 15, + "short_name": "microscope", + "short_names": [ + "microscope" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 205, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TELESCOPE", + "unified": "1F52D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f52d.png", + "sheet_x": 28, + "sheet_y": 16, + "short_name": "telescope", + "short_names": [ + "telescope" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 206, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CRYSTAL BALL", + "unified": "1F52E", + "non_qualified": null, + "docomo": null, + "au": "EA8F", + "softbank": null, + "google": "FE4F7", + "image": "1f52e.png", + "sheet_x": 28, + "sheet_y": 17, + "short_name": "crystal_ball", + "short_names": [ + "crystal_ball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 59, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SIX POINTED STAR WITH MIDDLE DOT", + "unified": "1F52F", + "non_qualified": null, + "docomo": null, + "au": "EA8F", + "softbank": "E23E", + "google": "FE4F8", + "image": "1f52f.png", + "sheet_x": 28, + "sheet_y": 18, + "short_name": "six_pointed_star", + "short_names": [ + "six_pointed_star" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 59, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "JAPANESE SYMBOL FOR BEGINNER", + "unified": "1F530", + "non_qualified": null, + "docomo": null, + "au": "E480", + "softbank": "E209", + "google": "FE044", + "image": "1f530.png", + "sheet_x": 28, + "sheet_y": 19, + "short_name": "beginner", + "short_names": [ + "beginner" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 105, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TRIDENT EMBLEM", + "unified": "1F531", + "non_qualified": null, + "docomo": "E71A", + "au": "E5C9", + "softbank": "E031", + "google": "FE4D2", + "image": "1f531.png", + "sheet_x": 28, + "sheet_y": 20, + "short_name": "trident", + "short_names": [ + "trident" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 103, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK SQUARE BUTTON", + "unified": "1F532", + "non_qualified": null, + "docomo": "E69C", + "au": "E54B", + "softbank": "E21A", + "google": "FEB64", + "image": "1f532.png", + "sheet_x": 28, + "sheet_y": 21, + "short_name": "black_square_button", + "short_names": [ + "black_square_button" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 217, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE SQUARE BUTTON", + "unified": "1F533", + "non_qualified": null, + "docomo": "E69C", + "au": "E54B", + "softbank": "E21B", + "google": "FEB67", + "image": "1f533.png", + "sheet_x": 28, + "sheet_y": 22, + "short_name": "white_square_button", + "short_names": [ + "white_square_button" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 216, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE RED CIRCLE", + "unified": "1F534", + "non_qualified": null, + "docomo": "E69C", + "au": "E54A", + "softbank": "E219", + "google": "FEB63", + "image": "1f534.png", + "sheet_x": 28, + "sheet_y": 23, + "short_name": "red_circle", + "short_names": [ + "red_circle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 184, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE BLUE CIRCLE", + "unified": "1F535", + "non_qualified": null, + "docomo": "E69C", + "au": "E54B", + "softbank": null, + "google": "FEB64", + "image": "1f535.png", + "sheet_x": 28, + "sheet_y": 24, + "short_name": "large_blue_circle", + "short_names": [ + "large_blue_circle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 188, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE ORANGE DIAMOND", + "unified": "1F536", + "non_qualified": null, + "docomo": null, + "au": "E546", + "softbank": null, + "google": "FEB73", + "image": "1f536.png", + "sheet_x": 28, + "sheet_y": 25, + "short_name": "large_orange_diamond", + "short_names": [ + "large_orange_diamond" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 208, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE BLUE DIAMOND", + "unified": "1F537", + "non_qualified": null, + "docomo": null, + "au": "E547", + "softbank": null, + "google": "FEB74", + "image": "1f537.png", + "sheet_x": 28, + "sheet_y": 26, + "short_name": "large_blue_diamond", + "short_names": [ + "large_blue_diamond" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 209, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMALL ORANGE DIAMOND", + "unified": "1F538", + "non_qualified": null, + "docomo": null, + "au": "E536", + "softbank": null, + "google": "FEB75", + "image": "1f538.png", + "sheet_x": 28, + "sheet_y": 27, + "short_name": "small_orange_diamond", + "short_names": [ + "small_orange_diamond" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 210, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMALL BLUE DIAMOND", + "unified": "1F539", + "non_qualified": null, + "docomo": null, + "au": "E537", + "softbank": null, + "google": "FEB76", + "image": "1f539.png", + "sheet_x": 28, + "sheet_y": 28, + "short_name": "small_blue_diamond", + "short_names": [ + "small_blue_diamond" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 211, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "UP-POINTING RED TRIANGLE", + "unified": "1F53A", + "non_qualified": null, + "docomo": null, + "au": "E55A", + "softbank": null, + "google": "FEB78", + "image": "1f53a.png", + "sheet_x": 28, + "sheet_y": 29, + "short_name": "small_red_triangle", + "short_names": [ + "small_red_triangle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 212, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOWN-POINTING RED TRIANGLE", + "unified": "1F53B", + "non_qualified": null, + "docomo": null, + "au": "E55B", + "softbank": null, + "google": "FEB79", + "image": "1f53b.png", + "sheet_x": 28, + "sheet_y": 30, + "short_name": "small_red_triangle_down", + "short_names": [ + "small_red_triangle_down" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 213, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "UP-POINTING SMALL RED TRIANGLE", + "unified": "1F53C", + "non_qualified": null, + "docomo": null, + "au": "E543", + "softbank": null, + "google": "FEB01", + "image": "1f53c.png", + "sheet_x": 28, + "sheet_y": 31, + "short_name": "arrow_up_small", + "short_names": [ + "arrow_up_small" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 83, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOWN-POINTING SMALL RED TRIANGLE", + "unified": "1F53D", + "non_qualified": null, + "docomo": null, + "au": "E542", + "softbank": null, + "google": "FEB00", + "image": "1f53d.png", + "sheet_x": 28, + "sheet_y": 32, + "short_name": "arrow_down_small", + "short_names": [ + "arrow_down_small" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 85, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F549-FE0F", + "non_qualified": "1F549", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f549-fe0f.png", + "sheet_x": 28, + "sheet_y": 33, + "short_name": "om_symbol", + "short_names": [ + "om_symbol" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F54A-FE0F", + "non_qualified": "1F54A", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f54a-fe0f.png", + "sheet_x": 28, + "sheet_y": 34, + "short_name": "dove_of_peace", + "short_names": [ + "dove_of_peace" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 68, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KAABA", + "unified": "1F54B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f54b.png", + "sheet_x": 28, + "sheet_y": 35, + "short_name": "kaaba", + "short_names": [ + "kaaba" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOSQUE", + "unified": "1F54C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f54c.png", + "sheet_x": 28, + "sheet_y": 36, + "short_name": "mosque", + "short_names": [ + "mosque" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SYNAGOGUE", + "unified": "1F54D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f54d.png", + "sheet_x": 28, + "sheet_y": 37, + "short_name": "synagogue", + "short_names": [ + "synagogue" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MENORAH WITH NINE BRANCHES", + "unified": "1F54E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f54e.png", + "sheet_x": 28, + "sheet_y": 38, + "short_name": "menorah_with_nine_branches", + "short_names": [ + "menorah_with_nine_branches" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 58, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE ONE OCLOCK", + "unified": "1F550", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E024", + "google": "FE01E", + "image": "1f550.png", + "sheet_x": 28, + "sheet_y": 39, + "short_name": "clock1", + "short_names": [ + "clock1" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 142, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE TWO OCLOCK", + "unified": "1F551", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E025", + "google": "FE01F", + "image": "1f551.png", + "sheet_x": 28, + "sheet_y": 40, + "short_name": "clock2", + "short_names": [ + "clock2" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 144, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE THREE OCLOCK", + "unified": "1F552", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E026", + "google": "FE020", + "image": "1f552.png", + "sheet_x": 28, + "sheet_y": 41, + "short_name": "clock3", + "short_names": [ + "clock3" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 146, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE FOUR OCLOCK", + "unified": "1F553", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E027", + "google": "FE021", + "image": "1f553.png", + "sheet_x": 28, + "sheet_y": 42, + "short_name": "clock4", + "short_names": [ + "clock4" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 148, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE FIVE OCLOCK", + "unified": "1F554", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E028", + "google": "FE022", + "image": "1f554.png", + "sheet_x": 28, + "sheet_y": 43, + "short_name": "clock5", + "short_names": [ + "clock5" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 150, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE SIX OCLOCK", + "unified": "1F555", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E029", + "google": "FE023", + "image": "1f555.png", + "sheet_x": 28, + "sheet_y": 44, + "short_name": "clock6", + "short_names": [ + "clock6" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 152, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE SEVEN OCLOCK", + "unified": "1F556", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E02A", + "google": "FE024", + "image": "1f556.png", + "sheet_x": 28, + "sheet_y": 45, + "short_name": "clock7", + "short_names": [ + "clock7" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 154, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE EIGHT OCLOCK", + "unified": "1F557", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E02B", + "google": "FE025", + "image": "1f557.png", + "sheet_x": 28, + "sheet_y": 46, + "short_name": "clock8", + "short_names": [ + "clock8" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 156, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE NINE OCLOCK", + "unified": "1F558", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E02C", + "google": "FE026", + "image": "1f558.png", + "sheet_x": 28, + "sheet_y": 47, + "short_name": "clock9", + "short_names": [ + "clock9" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 158, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE TEN OCLOCK", + "unified": "1F559", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E02D", + "google": "FE027", + "image": "1f559.png", + "sheet_x": 28, + "sheet_y": 48, + "short_name": "clock10", + "short_names": [ + "clock10" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 160, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE ELEVEN OCLOCK", + "unified": "1F55A", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E02E", + "google": "FE028", + "image": "1f55a.png", + "sheet_x": 28, + "sheet_y": 49, + "short_name": "clock11", + "short_names": [ + "clock11" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 162, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE TWELVE OCLOCK", + "unified": "1F55B", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": "E02F", + "google": "FE029", + "image": "1f55b.png", + "sheet_x": 28, + "sheet_y": 50, + "short_name": "clock12", + "short_names": [ + "clock12" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 140, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE ONE-THIRTY", + "unified": "1F55C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f55c.png", + "sheet_x": 28, + "sheet_y": 51, + "short_name": "clock130", + "short_names": [ + "clock130" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 143, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE TWO-THIRTY", + "unified": "1F55D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f55d.png", + "sheet_x": 28, + "sheet_y": 52, + "short_name": "clock230", + "short_names": [ + "clock230" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 145, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE THREE-THIRTY", + "unified": "1F55E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f55e.png", + "sheet_x": 28, + "sheet_y": 53, + "short_name": "clock330", + "short_names": [ + "clock330" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 147, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE FOUR-THIRTY", + "unified": "1F55F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f55f.png", + "sheet_x": 28, + "sheet_y": 54, + "short_name": "clock430", + "short_names": [ + "clock430" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 149, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE FIVE-THIRTY", + "unified": "1F560", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f560.png", + "sheet_x": 28, + "sheet_y": 55, + "short_name": "clock530", + "short_names": [ + "clock530" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 151, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE SIX-THIRTY", + "unified": "1F561", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f561.png", + "sheet_x": 28, + "sheet_y": 56, + "short_name": "clock630", + "short_names": [ + "clock630" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 153, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE SEVEN-THIRTY", + "unified": "1F562", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f562.png", + "sheet_x": 29, + "sheet_y": 0, + "short_name": "clock730", + "short_names": [ + "clock730" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 155, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE EIGHT-THIRTY", + "unified": "1F563", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f563.png", + "sheet_x": 29, + "sheet_y": 1, + "short_name": "clock830", + "short_names": [ + "clock830" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 157, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE NINE-THIRTY", + "unified": "1F564", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f564.png", + "sheet_x": 29, + "sheet_y": 2, + "short_name": "clock930", + "short_names": [ + "clock930" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 159, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE TEN-THIRTY", + "unified": "1F565", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f565.png", + "sheet_x": 29, + "sheet_y": 3, + "short_name": "clock1030", + "short_names": [ + "clock1030" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 161, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE ELEVEN-THIRTY", + "unified": "1F566", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f566.png", + "sheet_x": 29, + "sheet_y": 4, + "short_name": "clock1130", + "short_names": [ + "clock1130" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 163, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOCK FACE TWELVE-THIRTY", + "unified": "1F567", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f567.png", + "sheet_x": 29, + "sheet_y": 5, + "short_name": "clock1230", + "short_names": [ + "clock1230" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 141, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F56F-FE0F", + "non_qualified": "1F56F", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f56f-fe0f.png", + "sheet_x": 29, + "sheet_y": 6, + "short_name": "candle", + "short_names": [ + "candle" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 99, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F570-FE0F", + "non_qualified": "1F570", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f570-fe0f.png", + "sheet_x": 29, + "sheet_y": 7, + "short_name": "mantelpiece_clock", + "short_names": [ + "mantelpiece_clock" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 139, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F573-FE0F", + "non_qualified": "1F573", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f573-fe0f.png", + "sheet_x": 29, + "sheet_y": 8, + "short_name": "hole", + "short_names": [ + "hole" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 142, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F574-FE0F", + "non_qualified": "1F574", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f574-fe0f.png", + "sheet_x": 29, + "sheet_y": 9, + "short_name": "man_in_business_suit_levitating", + "short_names": [ + "man_in_business_suit_levitating" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 235, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F574-1F3FB", + "non_qualified": null, + "image": "1f574-1f3fb.png", + "sheet_x": 29, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F574-1F3FC", + "non_qualified": null, + "image": "1f574-1f3fc.png", + "sheet_x": 29, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F574-1F3FD", + "non_qualified": null, + "image": "1f574-1f3fd.png", + "sheet_x": 29, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F574-1F3FE", + "non_qualified": null, + "image": "1f574-1f3fe.png", + "sheet_x": 29, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F574-1F3FF", + "non_qualified": null, + "image": "1f574-1f3ff.png", + "sheet_x": 29, + "sheet_y": 14, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F575-FE0F-200D-2640-FE0F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f575-fe0f-200d-2640-fe0f.png", + "sheet_x": 29, + "sheet_y": 15, + "short_name": "female-detective", + "short_names": [ + "female-detective" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 158, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F575-1F3FB-200D-2640-FE0F", + "non_qualified": "1F575-1F3FB-200D-2640", + "image": "1f575-1f3fb-200d-2640-fe0f.png", + "sheet_x": 29, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F575-1F3FC-200D-2640-FE0F", + "non_qualified": "1F575-1F3FC-200D-2640", + "image": "1f575-1f3fc-200d-2640-fe0f.png", + "sheet_x": 29, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F575-1F3FD-200D-2640-FE0F", + "non_qualified": "1F575-1F3FD-200D-2640", + "image": "1f575-1f3fd-200d-2640-fe0f.png", + "sheet_x": 29, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F575-1F3FE-200D-2640-FE0F", + "non_qualified": "1F575-1F3FE-200D-2640", + "image": "1f575-1f3fe-200d-2640-fe0f.png", + "sheet_x": 29, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F575-1F3FF-200D-2640-FE0F", + "non_qualified": "1F575-1F3FF-200D-2640", + "image": "1f575-1f3ff-200d-2640-fe0f.png", + "sheet_x": 29, + "sheet_y": 20, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F575-FE0F-200D-2642-FE0F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f575-fe0f-200d-2642-fe0f.png", + "sheet_x": 29, + "sheet_y": 21, + "short_name": "male-detective", + "short_names": [ + "male-detective" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 157, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F575-1F3FB-200D-2642-FE0F", + "non_qualified": "1F575-1F3FB-200D-2642", + "image": "1f575-1f3fb-200d-2642-fe0f.png", + "sheet_x": 29, + "sheet_y": 22, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F575-1F3FC-200D-2642-FE0F", + "non_qualified": "1F575-1F3FC-200D-2642", + "image": "1f575-1f3fc-200d-2642-fe0f.png", + "sheet_x": 29, + "sheet_y": 23, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F575-1F3FD-200D-2642-FE0F", + "non_qualified": "1F575-1F3FD-200D-2642", + "image": "1f575-1f3fd-200d-2642-fe0f.png", + "sheet_x": 29, + "sheet_y": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F575-1F3FE-200D-2642-FE0F", + "non_qualified": "1F575-1F3FE-200D-2642", + "image": "1f575-1f3fe-200d-2642-fe0f.png", + "sheet_x": 29, + "sheet_y": 25, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F575-1F3FF-200D-2642-FE0F", + "non_qualified": "1F575-1F3FF-200D-2642", + "image": "1f575-1f3ff-200d-2642-fe0f.png", + "sheet_x": 29, + "sheet_y": 26, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F575-FE0F" + }, + { + "name": null, + "unified": "1F575-FE0F", + "non_qualified": "1F575", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f575-fe0f.png", + "sheet_x": 29, + "sheet_y": 27, + "short_name": "sleuth_or_spy", + "short_names": [ + "sleuth_or_spy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 156, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F575-1F3FB", + "non_qualified": null, + "image": "1f575-1f3fb.png", + "sheet_x": 29, + "sheet_y": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F575-1F3FC", + "non_qualified": null, + "image": "1f575-1f3fc.png", + "sheet_x": 29, + "sheet_y": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F575-1F3FD", + "non_qualified": null, + "image": "1f575-1f3fd.png", + "sheet_x": 29, + "sheet_y": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F575-1F3FE", + "non_qualified": null, + "image": "1f575-1f3fe.png", + "sheet_x": 29, + "sheet_y": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F575-1F3FF", + "non_qualified": null, + "image": "1f575-1f3ff.png", + "sheet_x": 29, + "sheet_y": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F575-FE0F-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F576-FE0F", + "non_qualified": "1F576", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f576-fe0f.png", + "sheet_x": 29, + "sheet_y": 33, + "short_name": "dark_sunglasses", + "short_names": [ + "dark_sunglasses" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F577-FE0F", + "non_qualified": "1F577", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f577-fe0f.png", + "sheet_x": 29, + "sheet_y": 34, + "short_name": "spider", + "short_names": [ + "spider" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 101, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F578-FE0F", + "non_qualified": "1F578", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f578-fe0f.png", + "sheet_x": 29, + "sheet_y": 35, + "short_name": "spider_web", + "short_names": [ + "spider_web" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 102, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F579-FE0F", + "non_qualified": "1F579", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f579-fe0f.png", + "sheet_x": 29, + "sheet_y": 36, + "short_name": "joystick", + "short_names": [ + "joystick" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 62, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MAN DANCING", + "unified": "1F57A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f57a.png", + "sheet_x": 29, + "sheet_y": 37, + "short_name": "man_dancing", + "short_names": [ + "man_dancing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 234, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F57A-1F3FB", + "non_qualified": null, + "image": "1f57a-1f3fb.png", + "sheet_x": 29, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F57A-1F3FC", + "non_qualified": null, + "image": "1f57a-1f3fc.png", + "sheet_x": 29, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F57A-1F3FD", + "non_qualified": null, + "image": "1f57a-1f3fd.png", + "sheet_x": 29, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F57A-1F3FE", + "non_qualified": null, + "image": "1f57a-1f3fe.png", + "sheet_x": 29, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F57A-1F3FF", + "non_qualified": null, + "image": "1f57a-1f3ff.png", + "sheet_x": 29, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F587-FE0F", + "non_qualified": "1F587", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f587-fe0f.png", + "sheet_x": 29, + "sheet_y": 43, + "short_name": "linked_paperclips", + "short_names": [ + "linked_paperclips" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 168, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F58A-FE0F", + "non_qualified": "1F58A", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f58a-fe0f.png", + "sheet_x": 29, + "sheet_y": 44, + "short_name": "lower_left_ballpoint_pen", + "short_names": [ + "lower_left_ballpoint_pen" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 148, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F58B-FE0F", + "non_qualified": "1F58B", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f58b-fe0f.png", + "sheet_x": 29, + "sheet_y": 45, + "short_name": "lower_left_fountain_pen", + "short_names": [ + "lower_left_fountain_pen" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 147, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F58C-FE0F", + "non_qualified": "1F58C", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f58c-fe0f.png", + "sheet_x": 29, + "sheet_y": 46, + "short_name": "lower_left_paintbrush", + "short_names": [ + "lower_left_paintbrush" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 149, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F58D-FE0F", + "non_qualified": "1F58D", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f58d-fe0f.png", + "sheet_x": 29, + "sheet_y": 47, + "short_name": "lower_left_crayon", + "short_names": [ + "lower_left_crayon" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 150, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F590-FE0F", + "non_qualified": "1F590", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f590-fe0f.png", + "sheet_x": 29, + "sheet_y": 48, + "short_name": "raised_hand_with_fingers_splayed", + "short_names": [ + "raised_hand_with_fingers_splayed" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F590-1F3FB", + "non_qualified": null, + "image": "1f590-1f3fb.png", + "sheet_x": 29, + "sheet_y": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F590-1F3FC", + "non_qualified": null, + "image": "1f590-1f3fc.png", + "sheet_x": 29, + "sheet_y": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F590-1F3FD", + "non_qualified": null, + "image": "1f590-1f3fd.png", + "sheet_x": 29, + "sheet_y": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F590-1F3FE", + "non_qualified": null, + "image": "1f590-1f3fe.png", + "sheet_x": 29, + "sheet_y": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F590-1F3FF", + "non_qualified": null, + "image": "1f590-1f3ff.png", + "sheet_x": 29, + "sheet_y": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "REVERSED HAND WITH MIDDLE FINGER EXTENDED", + "unified": "1F595", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f595.png", + "sheet_x": 29, + "sheet_y": 54, + "short_name": "middle_finger", + "short_names": [ + "middle_finger", + "reversed_hand_with_middle_finger_extended" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 16, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F595-1F3FB", + "non_qualified": null, + "image": "1f595-1f3fb.png", + "sheet_x": 29, + "sheet_y": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F595-1F3FC", + "non_qualified": null, + "image": "1f595-1f3fc.png", + "sheet_x": 29, + "sheet_y": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F595-1F3FD", + "non_qualified": null, + "image": "1f595-1f3fd.png", + "sheet_x": 30, + "sheet_y": 0, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F595-1F3FE", + "non_qualified": null, + "image": "1f595-1f3fe.png", + "sheet_x": 30, + "sheet_y": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F595-1F3FF", + "non_qualified": null, + "image": "1f595-1f3ff.png", + "sheet_x": 30, + "sheet_y": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS", + "unified": "1F596", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f596.png", + "sheet_x": 30, + "sheet_y": 3, + "short_name": "spock-hand", + "short_names": [ + "spock-hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F596-1F3FB", + "non_qualified": null, + "image": "1f596-1f3fb.png", + "sheet_x": 30, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F596-1F3FC", + "non_qualified": null, + "image": "1f596-1f3fc.png", + "sheet_x": 30, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F596-1F3FD", + "non_qualified": null, + "image": "1f596-1f3fd.png", + "sheet_x": 30, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F596-1F3FE", + "non_qualified": null, + "image": "1f596-1f3fe.png", + "sheet_x": 30, + "sheet_y": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F596-1F3FF", + "non_qualified": null, + "image": "1f596-1f3ff.png", + "sheet_x": 30, + "sheet_y": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "BLACK HEART", + "unified": "1F5A4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5a4.png", + "sheet_x": 30, + "sheet_y": 9, + "short_name": "black_heart", + "short_names": [ + "black_heart" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 134, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5A5-FE0F", + "non_qualified": "1F5A5", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5a5-fe0f.png", + "sheet_x": 30, + "sheet_y": 10, + "short_name": "desktop_computer", + "short_names": [ + "desktop_computer" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 78, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5A8-FE0F", + "non_qualified": "1F5A8", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5a8-fe0f.png", + "sheet_x": 30, + "sheet_y": 11, + "short_name": "printer", + "short_names": [ + "printer" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 79, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5B1-FE0F", + "non_qualified": "1F5B1", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5b1-fe0f.png", + "sheet_x": 30, + "sheet_y": 12, + "short_name": "three_button_mouse", + "short_names": [ + "three_button_mouse" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 81, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5B2-FE0F", + "non_qualified": "1F5B2", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5b2-fe0f.png", + "sheet_x": 30, + "sheet_y": 13, + "short_name": "trackball", + "short_names": [ + "trackball" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 82, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5BC-FE0F", + "non_qualified": "1F5BC", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5bc-fe0f.png", + "sheet_x": 30, + "sheet_y": 14, + "short_name": "frame_with_picture", + "short_names": [ + "frame_with_picture" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 76, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5C2-FE0F", + "non_qualified": "1F5C2", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5c2-fe0f.png", + "sheet_x": 30, + "sheet_y": 15, + "short_name": "card_index_dividers", + "short_names": [ + "card_index_dividers" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 155, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5C3-FE0F", + "non_qualified": "1F5C3", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5c3-fe0f.png", + "sheet_x": 30, + "sheet_y": 16, + "short_name": "card_file_box", + "short_names": [ + "card_file_box" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 172, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5C4-FE0F", + "non_qualified": "1F5C4", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5c4-fe0f.png", + "sheet_x": 30, + "sheet_y": 17, + "short_name": "file_cabinet", + "short_names": [ + "file_cabinet" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 173, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5D1-FE0F", + "non_qualified": "1F5D1", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5d1-fe0f.png", + "sheet_x": 30, + "sheet_y": 18, + "short_name": "wastebasket", + "short_names": [ + "wastebasket" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 174, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5D2-FE0F", + "non_qualified": "1F5D2", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5d2-fe0f.png", + "sheet_x": 30, + "sheet_y": 19, + "short_name": "spiral_note_pad", + "short_names": [ + "spiral_note_pad" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 158, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5D3-FE0F", + "non_qualified": "1F5D3", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5d3-fe0f.png", + "sheet_x": 30, + "sheet_y": 20, + "short_name": "spiral_calendar_pad", + "short_names": [ + "spiral_calendar_pad" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 159, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5DC-FE0F", + "non_qualified": "1F5DC", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5dc-fe0f.png", + "sheet_x": 30, + "sheet_y": 21, + "short_name": "compression", + "short_names": [ + "compression" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 194, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5DD-FE0F", + "non_qualified": "1F5DD", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5dd-fe0f.png", + "sheet_x": 30, + "sheet_y": 22, + "short_name": "old_key", + "short_names": [ + "old_key" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 180, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5DE-FE0F", + "non_qualified": "1F5DE", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5de-fe0f.png", + "sheet_x": 30, + "sheet_y": 23, + "short_name": "rolled_up_newspaper", + "short_names": [ + "rolled_up_newspaper" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 117, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5E1-FE0F", + "non_qualified": "1F5E1", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5e1-fe0f.png", + "sheet_x": 30, + "sheet_y": 24, + "short_name": "dagger_knife", + "short_names": [ + "dagger_knife" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 186, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5E3-FE0F", + "non_qualified": "1F5E3", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5e3-fe0f.png", + "sheet_x": 30, + "sheet_y": 25, + "short_name": "speaking_head_in_silhouette", + "short_names": [ + "speaking_head_in_silhouette" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 331, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5E8-FE0F", + "non_qualified": "1F5E8", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5e8-fe0f.png", + "sheet_x": 30, + "sheet_y": 26, + "short_name": "left_speech_bubble", + "short_names": [ + "left_speech_bubble" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 146, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5EF-FE0F", + "non_qualified": "1F5EF", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5ef-fe0f.png", + "sheet_x": 30, + "sheet_y": 27, + "short_name": "right_anger_bubble", + "short_names": [ + "right_anger_bubble" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 147, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5F3-FE0F", + "non_qualified": "1F5F3", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5f3-fe0f.png", + "sheet_x": 30, + "sheet_y": 28, + "short_name": "ballot_box_with_ballot", + "short_names": [ + "ballot_box_with_ballot" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 144, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F5FA-FE0F", + "non_qualified": "1F5FA", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f5fa-fe0f.png", + "sheet_x": 30, + "sheet_y": 29, + "short_name": "world_map", + "short_names": [ + "world_map" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOUNT FUJI", + "unified": "1F5FB", + "non_qualified": null, + "docomo": "E740", + "au": "E5BD", + "softbank": "E03B", + "google": "FE4C3", + "image": "1f5fb.png", + "sheet_x": 30, + "sheet_y": 30, + "short_name": "mount_fuji", + "short_names": [ + "mount_fuji" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TOKYO TOWER", + "unified": "1F5FC", + "non_qualified": null, + "docomo": null, + "au": "E4C0", + "softbank": "E509", + "google": "FE4C4", + "image": "1f5fc.png", + "sheet_x": 30, + "sheet_y": 31, + "short_name": "tokyo_tower", + "short_names": [ + "tokyo_tower" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "STATUE OF LIBERTY", + "unified": "1F5FD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E51D", + "google": "FE4C6", + "image": "1f5fd.png", + "sheet_x": 30, + "sheet_y": 32, + "short_name": "statue_of_liberty", + "short_names": [ + "statue_of_liberty" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SILHOUETTE OF JAPAN", + "unified": "1F5FE", + "non_qualified": null, + "docomo": null, + "au": "E572", + "softbank": null, + "google": "FE4C7", + "image": "1f5fe.png", + "sheet_x": 30, + "sheet_y": 33, + "short_name": "japan", + "short_names": [ + "japan" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOYAI", + "unified": "1F5FF", + "non_qualified": null, + "docomo": null, + "au": "EB6C", + "softbank": null, + "google": "FE4C8", + "image": "1f5ff.png", + "sheet_x": 30, + "sheet_y": 34, + "short_name": "moyai", + "short_names": [ + "moyai" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 233, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GRINNING FACE", + "unified": "1F600", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f600.png", + "sheet_x": 30, + "sheet_y": 35, + "short_name": "grinning", + "short_names": [ + "grinning" + ], + "text": ":D", + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GRINNING FACE WITH SMILING EYES", + "unified": "1F601", + "non_qualified": null, + "docomo": "E753", + "au": "EB80", + "softbank": "E404", + "google": "FE333", + "image": "1f601.png", + "sheet_x": 30, + "sheet_y": 36, + "short_name": "grin", + "short_names": [ + "grin" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH TEARS OF JOY", + "unified": "1F602", + "non_qualified": null, + "docomo": "E72A", + "au": "EB64", + "softbank": "E412", + "google": "FE334", + "image": "1f602.png", + "sheet_x": 30, + "sheet_y": 37, + "short_name": "joy", + "short_names": [ + "joy" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH OPEN MOUTH", + "unified": "1F603", + "non_qualified": null, + "docomo": "E6F0", + "au": "E471", + "softbank": "E057", + "google": "FE330", + "image": "1f603.png", + "sheet_x": 30, + "sheet_y": 38, + "short_name": "smiley", + "short_names": [ + "smiley" + ], + "text": ":)", + "texts": [ + "=)", + "=-)" + ], + "category": "Smileys & Emotion", + "sort_order": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH OPEN MOUTH AND SMILING EYES", + "unified": "1F604", + "non_qualified": null, + "docomo": "E6F0", + "au": "E471", + "softbank": "E415", + "google": "FE338", + "image": "1f604.png", + "sheet_x": 30, + "sheet_y": 39, + "short_name": "smile", + "short_names": [ + "smile" + ], + "text": ":)", + "texts": [ + "C:", + "c:", + ":D", + ":-D" + ], + "category": "Smileys & Emotion", + "sort_order": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH OPEN MOUTH AND COLD SWEAT", + "unified": "1F605", + "non_qualified": null, + "docomo": "E722", + "au": "E471-E5B1", + "softbank": null, + "google": "FE331", + "image": "1f605.png", + "sheet_x": 30, + "sheet_y": 40, + "short_name": "sweat_smile", + "short_names": [ + "sweat_smile" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES", + "unified": "1F606", + "non_qualified": null, + "docomo": "E72A", + "au": "EAC5", + "softbank": null, + "google": "FE332", + "image": "1f606.png", + "sheet_x": 30, + "sheet_y": 41, + "short_name": "laughing", + "short_names": [ + "laughing", + "satisfied" + ], + "text": null, + "texts": [ + ":>", + ":->" + ], + "category": "Smileys & Emotion", + "sort_order": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH HALO", + "unified": "1F607", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f607.png", + "sheet_x": 30, + "sheet_y": 42, + "short_name": "innocent", + "short_names": [ + "innocent" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH HORNS", + "unified": "1F608", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f608.png", + "sheet_x": 30, + "sheet_y": 43, + "short_name": "smiling_imp", + "short_names": [ + "smiling_imp" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 91, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WINKING FACE", + "unified": "1F609", + "non_qualified": null, + "docomo": "E729", + "au": "E5C3", + "softbank": "E405", + "google": "FE347", + "image": "1f609.png", + "sheet_x": 30, + "sheet_y": 44, + "short_name": "wink", + "short_names": [ + "wink" + ], + "text": ";)", + "texts": [ + ";)", + ";-)" + ], + "category": "Smileys & Emotion", + "sort_order": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH SMILING EYES", + "unified": "1F60A", + "non_qualified": null, + "docomo": "E6F0", + "au": "EACD", + "softbank": "E056", + "google": "FE335", + "image": "1f60a.png", + "sheet_x": 30, + "sheet_y": 45, + "short_name": "blush", + "short_names": [ + "blush" + ], + "text": ":)", + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE SAVOURING DELICIOUS FOOD", + "unified": "1F60B", + "non_qualified": null, + "docomo": "E752", + "au": "EACD", + "softbank": null, + "google": "FE32B", + "image": "1f60b.png", + "sheet_x": 30, + "sheet_y": 46, + "short_name": "yum", + "short_names": [ + "yum" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RELIEVED FACE", + "unified": "1F60C", + "non_qualified": null, + "docomo": "E721", + "au": "EAC5", + "softbank": "E40A", + "google": "FE33E", + "image": "1f60c.png", + "sheet_x": 30, + "sheet_y": 47, + "short_name": "relieved", + "short_names": [ + "relieved" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH HEART-SHAPED EYES", + "unified": "1F60D", + "non_qualified": null, + "docomo": "E726", + "au": "E5C4", + "softbank": "E106", + "google": "FE327", + "image": "1f60d.png", + "sheet_x": 30, + "sheet_y": 48, + "short_name": "heart_eyes", + "short_names": [ + "heart_eyes" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 15, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH SUNGLASSES", + "unified": "1F60E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f60e.png", + "sheet_x": 30, + "sheet_y": 49, + "short_name": "sunglasses", + "short_names": [ + "sunglasses" + ], + "text": null, + "texts": [ + "8)" + ], + "category": "Smileys & Emotion", + "sort_order": 60, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMIRKING FACE", + "unified": "1F60F", + "non_qualified": null, + "docomo": "E72C", + "au": "EABF", + "softbank": "E402", + "google": "FE343", + "image": "1f60f.png", + "sheet_x": 30, + "sheet_y": 50, + "short_name": "smirk", + "short_names": [ + "smirk" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEUTRAL FACE", + "unified": "1F610", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f610.png", + "sheet_x": 30, + "sheet_y": 51, + "short_name": "neutral_face", + "short_names": [ + "neutral_face" + ], + "text": null, + "texts": [ + ":|", + ":-|" + ], + "category": "Smileys & Emotion", + "sort_order": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EXPRESSIONLESS FACE", + "unified": "1F611", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f611.png", + "sheet_x": 30, + "sheet_y": 52, + "short_name": "expressionless", + "short_names": [ + "expressionless" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "UNAMUSED FACE", + "unified": "1F612", + "non_qualified": null, + "docomo": "E725", + "au": "EAC9", + "softbank": "E40E", + "google": "FE326", + "image": "1f612.png", + "sheet_x": 30, + "sheet_y": 53, + "short_name": "unamused", + "short_names": [ + "unamused" + ], + "text": ":(", + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 38, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH COLD SWEAT", + "unified": "1F613", + "non_qualified": null, + "docomo": "E723", + "au": "E5C6", + "softbank": "E108", + "google": "FE344", + "image": "1f613.png", + "sheet_x": 30, + "sheet_y": 54, + "short_name": "sweat", + "short_names": [ + "sweat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 83, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PENSIVE FACE", + "unified": "1F614", + "non_qualified": null, + "docomo": "E720", + "au": "EAC0", + "softbank": "E403", + "google": "FE340", + "image": "1f614.png", + "sheet_x": 30, + "sheet_y": 55, + "short_name": "pensive", + "short_names": [ + "pensive" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CONFUSED FACE", + "unified": "1F615", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f615.png", + "sheet_x": 30, + "sheet_y": 56, + "short_name": "confused", + "short_names": [ + "confused" + ], + "text": null, + "texts": [ + ":\\", + ":-\\", + ":\/", + ":-\/" + ], + "category": "Smileys & Emotion", + "sort_order": 63, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CONFOUNDED FACE", + "unified": "1F616", + "non_qualified": null, + "docomo": "E6F3", + "au": "EAC3", + "softbank": "E407", + "google": "FE33F", + "image": "1f616.png", + "sheet_x": 31, + "sheet_y": 0, + "short_name": "confounded", + "short_names": [ + "confounded" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 80, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KISSING FACE", + "unified": "1F617", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f617.png", + "sheet_x": 31, + "sheet_y": 1, + "short_name": "kissing", + "short_names": [ + "kissing" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 18, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE THROWING A KISS", + "unified": "1F618", + "non_qualified": null, + "docomo": "E726", + "au": "EACF", + "softbank": "E418", + "google": "FE32C", + "image": "1f618.png", + "sheet_x": 31, + "sheet_y": 2, + "short_name": "kissing_heart", + "short_names": [ + "kissing_heart" + ], + "text": null, + "texts": [ + ":*", + ":-*" + ], + "category": "Smileys & Emotion", + "sort_order": 17, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KISSING FACE WITH SMILING EYES", + "unified": "1F619", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f619.png", + "sheet_x": 31, + "sheet_y": 3, + "short_name": "kissing_smiling_eyes", + "short_names": [ + "kissing_smiling_eyes" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KISSING FACE WITH CLOSED EYES", + "unified": "1F61A", + "non_qualified": null, + "docomo": "E726", + "au": "EACE", + "softbank": "E417", + "google": "FE32D", + "image": "1f61a.png", + "sheet_x": 31, + "sheet_y": 4, + "short_name": "kissing_closed_eyes", + "short_names": [ + "kissing_closed_eyes" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH STUCK-OUT TONGUE", + "unified": "1F61B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f61b.png", + "sheet_x": 31, + "sheet_y": 5, + "short_name": "stuck_out_tongue", + "short_names": [ + "stuck_out_tongue" + ], + "text": ":p", + "texts": [ + ":p", + ":-p", + ":P", + ":-P", + ":b", + ":-b" + ], + "category": "Smileys & Emotion", + "sort_order": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH STUCK-OUT TONGUE AND WINKING EYE", + "unified": "1F61C", + "non_qualified": null, + "docomo": "E728", + "au": "E4E7", + "softbank": "E105", + "google": "FE329", + "image": "1f61c.png", + "sheet_x": 31, + "sheet_y": 6, + "short_name": "stuck_out_tongue_winking_eye", + "short_names": [ + "stuck_out_tongue_winking_eye" + ], + "text": ";p", + "texts": [ + ";p", + ";-p", + ";b", + ";-b", + ";P", + ";-P" + ], + "category": "Smileys & Emotion", + "sort_order": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES", + "unified": "1F61D", + "non_qualified": null, + "docomo": "E728", + "au": "E4E7", + "softbank": "E409", + "google": "FE32A", + "image": "1f61d.png", + "sheet_x": 31, + "sheet_y": 7, + "short_name": "stuck_out_tongue_closed_eyes", + "short_names": [ + "stuck_out_tongue_closed_eyes" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DISAPPOINTED FACE", + "unified": "1F61E", + "non_qualified": null, + "docomo": "E6F2", + "au": "EAC0", + "softbank": "E058", + "google": "FE323", + "image": "1f61e.png", + "sheet_x": 31, + "sheet_y": 8, + "short_name": "disappointed", + "short_names": [ + "disappointed" + ], + "text": ":(", + "texts": [ + "):", + ":(", + ":-(" + ], + "category": "Smileys & Emotion", + "sort_order": 82, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WORRIED FACE", + "unified": "1F61F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f61f.png", + "sheet_x": 31, + "sheet_y": 9, + "short_name": "worried", + "short_names": [ + "worried" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 64, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ANGRY FACE", + "unified": "1F620", + "non_qualified": null, + "docomo": "E6F1", + "au": "E472", + "softbank": "E059", + "google": "FE320", + "image": "1f620.png", + "sheet_x": 31, + "sheet_y": 10, + "short_name": "angry", + "short_names": [ + "angry" + ], + "text": null, + "texts": [ + ">:(", + ">:-(" + ], + "category": "Smileys & Emotion", + "sort_order": 89, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POUTING FACE", + "unified": "1F621", + "non_qualified": null, + "docomo": "E724", + "au": "EB5D", + "softbank": "E416", + "google": "FE33D", + "image": "1f621.png", + "sheet_x": 31, + "sheet_y": 11, + "short_name": "rage", + "short_names": [ + "rage" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 88, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CRYING FACE", + "unified": "1F622", + "non_qualified": null, + "docomo": "E72E", + "au": "EB69", + "softbank": "E413", + "google": "FE339", + "image": "1f622.png", + "sheet_x": 31, + "sheet_y": 12, + "short_name": "cry", + "short_names": [ + "cry" + ], + "text": ":'(", + "texts": [ + ":'(" + ], + "category": "Smileys & Emotion", + "sort_order": 77, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PERSEVERING FACE", + "unified": "1F623", + "non_qualified": null, + "docomo": "E72B", + "au": "EAC2", + "softbank": "E406", + "google": "FE33C", + "image": "1f623.png", + "sheet_x": 31, + "sheet_y": 13, + "short_name": "persevere", + "short_names": [ + "persevere" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 81, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH LOOK OF TRIUMPH", + "unified": "1F624", + "non_qualified": null, + "docomo": "E753", + "au": "EAC1", + "softbank": null, + "google": "FE328", + "image": "1f624.png", + "sheet_x": 31, + "sheet_y": 14, + "short_name": "triumph", + "short_names": [ + "triumph" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 87, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DISAPPOINTED BUT RELIEVED FACE", + "unified": "1F625", + "non_qualified": null, + "docomo": "E723", + "au": "E5C6", + "softbank": "E401", + "google": "FE345", + "image": "1f625.png", + "sheet_x": 31, + "sheet_y": 15, + "short_name": "disappointed_relieved", + "short_names": [ + "disappointed_relieved" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 76, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FROWNING FACE WITH OPEN MOUTH", + "unified": "1F626", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f626.png", + "sheet_x": 31, + "sheet_y": 16, + "short_name": "frowning", + "short_names": [ + "frowning" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 72, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ANGUISHED FACE", + "unified": "1F627", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f627.png", + "sheet_x": 31, + "sheet_y": 17, + "short_name": "anguished", + "short_names": [ + "anguished" + ], + "text": null, + "texts": [ + "D:" + ], + "category": "Smileys & Emotion", + "sort_order": 73, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FEARFUL FACE", + "unified": "1F628", + "non_qualified": null, + "docomo": "E757", + "au": "EAC6", + "softbank": "E40B", + "google": "FE33B", + "image": "1f628.png", + "sheet_x": 31, + "sheet_y": 18, + "short_name": "fearful", + "short_names": [ + "fearful" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 74, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WEARY FACE", + "unified": "1F629", + "non_qualified": null, + "docomo": "E6F3", + "au": "EB67", + "softbank": null, + "google": "FE321", + "image": "1f629.png", + "sheet_x": 31, + "sheet_y": 19, + "short_name": "weary", + "short_names": [ + "weary" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 84, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLEEPY FACE", + "unified": "1F62A", + "non_qualified": null, + "docomo": "E701", + "au": "EAC4", + "softbank": "E408", + "google": "FE342", + "image": "1f62a.png", + "sheet_x": 31, + "sheet_y": 20, + "short_name": "sleepy", + "short_names": [ + "sleepy" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TIRED FACE", + "unified": "1F62B", + "non_qualified": null, + "docomo": "E72B", + "au": "E474", + "softbank": null, + "google": "FE346", + "image": "1f62b.png", + "sheet_x": 31, + "sheet_y": 21, + "short_name": "tired_face", + "short_names": [ + "tired_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 85, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GRIMACING FACE", + "unified": "1F62C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f62c.png", + "sheet_x": 31, + "sheet_y": 22, + "short_name": "grimacing", + "short_names": [ + "grimacing" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LOUDLY CRYING FACE", + "unified": "1F62D", + "non_qualified": null, + "docomo": "E72D", + "au": "E473", + "softbank": "E411", + "google": "FE33A", + "image": "1f62d.png", + "sheet_x": 31, + "sheet_y": 23, + "short_name": "sob", + "short_names": [ + "sob" + ], + "text": ":'(", + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 78, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH OPEN MOUTH", + "unified": "1F62E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f62e.png", + "sheet_x": 31, + "sheet_y": 24, + "short_name": "open_mouth", + "short_names": [ + "open_mouth" + ], + "text": null, + "texts": [ + ":o", + ":-o", + ":O", + ":-O" + ], + "category": "Smileys & Emotion", + "sort_order": 67, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HUSHED FACE", + "unified": "1F62F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f62f.png", + "sheet_x": 31, + "sheet_y": 25, + "short_name": "hushed", + "short_names": [ + "hushed" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 68, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH OPEN MOUTH AND COLD SWEAT", + "unified": "1F630", + "non_qualified": null, + "docomo": "E723", + "au": "EACB", + "softbank": "E40F", + "google": "FE325", + "image": "1f630.png", + "sheet_x": 31, + "sheet_y": 26, + "short_name": "cold_sweat", + "short_names": [ + "cold_sweat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 75, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE SCREAMING IN FEAR", + "unified": "1F631", + "non_qualified": null, + "docomo": "E757", + "au": "E5C5", + "softbank": "E107", + "google": "FE341", + "image": "1f631.png", + "sheet_x": 31, + "sheet_y": 27, + "short_name": "scream", + "short_names": [ + "scream" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 79, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ASTONISHED FACE", + "unified": "1F632", + "non_qualified": null, + "docomo": "E6F4", + "au": "EACA", + "softbank": "E410", + "google": "FE322", + "image": "1f632.png", + "sheet_x": 31, + "sheet_y": 28, + "short_name": "astonished", + "short_names": [ + "astonished" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 69, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FLUSHED FACE", + "unified": "1F633", + "non_qualified": null, + "docomo": "E72A", + "au": "EAC8", + "softbank": "E40D", + "google": "FE32F", + "image": "1f633.png", + "sheet_x": 31, + "sheet_y": 29, + "short_name": "flushed", + "short_names": [ + "flushed" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 70, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLEEPING FACE", + "unified": "1F634", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f634.png", + "sheet_x": 31, + "sheet_y": 30, + "short_name": "sleeping", + "short_names": [ + "sleeping" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DIZZY FACE", + "unified": "1F635", + "non_qualified": null, + "docomo": "E6F4", + "au": "E5AE", + "softbank": null, + "google": "FE324", + "image": "1f635.png", + "sheet_x": 31, + "sheet_y": 31, + "short_name": "dizzy_face", + "short_names": [ + "dizzy_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITHOUT MOUTH", + "unified": "1F636", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f636.png", + "sheet_x": 31, + "sheet_y": 32, + "short_name": "no_mouth", + "short_names": [ + "no_mouth" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH MEDICAL MASK", + "unified": "1F637", + "non_qualified": null, + "docomo": null, + "au": "EAC7", + "softbank": "E40C", + "google": "FE32E", + "image": "1f637.png", + "sheet_x": 31, + "sheet_y": 33, + "short_name": "mask", + "short_names": [ + "mask" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GRINNING CAT FACE WITH SMILING EYES", + "unified": "1F638", + "non_qualified": null, + "docomo": "E753", + "au": "EB7F", + "softbank": null, + "google": "FE349", + "image": "1f638.png", + "sheet_x": 31, + "sheet_y": 34, + "short_name": "smile_cat", + "short_names": [ + "smile_cat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 104, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CAT FACE WITH TEARS OF JOY", + "unified": "1F639", + "non_qualified": null, + "docomo": "E72A", + "au": "EB63", + "softbank": null, + "google": "FE34A", + "image": "1f639.png", + "sheet_x": 31, + "sheet_y": 35, + "short_name": "joy_cat", + "short_names": [ + "joy_cat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 105, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING CAT FACE WITH OPEN MOUTH", + "unified": "1F63A", + "non_qualified": null, + "docomo": "E6F0", + "au": "EB61", + "softbank": null, + "google": "FE348", + "image": "1f63a.png", + "sheet_x": 31, + "sheet_y": 36, + "short_name": "smiley_cat", + "short_names": [ + "smiley_cat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 103, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING CAT FACE WITH HEART-SHAPED EYES", + "unified": "1F63B", + "non_qualified": null, + "docomo": "E726", + "au": "EB65", + "softbank": null, + "google": "FE34C", + "image": "1f63b.png", + "sheet_x": 31, + "sheet_y": 37, + "short_name": "heart_eyes_cat", + "short_names": [ + "heart_eyes_cat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 106, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CAT FACE WITH WRY SMILE", + "unified": "1F63C", + "non_qualified": null, + "docomo": "E753", + "au": "EB6A", + "softbank": null, + "google": "FE34F", + "image": "1f63c.png", + "sheet_x": 31, + "sheet_y": 38, + "short_name": "smirk_cat", + "short_names": [ + "smirk_cat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 107, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KISSING CAT FACE WITH CLOSED EYES", + "unified": "1F63D", + "non_qualified": null, + "docomo": "E726", + "au": "EB60", + "softbank": null, + "google": "FE34B", + "image": "1f63d.png", + "sheet_x": 31, + "sheet_y": 39, + "short_name": "kissing_cat", + "short_names": [ + "kissing_cat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 108, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POUTING CAT FACE", + "unified": "1F63E", + "non_qualified": null, + "docomo": "E724", + "au": "EB5E", + "softbank": null, + "google": "FE34E", + "image": "1f63e.png", + "sheet_x": 31, + "sheet_y": 40, + "short_name": "pouting_cat", + "short_names": [ + "pouting_cat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 111, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CRYING CAT FACE", + "unified": "1F63F", + "non_qualified": null, + "docomo": "E72E", + "au": "EB68", + "softbank": null, + "google": "FE34D", + "image": "1f63f.png", + "sheet_x": 31, + "sheet_y": 41, + "short_name": "crying_cat_face", + "short_names": [ + "crying_cat_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 110, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WEARY CAT FACE", + "unified": "1F640", + "non_qualified": null, + "docomo": "E6F3", + "au": "EB66", + "softbank": null, + "google": "FE350", + "image": "1f640.png", + "sheet_x": 31, + "sheet_y": 42, + "short_name": "scream_cat", + "short_names": [ + "scream_cat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 109, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLIGHTLY FROWNING FACE", + "unified": "1F641", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f641.png", + "sheet_x": 31, + "sheet_y": 43, + "short_name": "slightly_frowning_face", + "short_names": [ + "slightly_frowning_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 65, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLIGHTLY SMILING FACE", + "unified": "1F642", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f642.png", + "sheet_x": 31, + "sheet_y": 44, + "short_name": "slightly_smiling_face", + "short_names": [ + "slightly_smiling_face" + ], + "text": null, + "texts": [ + ":)", + "(:", + ":-)" + ], + "category": "Smileys & Emotion", + "sort_order": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "UPSIDE-DOWN FACE", + "unified": "1F643", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f643.png", + "sheet_x": 31, + "sheet_y": 45, + "short_name": "upside_down_face", + "short_names": [ + "upside_down_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH ROLLING EYES", + "unified": "1F644", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f644.png", + "sheet_x": 31, + "sheet_y": 46, + "short_name": "face_with_rolling_eyes", + "short_names": [ + "face_with_rolling_eyes" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F645-200D-2640-FE0F", + "non_qualified": "1F645-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f645-200d-2640-fe0f.png", + "sheet_x": 31, + "sheet_y": 47, + "short_name": "woman-gesturing-no", + "short_names": [ + "woman-gesturing-no" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 83, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F645-1F3FB-200D-2640-FE0F", + "non_qualified": "1F645-1F3FB-200D-2640", + "image": "1f645-1f3fb-200d-2640-fe0f.png", + "sheet_x": 31, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F645-1F3FC-200D-2640-FE0F", + "non_qualified": "1F645-1F3FC-200D-2640", + "image": "1f645-1f3fc-200d-2640-fe0f.png", + "sheet_x": 31, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F645-1F3FD-200D-2640-FE0F", + "non_qualified": "1F645-1F3FD-200D-2640", + "image": "1f645-1f3fd-200d-2640-fe0f.png", + "sheet_x": 31, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F645-1F3FE-200D-2640-FE0F", + "non_qualified": "1F645-1F3FE-200D-2640", + "image": "1f645-1f3fe-200d-2640-fe0f.png", + "sheet_x": 31, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F645-1F3FF-200D-2640-FE0F", + "non_qualified": "1F645-1F3FF-200D-2640", + "image": "1f645-1f3ff-200d-2640-fe0f.png", + "sheet_x": 31, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F645" + }, + { + "name": null, + "unified": "1F645-200D-2642-FE0F", + "non_qualified": "1F645-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f645-200d-2642-fe0f.png", + "sheet_x": 31, + "sheet_y": 53, + "short_name": "man-gesturing-no", + "short_names": [ + "man-gesturing-no" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 82, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F645-1F3FB-200D-2642-FE0F", + "non_qualified": "1F645-1F3FB-200D-2642", + "image": "1f645-1f3fb-200d-2642-fe0f.png", + "sheet_x": 31, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F645-1F3FC-200D-2642-FE0F", + "non_qualified": "1F645-1F3FC-200D-2642", + "image": "1f645-1f3fc-200d-2642-fe0f.png", + "sheet_x": 31, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F645-1F3FD-200D-2642-FE0F", + "non_qualified": "1F645-1F3FD-200D-2642", + "image": "1f645-1f3fd-200d-2642-fe0f.png", + "sheet_x": 31, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F645-1F3FE-200D-2642-FE0F", + "non_qualified": "1F645-1F3FE-200D-2642", + "image": "1f645-1f3fe-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F645-1F3FF-200D-2642-FE0F", + "non_qualified": "1F645-1F3FF-200D-2642", + "image": "1f645-1f3ff-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FACE WITH NO GOOD GESTURE", + "unified": "1F645", + "non_qualified": null, + "docomo": "E72F", + "au": "EAD7", + "softbank": "E423", + "google": "FE351", + "image": "1f645.png", + "sheet_x": 32, + "sheet_y": 2, + "short_name": "no_good", + "short_names": [ + "no_good" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 81, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F645-1F3FB", + "non_qualified": null, + "image": "1f645-1f3fb.png", + "sheet_x": 32, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F645-1F3FC", + "non_qualified": null, + "image": "1f645-1f3fc.png", + "sheet_x": 32, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F645-1F3FD", + "non_qualified": null, + "image": "1f645-1f3fd.png", + "sheet_x": 32, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F645-1F3FE", + "non_qualified": null, + "image": "1f645-1f3fe.png", + "sheet_x": 32, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F645-1F3FF", + "non_qualified": null, + "image": "1f645-1f3ff.png", + "sheet_x": 32, + "sheet_y": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F645-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F646-200D-2640-FE0F", + "non_qualified": "1F646-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f646-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 8, + "short_name": "woman-gesturing-ok", + "short_names": [ + "woman-gesturing-ok" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 86, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F646-1F3FB-200D-2640-FE0F", + "non_qualified": "1F646-1F3FB-200D-2640", + "image": "1f646-1f3fb-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F646-1F3FC-200D-2640-FE0F", + "non_qualified": "1F646-1F3FC-200D-2640", + "image": "1f646-1f3fc-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F646-1F3FD-200D-2640-FE0F", + "non_qualified": "1F646-1F3FD-200D-2640", + "image": "1f646-1f3fd-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F646-1F3FE-200D-2640-FE0F", + "non_qualified": "1F646-1F3FE-200D-2640", + "image": "1f646-1f3fe-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F646-1F3FF-200D-2640-FE0F", + "non_qualified": "1F646-1F3FF-200D-2640", + "image": "1f646-1f3ff-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F646" + }, + { + "name": null, + "unified": "1F646-200D-2642-FE0F", + "non_qualified": "1F646-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f646-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 14, + "short_name": "man-gesturing-ok", + "short_names": [ + "man-gesturing-ok" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 85, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F646-1F3FB-200D-2642-FE0F", + "non_qualified": "1F646-1F3FB-200D-2642", + "image": "1f646-1f3fb-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F646-1F3FC-200D-2642-FE0F", + "non_qualified": "1F646-1F3FC-200D-2642", + "image": "1f646-1f3fc-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F646-1F3FD-200D-2642-FE0F", + "non_qualified": "1F646-1F3FD-200D-2642", + "image": "1f646-1f3fd-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F646-1F3FE-200D-2642-FE0F", + "non_qualified": "1F646-1F3FE-200D-2642", + "image": "1f646-1f3fe-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F646-1F3FF-200D-2642-FE0F", + "non_qualified": "1F646-1F3FF-200D-2642", + "image": "1f646-1f3ff-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FACE WITH OK GESTURE", + "unified": "1F646", + "non_qualified": null, + "docomo": "E70B", + "au": "EAD8", + "softbank": "E424", + "google": "FE352", + "image": "1f646.png", + "sheet_x": 32, + "sheet_y": 20, + "short_name": "ok_woman", + "short_names": [ + "ok_woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 84, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F646-1F3FB", + "non_qualified": null, + "image": "1f646-1f3fb.png", + "sheet_x": 32, + "sheet_y": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F646-1F3FC", + "non_qualified": null, + "image": "1f646-1f3fc.png", + "sheet_x": 32, + "sheet_y": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F646-1F3FD", + "non_qualified": null, + "image": "1f646-1f3fd.png", + "sheet_x": 32, + "sheet_y": 23, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F646-1F3FE", + "non_qualified": null, + "image": "1f646-1f3fe.png", + "sheet_x": 32, + "sheet_y": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F646-1F3FF", + "non_qualified": null, + "image": "1f646-1f3ff.png", + "sheet_x": 32, + "sheet_y": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F646-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F647-200D-2640-FE0F", + "non_qualified": "1F647-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f647-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 26, + "short_name": "woman-bowing", + "short_names": [ + "woman-bowing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 98, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F647-1F3FB-200D-2640-FE0F", + "non_qualified": "1F647-1F3FB-200D-2640", + "image": "1f647-1f3fb-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 27, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F647-1F3FC-200D-2640-FE0F", + "non_qualified": "1F647-1F3FC-200D-2640", + "image": "1f647-1f3fc-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 28, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F647-1F3FD-200D-2640-FE0F", + "non_qualified": "1F647-1F3FD-200D-2640", + "image": "1f647-1f3fd-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 29, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F647-1F3FE-200D-2640-FE0F", + "non_qualified": "1F647-1F3FE-200D-2640", + "image": "1f647-1f3fe-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F647-1F3FF-200D-2640-FE0F", + "non_qualified": "1F647-1F3FF-200D-2640", + "image": "1f647-1f3ff-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F647-200D-2642-FE0F", + "non_qualified": "1F647-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f647-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 32, + "short_name": "man-bowing", + "short_names": [ + "man-bowing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 97, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F647-1F3FB-200D-2642-FE0F", + "non_qualified": "1F647-1F3FB-200D-2642", + "image": "1f647-1f3fb-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F647-1F3FC-200D-2642-FE0F", + "non_qualified": "1F647-1F3FC-200D-2642", + "image": "1f647-1f3fc-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 34, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F647-1F3FD-200D-2642-FE0F", + "non_qualified": "1F647-1F3FD-200D-2642", + "image": "1f647-1f3fd-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 35, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F647-1F3FE-200D-2642-FE0F", + "non_qualified": "1F647-1F3FE-200D-2642", + "image": "1f647-1f3fe-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F647-1F3FF-200D-2642-FE0F", + "non_qualified": "1F647-1F3FF-200D-2642", + "image": "1f647-1f3ff-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F647" + }, + { + "name": "PERSON BOWING DEEPLY", + "unified": "1F647", + "non_qualified": null, + "docomo": null, + "au": "EAD9", + "softbank": "E426", + "google": "FE353", + "image": "1f647.png", + "sheet_x": 32, + "sheet_y": 38, + "short_name": "bow", + "short_names": [ + "bow" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 96, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F647-1F3FB", + "non_qualified": null, + "image": "1f647-1f3fb.png", + "sheet_x": 32, + "sheet_y": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F647-1F3FC", + "non_qualified": null, + "image": "1f647-1f3fc.png", + "sheet_x": 32, + "sheet_y": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F647-1F3FD", + "non_qualified": null, + "image": "1f647-1f3fd.png", + "sheet_x": 32, + "sheet_y": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F647-1F3FE", + "non_qualified": null, + "image": "1f647-1f3fe.png", + "sheet_x": 32, + "sheet_y": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F647-1F3FF", + "non_qualified": null, + "image": "1f647-1f3ff.png", + "sheet_x": 32, + "sheet_y": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F647-200D-2642-FE0F" + }, + { + "name": "SEE-NO-EVIL MONKEY", + "unified": "1F648", + "non_qualified": null, + "docomo": null, + "au": "EB50", + "softbank": null, + "google": "FE354", + "image": "1f648.png", + "sheet_x": 32, + "sheet_y": 44, + "short_name": "see_no_evil", + "short_names": [ + "see_no_evil" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 112, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAR-NO-EVIL MONKEY", + "unified": "1F649", + "non_qualified": null, + "docomo": null, + "au": "EB52", + "softbank": null, + "google": "FE356", + "image": "1f649.png", + "sheet_x": 32, + "sheet_y": 45, + "short_name": "hear_no_evil", + "short_names": [ + "hear_no_evil" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 113, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPEAK-NO-EVIL MONKEY", + "unified": "1F64A", + "non_qualified": null, + "docomo": null, + "au": "EB51", + "softbank": null, + "google": "FE355", + "image": "1f64a.png", + "sheet_x": 32, + "sheet_y": 46, + "short_name": "speak_no_evil", + "short_names": [ + "speak_no_evil" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 114, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F64B-200D-2640-FE0F", + "non_qualified": "1F64B-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f64b-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 47, + "short_name": "woman-raising-hand", + "short_names": [ + "woman-raising-hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 92, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F64B-1F3FB-200D-2640-FE0F", + "non_qualified": "1F64B-1F3FB-200D-2640", + "image": "1f64b-1f3fb-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F64B-1F3FC-200D-2640-FE0F", + "non_qualified": "1F64B-1F3FC-200D-2640", + "image": "1f64b-1f3fc-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F64B-1F3FD-200D-2640-FE0F", + "non_qualified": "1F64B-1F3FD-200D-2640", + "image": "1f64b-1f3fd-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F64B-1F3FE-200D-2640-FE0F", + "non_qualified": "1F64B-1F3FE-200D-2640", + "image": "1f64b-1f3fe-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F64B-1F3FF-200D-2640-FE0F", + "non_qualified": "1F64B-1F3FF-200D-2640", + "image": "1f64b-1f3ff-200d-2640-fe0f.png", + "sheet_x": 32, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F64B" + }, + { + "name": null, + "unified": "1F64B-200D-2642-FE0F", + "non_qualified": "1F64B-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f64b-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 53, + "short_name": "man-raising-hand", + "short_names": [ + "man-raising-hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 91, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F64B-1F3FB-200D-2642-FE0F", + "non_qualified": "1F64B-1F3FB-200D-2642", + "image": "1f64b-1f3fb-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F64B-1F3FC-200D-2642-FE0F", + "non_qualified": "1F64B-1F3FC-200D-2642", + "image": "1f64b-1f3fc-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F64B-1F3FD-200D-2642-FE0F", + "non_qualified": "1F64B-1F3FD-200D-2642", + "image": "1f64b-1f3fd-200d-2642-fe0f.png", + "sheet_x": 32, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F64B-1F3FE-200D-2642-FE0F", + "non_qualified": "1F64B-1F3FE-200D-2642", + "image": "1f64b-1f3fe-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F64B-1F3FF-200D-2642-FE0F", + "non_qualified": "1F64B-1F3FF-200D-2642", + "image": "1f64b-1f3ff-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "HAPPY PERSON RAISING ONE HAND", + "unified": "1F64B", + "non_qualified": null, + "docomo": null, + "au": "EB85", + "softbank": null, + "google": "FE357", + "image": "1f64b.png", + "sheet_x": 33, + "sheet_y": 2, + "short_name": "raising_hand", + "short_names": [ + "raising_hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 90, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F64B-1F3FB", + "non_qualified": null, + "image": "1f64b-1f3fb.png", + "sheet_x": 33, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F64B-1F3FC", + "non_qualified": null, + "image": "1f64b-1f3fc.png", + "sheet_x": 33, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F64B-1F3FD", + "non_qualified": null, + "image": "1f64b-1f3fd.png", + "sheet_x": 33, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F64B-1F3FE", + "non_qualified": null, + "image": "1f64b-1f3fe.png", + "sheet_x": 33, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F64B-1F3FF", + "non_qualified": null, + "image": "1f64b-1f3ff.png", + "sheet_x": 33, + "sheet_y": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F64B-200D-2640-FE0F" + }, + { + "name": "PERSON RAISING BOTH HANDS IN CELEBRATION", + "unified": "1F64C", + "non_qualified": null, + "docomo": null, + "au": "EB86", + "softbank": "E427", + "google": "FE358", + "image": "1f64c.png", + "sheet_x": 33, + "sheet_y": 8, + "short_name": "raised_hands", + "short_names": [ + "raised_hands" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F64C-1F3FB", + "non_qualified": null, + "image": "1f64c-1f3fb.png", + "sheet_x": 33, + "sheet_y": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F64C-1F3FC", + "non_qualified": null, + "image": "1f64c-1f3fc.png", + "sheet_x": 33, + "sheet_y": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F64C-1F3FD", + "non_qualified": null, + "image": "1f64c-1f3fd.png", + "sheet_x": 33, + "sheet_y": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F64C-1F3FE", + "non_qualified": null, + "image": "1f64c-1f3fe.png", + "sheet_x": 33, + "sheet_y": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F64C-1F3FF", + "non_qualified": null, + "image": "1f64c-1f3ff.png", + "sheet_x": 33, + "sheet_y": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F64D-200D-2640-FE0F", + "non_qualified": "1F64D-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f64d-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 14, + "short_name": "woman-frowning", + "short_names": [ + "woman-frowning" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 77, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F64D-1F3FB-200D-2640-FE0F", + "non_qualified": "1F64D-1F3FB-200D-2640", + "image": "1f64d-1f3fb-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F64D-1F3FC-200D-2640-FE0F", + "non_qualified": "1F64D-1F3FC-200D-2640", + "image": "1f64d-1f3fc-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F64D-1F3FD-200D-2640-FE0F", + "non_qualified": "1F64D-1F3FD-200D-2640", + "image": "1f64d-1f3fd-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F64D-1F3FE-200D-2640-FE0F", + "non_qualified": "1F64D-1F3FE-200D-2640", + "image": "1f64d-1f3fe-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F64D-1F3FF-200D-2640-FE0F", + "non_qualified": "1F64D-1F3FF-200D-2640", + "image": "1f64d-1f3ff-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F64D" + }, + { + "name": null, + "unified": "1F64D-200D-2642-FE0F", + "non_qualified": "1F64D-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f64d-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 20, + "short_name": "man-frowning", + "short_names": [ + "man-frowning" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 76, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F64D-1F3FB-200D-2642-FE0F", + "non_qualified": "1F64D-1F3FB-200D-2642", + "image": "1f64d-1f3fb-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 21, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F64D-1F3FC-200D-2642-FE0F", + "non_qualified": "1F64D-1F3FC-200D-2642", + "image": "1f64d-1f3fc-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 22, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F64D-1F3FD-200D-2642-FE0F", + "non_qualified": "1F64D-1F3FD-200D-2642", + "image": "1f64d-1f3fd-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 23, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F64D-1F3FE-200D-2642-FE0F", + "non_qualified": "1F64D-1F3FE-200D-2642", + "image": "1f64d-1f3fe-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F64D-1F3FF-200D-2642-FE0F", + "non_qualified": "1F64D-1F3FF-200D-2642", + "image": "1f64d-1f3ff-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 25, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "PERSON FROWNING", + "unified": "1F64D", + "non_qualified": null, + "docomo": "E6F3", + "au": "EB87", + "softbank": null, + "google": "FE359", + "image": "1f64d.png", + "sheet_x": 33, + "sheet_y": 26, + "short_name": "person_frowning", + "short_names": [ + "person_frowning" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 75, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F64D-1F3FB", + "non_qualified": null, + "image": "1f64d-1f3fb.png", + "sheet_x": 33, + "sheet_y": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F64D-1F3FC", + "non_qualified": null, + "image": "1f64d-1f3fc.png", + "sheet_x": 33, + "sheet_y": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F64D-1F3FD", + "non_qualified": null, + "image": "1f64d-1f3fd.png", + "sheet_x": 33, + "sheet_y": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F64D-1F3FE", + "non_qualified": null, + "image": "1f64d-1f3fe.png", + "sheet_x": 33, + "sheet_y": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F64D-1F3FF", + "non_qualified": null, + "image": "1f64d-1f3ff.png", + "sheet_x": 33, + "sheet_y": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F64D-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F64E-200D-2640-FE0F", + "non_qualified": "1F64E-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f64e-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 32, + "short_name": "woman-pouting", + "short_names": [ + "woman-pouting" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 80, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F64E-1F3FB-200D-2640-FE0F", + "non_qualified": "1F64E-1F3FB-200D-2640", + "image": "1f64e-1f3fb-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F64E-1F3FC-200D-2640-FE0F", + "non_qualified": "1F64E-1F3FC-200D-2640", + "image": "1f64e-1f3fc-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 34, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F64E-1F3FD-200D-2640-FE0F", + "non_qualified": "1F64E-1F3FD-200D-2640", + "image": "1f64e-1f3fd-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 35, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F64E-1F3FE-200D-2640-FE0F", + "non_qualified": "1F64E-1F3FE-200D-2640", + "image": "1f64e-1f3fe-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F64E-1F3FF-200D-2640-FE0F", + "non_qualified": "1F64E-1F3FF-200D-2640", + "image": "1f64e-1f3ff-200d-2640-fe0f.png", + "sheet_x": 33, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F64E" + }, + { + "name": null, + "unified": "1F64E-200D-2642-FE0F", + "non_qualified": "1F64E-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f64e-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 38, + "short_name": "man-pouting", + "short_names": [ + "man-pouting" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 79, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F64E-1F3FB-200D-2642-FE0F", + "non_qualified": "1F64E-1F3FB-200D-2642", + "image": "1f64e-1f3fb-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F64E-1F3FC-200D-2642-FE0F", + "non_qualified": "1F64E-1F3FC-200D-2642", + "image": "1f64e-1f3fc-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F64E-1F3FD-200D-2642-FE0F", + "non_qualified": "1F64E-1F3FD-200D-2642", + "image": "1f64e-1f3fd-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F64E-1F3FE-200D-2642-FE0F", + "non_qualified": "1F64E-1F3FE-200D-2642", + "image": "1f64e-1f3fe-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F64E-1F3FF-200D-2642-FE0F", + "non_qualified": "1F64E-1F3FF-200D-2642", + "image": "1f64e-1f3ff-200d-2642-fe0f.png", + "sheet_x": 33, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "PERSON WITH POUTING FACE", + "unified": "1F64E", + "non_qualified": null, + "docomo": "E6F1", + "au": "EB88", + "softbank": null, + "google": "FE35A", + "image": "1f64e.png", + "sheet_x": 33, + "sheet_y": 44, + "short_name": "person_with_pouting_face", + "short_names": [ + "person_with_pouting_face" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 78, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F64E-1F3FB", + "non_qualified": null, + "image": "1f64e-1f3fb.png", + "sheet_x": 33, + "sheet_y": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F64E-1F3FC", + "non_qualified": null, + "image": "1f64e-1f3fc.png", + "sheet_x": 33, + "sheet_y": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F64E-1F3FD", + "non_qualified": null, + "image": "1f64e-1f3fd.png", + "sheet_x": 33, + "sheet_y": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F64E-1F3FE", + "non_qualified": null, + "image": "1f64e-1f3fe.png", + "sheet_x": 33, + "sheet_y": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F64E-1F3FF", + "non_qualified": null, + "image": "1f64e-1f3ff.png", + "sheet_x": 33, + "sheet_y": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F64E-200D-2640-FE0F" + }, + { + "name": "PERSON WITH FOLDED HANDS", + "unified": "1F64F", + "non_qualified": null, + "docomo": null, + "au": "EAD2", + "softbank": "E41D", + "google": "FE35B", + "image": "1f64f.png", + "sheet_x": 33, + "sheet_y": 50, + "short_name": "pray", + "short_names": [ + "pray" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F64F-1F3FB", + "non_qualified": null, + "image": "1f64f-1f3fb.png", + "sheet_x": 33, + "sheet_y": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F64F-1F3FC", + "non_qualified": null, + "image": "1f64f-1f3fc.png", + "sheet_x": 33, + "sheet_y": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F64F-1F3FD", + "non_qualified": null, + "image": "1f64f-1f3fd.png", + "sheet_x": 33, + "sheet_y": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F64F-1F3FE", + "non_qualified": null, + "image": "1f64f-1f3fe.png", + "sheet_x": 33, + "sheet_y": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F64F-1F3FF", + "non_qualified": null, + "image": "1f64f-1f3ff.png", + "sheet_x": 33, + "sheet_y": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "ROCKET", + "unified": "1F680", + "non_qualified": null, + "docomo": null, + "au": "E5C8", + "softbank": "E10D", + "google": "FE7ED", + "image": "1f680.png", + "sheet_x": 33, + "sheet_y": 56, + "short_name": "rocket", + "short_names": [ + "rocket" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 129, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HELICOPTER", + "unified": "1F681", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f681.png", + "sheet_x": 34, + "sheet_y": 0, + "short_name": "helicopter", + "short_names": [ + "helicopter" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 124, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "STEAM LOCOMOTIVE", + "unified": "1F682", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f682.png", + "sheet_x": 34, + "sheet_y": 1, + "short_name": "steam_locomotive", + "short_names": [ + "steam_locomotive" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 63, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RAILWAY CAR", + "unified": "1F683", + "non_qualified": null, + "docomo": "E65B", + "au": "E4B5", + "softbank": "E01E", + "google": "FE7DF", + "image": "1f683.png", + "sheet_x": 34, + "sheet_y": 2, + "short_name": "railway_car", + "short_names": [ + "railway_car" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 64, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HIGH-SPEED TRAIN", + "unified": "1F684", + "non_qualified": null, + "docomo": "E65D", + "au": "E4B0", + "softbank": "E435", + "google": "FE7E2", + "image": "1f684.png", + "sheet_x": 34, + "sheet_y": 3, + "short_name": "bullettrain_side", + "short_names": [ + "bullettrain_side" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 65, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HIGH-SPEED TRAIN WITH BULLET NOSE", + "unified": "1F685", + "non_qualified": null, + "docomo": "E65D", + "au": "E4B0", + "softbank": "E01F", + "google": "FE7E3", + "image": "1f685.png", + "sheet_x": 34, + "sheet_y": 4, + "short_name": "bullettrain_front", + "short_names": [ + "bullettrain_front" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 66, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TRAIN", + "unified": "1F686", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f686.png", + "sheet_x": 34, + "sheet_y": 5, + "short_name": "train2", + "short_names": [ + "train2" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 67, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "METRO", + "unified": "1F687", + "non_qualified": null, + "docomo": "E65C", + "au": "E5BC", + "softbank": "E434", + "google": "FE7E0", + "image": "1f687.png", + "sheet_x": 34, + "sheet_y": 6, + "short_name": "metro", + "short_names": [ + "metro" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 68, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LIGHT RAIL", + "unified": "1F688", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f688.png", + "sheet_x": 34, + "sheet_y": 7, + "short_name": "light_rail", + "short_names": [ + "light_rail" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 69, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "STATION", + "unified": "1F689", + "non_qualified": null, + "docomo": null, + "au": "EB6D", + "softbank": "E039", + "google": "FE7EC", + "image": "1f689.png", + "sheet_x": 34, + "sheet_y": 8, + "short_name": "station", + "short_names": [ + "station" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 70, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TRAM", + "unified": "1F68A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f68a.png", + "sheet_x": 34, + "sheet_y": 9, + "short_name": "tram", + "short_names": [ + "tram" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 71, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TRAM CAR", + "unified": "1F68B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f68b.png", + "sheet_x": 34, + "sheet_y": 10, + "short_name": "train", + "short_names": [ + "train" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 74, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BUS", + "unified": "1F68C", + "non_qualified": null, + "docomo": "E660", + "au": "E4AF", + "softbank": "E159", + "google": "FE7E6", + "image": "1f68c.png", + "sheet_x": 34, + "sheet_y": 11, + "short_name": "bus", + "short_names": [ + "bus" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 75, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ONCOMING BUS", + "unified": "1F68D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f68d.png", + "sheet_x": 34, + "sheet_y": 12, + "short_name": "oncoming_bus", + "short_names": [ + "oncoming_bus" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 76, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TROLLEYBUS", + "unified": "1F68E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f68e.png", + "sheet_x": 34, + "sheet_y": 13, + "short_name": "trolleybus", + "short_names": [ + "trolleybus" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 77, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BUS STOP", + "unified": "1F68F", + "non_qualified": null, + "docomo": null, + "au": "E4A7", + "softbank": "E150", + "google": "FE7E7", + "image": "1f68f.png", + "sheet_x": 34, + "sheet_y": 14, + "short_name": "busstop", + "short_names": [ + "busstop" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 100, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MINIBUS", + "unified": "1F690", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f690.png", + "sheet_x": 34, + "sheet_y": 15, + "short_name": "minibus", + "short_names": [ + "minibus" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 78, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AMBULANCE", + "unified": "1F691", + "non_qualified": null, + "docomo": null, + "au": "EAE0", + "softbank": "E431", + "google": "FE7F3", + "image": "1f691.png", + "sheet_x": 34, + "sheet_y": 16, + "short_name": "ambulance", + "short_names": [ + "ambulance" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 79, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FIRE ENGINE", + "unified": "1F692", + "non_qualified": null, + "docomo": null, + "au": "EADF", + "softbank": "E430", + "google": "FE7F2", + "image": "1f692.png", + "sheet_x": 34, + "sheet_y": 17, + "short_name": "fire_engine", + "short_names": [ + "fire_engine" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 80, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POLICE CAR", + "unified": "1F693", + "non_qualified": null, + "docomo": null, + "au": "EAE1", + "softbank": "E432", + "google": "FE7F4", + "image": "1f693.png", + "sheet_x": 34, + "sheet_y": 18, + "short_name": "police_car", + "short_names": [ + "police_car" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 81, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ONCOMING POLICE CAR", + "unified": "1F694", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f694.png", + "sheet_x": 34, + "sheet_y": 19, + "short_name": "oncoming_police_car", + "short_names": [ + "oncoming_police_car" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 82, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TAXI", + "unified": "1F695", + "non_qualified": null, + "docomo": "E65E", + "au": "E4B1", + "softbank": "E15A", + "google": "FE7EF", + "image": "1f695.png", + "sheet_x": 34, + "sheet_y": 20, + "short_name": "taxi", + "short_names": [ + "taxi" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 83, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ONCOMING TAXI", + "unified": "1F696", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f696.png", + "sheet_x": 34, + "sheet_y": 21, + "short_name": "oncoming_taxi", + "short_names": [ + "oncoming_taxi" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 84, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AUTOMOBILE", + "unified": "1F697", + "non_qualified": null, + "docomo": "E65E", + "au": "E4B1", + "softbank": "E01B", + "google": "FE7E4", + "image": "1f697.png", + "sheet_x": 34, + "sheet_y": 22, + "short_name": "car", + "short_names": [ + "car", + "red_car" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 85, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ONCOMING AUTOMOBILE", + "unified": "1F698", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f698.png", + "sheet_x": 34, + "sheet_y": 23, + "short_name": "oncoming_automobile", + "short_names": [ + "oncoming_automobile" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 86, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RECREATIONAL VEHICLE", + "unified": "1F699", + "non_qualified": null, + "docomo": "E65F", + "au": "E4B1", + "softbank": "E42E", + "google": "FE7E5", + "image": "1f699.png", + "sheet_x": 34, + "sheet_y": 24, + "short_name": "blue_car", + "short_names": [ + "blue_car" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 87, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DELIVERY TRUCK", + "unified": "1F69A", + "non_qualified": null, + "docomo": null, + "au": "E4B2", + "softbank": "E42F", + "google": "FE7F1", + "image": "1f69a.png", + "sheet_x": 34, + "sheet_y": 25, + "short_name": "truck", + "short_names": [ + "truck" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 88, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ARTICULATED LORRY", + "unified": "1F69B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f69b.png", + "sheet_x": 34, + "sheet_y": 26, + "short_name": "articulated_lorry", + "short_names": [ + "articulated_lorry" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 89, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TRACTOR", + "unified": "1F69C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f69c.png", + "sheet_x": 34, + "sheet_y": 27, + "short_name": "tractor", + "short_names": [ + "tractor" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 90, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MONORAIL", + "unified": "1F69D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f69d.png", + "sheet_x": 34, + "sheet_y": 28, + "short_name": "monorail", + "short_names": [ + "monorail" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 72, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOUNTAIN RAILWAY", + "unified": "1F69E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f69e.png", + "sheet_x": 34, + "sheet_y": 29, + "short_name": "mountain_railway", + "short_names": [ + "mountain_railway" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 73, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SUSPENSION RAILWAY", + "unified": "1F69F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f69f.png", + "sheet_x": 34, + "sheet_y": 30, + "short_name": "suspension_railway", + "short_names": [ + "suspension_railway" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 125, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOUNTAIN CABLEWAY", + "unified": "1F6A0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6a0.png", + "sheet_x": 34, + "sheet_y": 31, + "short_name": "mountain_cableway", + "short_names": [ + "mountain_cableway" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 126, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AERIAL TRAMWAY", + "unified": "1F6A1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6a1.png", + "sheet_x": 34, + "sheet_y": 32, + "short_name": "aerial_tramway", + "short_names": [ + "aerial_tramway" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 127, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHIP", + "unified": "1F6A2", + "non_qualified": null, + "docomo": "E661", + "au": "EA82", + "softbank": "E202", + "google": "FE7E8", + "image": "1f6a2.png", + "sheet_x": 34, + "sheet_y": 33, + "short_name": "ship", + "short_names": [ + "ship" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 117, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6A3-200D-2640-FE0F", + "non_qualified": "1F6A3-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6a3-200d-2640-fe0f.png", + "sheet_x": 34, + "sheet_y": 34, + "short_name": "woman-rowing-boat", + "short_names": [ + "woman-rowing-boat" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 257, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6A3-1F3FB-200D-2640-FE0F", + "non_qualified": "1F6A3-1F3FB-200D-2640", + "image": "1f6a3-1f3fb-200d-2640-fe0f.png", + "sheet_x": 34, + "sheet_y": 35, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6A3-1F3FC-200D-2640-FE0F", + "non_qualified": "1F6A3-1F3FC-200D-2640", + "image": "1f6a3-1f3fc-200d-2640-fe0f.png", + "sheet_x": 34, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6A3-1F3FD-200D-2640-FE0F", + "non_qualified": "1F6A3-1F3FD-200D-2640", + "image": "1f6a3-1f3fd-200d-2640-fe0f.png", + "sheet_x": 34, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6A3-1F3FE-200D-2640-FE0F", + "non_qualified": "1F6A3-1F3FE-200D-2640", + "image": "1f6a3-1f3fe-200d-2640-fe0f.png", + "sheet_x": 34, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6A3-1F3FF-200D-2640-FE0F", + "non_qualified": "1F6A3-1F3FF-200D-2640", + "image": "1f6a3-1f3ff-200d-2640-fe0f.png", + "sheet_x": 34, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F6A3-200D-2642-FE0F", + "non_qualified": "1F6A3-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6a3-200d-2642-fe0f.png", + "sheet_x": 34, + "sheet_y": 40, + "short_name": "man-rowing-boat", + "short_names": [ + "man-rowing-boat" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 256, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6A3-1F3FB-200D-2642-FE0F", + "non_qualified": "1F6A3-1F3FB-200D-2642", + "image": "1f6a3-1f3fb-200d-2642-fe0f.png", + "sheet_x": 34, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6A3-1F3FC-200D-2642-FE0F", + "non_qualified": "1F6A3-1F3FC-200D-2642", + "image": "1f6a3-1f3fc-200d-2642-fe0f.png", + "sheet_x": 34, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6A3-1F3FD-200D-2642-FE0F", + "non_qualified": "1F6A3-1F3FD-200D-2642", + "image": "1f6a3-1f3fd-200d-2642-fe0f.png", + "sheet_x": 34, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6A3-1F3FE-200D-2642-FE0F", + "non_qualified": "1F6A3-1F3FE-200D-2642", + "image": "1f6a3-1f3fe-200d-2642-fe0f.png", + "sheet_x": 34, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6A3-1F3FF-200D-2642-FE0F", + "non_qualified": "1F6A3-1F3FF-200D-2642", + "image": "1f6a3-1f3ff-200d-2642-fe0f.png", + "sheet_x": 34, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F6A3" + }, + { + "name": "ROWBOAT", + "unified": "1F6A3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6a3.png", + "sheet_x": 34, + "sheet_y": 46, + "short_name": "rowboat", + "short_names": [ + "rowboat" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 255, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F6A3-1F3FB", + "non_qualified": null, + "image": "1f6a3-1f3fb.png", + "sheet_x": 34, + "sheet_y": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F6A3-1F3FC", + "non_qualified": null, + "image": "1f6a3-1f3fc.png", + "sheet_x": 34, + "sheet_y": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F6A3-1F3FD", + "non_qualified": null, + "image": "1f6a3-1f3fd.png", + "sheet_x": 34, + "sheet_y": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F6A3-1F3FE", + "non_qualified": null, + "image": "1f6a3-1f3fe.png", + "sheet_x": 34, + "sheet_y": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F6A3-1F3FF", + "non_qualified": null, + "image": "1f6a3-1f3ff.png", + "sheet_x": 34, + "sheet_y": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F6A3-200D-2642-FE0F" + }, + { + "name": "SPEEDBOAT", + "unified": "1F6A4", + "non_qualified": null, + "docomo": "E6A3", + "au": "E4B4", + "softbank": "E135", + "google": "FE7EE", + "image": "1f6a4.png", + "sheet_x": 34, + "sheet_y": 52, + "short_name": "speedboat", + "short_names": [ + "speedboat" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 113, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HORIZONTAL TRAFFIC LIGHT", + "unified": "1F6A5", + "non_qualified": null, + "docomo": "E66D", + "au": "E46A", + "softbank": "E14E", + "google": "FE7F7", + "image": "1f6a5.png", + "sheet_x": 34, + "sheet_y": 53, + "short_name": "traffic_light", + "short_names": [ + "traffic_light" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 106, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "VERTICAL TRAFFIC LIGHT", + "unified": "1F6A6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6a6.png", + "sheet_x": 34, + "sheet_y": 54, + "short_name": "vertical_traffic_light", + "short_names": [ + "vertical_traffic_light" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 107, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CONSTRUCTION SIGN", + "unified": "1F6A7", + "non_qualified": null, + "docomo": null, + "au": "E5D7", + "softbank": "E137", + "google": "FE7F8", + "image": "1f6a7.png", + "sheet_x": 34, + "sheet_y": 55, + "short_name": "construction", + "short_names": [ + "construction" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 109, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POLICE CARS REVOLVING LIGHT", + "unified": "1F6A8", + "non_qualified": null, + "docomo": null, + "au": "EB73", + "softbank": null, + "google": "FE7F9", + "image": "1f6a8.png", + "sheet_x": 34, + "sheet_y": 56, + "short_name": "rotating_light", + "short_names": [ + "rotating_light" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 105, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TRIANGULAR FLAG ON POST", + "unified": "1F6A9", + "non_qualified": null, + "docomo": "E6DE", + "au": "EB2C", + "softbank": null, + "google": "FEB22", + "image": "1f6a9.png", + "sheet_x": 35, + "sheet_y": 0, + "short_name": "triangular_flag_on_post", + "short_names": [ + "triangular_flag_on_post" + ], + "text": null, + "texts": null, + "category": "Flags", + "sort_order": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOOR", + "unified": "1F6AA", + "non_qualified": null, + "docomo": "E714", + "au": null, + "softbank": null, + "google": "FE4F3", + "image": "1f6aa.png", + "sheet_x": 35, + "sheet_y": 1, + "short_name": "door", + "short_names": [ + "door" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 213, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NO ENTRY SIGN", + "unified": "1F6AB", + "non_qualified": null, + "docomo": "E738", + "au": "E541", + "softbank": null, + "google": "FEB48", + "image": "1f6ab.png", + "sheet_x": 35, + "sheet_y": 2, + "short_name": "no_entry_sign", + "short_names": [ + "no_entry_sign" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 17, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMOKING SYMBOL", + "unified": "1F6AC", + "non_qualified": null, + "docomo": "E67F", + "au": "E47D", + "softbank": "E30E", + "google": "FEB1E", + "image": "1f6ac.png", + "sheet_x": 35, + "sheet_y": 3, + "short_name": "smoking", + "short_names": [ + "smoking" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 230, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NO SMOKING SYMBOL", + "unified": "1F6AD", + "non_qualified": null, + "docomo": "E680", + "au": "E47E", + "softbank": "E208", + "google": "FEB1F", + "image": "1f6ad.png", + "sheet_x": 35, + "sheet_y": 4, + "short_name": "no_smoking", + "short_names": [ + "no_smoking" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PUT LITTER IN ITS PLACE SYMBOL", + "unified": "1F6AE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6ae.png", + "sheet_x": 35, + "sheet_y": 5, + "short_name": "put_litter_in_its_place", + "short_names": [ + "put_litter_in_its_place" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DO NOT LITTER SYMBOL", + "unified": "1F6AF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6af.png", + "sheet_x": 35, + "sheet_y": 6, + "short_name": "do_not_litter", + "short_names": [ + "do_not_litter" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POTABLE WATER SYMBOL", + "unified": "1F6B0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b0.png", + "sheet_x": 35, + "sheet_y": 7, + "short_name": "potable_water", + "short_names": [ + "potable_water" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NON-POTABLE WATER SYMBOL", + "unified": "1F6B1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b1.png", + "sheet_x": 35, + "sheet_y": 8, + "short_name": "non-potable_water", + "short_names": [ + "non-potable_water" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BICYCLE", + "unified": "1F6B2", + "non_qualified": null, + "docomo": "E71D", + "au": "E4AE", + "softbank": "E136", + "google": "FE7EB", + "image": "1f6b2.png", + "sheet_x": 35, + "sheet_y": 9, + "short_name": "bike", + "short_names": [ + "bike" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 97, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NO BICYCLES", + "unified": "1F6B3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b3.png", + "sheet_x": 35, + "sheet_y": 10, + "short_name": "no_bicycles", + "short_names": [ + "no_bicycles" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 18, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6B4-200D-2640-FE0F", + "non_qualified": "1F6B4-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b4-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 11, + "short_name": "woman-biking", + "short_names": [ + "woman-biking" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 269, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6B4-1F3FB-200D-2640-FE0F", + "non_qualified": "1F6B4-1F3FB-200D-2640", + "image": "1f6b4-1f3fb-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6B4-1F3FC-200D-2640-FE0F", + "non_qualified": "1F6B4-1F3FC-200D-2640", + "image": "1f6b4-1f3fc-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6B4-1F3FD-200D-2640-FE0F", + "non_qualified": "1F6B4-1F3FD-200D-2640", + "image": "1f6b4-1f3fd-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 14, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6B4-1F3FE-200D-2640-FE0F", + "non_qualified": "1F6B4-1F3FE-200D-2640", + "image": "1f6b4-1f3fe-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6B4-1F3FF-200D-2640-FE0F", + "non_qualified": "1F6B4-1F3FF-200D-2640", + "image": "1f6b4-1f3ff-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F6B4-200D-2642-FE0F", + "non_qualified": "1F6B4-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b4-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 17, + "short_name": "man-biking", + "short_names": [ + "man-biking" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 268, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6B4-1F3FB-200D-2642-FE0F", + "non_qualified": "1F6B4-1F3FB-200D-2642", + "image": "1f6b4-1f3fb-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6B4-1F3FC-200D-2642-FE0F", + "non_qualified": "1F6B4-1F3FC-200D-2642", + "image": "1f6b4-1f3fc-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6B4-1F3FD-200D-2642-FE0F", + "non_qualified": "1F6B4-1F3FD-200D-2642", + "image": "1f6b4-1f3fd-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 20, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6B4-1F3FE-200D-2642-FE0F", + "non_qualified": "1F6B4-1F3FE-200D-2642", + "image": "1f6b4-1f3fe-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 21, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6B4-1F3FF-200D-2642-FE0F", + "non_qualified": "1F6B4-1F3FF-200D-2642", + "image": "1f6b4-1f3ff-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 22, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F6B4" + }, + { + "name": "BICYCLIST", + "unified": "1F6B4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b4.png", + "sheet_x": 35, + "sheet_y": 23, + "short_name": "bicyclist", + "short_names": [ + "bicyclist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 267, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F6B4-1F3FB", + "non_qualified": null, + "image": "1f6b4-1f3fb.png", + "sheet_x": 35, + "sheet_y": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F6B4-1F3FC", + "non_qualified": null, + "image": "1f6b4-1f3fc.png", + "sheet_x": 35, + "sheet_y": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F6B4-1F3FD", + "non_qualified": null, + "image": "1f6b4-1f3fd.png", + "sheet_x": 35, + "sheet_y": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F6B4-1F3FE", + "non_qualified": null, + "image": "1f6b4-1f3fe.png", + "sheet_x": 35, + "sheet_y": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F6B4-1F3FF", + "non_qualified": null, + "image": "1f6b4-1f3ff.png", + "sheet_x": 35, + "sheet_y": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F6B4-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F6B5-200D-2640-FE0F", + "non_qualified": "1F6B5-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b5-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 29, + "short_name": "woman-mountain-biking", + "short_names": [ + "woman-mountain-biking" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 272, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6B5-1F3FB-200D-2640-FE0F", + "non_qualified": "1F6B5-1F3FB-200D-2640", + "image": "1f6b5-1f3fb-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6B5-1F3FC-200D-2640-FE0F", + "non_qualified": "1F6B5-1F3FC-200D-2640", + "image": "1f6b5-1f3fc-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6B5-1F3FD-200D-2640-FE0F", + "non_qualified": "1F6B5-1F3FD-200D-2640", + "image": "1f6b5-1f3fd-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 32, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6B5-1F3FE-200D-2640-FE0F", + "non_qualified": "1F6B5-1F3FE-200D-2640", + "image": "1f6b5-1f3fe-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6B5-1F3FF-200D-2640-FE0F", + "non_qualified": "1F6B5-1F3FF-200D-2640", + "image": "1f6b5-1f3ff-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 34, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F6B5-200D-2642-FE0F", + "non_qualified": "1F6B5-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b5-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 35, + "short_name": "man-mountain-biking", + "short_names": [ + "man-mountain-biking" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 271, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6B5-1F3FB-200D-2642-FE0F", + "non_qualified": "1F6B5-1F3FB-200D-2642", + "image": "1f6b5-1f3fb-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6B5-1F3FC-200D-2642-FE0F", + "non_qualified": "1F6B5-1F3FC-200D-2642", + "image": "1f6b5-1f3fc-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6B5-1F3FD-200D-2642-FE0F", + "non_qualified": "1F6B5-1F3FD-200D-2642", + "image": "1f6b5-1f3fd-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6B5-1F3FE-200D-2642-FE0F", + "non_qualified": "1F6B5-1F3FE-200D-2642", + "image": "1f6b5-1f3fe-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6B5-1F3FF-200D-2642-FE0F", + "non_qualified": "1F6B5-1F3FF-200D-2642", + "image": "1f6b5-1f3ff-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F6B5" + }, + { + "name": "MOUNTAIN BICYCLIST", + "unified": "1F6B5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b5.png", + "sheet_x": 35, + "sheet_y": 41, + "short_name": "mountain_bicyclist", + "short_names": [ + "mountain_bicyclist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 270, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F6B5-1F3FB", + "non_qualified": null, + "image": "1f6b5-1f3fb.png", + "sheet_x": 35, + "sheet_y": 42, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F6B5-1F3FC", + "non_qualified": null, + "image": "1f6b5-1f3fc.png", + "sheet_x": 35, + "sheet_y": 43, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F6B5-1F3FD", + "non_qualified": null, + "image": "1f6b5-1f3fd.png", + "sheet_x": 35, + "sheet_y": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F6B5-1F3FE", + "non_qualified": null, + "image": "1f6b5-1f3fe.png", + "sheet_x": 35, + "sheet_y": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F6B5-1F3FF", + "non_qualified": null, + "image": "1f6b5-1f3ff.png", + "sheet_x": 35, + "sheet_y": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F6B5-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F6B6-200D-2640-FE0F", + "non_qualified": "1F6B6-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b6-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 47, + "short_name": "woman-walking", + "short_names": [ + "woman-walking" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 214, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6B6-1F3FB-200D-2640-FE0F", + "non_qualified": "1F6B6-1F3FB-200D-2640", + "image": "1f6b6-1f3fb-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6B6-1F3FC-200D-2640-FE0F", + "non_qualified": "1F6B6-1F3FC-200D-2640", + "image": "1f6b6-1f3fc-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6B6-1F3FD-200D-2640-FE0F", + "non_qualified": "1F6B6-1F3FD-200D-2640", + "image": "1f6b6-1f3fd-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6B6-1F3FE-200D-2640-FE0F", + "non_qualified": "1F6B6-1F3FE-200D-2640", + "image": "1f6b6-1f3fe-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6B6-1F3FF-200D-2640-FE0F", + "non_qualified": "1F6B6-1F3FF-200D-2640", + "image": "1f6b6-1f3ff-200d-2640-fe0f.png", + "sheet_x": 35, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F6B6-200D-2642-FE0F", + "non_qualified": "1F6B6-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b6-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 53, + "short_name": "man-walking", + "short_names": [ + "man-walking" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 213, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6B6-1F3FB-200D-2642-FE0F", + "non_qualified": "1F6B6-1F3FB-200D-2642", + "image": "1f6b6-1f3fb-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6B6-1F3FC-200D-2642-FE0F", + "non_qualified": "1F6B6-1F3FC-200D-2642", + "image": "1f6b6-1f3fc-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6B6-1F3FD-200D-2642-FE0F", + "non_qualified": "1F6B6-1F3FD-200D-2642", + "image": "1f6b6-1f3fd-200d-2642-fe0f.png", + "sheet_x": 35, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6B6-1F3FE-200D-2642-FE0F", + "non_qualified": "1F6B6-1F3FE-200D-2642", + "image": "1f6b6-1f3fe-200d-2642-fe0f.png", + "sheet_x": 36, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6B6-1F3FF-200D-2642-FE0F", + "non_qualified": "1F6B6-1F3FF-200D-2642", + "image": "1f6b6-1f3ff-200d-2642-fe0f.png", + "sheet_x": 36, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "1F6B6" + }, + { + "name": "PEDESTRIAN", + "unified": "1F6B6", + "non_qualified": null, + "docomo": "E733", + "au": "EB72", + "softbank": "E201", + "google": "FE7F0", + "image": "1f6b6.png", + "sheet_x": 36, + "sheet_y": 2, + "short_name": "walking", + "short_names": [ + "walking" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 212, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F6B6-1F3FB", + "non_qualified": null, + "image": "1f6b6-1f3fb.png", + "sheet_x": 36, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F6B6-1F3FC", + "non_qualified": null, + "image": "1f6b6-1f3fc.png", + "sheet_x": 36, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F6B6-1F3FD", + "non_qualified": null, + "image": "1f6b6-1f3fd.png", + "sheet_x": 36, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F6B6-1F3FE", + "non_qualified": null, + "image": "1f6b6-1f3fe.png", + "sheet_x": 36, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F6B6-1F3FF", + "non_qualified": null, + "image": "1f6b6-1f3ff.png", + "sheet_x": 36, + "sheet_y": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "1F6B6-200D-2642-FE0F" + }, + { + "name": "NO PEDESTRIANS", + "unified": "1F6B7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b7.png", + "sheet_x": 36, + "sheet_y": 8, + "short_name": "no_pedestrians", + "short_names": [ + "no_pedestrians" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHILDREN CROSSING", + "unified": "1F6B8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6b8.png", + "sheet_x": 36, + "sheet_y": 9, + "short_name": "children_crossing", + "short_names": [ + "children_crossing" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 15, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MENS SYMBOL", + "unified": "1F6B9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E138", + "google": "FEB33", + "image": "1f6b9.png", + "sheet_x": 36, + "sheet_y": 10, + "short_name": "mens", + "short_names": [ + "mens" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WOMENS SYMBOL", + "unified": "1F6BA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": "E139", + "google": "FEB34", + "image": "1f6ba.png", + "sheet_x": 36, + "sheet_y": 11, + "short_name": "womens", + "short_names": [ + "womens" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RESTROOM", + "unified": "1F6BB", + "non_qualified": null, + "docomo": "E66E", + "au": "E4A5", + "softbank": "E151", + "google": "FE506", + "image": "1f6bb.png", + "sheet_x": 36, + "sheet_y": 12, + "short_name": "restroom", + "short_names": [ + "restroom" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BABY SYMBOL", + "unified": "1F6BC", + "non_qualified": null, + "docomo": null, + "au": "EB18", + "softbank": "E13A", + "google": "FEB35", + "image": "1f6bc.png", + "sheet_x": 36, + "sheet_y": 13, + "short_name": "baby_symbol", + "short_names": [ + "baby_symbol" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TOILET", + "unified": "1F6BD", + "non_qualified": null, + "docomo": "E66E", + "au": "E4A5", + "softbank": "E140", + "google": "FE507", + "image": "1f6bd.png", + "sheet_x": 36, + "sheet_y": 14, + "short_name": "toilet", + "short_names": [ + "toilet" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 217, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WATER CLOSET", + "unified": "1F6BE", + "non_qualified": null, + "docomo": "E66E", + "au": "E4A5", + "softbank": "E309", + "google": "FE508", + "image": "1f6be.png", + "sheet_x": 36, + "sheet_y": 15, + "short_name": "wc", + "short_names": [ + "wc" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHOWER", + "unified": "1F6BF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6bf.png", + "sheet_x": 36, + "sheet_y": 16, + "short_name": "shower", + "short_names": [ + "shower" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 218, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BATH", + "unified": "1F6C0", + "non_qualified": null, + "docomo": "E6F7", + "au": "E5D8", + "softbank": "E13F", + "google": "FE505", + "image": "1f6c0.png", + "sheet_x": 36, + "sheet_y": 17, + "short_name": "bath", + "short_names": [ + "bath" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 291, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6C0-1F3FB", + "non_qualified": null, + "image": "1f6c0-1f3fb.png", + "sheet_x": 36, + "sheet_y": 18, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6C0-1F3FC", + "non_qualified": null, + "image": "1f6c0-1f3fc.png", + "sheet_x": 36, + "sheet_y": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6C0-1F3FD", + "non_qualified": null, + "image": "1f6c0-1f3fd.png", + "sheet_x": 36, + "sheet_y": 20, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6C0-1F3FE", + "non_qualified": null, + "image": "1f6c0-1f3fe.png", + "sheet_x": 36, + "sheet_y": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6C0-1F3FF", + "non_qualified": null, + "image": "1f6c0-1f3ff.png", + "sheet_x": 36, + "sheet_y": 22, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "BATHTUB", + "unified": "1F6C1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6c1.png", + "sheet_x": 36, + "sheet_y": 23, + "short_name": "bathtub", + "short_names": [ + "bathtub" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 219, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PASSPORT CONTROL", + "unified": "1F6C2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6c2.png", + "sheet_x": 36, + "sheet_y": 24, + "short_name": "passport_control", + "short_names": [ + "passport_control" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 10, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CUSTOMS", + "unified": "1F6C3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6c3.png", + "sheet_x": 36, + "sheet_y": 25, + "short_name": "customs", + "short_names": [ + "customs" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BAGGAGE CLAIM", + "unified": "1F6C4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6c4.png", + "sheet_x": 36, + "sheet_y": 26, + "short_name": "baggage_claim", + "short_names": [ + "baggage_claim" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 12, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEFT LUGGAGE", + "unified": "1F6C5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6c5.png", + "sheet_x": 36, + "sheet_y": 27, + "short_name": "left_luggage", + "short_names": [ + "left_luggage" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 13, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6CB-FE0F", + "non_qualified": "1F6CB", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6cb-fe0f.png", + "sheet_x": 36, + "sheet_y": 28, + "short_name": "couch_and_lamp", + "short_names": [ + "couch_and_lamp" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 215, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLEEPING ACCOMMODATION", + "unified": "1F6CC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6cc.png", + "sheet_x": 36, + "sheet_y": 29, + "short_name": "sleeping_accommodation", + "short_names": [ + "sleeping_accommodation" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 292, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F6CC-1F3FB", + "non_qualified": null, + "image": "1f6cc-1f3fb.png", + "sheet_x": 36, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F6CC-1F3FC", + "non_qualified": null, + "image": "1f6cc-1f3fc.png", + "sheet_x": 36, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F6CC-1F3FD", + "non_qualified": null, + "image": "1f6cc-1f3fd.png", + "sheet_x": 36, + "sheet_y": 32, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F6CC-1F3FE", + "non_qualified": null, + "image": "1f6cc-1f3fe.png", + "sheet_x": 36, + "sheet_y": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F6CC-1F3FF", + "non_qualified": null, + "image": "1f6cc-1f3ff.png", + "sheet_x": 36, + "sheet_y": 34, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F6CD-FE0F", + "non_qualified": "1F6CD", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6cd-fe0f.png", + "sheet_x": 36, + "sheet_y": 35, + "short_name": "shopping_bags", + "short_names": [ + "shopping_bags" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 24, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6CE-FE0F", + "non_qualified": "1F6CE", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6ce-fe0f.png", + "sheet_x": 36, + "sheet_y": 36, + "short_name": "bellhop_bell", + "short_names": [ + "bellhop_bell" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 131, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6CF-FE0F", + "non_qualified": "1F6CF", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6cf-fe0f.png", + "sheet_x": 36, + "sheet_y": 37, + "short_name": "bed", + "short_names": [ + "bed" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 214, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PLACE OF WORSHIP", + "unified": "1F6D0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6d0.png", + "sheet_x": 36, + "sheet_y": 38, + "short_name": "place_of_worship", + "short_names": [ + "place_of_worship" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OCTAGONAL SIGN", + "unified": "1F6D1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6d1.png", + "sheet_x": 36, + "sheet_y": 39, + "short_name": "octagonal_sign", + "short_names": [ + "octagonal_sign" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 108, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHOPPING TROLLEY", + "unified": "1F6D2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6d2.png", + "sheet_x": 36, + "sheet_y": 40, + "short_name": "shopping_trolley", + "short_names": [ + "shopping_trolley" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 229, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HINDU TEMPLE", + "unified": "1F6D5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6d5.png", + "sheet_x": 36, + "sheet_y": 41, + "short_name": "hindu_temple", + "short_names": [ + "hindu_temple" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 43, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6E0-FE0F", + "non_qualified": "1F6E0", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6e0-fe0f.png", + "sheet_x": 36, + "sheet_y": 42, + "short_name": "hammer_and_wrench", + "short_names": [ + "hammer_and_wrench" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 185, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6E1-FE0F", + "non_qualified": "1F6E1", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6e1-fe0f.png", + "sheet_x": 36, + "sheet_y": 43, + "short_name": "shield", + "short_names": [ + "shield" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 190, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6E2-FE0F", + "non_qualified": "1F6E2", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6e2-fe0f.png", + "sheet_x": 36, + "sheet_y": 44, + "short_name": "oil_drum", + "short_names": [ + "oil_drum" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 103, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6E3-FE0F", + "non_qualified": "1F6E3", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6e3-fe0f.png", + "sheet_x": 36, + "sheet_y": 45, + "short_name": "motorway", + "short_names": [ + "motorway" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 101, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6E4-FE0F", + "non_qualified": "1F6E4", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6e4-fe0f.png", + "sheet_x": 36, + "sheet_y": 46, + "short_name": "railway_track", + "short_names": [ + "railway_track" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 102, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6E5-FE0F", + "non_qualified": "1F6E5", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6e5-fe0f.png", + "sheet_x": 36, + "sheet_y": 47, + "short_name": "motor_boat", + "short_names": [ + "motor_boat" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 116, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6E9-FE0F", + "non_qualified": "1F6E9", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6e9-fe0f.png", + "sheet_x": 36, + "sheet_y": 48, + "short_name": "small_airplane", + "short_names": [ + "small_airplane" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 119, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AIRPLANE DEPARTURE", + "unified": "1F6EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6eb.png", + "sheet_x": 36, + "sheet_y": 49, + "short_name": "airplane_departure", + "short_names": [ + "airplane_departure" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 120, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AIRPLANE ARRIVING", + "unified": "1F6EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6ec.png", + "sheet_x": 36, + "sheet_y": 50, + "short_name": "airplane_arriving", + "short_names": [ + "airplane_arriving" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 121, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6F0-FE0F", + "non_qualified": "1F6F0", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6f0-fe0f.png", + "sheet_x": 36, + "sheet_y": 51, + "short_name": "satellite", + "short_names": [ + "satellite" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 128, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F6F3-FE0F", + "non_qualified": "1F6F3", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6f3-fe0f.png", + "sheet_x": 36, + "sheet_y": 52, + "short_name": "passenger_ship", + "short_names": [ + "passenger_ship" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 114, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SCOOTER", + "unified": "1F6F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6f4.png", + "sheet_x": 36, + "sheet_y": 53, + "short_name": "scooter", + "short_names": [ + "scooter" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 98, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOTOR SCOOTER", + "unified": "1F6F5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6f5.png", + "sheet_x": 36, + "sheet_y": 54, + "short_name": "motor_scooter", + "short_names": [ + "motor_scooter" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 93, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CANOE", + "unified": "1F6F6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6f6.png", + "sheet_x": 36, + "sheet_y": 55, + "short_name": "canoe", + "short_names": [ + "canoe" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 112, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLED", + "unified": "1F6F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6f7.png", + "sheet_x": 36, + "sheet_y": 56, + "short_name": "sled", + "short_names": [ + "sled" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 53, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FLYING SAUCER", + "unified": "1F6F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6f8.png", + "sheet_x": 37, + "sheet_y": 0, + "short_name": "flying_saucer", + "short_names": [ + "flying_saucer" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 130, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SKATEBOARD", + "unified": "1F6F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6f9.png", + "sheet_x": 37, + "sheet_y": 1, + "short_name": "skateboard", + "short_names": [ + "skateboard" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 99, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AUTO RICKSHAW", + "unified": "1F6FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f6fa.png", + "sheet_x": 37, + "sheet_y": 2, + "short_name": "auto_rickshaw", + "short_names": [ + "auto_rickshaw" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 96, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE ORANGE CIRCLE", + "unified": "1F7E0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e0.png", + "sheet_x": 37, + "sheet_y": 3, + "short_name": "large_orange_circle", + "short_names": [ + "large_orange_circle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 185, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE YELLOW CIRCLE", + "unified": "1F7E1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e1.png", + "sheet_x": 37, + "sheet_y": 4, + "short_name": "large_yellow_circle", + "short_names": [ + "large_yellow_circle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 186, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE GREEN CIRCLE", + "unified": "1F7E2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e2.png", + "sheet_x": 37, + "sheet_y": 5, + "short_name": "large_green_circle", + "short_names": [ + "large_green_circle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 187, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE PURPLE CIRCLE", + "unified": "1F7E3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e3.png", + "sheet_x": 37, + "sheet_y": 6, + "short_name": "large_purple_circle", + "short_names": [ + "large_purple_circle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 189, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE BROWN CIRCLE", + "unified": "1F7E4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e4.png", + "sheet_x": 37, + "sheet_y": 7, + "short_name": "large_brown_circle", + "short_names": [ + "large_brown_circle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 190, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE RED SQUARE", + "unified": "1F7E5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e5.png", + "sheet_x": 37, + "sheet_y": 8, + "short_name": "large_red_square", + "short_names": [ + "large_red_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 193, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE BLUE SQUARE", + "unified": "1F7E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e6.png", + "sheet_x": 37, + "sheet_y": 9, + "short_name": "large_blue_square", + "short_names": [ + "large_blue_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 197, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE ORANGE SQUARE", + "unified": "1F7E7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e7.png", + "sheet_x": 37, + "sheet_y": 10, + "short_name": "large_orange_square", + "short_names": [ + "large_orange_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 194, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE YELLOW SQUARE", + "unified": "1F7E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e8.png", + "sheet_x": 37, + "sheet_y": 11, + "short_name": "large_yellow_square", + "short_names": [ + "large_yellow_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 195, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE GREEN SQUARE", + "unified": "1F7E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7e9.png", + "sheet_x": 37, + "sheet_y": 12, + "short_name": "large_green_square", + "short_names": [ + "large_green_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 196, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE PURPLE SQUARE", + "unified": "1F7EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7ea.png", + "sheet_x": 37, + "sheet_y": 13, + "short_name": "large_purple_square", + "short_names": [ + "large_purple_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 198, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LARGE BROWN SQUARE", + "unified": "1F7EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f7eb.png", + "sheet_x": 37, + "sheet_y": 14, + "short_name": "large_brown_square", + "short_names": [ + "large_brown_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 199, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE HEART", + "unified": "1F90D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f90d.png", + "sheet_x": 37, + "sheet_y": 15, + "short_name": "white_heart", + "short_names": [ + "white_heart" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 135, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BROWN HEART", + "unified": "1F90E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f90e.png", + "sheet_x": 37, + "sheet_y": 16, + "short_name": "brown_heart", + "short_names": [ + "brown_heart" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 133, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PINCHING HAND", + "unified": "1F90F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f90f.png", + "sheet_x": 37, + "sheet_y": 17, + "short_name": "pinching_hand", + "short_names": [ + "pinching_hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 7, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F90F-1F3FB", + "non_qualified": null, + "image": "1f90f-1f3fb.png", + "sheet_x": 37, + "sheet_y": 18, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F90F-1F3FC", + "non_qualified": null, + "image": "1f90f-1f3fc.png", + "sheet_x": 37, + "sheet_y": 19, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F90F-1F3FD", + "non_qualified": null, + "image": "1f90f-1f3fd.png", + "sheet_x": 37, + "sheet_y": 20, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F90F-1F3FE", + "non_qualified": null, + "image": "1f90f-1f3fe.png", + "sheet_x": 37, + "sheet_y": 21, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F90F-1F3FF", + "non_qualified": null, + "image": "1f90f-1f3ff.png", + "sheet_x": 37, + "sheet_y": 22, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "ZIPPER-MOUTH FACE", + "unified": "1F910", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f910.png", + "sheet_x": 37, + "sheet_y": 23, + "short_name": "zipper_mouth_face", + "short_names": [ + "zipper_mouth_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MONEY-MOUTH FACE", + "unified": "1F911", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f911.png", + "sheet_x": 37, + "sheet_y": 24, + "short_name": "money_mouth_face", + "short_names": [ + "money_mouth_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH THERMOMETER", + "unified": "1F912", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f912.png", + "sheet_x": 37, + "sheet_y": 25, + "short_name": "face_with_thermometer", + "short_names": [ + "face_with_thermometer" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NERD FACE", + "unified": "1F913", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f913.png", + "sheet_x": 37, + "sheet_y": 26, + "short_name": "nerd_face", + "short_names": [ + "nerd_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 61, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "THINKING FACE", + "unified": "1F914", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f914.png", + "sheet_x": 37, + "sheet_y": 27, + "short_name": "thinking_face", + "short_names": [ + "thinking_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH HEAD-BANDAGE", + "unified": "1F915", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f915.png", + "sheet_x": 37, + "sheet_y": 28, + "short_name": "face_with_head_bandage", + "short_names": [ + "face_with_head_bandage" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ROBOT FACE", + "unified": "1F916", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f916.png", + "sheet_x": 37, + "sheet_y": 29, + "short_name": "robot_face", + "short_names": [ + "robot_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 102, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HUGGING FACE", + "unified": "1F917", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f917.png", + "sheet_x": 37, + "sheet_y": 30, + "short_name": "hugging_face", + "short_names": [ + "hugging_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SIGN OF THE HORNS", + "unified": "1F918", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f918.png", + "sheet_x": 37, + "sheet_y": 31, + "short_name": "the_horns", + "short_names": [ + "the_horns", + "sign_of_the_horns" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 11, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F918-1F3FB", + "non_qualified": null, + "image": "1f918-1f3fb.png", + "sheet_x": 37, + "sheet_y": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F918-1F3FC", + "non_qualified": null, + "image": "1f918-1f3fc.png", + "sheet_x": 37, + "sheet_y": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F918-1F3FD", + "non_qualified": null, + "image": "1f918-1f3fd.png", + "sheet_x": 37, + "sheet_y": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F918-1F3FE", + "non_qualified": null, + "image": "1f918-1f3fe.png", + "sheet_x": 37, + "sheet_y": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F918-1F3FF", + "non_qualified": null, + "image": "1f918-1f3ff.png", + "sheet_x": 37, + "sheet_y": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "CALL ME HAND", + "unified": "1F919", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f919.png", + "sheet_x": 37, + "sheet_y": 37, + "short_name": "call_me_hand", + "short_names": [ + "call_me_hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F919-1F3FB", + "non_qualified": null, + "image": "1f919-1f3fb.png", + "sheet_x": 37, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F919-1F3FC", + "non_qualified": null, + "image": "1f919-1f3fc.png", + "sheet_x": 37, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F919-1F3FD", + "non_qualified": null, + "image": "1f919-1f3fd.png", + "sheet_x": 37, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F919-1F3FE", + "non_qualified": null, + "image": "1f919-1f3fe.png", + "sheet_x": 37, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F919-1F3FF", + "non_qualified": null, + "image": "1f919-1f3ff.png", + "sheet_x": 37, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "RAISED BACK OF HAND", + "unified": "1F91A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f91a.png", + "sheet_x": 37, + "sheet_y": 43, + "short_name": "raised_back_of_hand", + "short_names": [ + "raised_back_of_hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 2, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F91A-1F3FB", + "non_qualified": null, + "image": "1f91a-1f3fb.png", + "sheet_x": 37, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F91A-1F3FC", + "non_qualified": null, + "image": "1f91a-1f3fc.png", + "sheet_x": 37, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F91A-1F3FD", + "non_qualified": null, + "image": "1f91a-1f3fd.png", + "sheet_x": 37, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F91A-1F3FE", + "non_qualified": null, + "image": "1f91a-1f3fe.png", + "sheet_x": 37, + "sheet_y": 47, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F91A-1F3FF", + "non_qualified": null, + "image": "1f91a-1f3ff.png", + "sheet_x": 37, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "LEFT-FACING FIST", + "unified": "1F91B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f91b.png", + "sheet_x": 37, + "sheet_y": 49, + "short_name": "left-facing_fist", + "short_names": [ + "left-facing_fist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 23, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F91B-1F3FB", + "non_qualified": null, + "image": "1f91b-1f3fb.png", + "sheet_x": 37, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F91B-1F3FC", + "non_qualified": null, + "image": "1f91b-1f3fc.png", + "sheet_x": 37, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F91B-1F3FD", + "non_qualified": null, + "image": "1f91b-1f3fd.png", + "sheet_x": 37, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F91B-1F3FE", + "non_qualified": null, + "image": "1f91b-1f3fe.png", + "sheet_x": 37, + "sheet_y": 53, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F91B-1F3FF", + "non_qualified": null, + "image": "1f91b-1f3ff.png", + "sheet_x": 37, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "RIGHT-FACING FIST", + "unified": "1F91C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f91c.png", + "sheet_x": 37, + "sheet_y": 55, + "short_name": "right-facing_fist", + "short_names": [ + "right-facing_fist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F91C-1F3FB", + "non_qualified": null, + "image": "1f91c-1f3fb.png", + "sheet_x": 37, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F91C-1F3FC", + "non_qualified": null, + "image": "1f91c-1f3fc.png", + "sheet_x": 38, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F91C-1F3FD", + "non_qualified": null, + "image": "1f91c-1f3fd.png", + "sheet_x": 38, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F91C-1F3FE", + "non_qualified": null, + "image": "1f91c-1f3fe.png", + "sheet_x": 38, + "sheet_y": 2, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F91C-1F3FF", + "non_qualified": null, + "image": "1f91c-1f3ff.png", + "sheet_x": 38, + "sheet_y": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "HANDSHAKE", + "unified": "1F91D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f91d.png", + "sheet_x": 38, + "sheet_y": 4, + "short_name": "handshake", + "short_names": [ + "handshake" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 29, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HAND WITH INDEX AND MIDDLE FINGERS CROSSED", + "unified": "1F91E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f91e.png", + "sheet_x": 38, + "sheet_y": 5, + "short_name": "crossed_fingers", + "short_names": [ + "crossed_fingers", + "hand_with_index_and_middle_fingers_crossed" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F91E-1F3FB", + "non_qualified": null, + "image": "1f91e-1f3fb.png", + "sheet_x": 38, + "sheet_y": 6, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F91E-1F3FC", + "non_qualified": null, + "image": "1f91e-1f3fc.png", + "sheet_x": 38, + "sheet_y": 7, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F91E-1F3FD", + "non_qualified": null, + "image": "1f91e-1f3fd.png", + "sheet_x": 38, + "sheet_y": 8, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F91E-1F3FE", + "non_qualified": null, + "image": "1f91e-1f3fe.png", + "sheet_x": 38, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F91E-1F3FF", + "non_qualified": null, + "image": "1f91e-1f3ff.png", + "sheet_x": 38, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "I LOVE YOU HAND SIGN", + "unified": "1F91F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f91f.png", + "sheet_x": 38, + "sheet_y": 11, + "short_name": "i_love_you_hand_sign", + "short_names": [ + "i_love_you_hand_sign" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 10, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F91F-1F3FB", + "non_qualified": null, + "image": "1f91f-1f3fb.png", + "sheet_x": 38, + "sheet_y": 12, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F91F-1F3FC", + "non_qualified": null, + "image": "1f91f-1f3fc.png", + "sheet_x": 38, + "sheet_y": 13, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F91F-1F3FD", + "non_qualified": null, + "image": "1f91f-1f3fd.png", + "sheet_x": 38, + "sheet_y": 14, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F91F-1F3FE", + "non_qualified": null, + "image": "1f91f-1f3fe.png", + "sheet_x": 38, + "sheet_y": 15, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F91F-1F3FF", + "non_qualified": null, + "image": "1f91f-1f3ff.png", + "sheet_x": 38, + "sheet_y": 16, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FACE WITH COWBOY HAT", + "unified": "1F920", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f920.png", + "sheet_x": 38, + "sheet_y": 17, + "short_name": "face_with_cowboy_hat", + "short_names": [ + "face_with_cowboy_hat" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 58, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOWN FACE", + "unified": "1F921", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f921.png", + "sheet_x": 38, + "sheet_y": 18, + "short_name": "clown_face", + "short_names": [ + "clown_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 96, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NAUSEATED FACE", + "unified": "1F922", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f922.png", + "sheet_x": 38, + "sheet_y": 19, + "short_name": "nauseated_face", + "short_names": [ + "nauseated_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ROLLING ON THE FLOOR LAUGHING", + "unified": "1F923", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f923.png", + "sheet_x": 38, + "sheet_y": 20, + "short_name": "rolling_on_the_floor_laughing", + "short_names": [ + "rolling_on_the_floor_laughing" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 7, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DROOLING FACE", + "unified": "1F924", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f924.png", + "sheet_x": 38, + "sheet_y": 21, + "short_name": "drooling_face", + "short_names": [ + "drooling_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LYING FACE", + "unified": "1F925", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f925.png", + "sheet_x": 38, + "sheet_y": 22, + "short_name": "lying_face", + "short_names": [ + "lying_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F926-200D-2640-FE0F", + "non_qualified": "1F926-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f926-200d-2640-fe0f.png", + "sheet_x": 38, + "sheet_y": 23, + "short_name": "woman-facepalming", + "short_names": [ + "woman-facepalming" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 101, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F926-1F3FB-200D-2640-FE0F", + "non_qualified": "1F926-1F3FB-200D-2640", + "image": "1f926-1f3fb-200d-2640-fe0f.png", + "sheet_x": 38, + "sheet_y": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F926-1F3FC-200D-2640-FE0F", + "non_qualified": "1F926-1F3FC-200D-2640", + "image": "1f926-1f3fc-200d-2640-fe0f.png", + "sheet_x": 38, + "sheet_y": 25, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F926-1F3FD-200D-2640-FE0F", + "non_qualified": "1F926-1F3FD-200D-2640", + "image": "1f926-1f3fd-200d-2640-fe0f.png", + "sheet_x": 38, + "sheet_y": 26, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F926-1F3FE-200D-2640-FE0F", + "non_qualified": "1F926-1F3FE-200D-2640", + "image": "1f926-1f3fe-200d-2640-fe0f.png", + "sheet_x": 38, + "sheet_y": 27, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F926-1F3FF-200D-2640-FE0F", + "non_qualified": "1F926-1F3FF-200D-2640", + "image": "1f926-1f3ff-200d-2640-fe0f.png", + "sheet_x": 38, + "sheet_y": 28, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F926-200D-2642-FE0F", + "non_qualified": "1F926-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f926-200d-2642-fe0f.png", + "sheet_x": 38, + "sheet_y": 29, + "short_name": "man-facepalming", + "short_names": [ + "man-facepalming" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 100, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F926-1F3FB-200D-2642-FE0F", + "non_qualified": "1F926-1F3FB-200D-2642", + "image": "1f926-1f3fb-200d-2642-fe0f.png", + "sheet_x": 38, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F926-1F3FC-200D-2642-FE0F", + "non_qualified": "1F926-1F3FC-200D-2642", + "image": "1f926-1f3fc-200d-2642-fe0f.png", + "sheet_x": 38, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F926-1F3FD-200D-2642-FE0F", + "non_qualified": "1F926-1F3FD-200D-2642", + "image": "1f926-1f3fd-200d-2642-fe0f.png", + "sheet_x": 38, + "sheet_y": 32, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F926-1F3FE-200D-2642-FE0F", + "non_qualified": "1F926-1F3FE-200D-2642", + "image": "1f926-1f3fe-200d-2642-fe0f.png", + "sheet_x": 38, + "sheet_y": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F926-1F3FF-200D-2642-FE0F", + "non_qualified": "1F926-1F3FF-200D-2642", + "image": "1f926-1f3ff-200d-2642-fe0f.png", + "sheet_x": 38, + "sheet_y": 34, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FACE PALM", + "unified": "1F926", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f926.png", + "sheet_x": 38, + "sheet_y": 35, + "short_name": "face_palm", + "short_names": [ + "face_palm" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 99, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F926-1F3FB", + "non_qualified": null, + "image": "1f926-1f3fb.png", + "sheet_x": 38, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F926-1F3FC", + "non_qualified": null, + "image": "1f926-1f3fc.png", + "sheet_x": 38, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F926-1F3FD", + "non_qualified": null, + "image": "1f926-1f3fd.png", + "sheet_x": 38, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F926-1F3FE", + "non_qualified": null, + "image": "1f926-1f3fe.png", + "sheet_x": 38, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F926-1F3FF", + "non_qualified": null, + "image": "1f926-1f3ff.png", + "sheet_x": 38, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + } + }, + { + "name": "SNEEZING FACE", + "unified": "1F927", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f927.png", + "sheet_x": 38, + "sheet_y": 41, + "short_name": "sneezing_face", + "short_names": [ + "sneezing_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH ONE EYEBROW RAISED", + "unified": "1F928", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f928.png", + "sheet_x": 38, + "sheet_y": 42, + "short_name": "face_with_raised_eyebrow", + "short_names": [ + "face_with_raised_eyebrow", + "face_with_one_eyebrow_raised" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 33, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GRINNING FACE WITH STAR EYES", + "unified": "1F929", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f929.png", + "sheet_x": 38, + "sheet_y": 43, + "short_name": "star-struck", + "short_names": [ + "star-struck", + "grinning_face_with_star_eyes" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 16, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE", + "unified": "1F92A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f92a.png", + "sheet_x": 38, + "sheet_y": 44, + "short_name": "zany_face", + "short_names": [ + "zany_face", + "grinning_face_with_one_large_and_one_small_eye" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 25, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH FINGER COVERING CLOSED LIPS", + "unified": "1F92B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f92b.png", + "sheet_x": 38, + "sheet_y": 45, + "short_name": "shushing_face", + "short_names": [ + "shushing_face", + "face_with_finger_covering_closed_lips" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 30, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SERIOUS FACE WITH SYMBOLS COVERING MOUTH", + "unified": "1F92C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f92c.png", + "sheet_x": 38, + "sheet_y": 46, + "short_name": "face_with_symbols_on_mouth", + "short_names": [ + "face_with_symbols_on_mouth", + "serious_face_with_symbols_covering_mouth" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 90, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH", + "unified": "1F92D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f92d.png", + "sheet_x": 38, + "sheet_y": 47, + "short_name": "face_with_hand_over_mouth", + "short_names": [ + "face_with_hand_over_mouth", + "smiling_face_with_smiling_eyes_and_hand_covering_mouth" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 29, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH OPEN MOUTH VOMITING", + "unified": "1F92E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f92e.png", + "sheet_x": 38, + "sheet_y": 48, + "short_name": "face_vomiting", + "short_names": [ + "face_vomiting", + "face_with_open_mouth_vomiting" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 51, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHOCKED FACE WITH EXPLODING HEAD", + "unified": "1F92F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f92f.png", + "sheet_x": 38, + "sheet_y": 49, + "short_name": "exploding_head", + "short_names": [ + "exploding_head", + "shocked_face_with_exploding_head" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 57, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PREGNANT WOMAN", + "unified": "1F930", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f930.png", + "sheet_x": 38, + "sheet_y": 50, + "short_name": "pregnant_woman", + "short_names": [ + "pregnant_woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 174, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F930-1F3FB", + "non_qualified": null, + "image": "1f930-1f3fb.png", + "sheet_x": 38, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F930-1F3FC", + "non_qualified": null, + "image": "1f930-1f3fc.png", + "sheet_x": 38, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F930-1F3FD", + "non_qualified": null, + "image": "1f930-1f3fd.png", + "sheet_x": 38, + "sheet_y": 53, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F930-1F3FE", + "non_qualified": null, + "image": "1f930-1f3fe.png", + "sheet_x": 38, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F930-1F3FF", + "non_qualified": null, + "image": "1f930-1f3ff.png", + "sheet_x": 38, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "BREAST-FEEDING", + "unified": "1F931", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f931.png", + "sheet_x": 38, + "sheet_y": 56, + "short_name": "breast-feeding", + "short_names": [ + "breast-feeding" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 175, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F931-1F3FB", + "non_qualified": null, + "image": "1f931-1f3fb.png", + "sheet_x": 39, + "sheet_y": 0, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F931-1F3FC", + "non_qualified": null, + "image": "1f931-1f3fc.png", + "sheet_x": 39, + "sheet_y": 1, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F931-1F3FD", + "non_qualified": null, + "image": "1f931-1f3fd.png", + "sheet_x": 39, + "sheet_y": 2, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F931-1F3FE", + "non_qualified": null, + "image": "1f931-1f3fe.png", + "sheet_x": 39, + "sheet_y": 3, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F931-1F3FF", + "non_qualified": null, + "image": "1f931-1f3ff.png", + "sheet_x": 39, + "sheet_y": 4, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "PALMS UP TOGETHER", + "unified": "1F932", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f932.png", + "sheet_x": 39, + "sheet_y": 5, + "short_name": "palms_up_together", + "short_names": [ + "palms_up_together" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 28, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F932-1F3FB", + "non_qualified": null, + "image": "1f932-1f3fb.png", + "sheet_x": 39, + "sheet_y": 6, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F932-1F3FC", + "non_qualified": null, + "image": "1f932-1f3fc.png", + "sheet_x": 39, + "sheet_y": 7, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F932-1F3FD", + "non_qualified": null, + "image": "1f932-1f3fd.png", + "sheet_x": 39, + "sheet_y": 8, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F932-1F3FE", + "non_qualified": null, + "image": "1f932-1f3fe.png", + "sheet_x": 39, + "sheet_y": 9, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F932-1F3FF", + "non_qualified": null, + "image": "1f932-1f3ff.png", + "sheet_x": 39, + "sheet_y": 10, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "SELFIE", + "unified": "1F933", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f933.png", + "sheet_x": 39, + "sheet_y": 11, + "short_name": "selfie", + "short_names": [ + "selfie" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F933-1F3FB", + "non_qualified": null, + "image": "1f933-1f3fb.png", + "sheet_x": 39, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F933-1F3FC", + "non_qualified": null, + "image": "1f933-1f3fc.png", + "sheet_x": 39, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F933-1F3FD", + "non_qualified": null, + "image": "1f933-1f3fd.png", + "sheet_x": 39, + "sheet_y": 14, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F933-1F3FE", + "non_qualified": null, + "image": "1f933-1f3fe.png", + "sheet_x": 39, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F933-1F3FF", + "non_qualified": null, + "image": "1f933-1f3ff.png", + "sheet_x": 39, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "PRINCE", + "unified": "1F934", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f934.png", + "sheet_x": 39, + "sheet_y": 17, + "short_name": "prince", + "short_names": [ + "prince" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 165, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F934-1F3FB", + "non_qualified": null, + "image": "1f934-1f3fb.png", + "sheet_x": 39, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F934-1F3FC", + "non_qualified": null, + "image": "1f934-1f3fc.png", + "sheet_x": 39, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F934-1F3FD", + "non_qualified": null, + "image": "1f934-1f3fd.png", + "sheet_x": 39, + "sheet_y": 20, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F934-1F3FE", + "non_qualified": null, + "image": "1f934-1f3fe.png", + "sheet_x": 39, + "sheet_y": 21, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F934-1F3FF", + "non_qualified": null, + "image": "1f934-1f3ff.png", + "sheet_x": 39, + "sheet_y": 22, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "MAN IN TUXEDO", + "unified": "1F935", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f935.png", + "sheet_x": 39, + "sheet_y": 23, + "short_name": "man_in_tuxedo", + "short_names": [ + "man_in_tuxedo" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 172, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F935-1F3FB", + "non_qualified": null, + "image": "1f935-1f3fb.png", + "sheet_x": 39, + "sheet_y": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F935-1F3FC", + "non_qualified": null, + "image": "1f935-1f3fc.png", + "sheet_x": 39, + "sheet_y": 25, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F935-1F3FD", + "non_qualified": null, + "image": "1f935-1f3fd.png", + "sheet_x": 39, + "sheet_y": 26, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F935-1F3FE", + "non_qualified": null, + "image": "1f935-1f3fe.png", + "sheet_x": 39, + "sheet_y": 27, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F935-1F3FF", + "non_qualified": null, + "image": "1f935-1f3ff.png", + "sheet_x": 39, + "sheet_y": 28, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "MOTHER CHRISTMAS", + "unified": "1F936", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f936.png", + "sheet_x": 39, + "sheet_y": 29, + "short_name": "mrs_claus", + "short_names": [ + "mrs_claus", + "mother_christmas" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 178, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F936-1F3FB", + "non_qualified": null, + "image": "1f936-1f3fb.png", + "sheet_x": 39, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F936-1F3FC", + "non_qualified": null, + "image": "1f936-1f3fc.png", + "sheet_x": 39, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F936-1F3FD", + "non_qualified": null, + "image": "1f936-1f3fd.png", + "sheet_x": 39, + "sheet_y": 32, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F936-1F3FE", + "non_qualified": null, + "image": "1f936-1f3fe.png", + "sheet_x": 39, + "sheet_y": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F936-1F3FF", + "non_qualified": null, + "image": "1f936-1f3ff.png", + "sheet_x": 39, + "sheet_y": 34, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F937-200D-2640-FE0F", + "non_qualified": "1F937-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f937-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 35, + "short_name": "woman-shrugging", + "short_names": [ + "woman-shrugging" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 104, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F937-1F3FB-200D-2640-FE0F", + "non_qualified": "1F937-1F3FB-200D-2640", + "image": "1f937-1f3fb-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 36, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F937-1F3FC-200D-2640-FE0F", + "non_qualified": "1F937-1F3FC-200D-2640", + "image": "1f937-1f3fc-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F937-1F3FD-200D-2640-FE0F", + "non_qualified": "1F937-1F3FD-200D-2640", + "image": "1f937-1f3fd-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F937-1F3FE-200D-2640-FE0F", + "non_qualified": "1F937-1F3FE-200D-2640", + "image": "1f937-1f3fe-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F937-1F3FF-200D-2640-FE0F", + "non_qualified": "1F937-1F3FF-200D-2640", + "image": "1f937-1f3ff-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F937-200D-2642-FE0F", + "non_qualified": "1F937-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f937-200d-2642-fe0f.png", + "sheet_x": 39, + "sheet_y": 41, + "short_name": "man-shrugging", + "short_names": [ + "man-shrugging" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 103, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F937-1F3FB-200D-2642-FE0F", + "non_qualified": "1F937-1F3FB-200D-2642", + "image": "1f937-1f3fb-200d-2642-fe0f.png", + "sheet_x": 39, + "sheet_y": 42, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F937-1F3FC-200D-2642-FE0F", + "non_qualified": "1F937-1F3FC-200D-2642", + "image": "1f937-1f3fc-200d-2642-fe0f.png", + "sheet_x": 39, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F937-1F3FD-200D-2642-FE0F", + "non_qualified": "1F937-1F3FD-200D-2642", + "image": "1f937-1f3fd-200d-2642-fe0f.png", + "sheet_x": 39, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F937-1F3FE-200D-2642-FE0F", + "non_qualified": "1F937-1F3FE-200D-2642", + "image": "1f937-1f3fe-200d-2642-fe0f.png", + "sheet_x": 39, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F937-1F3FF-200D-2642-FE0F", + "non_qualified": "1F937-1F3FF-200D-2642", + "image": "1f937-1f3ff-200d-2642-fe0f.png", + "sheet_x": 39, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "SHRUG", + "unified": "1F937", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f937.png", + "sheet_x": 39, + "sheet_y": 47, + "short_name": "shrug", + "short_names": [ + "shrug" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 102, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F937-1F3FB", + "non_qualified": null, + "image": "1f937-1f3fb.png", + "sheet_x": 39, + "sheet_y": 48, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F937-1F3FC", + "non_qualified": null, + "image": "1f937-1f3fc.png", + "sheet_x": 39, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F937-1F3FD", + "non_qualified": null, + "image": "1f937-1f3fd.png", + "sheet_x": 39, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F937-1F3FE", + "non_qualified": null, + "image": "1f937-1f3fe.png", + "sheet_x": 39, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F937-1F3FF", + "non_qualified": null, + "image": "1f937-1f3ff.png", + "sheet_x": 39, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F938-200D-2640-FE0F", + "non_qualified": "1F938-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f938-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 53, + "short_name": "woman-cartwheeling", + "short_names": [ + "woman-cartwheeling" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 275, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F938-1F3FB-200D-2640-FE0F", + "non_qualified": "1F938-1F3FB-200D-2640", + "image": "1f938-1f3fb-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 54, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F938-1F3FC-200D-2640-FE0F", + "non_qualified": "1F938-1F3FC-200D-2640", + "image": "1f938-1f3fc-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F938-1F3FD-200D-2640-FE0F", + "non_qualified": "1F938-1F3FD-200D-2640", + "image": "1f938-1f3fd-200d-2640-fe0f.png", + "sheet_x": 39, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F938-1F3FE-200D-2640-FE0F", + "non_qualified": "1F938-1F3FE-200D-2640", + "image": "1f938-1f3fe-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F938-1F3FF-200D-2640-FE0F", + "non_qualified": "1F938-1F3FF-200D-2640", + "image": "1f938-1f3ff-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F938-200D-2642-FE0F", + "non_qualified": "1F938-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f938-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 2, + "short_name": "man-cartwheeling", + "short_names": [ + "man-cartwheeling" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 274, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F938-1F3FB-200D-2642-FE0F", + "non_qualified": "1F938-1F3FB-200D-2642", + "image": "1f938-1f3fb-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F938-1F3FC-200D-2642-FE0F", + "non_qualified": "1F938-1F3FC-200D-2642", + "image": "1f938-1f3fc-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 4, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F938-1F3FD-200D-2642-FE0F", + "non_qualified": "1F938-1F3FD-200D-2642", + "image": "1f938-1f3fd-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 5, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F938-1F3FE-200D-2642-FE0F", + "non_qualified": "1F938-1F3FE-200D-2642", + "image": "1f938-1f3fe-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 6, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F938-1F3FF-200D-2642-FE0F", + "non_qualified": "1F938-1F3FF-200D-2642", + "image": "1f938-1f3ff-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 7, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "PERSON DOING CARTWHEEL", + "unified": "1F938", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f938.png", + "sheet_x": 40, + "sheet_y": 8, + "short_name": "person_doing_cartwheel", + "short_names": [ + "person_doing_cartwheel" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 273, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F938-1F3FB", + "non_qualified": null, + "image": "1f938-1f3fb.png", + "sheet_x": 40, + "sheet_y": 9, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F938-1F3FC", + "non_qualified": null, + "image": "1f938-1f3fc.png", + "sheet_x": 40, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F938-1F3FD", + "non_qualified": null, + "image": "1f938-1f3fd.png", + "sheet_x": 40, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F938-1F3FE", + "non_qualified": null, + "image": "1f938-1f3fe.png", + "sheet_x": 40, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F938-1F3FF", + "non_qualified": null, + "image": "1f938-1f3ff.png", + "sheet_x": 40, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F939-200D-2640-FE0F", + "non_qualified": "1F939-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f939-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 14, + "short_name": "woman-juggling", + "short_names": [ + "woman-juggling" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 287, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F939-1F3FB-200D-2640-FE0F", + "non_qualified": "1F939-1F3FB-200D-2640", + "image": "1f939-1f3fb-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F939-1F3FC-200D-2640-FE0F", + "non_qualified": "1F939-1F3FC-200D-2640", + "image": "1f939-1f3fc-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 16, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F939-1F3FD-200D-2640-FE0F", + "non_qualified": "1F939-1F3FD-200D-2640", + "image": "1f939-1f3fd-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 17, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F939-1F3FE-200D-2640-FE0F", + "non_qualified": "1F939-1F3FE-200D-2640", + "image": "1f939-1f3fe-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F939-1F3FF-200D-2640-FE0F", + "non_qualified": "1F939-1F3FF-200D-2640", + "image": "1f939-1f3ff-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 19, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F939-200D-2642-FE0F", + "non_qualified": "1F939-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f939-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 20, + "short_name": "man-juggling", + "short_names": [ + "man-juggling" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 286, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F939-1F3FB-200D-2642-FE0F", + "non_qualified": "1F939-1F3FB-200D-2642", + "image": "1f939-1f3fb-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 21, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F939-1F3FC-200D-2642-FE0F", + "non_qualified": "1F939-1F3FC-200D-2642", + "image": "1f939-1f3fc-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 22, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F939-1F3FD-200D-2642-FE0F", + "non_qualified": "1F939-1F3FD-200D-2642", + "image": "1f939-1f3fd-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 23, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F939-1F3FE-200D-2642-FE0F", + "non_qualified": "1F939-1F3FE-200D-2642", + "image": "1f939-1f3fe-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F939-1F3FF-200D-2642-FE0F", + "non_qualified": "1F939-1F3FF-200D-2642", + "image": "1f939-1f3ff-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 25, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "JUGGLING", + "unified": "1F939", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f939.png", + "sheet_x": 40, + "sheet_y": 26, + "short_name": "juggling", + "short_names": [ + "juggling" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 285, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F939-1F3FB", + "non_qualified": null, + "image": "1f939-1f3fb.png", + "sheet_x": 40, + "sheet_y": 27, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F939-1F3FC", + "non_qualified": null, + "image": "1f939-1f3fc.png", + "sheet_x": 40, + "sheet_y": 28, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F939-1F3FD", + "non_qualified": null, + "image": "1f939-1f3fd.png", + "sheet_x": 40, + "sheet_y": 29, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F939-1F3FE", + "non_qualified": null, + "image": "1f939-1f3fe.png", + "sheet_x": 40, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F939-1F3FF", + "non_qualified": null, + "image": "1f939-1f3ff.png", + "sheet_x": 40, + "sheet_y": 31, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FENCER", + "unified": "1F93A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93a.png", + "sheet_x": 40, + "sheet_y": 32, + "short_name": "fencer", + "short_names": [ + "fencer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 245, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F93C-200D-2640-FE0F", + "non_qualified": "1F93C-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93c-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 33, + "short_name": "woman-wrestling", + "short_names": [ + "woman-wrestling" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 278, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F93C-200D-2642-FE0F", + "non_qualified": "1F93C-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93c-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 34, + "short_name": "man-wrestling", + "short_names": [ + "man-wrestling" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 277, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WRESTLERS", + "unified": "1F93C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93c.png", + "sheet_x": 40, + "sheet_y": 35, + "short_name": "wrestlers", + "short_names": [ + "wrestlers" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 276, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F93D-200D-2640-FE0F", + "non_qualified": "1F93D-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93d-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 36, + "short_name": "woman-playing-water-polo", + "short_names": [ + "woman-playing-water-polo" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 281, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F93D-1F3FB-200D-2640-FE0F", + "non_qualified": "1F93D-1F3FB-200D-2640", + "image": "1f93d-1f3fb-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F93D-1F3FC-200D-2640-FE0F", + "non_qualified": "1F93D-1F3FC-200D-2640", + "image": "1f93d-1f3fc-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 38, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F93D-1F3FD-200D-2640-FE0F", + "non_qualified": "1F93D-1F3FD-200D-2640", + "image": "1f93d-1f3fd-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 39, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F93D-1F3FE-200D-2640-FE0F", + "non_qualified": "1F93D-1F3FE-200D-2640", + "image": "1f93d-1f3fe-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F93D-1F3FF-200D-2640-FE0F", + "non_qualified": "1F93D-1F3FF-200D-2640", + "image": "1f93d-1f3ff-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 41, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F93D-200D-2642-FE0F", + "non_qualified": "1F93D-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93d-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 42, + "short_name": "man-playing-water-polo", + "short_names": [ + "man-playing-water-polo" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 280, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F93D-1F3FB-200D-2642-FE0F", + "non_qualified": "1F93D-1F3FB-200D-2642", + "image": "1f93d-1f3fb-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F93D-1F3FC-200D-2642-FE0F", + "non_qualified": "1F93D-1F3FC-200D-2642", + "image": "1f93d-1f3fc-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F93D-1F3FD-200D-2642-FE0F", + "non_qualified": "1F93D-1F3FD-200D-2642", + "image": "1f93d-1f3fd-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F93D-1F3FE-200D-2642-FE0F", + "non_qualified": "1F93D-1F3FE-200D-2642", + "image": "1f93d-1f3fe-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F93D-1F3FF-200D-2642-FE0F", + "non_qualified": "1F93D-1F3FF-200D-2642", + "image": "1f93d-1f3ff-200d-2642-fe0f.png", + "sheet_x": 40, + "sheet_y": 47, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "WATER POLO", + "unified": "1F93D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93d.png", + "sheet_x": 40, + "sheet_y": 48, + "short_name": "water_polo", + "short_names": [ + "water_polo" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 279, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F93D-1F3FB", + "non_qualified": null, + "image": "1f93d-1f3fb.png", + "sheet_x": 40, + "sheet_y": 49, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F93D-1F3FC", + "non_qualified": null, + "image": "1f93d-1f3fc.png", + "sheet_x": 40, + "sheet_y": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F93D-1F3FD", + "non_qualified": null, + "image": "1f93d-1f3fd.png", + "sheet_x": 40, + "sheet_y": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F93D-1F3FE", + "non_qualified": null, + "image": "1f93d-1f3fe.png", + "sheet_x": 40, + "sheet_y": 52, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F93D-1F3FF", + "non_qualified": null, + "image": "1f93d-1f3ff.png", + "sheet_x": 40, + "sheet_y": 53, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F93E-200D-2640-FE0F", + "non_qualified": "1F93E-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93e-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 54, + "short_name": "woman-playing-handball", + "short_names": [ + "woman-playing-handball" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 284, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F93E-1F3FB-200D-2640-FE0F", + "non_qualified": "1F93E-1F3FB-200D-2640", + "image": "1f93e-1f3fb-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F93E-1F3FC-200D-2640-FE0F", + "non_qualified": "1F93E-1F3FC-200D-2640", + "image": "1f93e-1f3fc-200d-2640-fe0f.png", + "sheet_x": 40, + "sheet_y": 56, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F93E-1F3FD-200D-2640-FE0F", + "non_qualified": "1F93E-1F3FD-200D-2640", + "image": "1f93e-1f3fd-200d-2640-fe0f.png", + "sheet_x": 41, + "sheet_y": 0, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F93E-1F3FE-200D-2640-FE0F", + "non_qualified": "1F93E-1F3FE-200D-2640", + "image": "1f93e-1f3fe-200d-2640-fe0f.png", + "sheet_x": 41, + "sheet_y": 1, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F93E-1F3FF-200D-2640-FE0F", + "non_qualified": "1F93E-1F3FF-200D-2640", + "image": "1f93e-1f3ff-200d-2640-fe0f.png", + "sheet_x": 41, + "sheet_y": 2, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F93E-200D-2642-FE0F", + "non_qualified": "1F93E-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93e-200d-2642-fe0f.png", + "sheet_x": 41, + "sheet_y": 3, + "short_name": "man-playing-handball", + "short_names": [ + "man-playing-handball" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 283, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F93E-1F3FB-200D-2642-FE0F", + "non_qualified": "1F93E-1F3FB-200D-2642", + "image": "1f93e-1f3fb-200d-2642-fe0f.png", + "sheet_x": 41, + "sheet_y": 4, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F93E-1F3FC-200D-2642-FE0F", + "non_qualified": "1F93E-1F3FC-200D-2642", + "image": "1f93e-1f3fc-200d-2642-fe0f.png", + "sheet_x": 41, + "sheet_y": 5, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F93E-1F3FD-200D-2642-FE0F", + "non_qualified": "1F93E-1F3FD-200D-2642", + "image": "1f93e-1f3fd-200d-2642-fe0f.png", + "sheet_x": 41, + "sheet_y": 6, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F93E-1F3FE-200D-2642-FE0F", + "non_qualified": "1F93E-1F3FE-200D-2642", + "image": "1f93e-1f3fe-200d-2642-fe0f.png", + "sheet_x": 41, + "sheet_y": 7, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F93E-1F3FF-200D-2642-FE0F", + "non_qualified": "1F93E-1F3FF-200D-2642", + "image": "1f93e-1f3ff-200d-2642-fe0f.png", + "sheet_x": 41, + "sheet_y": 8, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "HANDBALL", + "unified": "1F93E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93e.png", + "sheet_x": 41, + "sheet_y": 9, + "short_name": "handball", + "short_names": [ + "handball" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 282, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F93E-1F3FB", + "non_qualified": null, + "image": "1f93e-1f3fb.png", + "sheet_x": 41, + "sheet_y": 10, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F93E-1F3FC", + "non_qualified": null, + "image": "1f93e-1f3fc.png", + "sheet_x": 41, + "sheet_y": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F93E-1F3FD", + "non_qualified": null, + "image": "1f93e-1f3fd.png", + "sheet_x": 41, + "sheet_y": 12, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F93E-1F3FE", + "non_qualified": null, + "image": "1f93e-1f3fe.png", + "sheet_x": 41, + "sheet_y": 13, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F93E-1F3FF", + "non_qualified": null, + "image": "1f93e-1f3ff.png", + "sheet_x": 41, + "sheet_y": 14, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + } + }, + { + "name": "DIVING MASK", + "unified": "1F93F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f93f.png", + "sheet_x": 41, + "sheet_y": 15, + "short_name": "diving_mask", + "short_names": [ + "diving_mask" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 50, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WILTED FLOWER", + "unified": "1F940", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f940.png", + "sheet_x": 41, + "sheet_y": 16, + "short_name": "wilted_flower", + "short_names": [ + "wilted_flower" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 111, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DRUM WITH DRUMSTICKS", + "unified": "1F941", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f941.png", + "sheet_x": 41, + "sheet_y": 17, + "short_name": "drum_with_drumsticks", + "short_names": [ + "drum_with_drumsticks" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 68, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLINKING GLASSES", + "unified": "1F942", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f942.png", + "sheet_x": 41, + "sheet_y": 18, + "short_name": "clinking_glasses", + "short_names": [ + "clinking_glasses" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 110, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TUMBLER GLASS", + "unified": "1F943", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f943.png", + "sheet_x": 41, + "sheet_y": 19, + "short_name": "tumbler_glass", + "short_names": [ + "tumbler_glass" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 111, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPOON", + "unified": "1F944", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f944.png", + "sheet_x": 41, + "sheet_y": 20, + "short_name": "spoon", + "short_names": [ + "spoon" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 119, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GOAL NET", + "unified": "1F945", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f945.png", + "sheet_x": 41, + "sheet_y": 21, + "short_name": "goal_net", + "short_names": [ + "goal_net" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 46, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FIRST PLACE MEDAL", + "unified": "1F947", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f947.png", + "sheet_x": 41, + "sheet_y": 22, + "short_name": "first_place_medal", + "short_names": [ + "first_place_medal" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 25, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SECOND PLACE MEDAL", + "unified": "1F948", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f948.png", + "sheet_x": 41, + "sheet_y": 23, + "short_name": "second_place_medal", + "short_names": [ + "second_place_medal" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 26, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "THIRD PLACE MEDAL", + "unified": "1F949", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f949.png", + "sheet_x": 41, + "sheet_y": 24, + "short_name": "third_place_medal", + "short_names": [ + "third_place_medal" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 27, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOXING GLOVE", + "unified": "1F94A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f94a.png", + "sheet_x": 41, + "sheet_y": 25, + "short_name": "boxing_glove", + "short_names": [ + "boxing_glove" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 44, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MARTIAL ARTS UNIFORM", + "unified": "1F94B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f94b.png", + "sheet_x": 41, + "sheet_y": 26, + "short_name": "martial_arts_uniform", + "short_names": [ + "martial_arts_uniform" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 45, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CURLING STONE", + "unified": "1F94C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f94c.png", + "sheet_x": 41, + "sheet_y": 27, + "short_name": "curling_stone", + "short_names": [ + "curling_stone" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 54, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LACROSSE STICK AND BALL", + "unified": "1F94D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f94d.png", + "sheet_x": 41, + "sheet_y": 28, + "short_name": "lacrosse", + "short_names": [ + "lacrosse" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 41, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SOFTBALL", + "unified": "1F94E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f94e.png", + "sheet_x": 41, + "sheet_y": 29, + "short_name": "softball", + "short_names": [ + "softball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 30, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FLYING DISC", + "unified": "1F94F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f94f.png", + "sheet_x": 41, + "sheet_y": 30, + "short_name": "flying_disc", + "short_names": [ + "flying_disc" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 36, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CROISSANT", + "unified": "1F950", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f950.png", + "sheet_x": 41, + "sheet_y": 31, + "short_name": "croissant", + "short_names": [ + "croissant" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 33, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AVOCADO", + "unified": "1F951", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f951.png", + "sheet_x": 41, + "sheet_y": 32, + "short_name": "avocado", + "short_names": [ + "avocado" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 18, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CUCUMBER", + "unified": "1F952", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f952.png", + "sheet_x": 41, + "sheet_y": 33, + "short_name": "cucumber", + "short_names": [ + "cucumber" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BACON", + "unified": "1F953", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f953.png", + "sheet_x": 41, + "sheet_y": 34, + "short_name": "bacon", + "short_names": [ + "bacon" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 43, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "POTATO", + "unified": "1F954", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f954.png", + "sheet_x": 41, + "sheet_y": 35, + "short_name": "potato", + "short_names": [ + "potato" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 20, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CARROT", + "unified": "1F955", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f955.png", + "sheet_x": 41, + "sheet_y": 36, + "short_name": "carrot", + "short_names": [ + "carrot" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 21, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BAGUETTE BREAD", + "unified": "1F956", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f956.png", + "sheet_x": 41, + "sheet_y": 37, + "short_name": "baguette_bread", + "short_names": [ + "baguette_bread" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 34, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GREEN SALAD", + "unified": "1F957", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f957.png", + "sheet_x": 41, + "sheet_y": 38, + "short_name": "green_salad", + "short_names": [ + "green_salad" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 58, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHALLOW PAN OF FOOD", + "unified": "1F958", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f958.png", + "sheet_x": 41, + "sheet_y": 39, + "short_name": "shallow_pan_of_food", + "short_names": [ + "shallow_pan_of_food" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 55, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "STUFFED FLATBREAD", + "unified": "1F959", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f959.png", + "sheet_x": 41, + "sheet_y": 40, + "short_name": "stuffed_flatbread", + "short_names": [ + "stuffed_flatbread" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 51, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EGG", + "unified": "1F95A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f95a.png", + "sheet_x": 41, + "sheet_y": 41, + "short_name": "egg", + "short_names": [ + "egg" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 53, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GLASS OF MILK", + "unified": "1F95B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f95b.png", + "sheet_x": 41, + "sheet_y": 42, + "short_name": "glass_of_milk", + "short_names": [ + "glass_of_milk" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 100, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PEANUTS", + "unified": "1F95C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f95c.png", + "sheet_x": 41, + "sheet_y": 43, + "short_name": "peanuts", + "short_names": [ + "peanuts" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KIWIFRUIT", + "unified": "1F95D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f95d.png", + "sheet_x": 41, + "sheet_y": 44, + "short_name": "kiwifruit", + "short_names": [ + "kiwifruit" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 15, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PANCAKES", + "unified": "1F95E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f95e.png", + "sheet_x": 41, + "sheet_y": 45, + "short_name": "pancakes", + "short_names": [ + "pancakes" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 37, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DUMPLING", + "unified": "1F95F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f95f.png", + "sheet_x": 41, + "sheet_y": 46, + "short_name": "dumpling", + "short_names": [ + "dumpling" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 77, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FORTUNE COOKIE", + "unified": "1F960", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f960.png", + "sheet_x": 41, + "sheet_y": 47, + "short_name": "fortune_cookie", + "short_names": [ + "fortune_cookie" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 78, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TAKEOUT BOX", + "unified": "1F961", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f961.png", + "sheet_x": 41, + "sheet_y": 48, + "short_name": "takeout_box", + "short_names": [ + "takeout_box" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 79, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHOPSTICKS", + "unified": "1F962", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f962.png", + "sheet_x": 41, + "sheet_y": 49, + "short_name": "chopsticks", + "short_names": [ + "chopsticks" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 116, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BOWL WITH SPOON", + "unified": "1F963", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f963.png", + "sheet_x": 41, + "sheet_y": 50, + "short_name": "bowl_with_spoon", + "short_names": [ + "bowl_with_spoon" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 57, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CUP WITH STRAW", + "unified": "1F964", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f964.png", + "sheet_x": 41, + "sheet_y": 51, + "short_name": "cup_with_straw", + "short_names": [ + "cup_with_straw" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 112, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COCONUT", + "unified": "1F965", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f965.png", + "sheet_x": 41, + "sheet_y": 52, + "short_name": "coconut", + "short_names": [ + "coconut" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 17, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BROCCOLI", + "unified": "1F966", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f966.png", + "sheet_x": 41, + "sheet_y": 53, + "short_name": "broccoli", + "short_names": [ + "broccoli" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 26, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PIE", + "unified": "1F967", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f967.png", + "sheet_x": 41, + "sheet_y": 54, + "short_name": "pie", + "short_names": [ + "pie" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 93, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PRETZEL", + "unified": "1F968", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f968.png", + "sheet_x": 41, + "sheet_y": 55, + "short_name": "pretzel", + "short_names": [ + "pretzel" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 35, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CUT OF MEAT", + "unified": "1F969", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f969.png", + "sheet_x": 41, + "sheet_y": 56, + "short_name": "cut_of_meat", + "short_names": [ + "cut_of_meat" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 42, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SANDWICH", + "unified": "1F96A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f96a.png", + "sheet_x": 42, + "sheet_y": 0, + "short_name": "sandwich", + "short_names": [ + "sandwich" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 48, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CANNED FOOD", + "unified": "1F96B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f96b.png", + "sheet_x": 42, + "sheet_y": 1, + "short_name": "canned_food", + "short_names": [ + "canned_food" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 62, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEAFY GREEN", + "unified": "1F96C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f96c.png", + "sheet_x": 42, + "sheet_y": 2, + "short_name": "leafy_green", + "short_names": [ + "leafy_green" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 25, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MANGO", + "unified": "1F96D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f96d.png", + "sheet_x": 42, + "sheet_y": 3, + "short_name": "mango", + "short_names": [ + "mango" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 8, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOON CAKE", + "unified": "1F96E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f96e.png", + "sheet_x": 42, + "sheet_y": 4, + "short_name": "moon_cake", + "short_names": [ + "moon_cake" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 75, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BAGEL", + "unified": "1F96F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f96f.png", + "sheet_x": 42, + "sheet_y": 5, + "short_name": "bagel", + "short_names": [ + "bagel" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 36, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SMILING FACE WITH SMILING EYES AND THREE HEARTS", + "unified": "1F970", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f970.png", + "sheet_x": 42, + "sheet_y": 6, + "short_name": "smiling_face_with_3_hearts", + "short_names": [ + "smiling_face_with_3_hearts" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 14, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "YAWNING FACE", + "unified": "1F971", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f971.png", + "sheet_x": 42, + "sheet_y": 7, + "short_name": "yawning_face", + "short_names": [ + "yawning_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 86, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH PARTY HORN AND PARTY HAT", + "unified": "1F973", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f973.png", + "sheet_x": 42, + "sheet_y": 8, + "short_name": "partying_face", + "short_names": [ + "partying_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 59, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH UNEVEN EYES AND WAVY MOUTH", + "unified": "1F974", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f974.png", + "sheet_x": 42, + "sheet_y": 9, + "short_name": "woozy_face", + "short_names": [ + "woozy_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 55, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OVERHEATED FACE", + "unified": "1F975", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f975.png", + "sheet_x": 42, + "sheet_y": 10, + "short_name": "hot_face", + "short_names": [ + "hot_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 53, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FREEZING FACE", + "unified": "1F976", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f976.png", + "sheet_x": 42, + "sheet_y": 11, + "short_name": "cold_face", + "short_names": [ + "cold_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 54, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FACE WITH PLEADING EYES", + "unified": "1F97A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f97a.png", + "sheet_x": 42, + "sheet_y": 12, + "short_name": "pleading_face", + "short_names": [ + "pleading_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 71, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SARI", + "unified": "1F97B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f97b.png", + "sheet_x": 42, + "sheet_y": 13, + "short_name": "sari", + "short_names": [ + "sari" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 15, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LAB COAT", + "unified": "1F97C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f97c.png", + "sheet_x": 42, + "sheet_y": 14, + "short_name": "lab_coat", + "short_names": [ + "lab_coat" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 4, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GOGGLES", + "unified": "1F97D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f97d.png", + "sheet_x": 42, + "sheet_y": 15, + "short_name": "goggles", + "short_names": [ + "goggles" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 3, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HIKING BOOT", + "unified": "1F97E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f97e.png", + "sheet_x": 42, + "sheet_y": 16, + "short_name": "hiking_boot", + "short_names": [ + "hiking_boot" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 28, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FLAT SHOE", + "unified": "1F97F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f97f.png", + "sheet_x": 42, + "sheet_y": 17, + "short_name": "womans_flat_shoe", + "short_names": [ + "womans_flat_shoe" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 29, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CRAB", + "unified": "1F980", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f980.png", + "sheet_x": 42, + "sheet_y": 18, + "short_name": "crab", + "short_names": [ + "crab" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 80, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LION FACE", + "unified": "1F981", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f981.png", + "sheet_x": 42, + "sheet_y": 19, + "short_name": "lion_face", + "short_names": [ + "lion_face" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 15, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SCORPION", + "unified": "1F982", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f982.png", + "sheet_x": 42, + "sheet_y": 20, + "short_name": "scorpion", + "short_names": [ + "scorpion" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 103, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TURKEY", + "unified": "1F983", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f983.png", + "sheet_x": 42, + "sheet_y": 21, + "short_name": "turkey", + "short_names": [ + "turkey" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 60, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "UNICORN FACE", + "unified": "1F984", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f984.png", + "sheet_x": 42, + "sheet_y": 22, + "short_name": "unicorn_face", + "short_names": [ + "unicorn_face" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EAGLE", + "unified": "1F985", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f985.png", + "sheet_x": 42, + "sheet_y": 23, + "short_name": "eagle", + "short_names": [ + "eagle" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 69, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DUCK", + "unified": "1F986", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f986.png", + "sheet_x": 42, + "sheet_y": 24, + "short_name": "duck", + "short_names": [ + "duck" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 70, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BAT", + "unified": "1F987", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f987.png", + "sheet_x": 42, + "sheet_y": 25, + "short_name": "bat", + "short_names": [ + "bat" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 50, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHARK", + "unified": "1F988", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f988.png", + "sheet_x": 42, + "sheet_y": 26, + "short_name": "shark", + "short_names": [ + "shark" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 91, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OWL", + "unified": "1F989", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f989.png", + "sheet_x": 42, + "sheet_y": 27, + "short_name": "owl", + "short_names": [ + "owl" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 72, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FOX FACE", + "unified": "1F98A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f98a.png", + "sheet_x": 42, + "sheet_y": 28, + "short_name": "fox_face", + "short_names": [ + "fox_face" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 11, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BUTTERFLY", + "unified": "1F98B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f98b.png", + "sheet_x": 42, + "sheet_y": 29, + "short_name": "butterfly", + "short_names": [ + "butterfly" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 95, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DEER", + "unified": "1F98C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f98c.png", + "sheet_x": 42, + "sheet_y": 30, + "short_name": "deer", + "short_names": [ + "deer" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 23, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GORILLA", + "unified": "1F98D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f98d.png", + "sheet_x": 42, + "sheet_y": 31, + "short_name": "gorilla", + "short_names": [ + "gorilla" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 3, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LIZARD", + "unified": "1F98E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f98e.png", + "sheet_x": 42, + "sheet_y": 32, + "short_name": "lizard", + "short_names": [ + "lizard" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 79, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RHINOCEROS", + "unified": "1F98F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f98f.png", + "sheet_x": 42, + "sheet_y": 33, + "short_name": "rhinoceros", + "short_names": [ + "rhinoceros" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 40, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHRIMP", + "unified": "1F990", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f990.png", + "sheet_x": 42, + "sheet_y": 34, + "short_name": "shrimp", + "short_names": [ + "shrimp" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 82, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SQUID", + "unified": "1F991", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f991.png", + "sheet_x": 42, + "sheet_y": 35, + "short_name": "squid", + "short_names": [ + "squid" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 83, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GIRAFFE FACE", + "unified": "1F992", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f992.png", + "sheet_x": 42, + "sheet_y": 36, + "short_name": "giraffe_face", + "short_names": [ + "giraffe_face" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 38, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ZEBRA FACE", + "unified": "1F993", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f993.png", + "sheet_x": 42, + "sheet_y": 37, + "short_name": "zebra_face", + "short_names": [ + "zebra_face" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 22, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEDGEHOG", + "unified": "1F994", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f994.png", + "sheet_x": 42, + "sheet_y": 38, + "short_name": "hedgehog", + "short_names": [ + "hedgehog" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 49, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SAUROPOD", + "unified": "1F995", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f995.png", + "sheet_x": 42, + "sheet_y": 39, + "short_name": "sauropod", + "short_names": [ + "sauropod" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 83, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "T-REX", + "unified": "1F996", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f996.png", + "sheet_x": 42, + "sheet_y": 40, + "short_name": "t-rex", + "short_names": [ + "t-rex" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 84, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CRICKET", + "unified": "1F997", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f997.png", + "sheet_x": 42, + "sheet_y": 41, + "short_name": "cricket", + "short_names": [ + "cricket" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 100, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KANGAROO", + "unified": "1F998", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f998.png", + "sheet_x": 42, + "sheet_y": 42, + "short_name": "kangaroo", + "short_names": [ + "kangaroo" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 57, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LLAMA", + "unified": "1F999", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f999.png", + "sheet_x": 42, + "sheet_y": 43, + "short_name": "llama", + "short_names": [ + "llama" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 37, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PEACOCK", + "unified": "1F99A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f99a.png", + "sheet_x": 42, + "sheet_y": 44, + "short_name": "peacock", + "short_names": [ + "peacock" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 74, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HIPPOPOTAMUS", + "unified": "1F99B", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f99b.png", + "sheet_x": 42, + "sheet_y": 45, + "short_name": "hippopotamus", + "short_names": [ + "hippopotamus" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 41, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PARROT", + "unified": "1F99C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f99c.png", + "sheet_x": 42, + "sheet_y": 46, + "short_name": "parrot", + "short_names": [ + "parrot" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 75, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RACCOON", + "unified": "1F99D", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f99d.png", + "sheet_x": 42, + "sheet_y": 47, + "short_name": "raccoon", + "short_names": [ + "raccoon" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 12, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LOBSTER", + "unified": "1F99E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f99e.png", + "sheet_x": 42, + "sheet_y": 48, + "short_name": "lobster", + "short_names": [ + "lobster" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 81, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MOSQUITO", + "unified": "1F99F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f99f.png", + "sheet_x": 42, + "sheet_y": 49, + "short_name": "mosquito", + "short_names": [ + "mosquito" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 104, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MICROBE", + "unified": "1F9A0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9a0.png", + "sheet_x": 42, + "sheet_y": 50, + "short_name": "microbe", + "short_names": [ + "microbe" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 105, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BADGER", + "unified": "1F9A1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9a1.png", + "sheet_x": 42, + "sheet_y": 51, + "short_name": "badger", + "short_names": [ + "badger" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 58, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SWAN", + "unified": "1F9A2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9a2.png", + "sheet_x": 42, + "sheet_y": 52, + "short_name": "swan", + "short_names": [ + "swan" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 71, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SLOTH", + "unified": "1F9A5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9a5.png", + "sheet_x": 42, + "sheet_y": 53, + "short_name": "sloth", + "short_names": [ + "sloth" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 54, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OTTER", + "unified": "1F9A6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9a6.png", + "sheet_x": 42, + "sheet_y": 54, + "short_name": "otter", + "short_names": [ + "otter" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 55, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ORANGUTAN", + "unified": "1F9A7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9a7.png", + "sheet_x": 42, + "sheet_y": 55, + "short_name": "orangutan", + "short_names": [ + "orangutan" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 4, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SKUNK", + "unified": "1F9A8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9a8.png", + "sheet_x": 42, + "sheet_y": 56, + "short_name": "skunk", + "short_names": [ + "skunk" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 56, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FLAMINGO", + "unified": "1F9A9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9a9.png", + "sheet_x": 43, + "sheet_y": 0, + "short_name": "flamingo", + "short_names": [ + "flamingo" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 73, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OYSTER", + "unified": "1F9AA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9aa.png", + "sheet_x": 43, + "sheet_y": 1, + "short_name": "oyster", + "short_names": [ + "oyster" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 84, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GUIDE DOG", + "unified": "1F9AE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ae.png", + "sheet_x": 43, + "sheet_y": 2, + "short_name": "guide_dog", + "short_names": [ + "guide_dog" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 7, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PROBING CANE", + "unified": "1F9AF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9af.png", + "sheet_x": 43, + "sheet_y": 3, + "short_name": "probing_cane", + "short_names": [ + "probing_cane" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 196, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BONE", + "unified": "1F9B4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b4.png", + "sheet_x": 43, + "sheet_y": 4, + "short_name": "bone", + "short_names": [ + "bone" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 44, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEG", + "unified": "1F9B5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b5.png", + "sheet_x": 43, + "sheet_y": 5, + "short_name": "leg", + "short_names": [ + "leg" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 37, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9B5-1F3FB", + "non_qualified": null, + "image": "1f9b5-1f3fb.png", + "sheet_x": 43, + "sheet_y": 6, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9B5-1F3FC", + "non_qualified": null, + "image": "1f9b5-1f3fc.png", + "sheet_x": 43, + "sheet_y": 7, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9B5-1F3FD", + "non_qualified": null, + "image": "1f9b5-1f3fd.png", + "sheet_x": 43, + "sheet_y": 8, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9B5-1F3FE", + "non_qualified": null, + "image": "1f9b5-1f3fe.png", + "sheet_x": 43, + "sheet_y": 9, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9B5-1F3FF", + "non_qualified": null, + "image": "1f9b5-1f3ff.png", + "sheet_x": 43, + "sheet_y": 10, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FOOT", + "unified": "1F9B6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b6.png", + "sheet_x": 43, + "sheet_y": 11, + "short_name": "foot", + "short_names": [ + "foot" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 38, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9B6-1F3FB", + "non_qualified": null, + "image": "1f9b6-1f3fb.png", + "sheet_x": 43, + "sheet_y": 12, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9B6-1F3FC", + "non_qualified": null, + "image": "1f9b6-1f3fc.png", + "sheet_x": 43, + "sheet_y": 13, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9B6-1F3FD", + "non_qualified": null, + "image": "1f9b6-1f3fd.png", + "sheet_x": 43, + "sheet_y": 14, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9B6-1F3FE", + "non_qualified": null, + "image": "1f9b6-1f3fe.png", + "sheet_x": 43, + "sheet_y": 15, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9B6-1F3FF", + "non_qualified": null, + "image": "1f9b6-1f3ff.png", + "sheet_x": 43, + "sheet_y": 16, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "TOOTH", + "unified": "1F9B7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b7.png", + "sheet_x": 43, + "sheet_y": 17, + "short_name": "tooth", + "short_names": [ + "tooth" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 43, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F9B8-200D-2640-FE0F", + "non_qualified": "1F9B8-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b8-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 18, + "short_name": "female_superhero", + "short_names": [ + "female_superhero" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 181, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9B8-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9B8-1F3FB-200D-2640", + "image": "1f9b8-1f3fb-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 19, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9B8-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9B8-1F3FC-200D-2640", + "image": "1f9b8-1f3fc-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 20, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9B8-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9B8-1F3FD-200D-2640", + "image": "1f9b8-1f3fd-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 21, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9B8-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9B8-1F3FE-200D-2640", + "image": "1f9b8-1f3fe-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 22, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9B8-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9B8-1F3FF-200D-2640", + "image": "1f9b8-1f3ff-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 23, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9B8-200D-2642-FE0F", + "non_qualified": "1F9B8-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b8-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 24, + "short_name": "male_superhero", + "short_names": [ + "male_superhero" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 180, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9B8-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9B8-1F3FB-200D-2642", + "image": "1f9b8-1f3fb-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 25, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9B8-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9B8-1F3FC-200D-2642", + "image": "1f9b8-1f3fc-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 26, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9B8-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9B8-1F3FD-200D-2642", + "image": "1f9b8-1f3fd-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 27, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9B8-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9B8-1F3FE-200D-2642", + "image": "1f9b8-1f3fe-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 28, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9B8-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9B8-1F3FF-200D-2642", + "image": "1f9b8-1f3ff-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 29, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "SUPERHERO", + "unified": "1F9B8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b8.png", + "sheet_x": 43, + "sheet_y": 30, + "short_name": "superhero", + "short_names": [ + "superhero" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 179, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9B8-1F3FB", + "non_qualified": null, + "image": "1f9b8-1f3fb.png", + "sheet_x": 43, + "sheet_y": 31, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9B8-1F3FC", + "non_qualified": null, + "image": "1f9b8-1f3fc.png", + "sheet_x": 43, + "sheet_y": 32, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9B8-1F3FD", + "non_qualified": null, + "image": "1f9b8-1f3fd.png", + "sheet_x": 43, + "sheet_y": 33, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9B8-1F3FE", + "non_qualified": null, + "image": "1f9b8-1f3fe.png", + "sheet_x": 43, + "sheet_y": 34, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9B8-1F3FF", + "non_qualified": null, + "image": "1f9b8-1f3ff.png", + "sheet_x": 43, + "sheet_y": 35, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9B9-200D-2640-FE0F", + "non_qualified": "1F9B9-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b9-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 36, + "short_name": "female_supervillain", + "short_names": [ + "female_supervillain" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 184, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9B9-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9B9-1F3FB-200D-2640", + "image": "1f9b9-1f3fb-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 37, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9B9-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9B9-1F3FC-200D-2640", + "image": "1f9b9-1f3fc-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 38, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9B9-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9B9-1F3FD-200D-2640", + "image": "1f9b9-1f3fd-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 39, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9B9-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9B9-1F3FE-200D-2640", + "image": "1f9b9-1f3fe-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 40, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9B9-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9B9-1F3FF-200D-2640", + "image": "1f9b9-1f3ff-200d-2640-fe0f.png", + "sheet_x": 43, + "sheet_y": 41, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9B9-200D-2642-FE0F", + "non_qualified": "1F9B9-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b9-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 42, + "short_name": "male_supervillain", + "short_names": [ + "male_supervillain" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 183, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9B9-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9B9-1F3FB-200D-2642", + "image": "1f9b9-1f3fb-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 43, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9B9-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9B9-1F3FC-200D-2642", + "image": "1f9b9-1f3fc-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 44, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9B9-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9B9-1F3FD-200D-2642", + "image": "1f9b9-1f3fd-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 45, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9B9-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9B9-1F3FE-200D-2642", + "image": "1f9b9-1f3fe-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 46, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9B9-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9B9-1F3FF-200D-2642", + "image": "1f9b9-1f3ff-200d-2642-fe0f.png", + "sheet_x": 43, + "sheet_y": 47, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "SUPERVILLAIN", + "unified": "1F9B9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9b9.png", + "sheet_x": 43, + "sheet_y": 48, + "short_name": "supervillain", + "short_names": [ + "supervillain" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 182, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9B9-1F3FB", + "non_qualified": null, + "image": "1f9b9-1f3fb.png", + "sheet_x": 43, + "sheet_y": 49, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9B9-1F3FC", + "non_qualified": null, + "image": "1f9b9-1f3fc.png", + "sheet_x": 43, + "sheet_y": 50, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9B9-1F3FD", + "non_qualified": null, + "image": "1f9b9-1f3fd.png", + "sheet_x": 43, + "sheet_y": 51, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9B9-1F3FE", + "non_qualified": null, + "image": "1f9b9-1f3fe.png", + "sheet_x": 43, + "sheet_y": 52, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9B9-1F3FF", + "non_qualified": null, + "image": "1f9b9-1f3ff.png", + "sheet_x": 43, + "sheet_y": 53, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "SAFETY VEST", + "unified": "1F9BA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ba.png", + "sheet_x": 43, + "sheet_y": 54, + "short_name": "safety_vest", + "short_names": [ + "safety_vest" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 5, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EAR WITH HEARING AID", + "unified": "1F9BB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9bb.png", + "sheet_x": 43, + "sheet_y": 55, + "short_name": "ear_with_hearing_aid", + "short_names": [ + "ear_with_hearing_aid" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 40, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9BB-1F3FB", + "non_qualified": null, + "image": "1f9bb-1f3fb.png", + "sheet_x": 43, + "sheet_y": 56, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9BB-1F3FC", + "non_qualified": null, + "image": "1f9bb-1f3fc.png", + "sheet_x": 44, + "sheet_y": 0, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9BB-1F3FD", + "non_qualified": null, + "image": "1f9bb-1f3fd.png", + "sheet_x": 44, + "sheet_y": 1, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9BB-1F3FE", + "non_qualified": null, + "image": "1f9bb-1f3fe.png", + "sheet_x": 44, + "sheet_y": 2, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9BB-1F3FF", + "non_qualified": null, + "image": "1f9bb-1f3ff.png", + "sheet_x": 44, + "sheet_y": 3, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "MOTORIZED WHEELCHAIR", + "unified": "1F9BC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9bc.png", + "sheet_x": 44, + "sheet_y": 4, + "short_name": "motorized_wheelchair", + "short_names": [ + "motorized_wheelchair" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 95, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MANUAL WHEELCHAIR", + "unified": "1F9BD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9bd.png", + "sheet_x": 44, + "sheet_y": 5, + "short_name": "manual_wheelchair", + "short_names": [ + "manual_wheelchair" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 94, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MECHANICAL ARM", + "unified": "1F9BE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9be.png", + "sheet_x": 44, + "sheet_y": 6, + "short_name": "mechanical_arm", + "short_names": [ + "mechanical_arm" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 35, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MECHANICAL LEG", + "unified": "1F9BF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9bf.png", + "sheet_x": 44, + "sheet_y": 7, + "short_name": "mechanical_leg", + "short_names": [ + "mechanical_leg" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 36, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHEESE WEDGE", + "unified": "1F9C0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c0.png", + "sheet_x": 44, + "sheet_y": 8, + "short_name": "cheese_wedge", + "short_names": [ + "cheese_wedge" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CUPCAKE", + "unified": "1F9C1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c1.png", + "sheet_x": 44, + "sheet_y": 9, + "short_name": "cupcake", + "short_names": [ + "cupcake" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 92, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SALT SHAKER", + "unified": "1F9C2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c2.png", + "sheet_x": 44, + "sheet_y": 10, + "short_name": "salt", + "short_names": [ + "salt" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 61, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BEVERAGE BOX", + "unified": "1F9C3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c3.png", + "sheet_x": 44, + "sheet_y": 11, + "short_name": "beverage_box", + "short_names": [ + "beverage_box" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 113, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GARLIC", + "unified": "1F9C4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c4.png", + "sheet_x": 44, + "sheet_y": 12, + "short_name": "garlic", + "short_names": [ + "garlic" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 27, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ONION", + "unified": "1F9C5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c5.png", + "sheet_x": 44, + "sheet_y": 13, + "short_name": "onion", + "short_names": [ + "onion" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 28, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FALAFEL", + "unified": "1F9C6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c6.png", + "sheet_x": 44, + "sheet_y": 14, + "short_name": "falafel", + "short_names": [ + "falafel" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 52, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WAFFLE", + "unified": "1F9C7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c7.png", + "sheet_x": 44, + "sheet_y": 15, + "short_name": "waffle", + "short_names": [ + "waffle" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 38, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BUTTER", + "unified": "1F9C8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c8.png", + "sheet_x": 44, + "sheet_y": 16, + "short_name": "butter", + "short_names": [ + "butter" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 60, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MATE DRINK", + "unified": "1F9C9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9c9.png", + "sheet_x": 44, + "sheet_y": 17, + "short_name": "mate_drink", + "short_names": [ + "mate_drink" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 114, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ICE CUBE", + "unified": "1F9CA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ca.png", + "sheet_x": 44, + "sheet_y": 18, + "short_name": "ice_cube", + "short_names": [ + "ice_cube" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 115, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F9CD-200D-2640-FE0F", + "non_qualified": "1F9CD-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9cd-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 19, + "short_name": "woman_standing", + "short_names": [ + "woman_standing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 217, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9CD-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9CD-1F3FB-200D-2640", + "image": "1f9cd-1f3fb-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 20, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9CD-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9CD-1F3FC-200D-2640", + "image": "1f9cd-1f3fc-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 21, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9CD-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9CD-1F3FD-200D-2640", + "image": "1f9cd-1f3fd-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 22, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9CD-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9CD-1F3FE-200D-2640", + "image": "1f9cd-1f3fe-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 23, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9CD-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9CD-1F3FF-200D-2640", + "image": "1f9cd-1f3ff-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 24, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9CD-200D-2642-FE0F", + "non_qualified": "1F9CD-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9cd-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 25, + "short_name": "man_standing", + "short_names": [ + "man_standing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 216, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9CD-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9CD-1F3FB-200D-2642", + "image": "1f9cd-1f3fb-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 26, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9CD-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9CD-1F3FC-200D-2642", + "image": "1f9cd-1f3fc-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 27, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9CD-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9CD-1F3FD-200D-2642", + "image": "1f9cd-1f3fd-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 28, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9CD-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9CD-1F3FE-200D-2642", + "image": "1f9cd-1f3fe-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 29, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9CD-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9CD-1F3FF-200D-2642", + "image": "1f9cd-1f3ff-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 30, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "STANDING PERSON", + "unified": "1F9CD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9cd.png", + "sheet_x": 44, + "sheet_y": 31, + "short_name": "standing_person", + "short_names": [ + "standing_person" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 215, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9CD-1F3FB", + "non_qualified": null, + "image": "1f9cd-1f3fb.png", + "sheet_x": 44, + "sheet_y": 32, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9CD-1F3FC", + "non_qualified": null, + "image": "1f9cd-1f3fc.png", + "sheet_x": 44, + "sheet_y": 33, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9CD-1F3FD", + "non_qualified": null, + "image": "1f9cd-1f3fd.png", + "sheet_x": 44, + "sheet_y": 34, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9CD-1F3FE", + "non_qualified": null, + "image": "1f9cd-1f3fe.png", + "sheet_x": 44, + "sheet_y": 35, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9CD-1F3FF", + "non_qualified": null, + "image": "1f9cd-1f3ff.png", + "sheet_x": 44, + "sheet_y": 36, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9CE-200D-2640-FE0F", + "non_qualified": "1F9CE-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ce-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 37, + "short_name": "woman_kneeling", + "short_names": [ + "woman_kneeling" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 220, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9CE-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9CE-1F3FB-200D-2640", + "image": "1f9ce-1f3fb-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 38, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9CE-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9CE-1F3FC-200D-2640", + "image": "1f9ce-1f3fc-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 39, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9CE-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9CE-1F3FD-200D-2640", + "image": "1f9ce-1f3fd-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 40, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9CE-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9CE-1F3FE-200D-2640", + "image": "1f9ce-1f3fe-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 41, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9CE-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9CE-1F3FF-200D-2640", + "image": "1f9ce-1f3ff-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 42, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9CE-200D-2642-FE0F", + "non_qualified": "1F9CE-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ce-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 43, + "short_name": "man_kneeling", + "short_names": [ + "man_kneeling" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 219, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9CE-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9CE-1F3FB-200D-2642", + "image": "1f9ce-1f3fb-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 44, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9CE-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9CE-1F3FC-200D-2642", + "image": "1f9ce-1f3fc-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 45, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9CE-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9CE-1F3FD-200D-2642", + "image": "1f9ce-1f3fd-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 46, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9CE-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9CE-1F3FE-200D-2642", + "image": "1f9ce-1f3fe-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 47, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9CE-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9CE-1F3FF-200D-2642", + "image": "1f9ce-1f3ff-200d-2642-fe0f.png", + "sheet_x": 44, + "sheet_y": 48, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "KNEELING PERSON", + "unified": "1F9CE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ce.png", + "sheet_x": 44, + "sheet_y": 49, + "short_name": "kneeling_person", + "short_names": [ + "kneeling_person" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 218, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9CE-1F3FB", + "non_qualified": null, + "image": "1f9ce-1f3fb.png", + "sheet_x": 44, + "sheet_y": 50, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9CE-1F3FC", + "non_qualified": null, + "image": "1f9ce-1f3fc.png", + "sheet_x": 44, + "sheet_y": 51, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9CE-1F3FD", + "non_qualified": null, + "image": "1f9ce-1f3fd.png", + "sheet_x": 44, + "sheet_y": 52, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9CE-1F3FE", + "non_qualified": null, + "image": "1f9ce-1f3fe.png", + "sheet_x": 44, + "sheet_y": 53, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9CE-1F3FF", + "non_qualified": null, + "image": "1f9ce-1f3ff.png", + "sheet_x": 44, + "sheet_y": 54, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9CF-200D-2640-FE0F", + "non_qualified": "1F9CF-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9cf-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 55, + "short_name": "deaf_woman", + "short_names": [ + "deaf_woman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 95, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9CF-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9CF-1F3FB-200D-2640", + "image": "1f9cf-1f3fb-200d-2640-fe0f.png", + "sheet_x": 44, + "sheet_y": 56, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9CF-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9CF-1F3FC-200D-2640", + "image": "1f9cf-1f3fc-200d-2640-fe0f.png", + "sheet_x": 45, + "sheet_y": 0, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9CF-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9CF-1F3FD-200D-2640", + "image": "1f9cf-1f3fd-200d-2640-fe0f.png", + "sheet_x": 45, + "sheet_y": 1, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9CF-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9CF-1F3FE-200D-2640", + "image": "1f9cf-1f3fe-200d-2640-fe0f.png", + "sheet_x": 45, + "sheet_y": 2, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9CF-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9CF-1F3FF-200D-2640", + "image": "1f9cf-1f3ff-200d-2640-fe0f.png", + "sheet_x": 45, + "sheet_y": 3, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9CF-200D-2642-FE0F", + "non_qualified": "1F9CF-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9cf-200d-2642-fe0f.png", + "sheet_x": 45, + "sheet_y": 4, + "short_name": "deaf_man", + "short_names": [ + "deaf_man" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 94, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9CF-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9CF-1F3FB-200D-2642", + "image": "1f9cf-1f3fb-200d-2642-fe0f.png", + "sheet_x": 45, + "sheet_y": 5, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9CF-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9CF-1F3FC-200D-2642", + "image": "1f9cf-1f3fc-200d-2642-fe0f.png", + "sheet_x": 45, + "sheet_y": 6, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9CF-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9CF-1F3FD-200D-2642", + "image": "1f9cf-1f3fd-200d-2642-fe0f.png", + "sheet_x": 45, + "sheet_y": 7, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9CF-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9CF-1F3FE-200D-2642", + "image": "1f9cf-1f3fe-200d-2642-fe0f.png", + "sheet_x": 45, + "sheet_y": 8, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9CF-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9CF-1F3FF-200D-2642", + "image": "1f9cf-1f3ff-200d-2642-fe0f.png", + "sheet_x": 45, + "sheet_y": 9, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "DEAF PERSON", + "unified": "1F9CF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9cf.png", + "sheet_x": 45, + "sheet_y": 10, + "short_name": "deaf_person", + "short_names": [ + "deaf_person" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 93, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9CF-1F3FB", + "non_qualified": null, + "image": "1f9cf-1f3fb.png", + "sheet_x": 45, + "sheet_y": 11, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9CF-1F3FC", + "non_qualified": null, + "image": "1f9cf-1f3fc.png", + "sheet_x": 45, + "sheet_y": 12, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9CF-1F3FD", + "non_qualified": null, + "image": "1f9cf-1f3fd.png", + "sheet_x": 45, + "sheet_y": 13, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9CF-1F3FE", + "non_qualified": null, + "image": "1f9cf-1f3fe.png", + "sheet_x": 45, + "sheet_y": 14, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9CF-1F3FF", + "non_qualified": null, + "image": "1f9cf-1f3ff.png", + "sheet_x": 45, + "sheet_y": 15, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "FACE WITH MONOCLE", + "unified": "1F9D0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d0.png", + "sheet_x": 45, + "sheet_y": 16, + "short_name": "face_with_monocle", + "short_names": [ + "face_with_monocle" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 62, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F9D1-200D-1F33E", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f33e.png", + "sheet_x": 45, + "sheet_y": 17, + "short_name": "farmer", + "short_names": [ + "farmer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 117, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F33E", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f33e.png", + "sheet_x": 45, + "sheet_y": 18, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F33E", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f33e.png", + "sheet_x": 45, + "sheet_y": 19, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F33E", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f33e.png", + "sheet_x": 45, + "sheet_y": 20, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F33E", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f33e.png", + "sheet_x": 45, + "sheet_y": 21, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F33E", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f33e.png", + "sheet_x": 45, + "sheet_y": 22, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F373", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f373.png", + "sheet_x": 45, + "sheet_y": 23, + "short_name": "cook", + "short_names": [ + "cook" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 120, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F373", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f373.png", + "sheet_x": 45, + "sheet_y": 24, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F373", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f373.png", + "sheet_x": 45, + "sheet_y": 25, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F373", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f373.png", + "sheet_x": 45, + "sheet_y": 26, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F373", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f373.png", + "sheet_x": 45, + "sheet_y": 27, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F373", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f373.png", + "sheet_x": 45, + "sheet_y": 28, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F393", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f393.png", + "sheet_x": 45, + "sheet_y": 29, + "short_name": "student", + "short_names": [ + "student" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 108, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F393", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f393.png", + "sheet_x": 45, + "sheet_y": 30, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F393", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f393.png", + "sheet_x": 45, + "sheet_y": 31, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F393", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f393.png", + "sheet_x": 45, + "sheet_y": 32, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F393", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f393.png", + "sheet_x": 45, + "sheet_y": 33, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F393", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f393.png", + "sheet_x": 45, + "sheet_y": 34, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F3A4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f3a4.png", + "sheet_x": 45, + "sheet_y": 35, + "short_name": "singer", + "short_names": [ + "singer" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 138, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F3A4", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f3a4.png", + "sheet_x": 45, + "sheet_y": 36, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F3A4", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f3a4.png", + "sheet_x": 45, + "sheet_y": 37, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F3A4", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f3a4.png", + "sheet_x": 45, + "sheet_y": 38, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F3A4", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f3a4.png", + "sheet_x": 45, + "sheet_y": 39, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F3A4", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f3a4.png", + "sheet_x": 45, + "sheet_y": 40, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F3A8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f3a8.png", + "sheet_x": 45, + "sheet_y": 41, + "short_name": "artist", + "short_names": [ + "artist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 141, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F3A8", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f3a8.png", + "sheet_x": 45, + "sheet_y": 42, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F3A8", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f3a8.png", + "sheet_x": 45, + "sheet_y": 43, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F3A8", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f3a8.png", + "sheet_x": 45, + "sheet_y": 44, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F3A8", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f3a8.png", + "sheet_x": 45, + "sheet_y": 45, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F3A8", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f3a8.png", + "sheet_x": 45, + "sheet_y": 46, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F3EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f3eb.png", + "sheet_x": 45, + "sheet_y": 47, + "short_name": "teacher", + "short_names": [ + "teacher" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 111, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F3EB", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f3eb.png", + "sheet_x": 45, + "sheet_y": 48, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F3EB", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f3eb.png", + "sheet_x": 45, + "sheet_y": 49, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F3EB", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f3eb.png", + "sheet_x": 45, + "sheet_y": 50, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F3EB", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f3eb.png", + "sheet_x": 45, + "sheet_y": 51, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F3EB", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f3eb.png", + "sheet_x": 45, + "sheet_y": 52, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F3ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f3ed.png", + "sheet_x": 45, + "sheet_y": 53, + "short_name": "factory_worker", + "short_names": [ + "factory_worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 126, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F3ED", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f3ed.png", + "sheet_x": 45, + "sheet_y": 54, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F3ED", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f3ed.png", + "sheet_x": 45, + "sheet_y": 55, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F3ED", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f3ed.png", + "sheet_x": 45, + "sheet_y": 56, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F3ED", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f3ed.png", + "sheet_x": 46, + "sheet_y": 0, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F3ED", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f3ed.png", + "sheet_x": 46, + "sheet_y": 1, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F4BB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f4bb.png", + "sheet_x": 46, + "sheet_y": 2, + "short_name": "technologist", + "short_names": [ + "technologist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 135, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F4BB", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f4bb.png", + "sheet_x": 46, + "sheet_y": 3, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F4BB", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f4bb.png", + "sheet_x": 46, + "sheet_y": 4, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F4BB", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f4bb.png", + "sheet_x": 46, + "sheet_y": 5, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F4BB", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f4bb.png", + "sheet_x": 46, + "sheet_y": 6, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F4BB", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f4bb.png", + "sheet_x": 46, + "sheet_y": 7, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F4BC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f4bc.png", + "sheet_x": 46, + "sheet_y": 8, + "short_name": "office_worker", + "short_names": [ + "office_worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 129, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F4BC", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f4bc.png", + "sheet_x": 46, + "sheet_y": 9, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F4BC", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f4bc.png", + "sheet_x": 46, + "sheet_y": 10, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F4BC", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f4bc.png", + "sheet_x": 46, + "sheet_y": 11, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F4BC", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f4bc.png", + "sheet_x": 46, + "sheet_y": 12, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F4BC", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f4bc.png", + "sheet_x": 46, + "sheet_y": 13, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F527", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f527.png", + "sheet_x": 46, + "sheet_y": 14, + "short_name": "mechanic", + "short_names": [ + "mechanic" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 123, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F527", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f527.png", + "sheet_x": 46, + "sheet_y": 15, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F527", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f527.png", + "sheet_x": 46, + "sheet_y": 16, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F527", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f527.png", + "sheet_x": 46, + "sheet_y": 17, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F527", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f527.png", + "sheet_x": 46, + "sheet_y": 18, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F527", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f527.png", + "sheet_x": 46, + "sheet_y": 19, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F52C", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f52c.png", + "sheet_x": 46, + "sheet_y": 20, + "short_name": "scientist", + "short_names": [ + "scientist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 132, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F52C", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f52c.png", + "sheet_x": 46, + "sheet_y": 21, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F52C", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f52c.png", + "sheet_x": 46, + "sheet_y": 22, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F52C", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f52c.png", + "sheet_x": 46, + "sheet_y": 23, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F52C", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f52c.png", + "sheet_x": 46, + "sheet_y": 24, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F52C", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f52c.png", + "sheet_x": 46, + "sheet_y": 25, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F680", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f680.png", + "sheet_x": 46, + "sheet_y": 26, + "short_name": "astronaut", + "short_names": [ + "astronaut" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 147, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F680", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f680.png", + "sheet_x": 46, + "sheet_y": 27, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F680", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f680.png", + "sheet_x": 46, + "sheet_y": 28, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F680", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f680.png", + "sheet_x": 46, + "sheet_y": 29, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F680", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f680.png", + "sheet_x": 46, + "sheet_y": 30, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F680", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f680.png", + "sheet_x": 46, + "sheet_y": 31, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F692", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f692.png", + "sheet_x": 46, + "sheet_y": 32, + "short_name": "firefighter", + "short_names": [ + "firefighter" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 150, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F692", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f692.png", + "sheet_x": 46, + "sheet_y": 33, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F692", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f692.png", + "sheet_x": 46, + "sheet_y": 34, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F692", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f692.png", + "sheet_x": 46, + "sheet_y": 35, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F692", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f692.png", + "sheet_x": 46, + "sheet_y": 36, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F692", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f692.png", + "sheet_x": 46, + "sheet_y": 37, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F91D-200D-1F9D1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f91d-200d-1f9d1.png", + "sheet_x": 46, + "sheet_y": 38, + "short_name": "people_holding_hands", + "short_names": [ + "people_holding_hands" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 293, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB-1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FB", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb.png", + "sheet_x": 46, + "sheet_y": 39, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FB-1F3FC": { + "unified": "1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FC", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc.png", + "sheet_x": 46, + "sheet_y": 40, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FB-1F3FD": { + "unified": "1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FD", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd.png", + "sheet_x": 46, + "sheet_y": 41, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FB-1F3FE": { + "unified": "1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FE", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe.png", + "sheet_x": 46, + "sheet_y": 42, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FB-1F3FF": { + "unified": "1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FF", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff.png", + "sheet_x": 46, + "sheet_y": 43, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC-1F3FB": { + "unified": "1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FB", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb.png", + "sheet_x": 46, + "sheet_y": 44, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC-1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FC", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc.png", + "sheet_x": 46, + "sheet_y": 45, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC-1F3FD": { + "unified": "1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FD", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd.png", + "sheet_x": 46, + "sheet_y": 46, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC-1F3FE": { + "unified": "1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FE", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe.png", + "sheet_x": 46, + "sheet_y": 47, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC-1F3FF": { + "unified": "1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FF", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff.png", + "sheet_x": 46, + "sheet_y": 48, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD-1F3FB": { + "unified": "1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FB", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb.png", + "sheet_x": 46, + "sheet_y": 49, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FC": { + "unified": "1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FC", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc.png", + "sheet_x": 46, + "sheet_y": 50, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FD", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd.png", + "sheet_x": 46, + "sheet_y": 51, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD-1F3FE": { + "unified": "1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FE", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe.png", + "sheet_x": 46, + "sheet_y": 52, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD-1F3FF": { + "unified": "1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FF", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff.png", + "sheet_x": 46, + "sheet_y": 53, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE-1F3FB": { + "unified": "1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FB", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb.png", + "sheet_x": 46, + "sheet_y": 54, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FC": { + "unified": "1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FC", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc.png", + "sheet_x": 46, + "sheet_y": 55, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FD": { + "unified": "1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FD", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd.png", + "sheet_x": 46, + "sheet_y": 56, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FE", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe.png", + "sheet_x": 47, + "sheet_y": 0, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE-1F3FF": { + "unified": "1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FF", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff.png", + "sheet_x": 47, + "sheet_y": 1, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF-1F3FB": { + "unified": "1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FB", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb.png", + "sheet_x": 47, + "sheet_y": 2, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FC": { + "unified": "1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FC", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc.png", + "sheet_x": 47, + "sheet_y": 3, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FD": { + "unified": "1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FD", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd.png", + "sheet_x": 47, + "sheet_y": 4, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FE": { + "unified": "1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FE", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe.png", + "sheet_x": 47, + "sheet_y": 5, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF-1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FF", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff.png", + "sheet_x": 47, + "sheet_y": 6, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F9AF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f9af.png", + "sheet_x": 47, + "sheet_y": 7, + "short_name": "person_with_probing_cane", + "short_names": [ + "person_with_probing_cane" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 221, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F9AF", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f9af.png", + "sheet_x": 47, + "sheet_y": 8, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F9AF", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f9af.png", + "sheet_x": 47, + "sheet_y": 9, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F9AF", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f9af.png", + "sheet_x": 47, + "sheet_y": 10, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F9AF", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f9af.png", + "sheet_x": 47, + "sheet_y": 11, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F9AF", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f9af.png", + "sheet_x": 47, + "sheet_y": 12, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F9B0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f9b0.png", + "sheet_x": 47, + "sheet_y": 13, + "short_name": "red_haired_person", + "short_names": [ + "red_haired_person" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 63, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F9B0", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f9b0.png", + "sheet_x": 47, + "sheet_y": 14, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F9B0", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f9b0.png", + "sheet_x": 47, + "sheet_y": 15, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F9B0", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f9b0.png", + "sheet_x": 47, + "sheet_y": 16, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F9B0", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f9b0.png", + "sheet_x": 47, + "sheet_y": 17, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F9B0", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f9b0.png", + "sheet_x": 47, + "sheet_y": 18, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F9B1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f9b1.png", + "sheet_x": 47, + "sheet_y": 19, + "short_name": "curly_haired_person", + "short_names": [ + "curly_haired_person" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 65, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F9B1", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f9b1.png", + "sheet_x": 47, + "sheet_y": 20, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F9B1", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f9b1.png", + "sheet_x": 47, + "sheet_y": 21, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F9B1", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f9b1.png", + "sheet_x": 47, + "sheet_y": 22, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F9B1", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f9b1.png", + "sheet_x": 47, + "sheet_y": 23, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F9B1", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f9b1.png", + "sheet_x": 47, + "sheet_y": 24, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F9B2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f9b2.png", + "sheet_x": 47, + "sheet_y": 25, + "short_name": "bald_person", + "short_names": [ + "bald_person" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 69, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F9B2", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f9b2.png", + "sheet_x": 47, + "sheet_y": 26, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F9B2", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f9b2.png", + "sheet_x": 47, + "sheet_y": 27, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F9B2", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f9b2.png", + "sheet_x": 47, + "sheet_y": 28, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F9B2", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f9b2.png", + "sheet_x": 47, + "sheet_y": 29, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F9B2", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f9b2.png", + "sheet_x": 47, + "sheet_y": 30, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F9B3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f9b3.png", + "sheet_x": 47, + "sheet_y": 31, + "short_name": "white_haired_person", + "short_names": [ + "white_haired_person" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 67, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F9B3", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f9b3.png", + "sheet_x": 47, + "sheet_y": 32, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F9B3", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f9b3.png", + "sheet_x": 47, + "sheet_y": 33, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F9B3", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f9b3.png", + "sheet_x": 47, + "sheet_y": 34, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F9B3", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f9b3.png", + "sheet_x": 47, + "sheet_y": 35, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F9B3", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f9b3.png", + "sheet_x": 47, + "sheet_y": 36, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F9BC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f9bc.png", + "sheet_x": 47, + "sheet_y": 37, + "short_name": "person_in_motorized_wheelchair", + "short_names": [ + "person_in_motorized_wheelchair" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 224, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F9BC", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f9bc.png", + "sheet_x": 47, + "sheet_y": 38, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F9BC", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f9bc.png", + "sheet_x": 47, + "sheet_y": 39, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F9BC", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f9bc.png", + "sheet_x": 47, + "sheet_y": 40, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F9BC", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f9bc.png", + "sheet_x": 47, + "sheet_y": 41, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F9BC", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f9bc.png", + "sheet_x": 47, + "sheet_y": 42, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-1F9BD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-1f9bd.png", + "sheet_x": 47, + "sheet_y": 43, + "short_name": "person_in_manual_wheelchair", + "short_names": [ + "person_in_manual_wheelchair" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 227, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-1F9BD", + "non_qualified": null, + "image": "1f9d1-1f3fb-200d-1f9bd.png", + "sheet_x": 47, + "sheet_y": 44, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-1F9BD", + "non_qualified": null, + "image": "1f9d1-1f3fc-200d-1f9bd.png", + "sheet_x": 47, + "sheet_y": 45, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-1F9BD", + "non_qualified": null, + "image": "1f9d1-1f3fd-200d-1f9bd.png", + "sheet_x": 47, + "sheet_y": 46, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-1F9BD", + "non_qualified": null, + "image": "1f9d1-1f3fe-200d-1f9bd.png", + "sheet_x": 47, + "sheet_y": 47, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-1F9BD", + "non_qualified": null, + "image": "1f9d1-1f3ff-200d-1f9bd.png", + "sheet_x": 47, + "sheet_y": 48, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-2695-FE0F", + "non_qualified": "1F9D1-200D-2695", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-2695-fe0f.png", + "sheet_x": 47, + "sheet_y": 49, + "short_name": "health_worker", + "short_names": [ + "health_worker" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 105, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-2695-FE0F", + "non_qualified": "1F9D1-1F3FB-200D-2695", + "image": "1f9d1-1f3fb-200d-2695-fe0f.png", + "sheet_x": 47, + "sheet_y": 50, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-2695-FE0F", + "non_qualified": "1F9D1-1F3FC-200D-2695", + "image": "1f9d1-1f3fc-200d-2695-fe0f.png", + "sheet_x": 47, + "sheet_y": 51, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-2695-FE0F", + "non_qualified": "1F9D1-1F3FD-200D-2695", + "image": "1f9d1-1f3fd-200d-2695-fe0f.png", + "sheet_x": 47, + "sheet_y": 52, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-2695-FE0F", + "non_qualified": "1F9D1-1F3FE-200D-2695", + "image": "1f9d1-1f3fe-200d-2695-fe0f.png", + "sheet_x": 47, + "sheet_y": 53, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-2695-FE0F", + "non_qualified": "1F9D1-1F3FF-200D-2695", + "image": "1f9d1-1f3ff-200d-2695-fe0f.png", + "sheet_x": 47, + "sheet_y": 54, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-2696-FE0F", + "non_qualified": "1F9D1-200D-2696", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-2696-fe0f.png", + "sheet_x": 47, + "sheet_y": 55, + "short_name": "judge", + "short_names": [ + "judge" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 114, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-2696-FE0F", + "non_qualified": "1F9D1-1F3FB-200D-2696", + "image": "1f9d1-1f3fb-200d-2696-fe0f.png", + "sheet_x": 47, + "sheet_y": 56, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-2696-FE0F", + "non_qualified": "1F9D1-1F3FC-200D-2696", + "image": "1f9d1-1f3fc-200d-2696-fe0f.png", + "sheet_x": 48, + "sheet_y": 0, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-2696-FE0F", + "non_qualified": "1F9D1-1F3FD-200D-2696", + "image": "1f9d1-1f3fd-200d-2696-fe0f.png", + "sheet_x": 48, + "sheet_y": 1, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-2696-FE0F", + "non_qualified": "1F9D1-1F3FE-200D-2696", + "image": "1f9d1-1f3fe-200d-2696-fe0f.png", + "sheet_x": 48, + "sheet_y": 2, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-2696-FE0F", + "non_qualified": "1F9D1-1F3FF-200D-2696", + "image": "1f9d1-1f3ff-200d-2696-fe0f.png", + "sheet_x": 48, + "sheet_y": 3, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": null, + "unified": "1F9D1-200D-2708-FE0F", + "non_qualified": "1F9D1-200D-2708", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1-200d-2708-fe0f.png", + "sheet_x": 48, + "sheet_y": 4, + "short_name": "pilot", + "short_names": [ + "pilot" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 144, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB-200D-2708-FE0F", + "non_qualified": "1F9D1-1F3FB-200D-2708", + "image": "1f9d1-1f3fb-200d-2708-fe0f.png", + "sheet_x": 48, + "sheet_y": 5, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9D1-1F3FC-200D-2708-FE0F", + "non_qualified": "1F9D1-1F3FC-200D-2708", + "image": "1f9d1-1f3fc-200d-2708-fe0f.png", + "sheet_x": 48, + "sheet_y": 6, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9D1-1F3FD-200D-2708-FE0F", + "non_qualified": "1F9D1-1F3FD-200D-2708", + "image": "1f9d1-1f3fd-200d-2708-fe0f.png", + "sheet_x": 48, + "sheet_y": 7, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9D1-1F3FE-200D-2708-FE0F", + "non_qualified": "1F9D1-1F3FE-200D-2708", + "image": "1f9d1-1f3fe-200d-2708-fe0f.png", + "sheet_x": 48, + "sheet_y": 8, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9D1-1F3FF-200D-2708-FE0F", + "non_qualified": "1F9D1-1F3FF-200D-2708", + "image": "1f9d1-1f3ff-200d-2708-fe0f.png", + "sheet_x": 48, + "sheet_y": 9, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": false, + "has_img_twitter": false, + "has_img_facebook": false + } + } + }, + { + "name": "ADULT", + "unified": "1F9D1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d1.png", + "sheet_x": 48, + "sheet_y": 10, + "short_name": "adult", + "short_names": [ + "adult" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 53, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D1-1F3FB", + "non_qualified": null, + "image": "1f9d1-1f3fb.png", + "sheet_x": 48, + "sheet_y": 11, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9D1-1F3FC", + "non_qualified": null, + "image": "1f9d1-1f3fc.png", + "sheet_x": 48, + "sheet_y": 12, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9D1-1F3FD", + "non_qualified": null, + "image": "1f9d1-1f3fd.png", + "sheet_x": 48, + "sheet_y": 13, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9D1-1F3FE", + "non_qualified": null, + "image": "1f9d1-1f3fe.png", + "sheet_x": 48, + "sheet_y": 14, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9D1-1F3FF", + "non_qualified": null, + "image": "1f9d1-1f3ff.png", + "sheet_x": 48, + "sheet_y": 15, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "CHILD", + "unified": "1F9D2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d2.png", + "sheet_x": 48, + "sheet_y": 16, + "short_name": "child", + "short_names": [ + "child" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 50, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D2-1F3FB", + "non_qualified": null, + "image": "1f9d2-1f3fb.png", + "sheet_x": 48, + "sheet_y": 17, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9D2-1F3FC", + "non_qualified": null, + "image": "1f9d2-1f3fc.png", + "sheet_x": 48, + "sheet_y": 18, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9D2-1F3FD", + "non_qualified": null, + "image": "1f9d2-1f3fd.png", + "sheet_x": 48, + "sheet_y": 19, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9D2-1F3FE", + "non_qualified": null, + "image": "1f9d2-1f3fe.png", + "sheet_x": 48, + "sheet_y": 20, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9D2-1F3FF", + "non_qualified": null, + "image": "1f9d2-1f3ff.png", + "sheet_x": 48, + "sheet_y": 21, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "OLDER ADULT", + "unified": "1F9D3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d3.png", + "sheet_x": 48, + "sheet_y": 22, + "short_name": "older_adult", + "short_names": [ + "older_adult" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 72, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D3-1F3FB", + "non_qualified": null, + "image": "1f9d3-1f3fb.png", + "sheet_x": 48, + "sheet_y": 23, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9D3-1F3FC", + "non_qualified": null, + "image": "1f9d3-1f3fc.png", + "sheet_x": 48, + "sheet_y": 24, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9D3-1F3FD", + "non_qualified": null, + "image": "1f9d3-1f3fd.png", + "sheet_x": 48, + "sheet_y": 25, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9D3-1F3FE", + "non_qualified": null, + "image": "1f9d3-1f3fe.png", + "sheet_x": 48, + "sheet_y": 26, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9D3-1F3FF", + "non_qualified": null, + "image": "1f9d3-1f3ff.png", + "sheet_x": 48, + "sheet_y": 27, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "BEARDED PERSON", + "unified": "1F9D4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d4.png", + "sheet_x": 48, + "sheet_y": 28, + "short_name": "bearded_person", + "short_names": [ + "bearded_person" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 56, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D4-1F3FB", + "non_qualified": null, + "image": "1f9d4-1f3fb.png", + "sheet_x": 48, + "sheet_y": 29, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9D4-1F3FC", + "non_qualified": null, + "image": "1f9d4-1f3fc.png", + "sheet_x": 48, + "sheet_y": 30, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9D4-1F3FD", + "non_qualified": null, + "image": "1f9d4-1f3fd.png", + "sheet_x": 48, + "sheet_y": 31, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9D4-1F3FE", + "non_qualified": null, + "image": "1f9d4-1f3fe.png", + "sheet_x": 48, + "sheet_y": 32, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9D4-1F3FF", + "non_qualified": null, + "image": "1f9d4-1f3ff.png", + "sheet_x": 48, + "sheet_y": 33, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "PERSON WITH HEADSCARF", + "unified": "1F9D5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d5.png", + "sheet_x": 48, + "sheet_y": 34, + "short_name": "person_with_headscarf", + "short_names": [ + "person_with_headscarf" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 171, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D5-1F3FB", + "non_qualified": null, + "image": "1f9d5-1f3fb.png", + "sheet_x": 48, + "sheet_y": 35, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9D5-1F3FC", + "non_qualified": null, + "image": "1f9d5-1f3fc.png", + "sheet_x": 48, + "sheet_y": 36, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9D5-1F3FD", + "non_qualified": null, + "image": "1f9d5-1f3fd.png", + "sheet_x": 48, + "sheet_y": 37, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9D5-1F3FE", + "non_qualified": null, + "image": "1f9d5-1f3fe.png", + "sheet_x": 48, + "sheet_y": 38, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9D5-1F3FF", + "non_qualified": null, + "image": "1f9d5-1f3ff.png", + "sheet_x": 48, + "sheet_y": 39, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9D6-200D-2640-FE0F", + "non_qualified": "1F9D6-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d6-200d-2640-fe0f.png", + "sheet_x": 48, + "sheet_y": 40, + "short_name": "woman_in_steamy_room", + "short_names": [ + "woman_in_steamy_room" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 241, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D6-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9D6-1F3FB-200D-2640", + "image": "1f9d6-1f3fb-200d-2640-fe0f.png", + "sheet_x": 48, + "sheet_y": 41, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9D6-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9D6-1F3FC-200D-2640", + "image": "1f9d6-1f3fc-200d-2640-fe0f.png", + "sheet_x": 48, + "sheet_y": 42, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9D6-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9D6-1F3FD-200D-2640", + "image": "1f9d6-1f3fd-200d-2640-fe0f.png", + "sheet_x": 48, + "sheet_y": 43, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9D6-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9D6-1F3FE-200D-2640", + "image": "1f9d6-1f3fe-200d-2640-fe0f.png", + "sheet_x": 48, + "sheet_y": 44, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9D6-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9D6-1F3FF-200D-2640", + "image": "1f9d6-1f3ff-200d-2640-fe0f.png", + "sheet_x": 48, + "sheet_y": 45, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9D6-200D-2642-FE0F", + "non_qualified": "1F9D6-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d6-200d-2642-fe0f.png", + "sheet_x": 48, + "sheet_y": 46, + "short_name": "man_in_steamy_room", + "short_names": [ + "man_in_steamy_room" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 240, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D6-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9D6-1F3FB-200D-2642", + "image": "1f9d6-1f3fb-200d-2642-fe0f.png", + "sheet_x": 48, + "sheet_y": 47, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D6-1F3FB" + }, + "1F3FC": { + "unified": "1F9D6-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9D6-1F3FC-200D-2642", + "image": "1f9d6-1f3fc-200d-2642-fe0f.png", + "sheet_x": 48, + "sheet_y": 48, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D6-1F3FC" + }, + "1F3FD": { + "unified": "1F9D6-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9D6-1F3FD-200D-2642", + "image": "1f9d6-1f3fd-200d-2642-fe0f.png", + "sheet_x": 48, + "sheet_y": 49, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D6-1F3FD" + }, + "1F3FE": { + "unified": "1F9D6-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9D6-1F3FE-200D-2642", + "image": "1f9d6-1f3fe-200d-2642-fe0f.png", + "sheet_x": 48, + "sheet_y": 50, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D6-1F3FE" + }, + "1F3FF": { + "unified": "1F9D6-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9D6-1F3FF-200D-2642", + "image": "1f9d6-1f3ff-200d-2642-fe0f.png", + "sheet_x": 48, + "sheet_y": 51, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D6-1F3FF" + } + }, + "obsoletes": "1F9D6" + }, + { + "name": "PERSON IN STEAMY ROOM", + "unified": "1F9D6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d6.png", + "sheet_x": 48, + "sheet_y": 52, + "short_name": "person_in_steamy_room", + "short_names": [ + "person_in_steamy_room" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 239, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D6-1F3FB", + "non_qualified": null, + "image": "1f9d6-1f3fb.png", + "sheet_x": 48, + "sheet_y": 53, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D6-1F3FB-200D-2642-FE0F" + }, + "1F3FC": { + "unified": "1F9D6-1F3FC", + "non_qualified": null, + "image": "1f9d6-1f3fc.png", + "sheet_x": 48, + "sheet_y": 54, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D6-1F3FC-200D-2642-FE0F" + }, + "1F3FD": { + "unified": "1F9D6-1F3FD", + "non_qualified": null, + "image": "1f9d6-1f3fd.png", + "sheet_x": 48, + "sheet_y": 55, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D6-1F3FD-200D-2642-FE0F" + }, + "1F3FE": { + "unified": "1F9D6-1F3FE", + "non_qualified": null, + "image": "1f9d6-1f3fe.png", + "sheet_x": 48, + "sheet_y": 56, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D6-1F3FE-200D-2642-FE0F" + }, + "1F3FF": { + "unified": "1F9D6-1F3FF", + "non_qualified": null, + "image": "1f9d6-1f3ff.png", + "sheet_x": 49, + "sheet_y": 0, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D6-1F3FF-200D-2642-FE0F" + } + }, + "obsoleted_by": "1F9D6-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F9D7-200D-2640-FE0F", + "non_qualified": "1F9D7-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d7-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 1, + "short_name": "woman_climbing", + "short_names": [ + "woman_climbing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 244, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D7-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9D7-1F3FB-200D-2640", + "image": "1f9d7-1f3fb-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 2, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D7-1F3FB" + }, + "1F3FC": { + "unified": "1F9D7-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9D7-1F3FC-200D-2640", + "image": "1f9d7-1f3fc-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 3, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D7-1F3FC" + }, + "1F3FD": { + "unified": "1F9D7-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9D7-1F3FD-200D-2640", + "image": "1f9d7-1f3fd-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 4, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D7-1F3FD" + }, + "1F3FE": { + "unified": "1F9D7-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9D7-1F3FE-200D-2640", + "image": "1f9d7-1f3fe-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 5, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D7-1F3FE" + }, + "1F3FF": { + "unified": "1F9D7-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9D7-1F3FF-200D-2640", + "image": "1f9d7-1f3ff-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 6, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D7-1F3FF" + } + }, + "obsoletes": "1F9D7" + }, + { + "name": null, + "unified": "1F9D7-200D-2642-FE0F", + "non_qualified": "1F9D7-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d7-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 7, + "short_name": "man_climbing", + "short_names": [ + "man_climbing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 243, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D7-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9D7-1F3FB-200D-2642", + "image": "1f9d7-1f3fb-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 8, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9D7-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9D7-1F3FC-200D-2642", + "image": "1f9d7-1f3fc-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 9, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9D7-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9D7-1F3FD-200D-2642", + "image": "1f9d7-1f3fd-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 10, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9D7-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9D7-1F3FE-200D-2642", + "image": "1f9d7-1f3fe-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 11, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9D7-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9D7-1F3FF-200D-2642", + "image": "1f9d7-1f3ff-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 12, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "PERSON CLIMBING", + "unified": "1F9D7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d7.png", + "sheet_x": 49, + "sheet_y": 13, + "short_name": "person_climbing", + "short_names": [ + "person_climbing" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 242, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D7-1F3FB", + "non_qualified": null, + "image": "1f9d7-1f3fb.png", + "sheet_x": 49, + "sheet_y": 14, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D7-1F3FB-200D-2640-FE0F" + }, + "1F3FC": { + "unified": "1F9D7-1F3FC", + "non_qualified": null, + "image": "1f9d7-1f3fc.png", + "sheet_x": 49, + "sheet_y": 15, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D7-1F3FC-200D-2640-FE0F" + }, + "1F3FD": { + "unified": "1F9D7-1F3FD", + "non_qualified": null, + "image": "1f9d7-1f3fd.png", + "sheet_x": 49, + "sheet_y": 16, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D7-1F3FD-200D-2640-FE0F" + }, + "1F3FE": { + "unified": "1F9D7-1F3FE", + "non_qualified": null, + "image": "1f9d7-1f3fe.png", + "sheet_x": 49, + "sheet_y": 17, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D7-1F3FE-200D-2640-FE0F" + }, + "1F3FF": { + "unified": "1F9D7-1F3FF", + "non_qualified": null, + "image": "1f9d7-1f3ff.png", + "sheet_x": 49, + "sheet_y": 18, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D7-1F3FF-200D-2640-FE0F" + } + }, + "obsoleted_by": "1F9D7-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F9D8-200D-2640-FE0F", + "non_qualified": "1F9D8-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d8-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 19, + "short_name": "woman_in_lotus_position", + "short_names": [ + "woman_in_lotus_position" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 290, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D8-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9D8-1F3FB-200D-2640", + "image": "1f9d8-1f3fb-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 20, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D8-1F3FB" + }, + "1F3FC": { + "unified": "1F9D8-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9D8-1F3FC-200D-2640", + "image": "1f9d8-1f3fc-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 21, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D8-1F3FC" + }, + "1F3FD": { + "unified": "1F9D8-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9D8-1F3FD-200D-2640", + "image": "1f9d8-1f3fd-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 22, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D8-1F3FD" + }, + "1F3FE": { + "unified": "1F9D8-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9D8-1F3FE-200D-2640", + "image": "1f9d8-1f3fe-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 23, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D8-1F3FE" + }, + "1F3FF": { + "unified": "1F9D8-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9D8-1F3FF-200D-2640", + "image": "1f9d8-1f3ff-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 24, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D8-1F3FF" + } + }, + "obsoletes": "1F9D8" + }, + { + "name": null, + "unified": "1F9D8-200D-2642-FE0F", + "non_qualified": "1F9D8-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d8-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 25, + "short_name": "man_in_lotus_position", + "short_names": [ + "man_in_lotus_position" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 289, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D8-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9D8-1F3FB-200D-2642", + "image": "1f9d8-1f3fb-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 26, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9D8-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9D8-1F3FC-200D-2642", + "image": "1f9d8-1f3fc-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 27, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9D8-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9D8-1F3FD-200D-2642", + "image": "1f9d8-1f3fd-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 28, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9D8-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9D8-1F3FE-200D-2642", + "image": "1f9d8-1f3fe-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 29, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9D8-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9D8-1F3FF-200D-2642", + "image": "1f9d8-1f3ff-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 30, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "PERSON IN LOTUS POSITION", + "unified": "1F9D8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d8.png", + "sheet_x": 49, + "sheet_y": 31, + "short_name": "person_in_lotus_position", + "short_names": [ + "person_in_lotus_position" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 288, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D8-1F3FB", + "non_qualified": null, + "image": "1f9d8-1f3fb.png", + "sheet_x": 49, + "sheet_y": 32, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D8-1F3FB-200D-2640-FE0F" + }, + "1F3FC": { + "unified": "1F9D8-1F3FC", + "non_qualified": null, + "image": "1f9d8-1f3fc.png", + "sheet_x": 49, + "sheet_y": 33, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D8-1F3FC-200D-2640-FE0F" + }, + "1F3FD": { + "unified": "1F9D8-1F3FD", + "non_qualified": null, + "image": "1f9d8-1f3fd.png", + "sheet_x": 49, + "sheet_y": 34, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D8-1F3FD-200D-2640-FE0F" + }, + "1F3FE": { + "unified": "1F9D8-1F3FE", + "non_qualified": null, + "image": "1f9d8-1f3fe.png", + "sheet_x": 49, + "sheet_y": 35, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D8-1F3FE-200D-2640-FE0F" + }, + "1F3FF": { + "unified": "1F9D8-1F3FF", + "non_qualified": null, + "image": "1f9d8-1f3ff.png", + "sheet_x": 49, + "sheet_y": 36, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D8-1F3FF-200D-2640-FE0F" + } + }, + "obsoleted_by": "1F9D8-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F9D9-200D-2640-FE0F", + "non_qualified": "1F9D9-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d9-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 37, + "short_name": "female_mage", + "short_names": [ + "female_mage" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 187, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D9-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9D9-1F3FB-200D-2640", + "image": "1f9d9-1f3fb-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 38, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D9-1F3FB" + }, + "1F3FC": { + "unified": "1F9D9-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9D9-1F3FC-200D-2640", + "image": "1f9d9-1f3fc-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 39, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D9-1F3FC" + }, + "1F3FD": { + "unified": "1F9D9-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9D9-1F3FD-200D-2640", + "image": "1f9d9-1f3fd-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 40, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D9-1F3FD" + }, + "1F3FE": { + "unified": "1F9D9-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9D9-1F3FE-200D-2640", + "image": "1f9d9-1f3fe-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 41, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D9-1F3FE" + }, + "1F3FF": { + "unified": "1F9D9-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9D9-1F3FF-200D-2640", + "image": "1f9d9-1f3ff-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 42, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9D9-1F3FF" + } + }, + "obsoletes": "1F9D9" + }, + { + "name": null, + "unified": "1F9D9-200D-2642-FE0F", + "non_qualified": "1F9D9-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d9-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 43, + "short_name": "male_mage", + "short_names": [ + "male_mage" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 186, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D9-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9D9-1F3FB-200D-2642", + "image": "1f9d9-1f3fb-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 44, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9D9-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9D9-1F3FC-200D-2642", + "image": "1f9d9-1f3fc-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 45, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9D9-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9D9-1F3FD-200D-2642", + "image": "1f9d9-1f3fd-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 46, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9D9-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9D9-1F3FE-200D-2642", + "image": "1f9d9-1f3fe-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 47, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9D9-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9D9-1F3FF-200D-2642", + "image": "1f9d9-1f3ff-200d-2642-fe0f.png", + "sheet_x": 49, + "sheet_y": 48, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "MAGE", + "unified": "1F9D9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9d9.png", + "sheet_x": 49, + "sheet_y": 49, + "short_name": "mage", + "short_names": [ + "mage" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 185, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9D9-1F3FB", + "non_qualified": null, + "image": "1f9d9-1f3fb.png", + "sheet_x": 49, + "sheet_y": 50, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D9-1F3FB-200D-2640-FE0F" + }, + "1F3FC": { + "unified": "1F9D9-1F3FC", + "non_qualified": null, + "image": "1f9d9-1f3fc.png", + "sheet_x": 49, + "sheet_y": 51, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D9-1F3FC-200D-2640-FE0F" + }, + "1F3FD": { + "unified": "1F9D9-1F3FD", + "non_qualified": null, + "image": "1f9d9-1f3fd.png", + "sheet_x": 49, + "sheet_y": 52, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D9-1F3FD-200D-2640-FE0F" + }, + "1F3FE": { + "unified": "1F9D9-1F3FE", + "non_qualified": null, + "image": "1f9d9-1f3fe.png", + "sheet_x": 49, + "sheet_y": 53, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D9-1F3FE-200D-2640-FE0F" + }, + "1F3FF": { + "unified": "1F9D9-1F3FF", + "non_qualified": null, + "image": "1f9d9-1f3ff.png", + "sheet_x": 49, + "sheet_y": 54, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9D9-1F3FF-200D-2640-FE0F" + } + }, + "obsoleted_by": "1F9D9-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F9DA-200D-2640-FE0F", + "non_qualified": "1F9DA-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9da-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 55, + "short_name": "female_fairy", + "short_names": [ + "female_fairy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 190, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DA-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9DA-1F3FB-200D-2640", + "image": "1f9da-1f3fb-200d-2640-fe0f.png", + "sheet_x": 49, + "sheet_y": 56, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoletes": "1F9DA-1F3FB" + }, + "1F3FC": { + "unified": "1F9DA-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9DA-1F3FC-200D-2640", + "image": "1f9da-1f3fc-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 0, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoletes": "1F9DA-1F3FC" + }, + "1F3FD": { + "unified": "1F9DA-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9DA-1F3FD-200D-2640", + "image": "1f9da-1f3fd-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 1, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoletes": "1F9DA-1F3FD" + }, + "1F3FE": { + "unified": "1F9DA-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9DA-1F3FE-200D-2640", + "image": "1f9da-1f3fe-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 2, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoletes": "1F9DA-1F3FE" + }, + "1F3FF": { + "unified": "1F9DA-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9DA-1F3FF-200D-2640", + "image": "1f9da-1f3ff-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 3, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoletes": "1F9DA-1F3FF" + } + }, + "obsoletes": "1F9DA" + }, + { + "name": null, + "unified": "1F9DA-200D-2642-FE0F", + "non_qualified": "1F9DA-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9da-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 4, + "short_name": "male_fairy", + "short_names": [ + "male_fairy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 189, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DA-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9DA-1F3FB-200D-2642", + "image": "1f9da-1f3fb-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 5, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "1F9DA-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9DA-1F3FC-200D-2642", + "image": "1f9da-1f3fc-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 6, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "1F9DA-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9DA-1F3FD-200D-2642", + "image": "1f9da-1f3fd-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 7, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "1F9DA-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9DA-1F3FE-200D-2642", + "image": "1f9da-1f3fe-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 8, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "1F9DA-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9DA-1F3FF-200D-2642", + "image": "1f9da-1f3ff-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 9, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + } + }, + { + "name": "FAIRY", + "unified": "1F9DA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9da.png", + "sheet_x": 50, + "sheet_y": 10, + "short_name": "fairy", + "short_names": [ + "fairy" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 188, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DA-1F3FB", + "non_qualified": null, + "image": "1f9da-1f3fb.png", + "sheet_x": 50, + "sheet_y": 11, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoleted_by": "1F9DA-1F3FB-200D-2640-FE0F" + }, + "1F3FC": { + "unified": "1F9DA-1F3FC", + "non_qualified": null, + "image": "1f9da-1f3fc.png", + "sheet_x": 50, + "sheet_y": 12, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoleted_by": "1F9DA-1F3FC-200D-2640-FE0F" + }, + "1F3FD": { + "unified": "1F9DA-1F3FD", + "non_qualified": null, + "image": "1f9da-1f3fd.png", + "sheet_x": 50, + "sheet_y": 13, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoleted_by": "1F9DA-1F3FD-200D-2640-FE0F" + }, + "1F3FE": { + "unified": "1F9DA-1F3FE", + "non_qualified": null, + "image": "1f9da-1f3fe.png", + "sheet_x": 50, + "sheet_y": 14, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoleted_by": "1F9DA-1F3FE-200D-2640-FE0F" + }, + "1F3FF": { + "unified": "1F9DA-1F3FF", + "non_qualified": null, + "image": "1f9da-1f3ff.png", + "sheet_x": 50, + "sheet_y": 15, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "obsoleted_by": "1F9DA-1F3FF-200D-2640-FE0F" + } + }, + "obsoleted_by": "1F9DA-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F9DB-200D-2640-FE0F", + "non_qualified": "1F9DB-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9db-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 16, + "short_name": "female_vampire", + "short_names": [ + "female_vampire" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 193, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DB-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9DB-1F3FB-200D-2640", + "image": "1f9db-1f3fb-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 17, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DB-1F3FB" + }, + "1F3FC": { + "unified": "1F9DB-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9DB-1F3FC-200D-2640", + "image": "1f9db-1f3fc-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 18, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DB-1F3FC" + }, + "1F3FD": { + "unified": "1F9DB-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9DB-1F3FD-200D-2640", + "image": "1f9db-1f3fd-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 19, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DB-1F3FD" + }, + "1F3FE": { + "unified": "1F9DB-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9DB-1F3FE-200D-2640", + "image": "1f9db-1f3fe-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 20, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DB-1F3FE" + }, + "1F3FF": { + "unified": "1F9DB-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9DB-1F3FF-200D-2640", + "image": "1f9db-1f3ff-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 21, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DB-1F3FF" + } + }, + "obsoletes": "1F9DB" + }, + { + "name": null, + "unified": "1F9DB-200D-2642-FE0F", + "non_qualified": "1F9DB-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9db-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 22, + "short_name": "male_vampire", + "short_names": [ + "male_vampire" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 192, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DB-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9DB-1F3FB-200D-2642", + "image": "1f9db-1f3fb-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 23, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9DB-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9DB-1F3FC-200D-2642", + "image": "1f9db-1f3fc-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 24, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9DB-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9DB-1F3FD-200D-2642", + "image": "1f9db-1f3fd-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 25, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9DB-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9DB-1F3FE-200D-2642", + "image": "1f9db-1f3fe-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 26, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9DB-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9DB-1F3FF-200D-2642", + "image": "1f9db-1f3ff-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 27, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "VAMPIRE", + "unified": "1F9DB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9db.png", + "sheet_x": 50, + "sheet_y": 28, + "short_name": "vampire", + "short_names": [ + "vampire" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 191, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DB-1F3FB", + "non_qualified": null, + "image": "1f9db-1f3fb.png", + "sheet_x": 50, + "sheet_y": 29, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DB-1F3FB-200D-2640-FE0F" + }, + "1F3FC": { + "unified": "1F9DB-1F3FC", + "non_qualified": null, + "image": "1f9db-1f3fc.png", + "sheet_x": 50, + "sheet_y": 30, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DB-1F3FC-200D-2640-FE0F" + }, + "1F3FD": { + "unified": "1F9DB-1F3FD", + "non_qualified": null, + "image": "1f9db-1f3fd.png", + "sheet_x": 50, + "sheet_y": 31, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DB-1F3FD-200D-2640-FE0F" + }, + "1F3FE": { + "unified": "1F9DB-1F3FE", + "non_qualified": null, + "image": "1f9db-1f3fe.png", + "sheet_x": 50, + "sheet_y": 32, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DB-1F3FE-200D-2640-FE0F" + }, + "1F3FF": { + "unified": "1F9DB-1F3FF", + "non_qualified": null, + "image": "1f9db-1f3ff.png", + "sheet_x": 50, + "sheet_y": 33, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DB-1F3FF-200D-2640-FE0F" + } + }, + "obsoleted_by": "1F9DB-200D-2640-FE0F" + }, + { + "name": null, + "unified": "1F9DC-200D-2640-FE0F", + "non_qualified": "1F9DC-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9dc-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 34, + "short_name": "mermaid", + "short_names": [ + "mermaid" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 196, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DC-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9DC-1F3FB-200D-2640", + "image": "1f9dc-1f3fb-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 35, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9DC-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9DC-1F3FC-200D-2640", + "image": "1f9dc-1f3fc-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 36, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9DC-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9DC-1F3FD-200D-2640", + "image": "1f9dc-1f3fd-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 37, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9DC-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9DC-1F3FE-200D-2640", + "image": "1f9dc-1f3fe-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 38, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9DC-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9DC-1F3FF-200D-2640", + "image": "1f9dc-1f3ff-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 39, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9DC-200D-2642-FE0F", + "non_qualified": "1F9DC-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9dc-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 40, + "short_name": "merman", + "short_names": [ + "merman" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 195, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DC-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9DC-1F3FB-200D-2642", + "image": "1f9dc-1f3fb-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 41, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DC-1F3FB" + }, + "1F3FC": { + "unified": "1F9DC-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9DC-1F3FC-200D-2642", + "image": "1f9dc-1f3fc-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 42, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DC-1F3FC" + }, + "1F3FD": { + "unified": "1F9DC-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9DC-1F3FD-200D-2642", + "image": "1f9dc-1f3fd-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 43, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DC-1F3FD" + }, + "1F3FE": { + "unified": "1F9DC-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9DC-1F3FE-200D-2642", + "image": "1f9dc-1f3fe-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 44, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DC-1F3FE" + }, + "1F3FF": { + "unified": "1F9DC-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9DC-1F3FF-200D-2642", + "image": "1f9dc-1f3ff-200d-2642-fe0f.png", + "sheet_x": 50, + "sheet_y": 45, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DC-1F3FF" + } + }, + "obsoletes": "1F9DC" + }, + { + "name": "MERPERSON", + "unified": "1F9DC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9dc.png", + "sheet_x": 50, + "sheet_y": 46, + "short_name": "merperson", + "short_names": [ + "merperson" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 194, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DC-1F3FB", + "non_qualified": null, + "image": "1f9dc-1f3fb.png", + "sheet_x": 50, + "sheet_y": 47, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DC-1F3FB-200D-2642-FE0F" + }, + "1F3FC": { + "unified": "1F9DC-1F3FC", + "non_qualified": null, + "image": "1f9dc-1f3fc.png", + "sheet_x": 50, + "sheet_y": 48, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DC-1F3FC-200D-2642-FE0F" + }, + "1F3FD": { + "unified": "1F9DC-1F3FD", + "non_qualified": null, + "image": "1f9dc-1f3fd.png", + "sheet_x": 50, + "sheet_y": 49, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DC-1F3FD-200D-2642-FE0F" + }, + "1F3FE": { + "unified": "1F9DC-1F3FE", + "non_qualified": null, + "image": "1f9dc-1f3fe.png", + "sheet_x": 50, + "sheet_y": 50, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DC-1F3FE-200D-2642-FE0F" + }, + "1F3FF": { + "unified": "1F9DC-1F3FF", + "non_qualified": null, + "image": "1f9dc-1f3ff.png", + "sheet_x": 50, + "sheet_y": 51, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DC-1F3FF-200D-2642-FE0F" + } + }, + "obsoleted_by": "1F9DC-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F9DD-200D-2640-FE0F", + "non_qualified": "1F9DD-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9dd-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 52, + "short_name": "female_elf", + "short_names": [ + "female_elf" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 199, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DD-1F3FB-200D-2640-FE0F", + "non_qualified": "1F9DD-1F3FB-200D-2640", + "image": "1f9dd-1f3fb-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 53, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "1F9DD-1F3FC-200D-2640-FE0F", + "non_qualified": "1F9DD-1F3FC-200D-2640", + "image": "1f9dd-1f3fc-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 54, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "1F9DD-1F3FD-200D-2640-FE0F", + "non_qualified": "1F9DD-1F3FD-200D-2640", + "image": "1f9dd-1f3fd-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 55, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "1F9DD-1F3FE-200D-2640-FE0F", + "non_qualified": "1F9DD-1F3FE-200D-2640", + "image": "1f9dd-1f3fe-200d-2640-fe0f.png", + "sheet_x": 50, + "sheet_y": 56, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "1F9DD-1F3FF-200D-2640-FE0F", + "non_qualified": "1F9DD-1F3FF-200D-2640", + "image": "1f9dd-1f3ff-200d-2640-fe0f.png", + "sheet_x": 51, + "sheet_y": 0, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "1F9DD-200D-2642-FE0F", + "non_qualified": "1F9DD-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9dd-200d-2642-fe0f.png", + "sheet_x": 51, + "sheet_y": 1, + "short_name": "male_elf", + "short_names": [ + "male_elf" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 198, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DD-1F3FB-200D-2642-FE0F", + "non_qualified": "1F9DD-1F3FB-200D-2642", + "image": "1f9dd-1f3fb-200d-2642-fe0f.png", + "sheet_x": 51, + "sheet_y": 2, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DD-1F3FB" + }, + "1F3FC": { + "unified": "1F9DD-1F3FC-200D-2642-FE0F", + "non_qualified": "1F9DD-1F3FC-200D-2642", + "image": "1f9dd-1f3fc-200d-2642-fe0f.png", + "sheet_x": 51, + "sheet_y": 3, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DD-1F3FC" + }, + "1F3FD": { + "unified": "1F9DD-1F3FD-200D-2642-FE0F", + "non_qualified": "1F9DD-1F3FD-200D-2642", + "image": "1f9dd-1f3fd-200d-2642-fe0f.png", + "sheet_x": 51, + "sheet_y": 4, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DD-1F3FD" + }, + "1F3FE": { + "unified": "1F9DD-1F3FE-200D-2642-FE0F", + "non_qualified": "1F9DD-1F3FE-200D-2642", + "image": "1f9dd-1f3fe-200d-2642-fe0f.png", + "sheet_x": 51, + "sheet_y": 5, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DD-1F3FE" + }, + "1F3FF": { + "unified": "1F9DD-1F3FF-200D-2642-FE0F", + "non_qualified": "1F9DD-1F3FF-200D-2642", + "image": "1f9dd-1f3ff-200d-2642-fe0f.png", + "sheet_x": 51, + "sheet_y": 6, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DD-1F3FF" + } + }, + "obsoletes": "1F9DD" + }, + { + "name": "ELF", + "unified": "1F9DD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9dd.png", + "sheet_x": 51, + "sheet_y": 7, + "short_name": "elf", + "short_names": [ + "elf" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 197, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "1F9DD-1F3FB", + "non_qualified": null, + "image": "1f9dd-1f3fb.png", + "sheet_x": 51, + "sheet_y": 8, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DD-1F3FB-200D-2642-FE0F" + }, + "1F3FC": { + "unified": "1F9DD-1F3FC", + "non_qualified": null, + "image": "1f9dd-1f3fc.png", + "sheet_x": 51, + "sheet_y": 9, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DD-1F3FC-200D-2642-FE0F" + }, + "1F3FD": { + "unified": "1F9DD-1F3FD", + "non_qualified": null, + "image": "1f9dd-1f3fd.png", + "sheet_x": 51, + "sheet_y": 10, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DD-1F3FD-200D-2642-FE0F" + }, + "1F3FE": { + "unified": "1F9DD-1F3FE", + "non_qualified": null, + "image": "1f9dd-1f3fe.png", + "sheet_x": 51, + "sheet_y": 11, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DD-1F3FE-200D-2642-FE0F" + }, + "1F3FF": { + "unified": "1F9DD-1F3FF", + "non_qualified": null, + "image": "1f9dd-1f3ff.png", + "sheet_x": 51, + "sheet_y": 12, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DD-1F3FF-200D-2642-FE0F" + } + }, + "obsoleted_by": "1F9DD-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F9DE-200D-2640-FE0F", + "non_qualified": "1F9DE-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9de-200d-2640-fe0f.png", + "sheet_x": 51, + "sheet_y": 13, + "short_name": "female_genie", + "short_names": [ + "female_genie" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 202, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F9DE-200D-2642-FE0F", + "non_qualified": "1F9DE-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9de-200d-2642-fe0f.png", + "sheet_x": 51, + "sheet_y": 14, + "short_name": "male_genie", + "short_names": [ + "male_genie" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 201, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DE" + }, + { + "name": "GENIE", + "unified": "1F9DE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9de.png", + "sheet_x": 51, + "sheet_y": 15, + "short_name": "genie", + "short_names": [ + "genie" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 200, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DE-200D-2642-FE0F" + }, + { + "name": null, + "unified": "1F9DF-200D-2640-FE0F", + "non_qualified": "1F9DF-200D-2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9df-200d-2640-fe0f.png", + "sheet_x": 51, + "sheet_y": 16, + "short_name": "female_zombie", + "short_names": [ + "female_zombie" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 205, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "1F9DF-200D-2642-FE0F", + "non_qualified": "1F9DF-200D-2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9df-200d-2642-fe0f.png", + "sheet_x": 51, + "sheet_y": 17, + "short_name": "male_zombie", + "short_names": [ + "male_zombie" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 204, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoletes": "1F9DF" + }, + { + "name": "ZOMBIE", + "unified": "1F9DF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9df.png", + "sheet_x": 51, + "sheet_y": 18, + "short_name": "zombie", + "short_names": [ + "zombie" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 203, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "obsoleted_by": "1F9DF-200D-2642-FE0F" + }, + { + "name": "BRAIN", + "unified": "1F9E0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e0.png", + "sheet_x": 51, + "sheet_y": 19, + "short_name": "brain", + "short_names": [ + "brain" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 42, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ORANGE HEART", + "unified": "1F9E1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e1.png", + "sheet_x": 51, + "sheet_y": 20, + "short_name": "orange_heart", + "short_names": [ + "orange_heart" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 128, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BILLED CAP", + "unified": "1F9E2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e2.png", + "sheet_x": 51, + "sheet_y": 21, + "short_name": "billed_cap", + "short_names": [ + "billed_cap" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 38, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SCARF", + "unified": "1F9E3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e3.png", + "sheet_x": 51, + "sheet_y": 22, + "short_name": "scarf", + "short_names": [ + "scarf" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 9, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GLOVES", + "unified": "1F9E4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e4.png", + "sheet_x": 51, + "sheet_y": 23, + "short_name": "gloves", + "short_names": [ + "gloves" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 10, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COAT", + "unified": "1F9E5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e5.png", + "sheet_x": 51, + "sheet_y": 24, + "short_name": "coat", + "short_names": [ + "coat" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 11, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SOCKS", + "unified": "1F9E6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e6.png", + "sheet_x": 51, + "sheet_y": 25, + "short_name": "socks", + "short_names": [ + "socks" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 12, + "added_in": "5.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RED GIFT ENVELOPE", + "unified": "1F9E7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e7.png", + "sheet_x": 51, + "sheet_y": 26, + "short_name": "red_envelope", + "short_names": [ + "red_envelope" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 16, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FIRECRACKER", + "unified": "1F9E8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e8.png", + "sheet_x": 51, + "sheet_y": 27, + "short_name": "firecracker", + "short_names": [ + "firecracker" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 5, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "JIGSAW PUZZLE PIECE", + "unified": "1F9E9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9e9.png", + "sheet_x": 51, + "sheet_y": 28, + "short_name": "jigsaw", + "short_names": [ + "jigsaw" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 65, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TEST TUBE", + "unified": "1F9EA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ea.png", + "sheet_x": 51, + "sheet_y": 29, + "short_name": "test_tube", + "short_names": [ + "test_tube" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 202, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PETRI DISH", + "unified": "1F9EB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9eb.png", + "sheet_x": 51, + "sheet_y": 30, + "short_name": "petri_dish", + "short_names": [ + "petri_dish" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 203, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DNA DOUBLE HELIX", + "unified": "1F9EC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ec.png", + "sheet_x": 51, + "sheet_y": 31, + "short_name": "dna", + "short_names": [ + "dna" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 204, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "COMPASS", + "unified": "1F9ED", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ed.png", + "sheet_x": 51, + "sheet_y": 32, + "short_name": "compass", + "short_names": [ + "compass" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 7, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ABACUS", + "unified": "1F9EE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ee.png", + "sheet_x": 51, + "sheet_y": 33, + "short_name": "abacus", + "short_names": [ + "abacus" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 87, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FIRE EXTINGUISHER", + "unified": "1F9EF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ef.png", + "sheet_x": 51, + "sheet_y": 34, + "short_name": "fire_extinguisher", + "short_names": [ + "fire_extinguisher" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 228, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TOOLBOX", + "unified": "1F9F0", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f0.png", + "sheet_x": 51, + "sheet_y": 35, + "short_name": "toolbox", + "short_names": [ + "toolbox" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 199, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BRICK", + "unified": "1F9F1", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f1.png", + "sheet_x": 51, + "sheet_y": 36, + "short_name": "bricks", + "short_names": [ + "bricks" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 20, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MAGNET", + "unified": "1F9F2", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f2.png", + "sheet_x": 51, + "sheet_y": 37, + "short_name": "magnet", + "short_names": [ + "magnet" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 200, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LUGGAGE", + "unified": "1F9F3", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f3.png", + "sheet_x": 51, + "sheet_y": 38, + "short_name": "luggage", + "short_names": [ + "luggage" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 132, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LOTION BOTTLE", + "unified": "1F9F4", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f4.png", + "sheet_x": 51, + "sheet_y": 39, + "short_name": "lotion_bottle", + "short_names": [ + "lotion_bottle" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 221, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPOOL OF THREAD", + "unified": "1F9F5", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f5.png", + "sheet_x": 51, + "sheet_y": 40, + "short_name": "thread", + "short_names": [ + "thread" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 78, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BALL OF YARN", + "unified": "1F9F6", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f6.png", + "sheet_x": 51, + "sheet_y": 41, + "short_name": "yarn", + "short_names": [ + "yarn" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 79, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SAFETY PIN", + "unified": "1F9F7", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f7.png", + "sheet_x": 51, + "sheet_y": 42, + "short_name": "safety_pin", + "short_names": [ + "safety_pin" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 222, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TEDDY BEAR", + "unified": "1F9F8", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f8.png", + "sheet_x": 51, + "sheet_y": 43, + "short_name": "teddy_bear", + "short_names": [ + "teddy_bear" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 66, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BROOM", + "unified": "1F9F9", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9f9.png", + "sheet_x": 51, + "sheet_y": 44, + "short_name": "broom", + "short_names": [ + "broom" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 223, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BASKET", + "unified": "1F9FA", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9fa.png", + "sheet_x": 51, + "sheet_y": 45, + "short_name": "basket", + "short_names": [ + "basket" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 224, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ROLL OF PAPER", + "unified": "1F9FB", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9fb.png", + "sheet_x": 51, + "sheet_y": 46, + "short_name": "roll_of_paper", + "short_names": [ + "roll_of_paper" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 225, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BAR OF SOAP", + "unified": "1F9FC", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9fc.png", + "sheet_x": 51, + "sheet_y": 47, + "short_name": "soap", + "short_names": [ + "soap" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 226, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPONGE", + "unified": "1F9FD", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9fd.png", + "sheet_x": 51, + "sheet_y": 48, + "short_name": "sponge", + "short_names": [ + "sponge" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 227, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RECEIPT", + "unified": "1F9FE", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9fe.png", + "sheet_x": 51, + "sheet_y": 49, + "short_name": "receipt", + "short_names": [ + "receipt" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 128, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NAZAR AMULET", + "unified": "1F9FF", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1f9ff.png", + "sheet_x": 51, + "sheet_y": 50, + "short_name": "nazar_amulet", + "short_names": [ + "nazar_amulet" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 60, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BALLET SHOES", + "unified": "1FA70", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa70.png", + "sheet_x": 51, + "sheet_y": 51, + "short_name": "ballet_shoes", + "short_names": [ + "ballet_shoes" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 32, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ONE-PIECE SWIMSUIT", + "unified": "1FA71", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa71.png", + "sheet_x": 51, + "sheet_y": 52, + "short_name": "one-piece_swimsuit", + "short_names": [ + "one-piece_swimsuit" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 16, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BRIEFS", + "unified": "1FA72", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa72.png", + "sheet_x": 51, + "sheet_y": 53, + "short_name": "briefs", + "short_names": [ + "briefs" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 17, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SHORTS", + "unified": "1FA73", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa73.png", + "sheet_x": 51, + "sheet_y": 54, + "short_name": "shorts", + "short_names": [ + "shorts" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 18, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DROP OF BLOOD", + "unified": "1FA78", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa78.png", + "sheet_x": 51, + "sheet_y": 55, + "short_name": "drop_of_blood", + "short_names": [ + "drop_of_blood" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 209, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ADHESIVE BANDAGE", + "unified": "1FA79", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa79.png", + "sheet_x": 51, + "sheet_y": 56, + "short_name": "adhesive_bandage", + "short_names": [ + "adhesive_bandage" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 211, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "STETHOSCOPE", + "unified": "1FA7A", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa7a.png", + "sheet_x": 52, + "sheet_y": 0, + "short_name": "stethoscope", + "short_names": [ + "stethoscope" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 212, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "YO-YO", + "unified": "1FA80", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa80.png", + "sheet_x": 52, + "sheet_y": 1, + "short_name": "yo-yo", + "short_names": [ + "yo-yo" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 56, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "KITE", + "unified": "1FA81", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa81.png", + "sheet_x": 52, + "sheet_y": 2, + "short_name": "kite", + "short_names": [ + "kite" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 57, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PARACHUTE", + "unified": "1FA82", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa82.png", + "sheet_x": 52, + "sheet_y": 3, + "short_name": "parachute", + "short_names": [ + "parachute" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 122, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RINGED PLANET", + "unified": "1FA90", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa90.png", + "sheet_x": 52, + "sheet_y": 4, + "short_name": "ringed_planet", + "short_names": [ + "ringed_planet" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 180, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHAIR", + "unified": "1FA91", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa91.png", + "sheet_x": 52, + "sheet_y": 5, + "short_name": "chair", + "short_names": [ + "chair" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 216, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RAZOR", + "unified": "1FA92", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa92.png", + "sheet_x": 52, + "sheet_y": 6, + "short_name": "razor", + "short_names": [ + "razor" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 220, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AXE", + "unified": "1FA93", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa93.png", + "sheet_x": 52, + "sheet_y": 7, + "short_name": "axe", + "short_names": [ + "axe" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 182, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DIYA LAMP", + "unified": "1FA94", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa94.png", + "sheet_x": 52, + "sheet_y": 8, + "short_name": "diya_lamp", + "short_names": [ + "diya_lamp" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 103, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BANJO", + "unified": "1FA95", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "1fa95.png", + "sheet_x": 52, + "sheet_y": 9, + "short_name": "banjo", + "short_names": [ + "banjo" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 67, + "added_in": "12.1", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOUBLE EXCLAMATION MARK", + "unified": "203C-FE0F", + "non_qualified": "203C", + "docomo": "E704", + "au": "EB30", + "softbank": null, + "google": "FEB06", + "image": "203c-fe0f.png", + "sheet_x": 52, + "sheet_y": 10, + "short_name": "bangbang", + "short_names": [ + "bangbang" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 122, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EXCLAMATION QUESTION MARK", + "unified": "2049-FE0F", + "non_qualified": "2049", + "docomo": "E703", + "au": "EB2F", + "softbank": null, + "google": "FEB05", + "image": "2049-fe0f.png", + "sheet_x": 52, + "sheet_y": 11, + "short_name": "interrobang", + "short_names": [ + "interrobang" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 123, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TRADE MARK SIGN", + "unified": "2122-FE0F", + "non_qualified": "2122", + "docomo": "E732", + "au": "E54E", + "softbank": "E537", + "google": "FEB2A", + "image": "2122-fe0f.png", + "sheet_x": 52, + "sheet_y": 12, + "short_name": "tm", + "short_names": [ + "tm" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 131, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "INFORMATION SOURCE", + "unified": "2139-FE0F", + "non_qualified": "2139", + "docomo": null, + "au": "E533", + "softbank": null, + "google": "FEB47", + "image": "2139-fe0f.png", + "sheet_x": 52, + "sheet_y": 13, + "short_name": "information_source", + "short_names": [ + "information_source" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 156, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEFT RIGHT ARROW", + "unified": "2194-FE0F", + "non_qualified": "2194", + "docomo": "E73C", + "au": "EB7A", + "softbank": null, + "google": "FEAF6", + "image": "2194-fe0f.png", + "sheet_x": 52, + "sheet_y": 14, + "short_name": "left_right_arrow", + "short_names": [ + "left_right_arrow" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "UP DOWN ARROW", + "unified": "2195-FE0F", + "non_qualified": "2195", + "docomo": "E73D", + "au": "EB7B", + "softbank": null, + "google": "FEAF7", + "image": "2195-fe0f.png", + "sheet_x": 52, + "sheet_y": 15, + "short_name": "arrow_up_down", + "short_names": [ + "arrow_up_down" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NORTH WEST ARROW", + "unified": "2196-FE0F", + "non_qualified": "2196", + "docomo": "E697", + "au": "E54C", + "softbank": "E237", + "google": "FEAF2", + "image": "2196-fe0f.png", + "sheet_x": 52, + "sheet_y": 16, + "short_name": "arrow_upper_left", + "short_names": [ + "arrow_upper_left" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NORTH EAST ARROW", + "unified": "2197-FE0F", + "non_qualified": "2197", + "docomo": "E678", + "au": "E555", + "softbank": "E236", + "google": "FEAF0", + "image": "2197-fe0f.png", + "sheet_x": 52, + "sheet_y": 17, + "short_name": "arrow_upper_right", + "short_names": [ + "arrow_upper_right" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SOUTH EAST ARROW", + "unified": "2198-FE0F", + "non_qualified": "2198", + "docomo": "E696", + "au": "E54D", + "softbank": "E238", + "google": "FEAF1", + "image": "2198-fe0f.png", + "sheet_x": 52, + "sheet_y": 18, + "short_name": "arrow_lower_right", + "short_names": [ + "arrow_lower_right" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 30, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SOUTH WEST ARROW", + "unified": "2199-FE0F", + "non_qualified": "2199", + "docomo": "E6A5", + "au": "E556", + "softbank": "E239", + "google": "FEAF3", + "image": "2199-fe0f.png", + "sheet_x": 52, + "sheet_y": 19, + "short_name": "arrow_lower_left", + "short_names": [ + "arrow_lower_left" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEFTWARDS ARROW WITH HOOK", + "unified": "21A9-FE0F", + "non_qualified": "21A9", + "docomo": "E6DA", + "au": "E55D", + "softbank": null, + "google": "FEB83", + "image": "21a9-fe0f.png", + "sheet_x": 52, + "sheet_y": 20, + "short_name": "leftwards_arrow_with_hook", + "short_names": [ + "leftwards_arrow_with_hook" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 37, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RIGHTWARDS ARROW WITH HOOK", + "unified": "21AA-FE0F", + "non_qualified": "21AA", + "docomo": null, + "au": "E55C", + "softbank": null, + "google": "FEB88", + "image": "21aa-fe0f.png", + "sheet_x": 52, + "sheet_y": 21, + "short_name": "arrow_right_hook", + "short_names": [ + "arrow_right_hook" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 38, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WATCH", + "unified": "231A", + "non_qualified": null, + "docomo": "E71F", + "au": "E57A", + "softbank": null, + "google": "FE01D", + "image": "231a.png", + "sheet_x": 52, + "sheet_y": 22, + "short_name": "watch", + "short_names": [ + "watch" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 135, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOURGLASS", + "unified": "231B", + "non_qualified": null, + "docomo": "E71C", + "au": "E57B", + "softbank": null, + "google": "FE01C", + "image": "231b.png", + "sheet_x": 52, + "sheet_y": 23, + "short_name": "hourglass", + "short_names": [ + "hourglass" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 133, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2328-FE0F", + "non_qualified": "2328", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2328-fe0f.png", + "sheet_x": 52, + "sheet_y": 24, + "short_name": "keyboard", + "short_names": [ + "keyboard" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 80, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "23CF-FE0F", + "non_qualified": "23CF", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "23cf-fe0f.png", + "sheet_x": 52, + "sheet_y": 25, + "short_name": "eject", + "short_names": [ + "eject" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 90, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK RIGHT-POINTING DOUBLE TRIANGLE", + "unified": "23E9", + "non_qualified": null, + "docomo": null, + "au": "E530", + "softbank": "E23C", + "google": "FEAFE", + "image": "23e9.png", + "sheet_x": 52, + "sheet_y": 26, + "short_name": "fast_forward", + "short_names": [ + "fast_forward" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 77, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK LEFT-POINTING DOUBLE TRIANGLE", + "unified": "23EA", + "non_qualified": null, + "docomo": null, + "au": "E52F", + "softbank": "E23D", + "google": "FEAFF", + "image": "23ea.png", + "sheet_x": 52, + "sheet_y": 27, + "short_name": "rewind", + "short_names": [ + "rewind" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 81, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK UP-POINTING DOUBLE TRIANGLE", + "unified": "23EB", + "non_qualified": null, + "docomo": null, + "au": "E545", + "softbank": null, + "google": "FEB03", + "image": "23eb.png", + "sheet_x": 52, + "sheet_y": 28, + "short_name": "arrow_double_up", + "short_names": [ + "arrow_double_up" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 84, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK DOWN-POINTING DOUBLE TRIANGLE", + "unified": "23EC", + "non_qualified": null, + "docomo": null, + "au": "E544", + "softbank": null, + "google": "FEB02", + "image": "23ec.png", + "sheet_x": 52, + "sheet_y": 29, + "short_name": "arrow_double_down", + "short_names": [ + "arrow_double_down" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 86, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "23ED-FE0F", + "non_qualified": "23ED", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "23ed-fe0f.png", + "sheet_x": 52, + "sheet_y": 30, + "short_name": "black_right_pointing_double_triangle_with_vertical_bar", + "short_names": [ + "black_right_pointing_double_triangle_with_vertical_bar" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 78, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "23EE-FE0F", + "non_qualified": "23EE", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "23ee-fe0f.png", + "sheet_x": 52, + "sheet_y": 31, + "short_name": "black_left_pointing_double_triangle_with_vertical_bar", + "short_names": [ + "black_left_pointing_double_triangle_with_vertical_bar" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 82, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "23EF-FE0F", + "non_qualified": "23EF", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "23ef-fe0f.png", + "sheet_x": 52, + "sheet_y": 32, + "short_name": "black_right_pointing_triangle_with_double_vertical_bar", + "short_names": [ + "black_right_pointing_triangle_with_double_vertical_bar" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 79, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ALARM CLOCK", + "unified": "23F0", + "non_qualified": null, + "docomo": "E6BA", + "au": "E594", + "softbank": null, + "google": "FE02A", + "image": "23f0.png", + "sheet_x": 52, + "sheet_y": 33, + "short_name": "alarm_clock", + "short_names": [ + "alarm_clock" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 136, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "23F1-FE0F", + "non_qualified": "23F1", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "23f1-fe0f.png", + "sheet_x": 52, + "sheet_y": 34, + "short_name": "stopwatch", + "short_names": [ + "stopwatch" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 137, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "23F2-FE0F", + "non_qualified": "23F2", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "23f2-fe0f.png", + "sheet_x": 52, + "sheet_y": 35, + "short_name": "timer_clock", + "short_names": [ + "timer_clock" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 138, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOURGLASS WITH FLOWING SAND", + "unified": "23F3", + "non_qualified": null, + "docomo": "E71C", + "au": "E47C", + "softbank": null, + "google": "FE01B", + "image": "23f3.png", + "sheet_x": 52, + "sheet_y": 36, + "short_name": "hourglass_flowing_sand", + "short_names": [ + "hourglass_flowing_sand" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 134, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "23F8-FE0F", + "non_qualified": "23F8", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "23f8-fe0f.png", + "sheet_x": 52, + "sheet_y": 37, + "short_name": "double_vertical_bar", + "short_names": [ + "double_vertical_bar" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 87, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "23F9-FE0F", + "non_qualified": "23F9", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "23f9-fe0f.png", + "sheet_x": 52, + "sheet_y": 38, + "short_name": "black_square_for_stop", + "short_names": [ + "black_square_for_stop" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 88, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "23FA-FE0F", + "non_qualified": "23FA", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "23fa-fe0f.png", + "sheet_x": 52, + "sheet_y": 39, + "short_name": "black_circle_for_record", + "short_names": [ + "black_circle_for_record" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 89, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CIRCLED LATIN CAPITAL LETTER M", + "unified": "24C2-FE0F", + "non_qualified": "24C2", + "docomo": "E65C", + "au": "E5BC", + "softbank": null, + "google": "FE7E1", + "image": "24c2-fe0f.png", + "sheet_x": 52, + "sheet_y": 40, + "short_name": "m", + "short_names": [ + "m" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 158, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK SMALL SQUARE", + "unified": "25AA-FE0F", + "non_qualified": "25AA", + "docomo": null, + "au": "E532", + "softbank": null, + "google": "FEB6E", + "image": "25aa-fe0f.png", + "sheet_x": 52, + "sheet_y": 41, + "short_name": "black_small_square", + "short_names": [ + "black_small_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 206, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE SMALL SQUARE", + "unified": "25AB-FE0F", + "non_qualified": "25AB", + "docomo": null, + "au": "E531", + "softbank": null, + "google": "FEB6D", + "image": "25ab-fe0f.png", + "sheet_x": 52, + "sheet_y": 42, + "short_name": "white_small_square", + "short_names": [ + "white_small_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 207, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK RIGHT-POINTING TRIANGLE", + "unified": "25B6-FE0F", + "non_qualified": "25B6", + "docomo": null, + "au": "E52E", + "softbank": "E23A", + "google": "FEAFC", + "image": "25b6-fe0f.png", + "sheet_x": 52, + "sheet_y": 43, + "short_name": "arrow_forward", + "short_names": [ + "arrow_forward" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 76, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK LEFT-POINTING TRIANGLE", + "unified": "25C0-FE0F", + "non_qualified": "25C0", + "docomo": null, + "au": "E52D", + "softbank": "E23B", + "google": "FEAFD", + "image": "25c0-fe0f.png", + "sheet_x": 52, + "sheet_y": 44, + "short_name": "arrow_backward", + "short_names": [ + "arrow_backward" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 80, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE MEDIUM SQUARE", + "unified": "25FB-FE0F", + "non_qualified": "25FB", + "docomo": null, + "au": "E538", + "softbank": null, + "google": "FEB71", + "image": "25fb-fe0f.png", + "sheet_x": 52, + "sheet_y": 45, + "short_name": "white_medium_square", + "short_names": [ + "white_medium_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 203, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK MEDIUM SQUARE", + "unified": "25FC-FE0F", + "non_qualified": "25FC", + "docomo": null, + "au": "E539", + "softbank": null, + "google": "FEB72", + "image": "25fc-fe0f.png", + "sheet_x": 52, + "sheet_y": 46, + "short_name": "black_medium_square", + "short_names": [ + "black_medium_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 202, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE MEDIUM SMALL SQUARE", + "unified": "25FD", + "non_qualified": null, + "docomo": null, + "au": "E534", + "softbank": null, + "google": "FEB6F", + "image": "25fd.png", + "sheet_x": 52, + "sheet_y": 47, + "short_name": "white_medium_small_square", + "short_names": [ + "white_medium_small_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 205, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK MEDIUM SMALL SQUARE", + "unified": "25FE", + "non_qualified": null, + "docomo": null, + "au": "E535", + "softbank": null, + "google": "FEB70", + "image": "25fe.png", + "sheet_x": 52, + "sheet_y": 48, + "short_name": "black_medium_small_square", + "short_names": [ + "black_medium_small_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 204, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK SUN WITH RAYS", + "unified": "2600-FE0F", + "non_qualified": "2600", + "docomo": "E63E", + "au": "E488", + "softbank": "E04A", + "google": "FE000", + "image": "2600-fe0f.png", + "sheet_x": 52, + "sheet_y": 49, + "short_name": "sunny", + "short_names": [ + "sunny" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 177, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CLOUD", + "unified": "2601-FE0F", + "non_qualified": "2601", + "docomo": "E63F", + "au": "E48D", + "softbank": "E049", + "google": "FE001", + "image": "2601-fe0f.png", + "sheet_x": 52, + "sheet_y": 50, + "short_name": "cloud", + "short_names": [ + "cloud" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 185, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2602-FE0F", + "non_qualified": "2602", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2602-fe0f.png", + "sheet_x": 52, + "sheet_y": 51, + "short_name": "umbrella", + "short_names": [ + "umbrella" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 200, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2603-FE0F", + "non_qualified": "2603", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2603-fe0f.png", + "sheet_x": 52, + "sheet_y": 52, + "short_name": "snowman", + "short_names": [ + "snowman" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 205, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2604-FE0F", + "non_qualified": "2604", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2604-fe0f.png", + "sheet_x": 52, + "sheet_y": 53, + "short_name": "comet", + "short_names": [ + "comet" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 207, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK TELEPHONE", + "unified": "260E-FE0F", + "non_qualified": "260E", + "docomo": "E687", + "au": "E596", + "softbank": "E009", + "google": "FE523", + "image": "260e-fe0f.png", + "sheet_x": 52, + "sheet_y": 54, + "short_name": "phone", + "short_names": [ + "phone", + "telephone" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 71, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BALLOT BOX WITH CHECK", + "unified": "2611-FE0F", + "non_qualified": "2611", + "docomo": null, + "au": "EB02", + "softbank": null, + "google": "FEB8B", + "image": "2611-fe0f.png", + "sheet_x": 52, + "sheet_y": 55, + "short_name": "ballot_box_with_check", + "short_names": [ + "ballot_box_with_check" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 108, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "UMBRELLA WITH RAIN DROPS", + "unified": "2614", + "non_qualified": null, + "docomo": "E640", + "au": "E48C", + "softbank": "E04B", + "google": "FE002", + "image": "2614.png", + "sheet_x": 52, + "sheet_y": 56, + "short_name": "umbrella_with_rain_drops", + "short_names": [ + "umbrella_with_rain_drops" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 201, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOT BEVERAGE", + "unified": "2615", + "non_qualified": null, + "docomo": "E670", + "au": "E597", + "softbank": "E045", + "google": "FE981", + "image": "2615.png", + "sheet_x": 53, + "sheet_y": 0, + "short_name": "coffee", + "short_names": [ + "coffee" + ], + "text": null, + "texts": null, + "category": "Food & Drink", + "sort_order": 101, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2618-FE0F", + "non_qualified": "2618", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2618-fe0f.png", + "sheet_x": 53, + "sheet_y": 1, + "short_name": "shamrock", + "short_names": [ + "shamrock" + ], + "text": null, + "texts": null, + "category": "Animals & Nature", + "sort_order": 123, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE UP POINTING INDEX", + "unified": "261D-FE0F", + "non_qualified": "261D", + "docomo": null, + "au": "E4F6", + "softbank": "E00F", + "google": "FEB98", + "image": "261d-fe0f.png", + "sheet_x": 53, + "sheet_y": 2, + "short_name": "point_up", + "short_names": [ + "point_up" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 18, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "261D-1F3FB", + "non_qualified": null, + "image": "261d-1f3fb.png", + "sheet_x": 53, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "261D-1F3FC", + "non_qualified": null, + "image": "261d-1f3fc.png", + "sheet_x": 53, + "sheet_y": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "261D-1F3FD", + "non_qualified": null, + "image": "261d-1f3fd.png", + "sheet_x": 53, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "261D-1F3FE", + "non_qualified": null, + "image": "261d-1f3fe.png", + "sheet_x": 53, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "261D-1F3FF", + "non_qualified": null, + "image": "261d-1f3ff.png", + "sheet_x": 53, + "sheet_y": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "2620-FE0F", + "non_qualified": "2620", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2620-fe0f.png", + "sheet_x": 53, + "sheet_y": 8, + "short_name": "skull_and_crossbones", + "short_names": [ + "skull_and_crossbones" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 94, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2622-FE0F", + "non_qualified": "2622", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2622-fe0f.png", + "sheet_x": 53, + "sheet_y": 9, + "short_name": "radioactive_sign", + "short_names": [ + "radioactive_sign" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 25, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2623-FE0F", + "non_qualified": "2623", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2623-fe0f.png", + "sheet_x": 53, + "sheet_y": 10, + "short_name": "biohazard_sign", + "short_names": [ + "biohazard_sign" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 26, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2626-FE0F", + "non_qualified": "2626", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2626-fe0f.png", + "sheet_x": 53, + "sheet_y": 11, + "short_name": "orthodox_cross", + "short_names": [ + "orthodox_cross" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 55, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "262A-FE0F", + "non_qualified": "262A", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "262a-fe0f.png", + "sheet_x": 53, + "sheet_y": 12, + "short_name": "star_and_crescent", + "short_names": [ + "star_and_crescent" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "262E-FE0F", + "non_qualified": "262E", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "262e-fe0f.png", + "sheet_x": 53, + "sheet_y": 13, + "short_name": "peace_symbol", + "short_names": [ + "peace_symbol" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 57, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "262F-FE0F", + "non_qualified": "262F", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "262f-fe0f.png", + "sheet_x": 53, + "sheet_y": 14, + "short_name": "yin_yang", + "short_names": [ + "yin_yang" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2638-FE0F", + "non_qualified": "2638", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2638-fe0f.png", + "sheet_x": 53, + "sheet_y": 15, + "short_name": "wheel_of_dharma", + "short_names": [ + "wheel_of_dharma" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2639-FE0F", + "non_qualified": "2639", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2639-fe0f.png", + "sheet_x": 53, + "sheet_y": 16, + "short_name": "white_frowning_face", + "short_names": [ + "white_frowning_face" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 66, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE SMILING FACE", + "unified": "263A-FE0F", + "non_qualified": "263A", + "docomo": "E6F0", + "au": "E4FB", + "softbank": "E414", + "google": "FE336", + "image": "263a-fe0f.png", + "sheet_x": 53, + "sheet_y": 17, + "short_name": "relaxed", + "short_names": [ + "relaxed" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 19, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2640-FE0F", + "non_qualified": "2640", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2640-fe0f.png", + "sheet_x": 53, + "sheet_y": 18, + "short_name": "female_sign", + "short_names": [ + "female_sign" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 97, + "added_in": "4.0", + "has_img_apple": false, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2642-FE0F", + "non_qualified": "2642", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2642-fe0f.png", + "sheet_x": 53, + "sheet_y": 19, + "short_name": "male_sign", + "short_names": [ + "male_sign" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 98, + "added_in": "4.0", + "has_img_apple": false, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ARIES", + "unified": "2648", + "non_qualified": null, + "docomo": "E646", + "au": "E48F", + "softbank": "E23F", + "google": "FE02B", + "image": "2648.png", + "sheet_x": 53, + "sheet_y": 20, + "short_name": "aries", + "short_names": [ + "aries" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 60, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "TAURUS", + "unified": "2649", + "non_qualified": null, + "docomo": "E647", + "au": "E490", + "softbank": "E240", + "google": "FE02C", + "image": "2649.png", + "sheet_x": 53, + "sheet_y": 21, + "short_name": "taurus", + "short_names": [ + "taurus" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 61, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "GEMINI", + "unified": "264A", + "non_qualified": null, + "docomo": "E648", + "au": "E491", + "softbank": "E241", + "google": "FE02D", + "image": "264a.png", + "sheet_x": 53, + "sheet_y": 22, + "short_name": "gemini", + "short_names": [ + "gemini" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 62, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CANCER", + "unified": "264B", + "non_qualified": null, + "docomo": "E649", + "au": "E492", + "softbank": "E242", + "google": "FE02E", + "image": "264b.png", + "sheet_x": 53, + "sheet_y": 23, + "short_name": "cancer", + "short_names": [ + "cancer" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 63, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEO", + "unified": "264C", + "non_qualified": null, + "docomo": "E64A", + "au": "E493", + "softbank": "E243", + "google": "FE02F", + "image": "264c.png", + "sheet_x": 53, + "sheet_y": 24, + "short_name": "leo", + "short_names": [ + "leo" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 64, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "VIRGO", + "unified": "264D", + "non_qualified": null, + "docomo": "E64B", + "au": "E494", + "softbank": "E244", + "google": "FE030", + "image": "264d.png", + "sheet_x": 53, + "sheet_y": 25, + "short_name": "virgo", + "short_names": [ + "virgo" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 65, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LIBRA", + "unified": "264E", + "non_qualified": null, + "docomo": "E64C", + "au": "E495", + "softbank": "E245", + "google": "FE031", + "image": "264e.png", + "sheet_x": 53, + "sheet_y": 26, + "short_name": "libra", + "short_names": [ + "libra" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 66, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SCORPIUS", + "unified": "264F", + "non_qualified": null, + "docomo": "E64D", + "au": "E496", + "softbank": "E246", + "google": "FE032", + "image": "264f.png", + "sheet_x": 53, + "sheet_y": 27, + "short_name": "scorpius", + "short_names": [ + "scorpius" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 67, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SAGITTARIUS", + "unified": "2650", + "non_qualified": null, + "docomo": "E64E", + "au": "E497", + "softbank": "E247", + "google": "FE033", + "image": "2650.png", + "sheet_x": 53, + "sheet_y": 28, + "short_name": "sagittarius", + "short_names": [ + "sagittarius" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 68, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CAPRICORN", + "unified": "2651", + "non_qualified": null, + "docomo": "E64F", + "au": "E498", + "softbank": "E248", + "google": "FE034", + "image": "2651.png", + "sheet_x": 53, + "sheet_y": 29, + "short_name": "capricorn", + "short_names": [ + "capricorn" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 69, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AQUARIUS", + "unified": "2652", + "non_qualified": null, + "docomo": "E650", + "au": "E499", + "softbank": "E249", + "google": "FE035", + "image": "2652.png", + "sheet_x": 53, + "sheet_y": 30, + "short_name": "aquarius", + "short_names": [ + "aquarius" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 70, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PISCES", + "unified": "2653", + "non_qualified": null, + "docomo": "E651", + "au": "E49A", + "softbank": "E24A", + "google": "FE036", + "image": "2653.png", + "sheet_x": 53, + "sheet_y": 31, + "short_name": "pisces", + "short_names": [ + "pisces" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 71, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "265F-FE0F", + "non_qualified": "265F", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "265f-fe0f.png", + "sheet_x": 53, + "sheet_y": 32, + "short_name": "chess_pawn", + "short_names": [ + "chess_pawn" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 71, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK SPADE SUIT", + "unified": "2660-FE0F", + "non_qualified": "2660", + "docomo": "E68E", + "au": "E5A1", + "softbank": "E20E", + "google": "FEB1B", + "image": "2660-fe0f.png", + "sheet_x": 53, + "sheet_y": 33, + "short_name": "spades", + "short_names": [ + "spades" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 67, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK CLUB SUIT", + "unified": "2663-FE0F", + "non_qualified": "2663", + "docomo": "E690", + "au": "E5A3", + "softbank": "E20F", + "google": "FEB1D", + "image": "2663-fe0f.png", + "sheet_x": 53, + "sheet_y": 34, + "short_name": "clubs", + "short_names": [ + "clubs" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 70, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK HEART SUIT", + "unified": "2665-FE0F", + "non_qualified": "2665", + "docomo": "E68D", + "au": "EAA5", + "softbank": "E20C", + "google": "FEB1A", + "image": "2665-fe0f.png", + "sheet_x": 53, + "sheet_y": 35, + "short_name": "hearts", + "short_names": [ + "hearts" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 68, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK DIAMOND SUIT", + "unified": "2666-FE0F", + "non_qualified": "2666", + "docomo": "E68F", + "au": "E5A2", + "softbank": "E20D", + "google": "FEB1C", + "image": "2666-fe0f.png", + "sheet_x": 53, + "sheet_y": 36, + "short_name": "diamonds", + "short_names": [ + "diamonds" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 69, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HOT SPRINGS", + "unified": "2668-FE0F", + "non_qualified": "2668", + "docomo": "E6F7", + "au": "E4BC", + "softbank": "E123", + "google": "FE7FA", + "image": "2668-fe0f.png", + "sheet_x": 53, + "sheet_y": 37, + "short_name": "hotsprings", + "short_names": [ + "hotsprings" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 57, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK UNIVERSAL RECYCLING SYMBOL", + "unified": "267B-FE0F", + "non_qualified": "267B", + "docomo": "E735", + "au": "EB79", + "softbank": null, + "google": "FEB2C", + "image": "267b-fe0f.png", + "sheet_x": 53, + "sheet_y": 38, + "short_name": "recycle", + "short_names": [ + "recycle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 101, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "267E-FE0F", + "non_qualified": "267E", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "267e-fe0f.png", + "sheet_x": 53, + "sheet_y": 39, + "short_name": "infinity", + "short_names": [ + "infinity" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 100, + "added_in": "11.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHEELCHAIR SYMBOL", + "unified": "267F", + "non_qualified": null, + "docomo": "E69B", + "au": "E47F", + "softbank": "E20A", + "google": "FEB20", + "image": "267f.png", + "sheet_x": 53, + "sheet_y": 40, + "short_name": "wheelchair", + "short_names": [ + "wheelchair" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2692-FE0F", + "non_qualified": "2692", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2692-fe0f.png", + "sheet_x": 53, + "sheet_y": 41, + "short_name": "hammer_and_pick", + "short_names": [ + "hammer_and_pick" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 184, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ANCHOR", + "unified": "2693", + "non_qualified": null, + "docomo": "E661", + "au": "E4A9", + "softbank": null, + "google": "FE4C1", + "image": "2693.png", + "sheet_x": 53, + "sheet_y": 42, + "short_name": "anchor", + "short_names": [ + "anchor" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 110, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2694-FE0F", + "non_qualified": "2694", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2694-fe0f.png", + "sheet_x": 53, + "sheet_y": 43, + "short_name": "crossed_swords", + "short_names": [ + "crossed_swords" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 187, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2695-FE0F", + "non_qualified": "2695", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2695-fe0f.png", + "sheet_x": 53, + "sheet_y": 44, + "short_name": "medical_symbol", + "short_names": [ + "medical_symbol", + "staff_of_aesculapius" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 99, + "added_in": "4.0", + "has_img_apple": false, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2696-FE0F", + "non_qualified": "2696", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2696-fe0f.png", + "sheet_x": 53, + "sheet_y": 45, + "short_name": "scales", + "short_names": [ + "scales" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 195, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2697-FE0F", + "non_qualified": "2697", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2697-fe0f.png", + "sheet_x": 53, + "sheet_y": 46, + "short_name": "alembic", + "short_names": [ + "alembic" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 201, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2699-FE0F", + "non_qualified": "2699", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2699-fe0f.png", + "sheet_x": 53, + "sheet_y": 47, + "short_name": "gear", + "short_names": [ + "gear" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 193, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "269B-FE0F", + "non_qualified": "269B", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "269b-fe0f.png", + "sheet_x": 53, + "sheet_y": 48, + "short_name": "atom_symbol", + "short_names": [ + "atom_symbol" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 49, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "269C-FE0F", + "non_qualified": "269C", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "269c-fe0f.png", + "sheet_x": 53, + "sheet_y": 49, + "short_name": "fleur_de_lis", + "short_names": [ + "fleur_de_lis" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 102, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WARNING SIGN", + "unified": "26A0-FE0F", + "non_qualified": "26A0", + "docomo": "E737", + "au": "E481", + "softbank": "E252", + "google": "FEB23", + "image": "26a0-fe0f.png", + "sheet_x": 53, + "sheet_y": 50, + "short_name": "warning", + "short_names": [ + "warning" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 14, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HIGH VOLTAGE SIGN", + "unified": "26A1", + "non_qualified": null, + "docomo": "E642", + "au": "E487", + "softbank": "E13D", + "google": "FE004", + "image": "26a1.png", + "sheet_x": 53, + "sheet_y": 51, + "short_name": "zap", + "short_names": [ + "zap" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 203, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MEDIUM WHITE CIRCLE", + "unified": "26AA", + "non_qualified": null, + "docomo": "E69C", + "au": "E53A", + "softbank": null, + "google": "FEB65", + "image": "26aa.png", + "sheet_x": 53, + "sheet_y": 52, + "short_name": "white_circle", + "short_names": [ + "white_circle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 192, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "MEDIUM BLACK CIRCLE", + "unified": "26AB", + "non_qualified": null, + "docomo": "E69C", + "au": "E53B", + "softbank": null, + "google": "FEB66", + "image": "26ab.png", + "sheet_x": 53, + "sheet_y": 53, + "short_name": "black_circle", + "short_names": [ + "black_circle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 191, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26B0-FE0F", + "non_qualified": "26B0", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26b0-fe0f.png", + "sheet_x": 53, + "sheet_y": 54, + "short_name": "coffin", + "short_names": [ + "coffin" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 231, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26B1-FE0F", + "non_qualified": "26B1", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26b1-fe0f.png", + "sheet_x": 53, + "sheet_y": 55, + "short_name": "funeral_urn", + "short_names": [ + "funeral_urn" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 232, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SOCCER BALL", + "unified": "26BD", + "non_qualified": null, + "docomo": "E656", + "au": "E4B6", + "softbank": "E018", + "google": "FE7D4", + "image": "26bd.png", + "sheet_x": 53, + "sheet_y": 56, + "short_name": "soccer", + "short_names": [ + "soccer" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 28, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BASEBALL", + "unified": "26BE", + "non_qualified": null, + "docomo": "E653", + "au": "E4BA", + "softbank": "E016", + "google": "FE7D1", + "image": "26be.png", + "sheet_x": 54, + "sheet_y": 0, + "short_name": "baseball", + "short_names": [ + "baseball" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SNOWMAN WITHOUT SNOW", + "unified": "26C4", + "non_qualified": null, + "docomo": "E641", + "au": "E485", + "softbank": "E048", + "google": "FE003", + "image": "26c4.png", + "sheet_x": 54, + "sheet_y": 1, + "short_name": "snowman_without_snow", + "short_names": [ + "snowman_without_snow" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 206, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SUN BEHIND CLOUD", + "unified": "26C5", + "non_qualified": null, + "docomo": "E63E-E63F", + "au": "E48E", + "softbank": null, + "google": "FE00F", + "image": "26c5.png", + "sheet_x": 54, + "sheet_y": 2, + "short_name": "partly_sunny", + "short_names": [ + "partly_sunny" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 186, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26C8-FE0F", + "non_qualified": "26C8", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26c8-fe0f.png", + "sheet_x": 54, + "sheet_y": 3, + "short_name": "thunder_cloud_and_rain", + "short_names": [ + "thunder_cloud_and_rain" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 187, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "OPHIUCHUS", + "unified": "26CE", + "non_qualified": null, + "docomo": null, + "au": "E49B", + "softbank": "E24B", + "google": "FE037", + "image": "26ce.png", + "sheet_x": 54, + "sheet_y": 4, + "short_name": "ophiuchus", + "short_names": [ + "ophiuchus" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 72, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26CF-FE0F", + "non_qualified": "26CF", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26cf-fe0f.png", + "sheet_x": 54, + "sheet_y": 5, + "short_name": "pick", + "short_names": [ + "pick" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 183, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26D1-FE0F", + "non_qualified": "26D1", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26d1-fe0f.png", + "sheet_x": 54, + "sheet_y": 6, + "short_name": "helmet_with_white_cross", + "short_names": [ + "helmet_with_white_cross" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26D3-FE0F", + "non_qualified": "26D3", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26d3-fe0f.png", + "sheet_x": 54, + "sheet_y": 7, + "short_name": "chains", + "short_names": [ + "chains" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 198, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NO ENTRY", + "unified": "26D4", + "non_qualified": null, + "docomo": "E72F", + "au": "E484", + "softbank": null, + "google": "FEB26", + "image": "26d4.png", + "sheet_x": 54, + "sheet_y": 8, + "short_name": "no_entry", + "short_names": [ + "no_entry" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 16, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26E9-FE0F", + "non_qualified": "26E9", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26e9-fe0f.png", + "sheet_x": 54, + "sheet_y": 9, + "short_name": "shinto_shrine", + "short_names": [ + "shinto_shrine" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CHURCH", + "unified": "26EA", + "non_qualified": null, + "docomo": null, + "au": "E5BB", + "softbank": "E037", + "google": "FE4BB", + "image": "26ea.png", + "sheet_x": 54, + "sheet_y": 10, + "short_name": "church", + "short_names": [ + "church" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 41, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26F0-FE0F", + "non_qualified": "26F0", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26f0-fe0f.png", + "sheet_x": 54, + "sheet_y": 11, + "short_name": "mountain", + "short_names": [ + "mountain" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26F1-FE0F", + "non_qualified": "26F1", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26f1-fe0f.png", + "sheet_x": 54, + "sheet_y": 12, + "short_name": "umbrella_on_ground", + "short_names": [ + "umbrella_on_ground" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 202, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FOUNTAIN", + "unified": "26F2", + "non_qualified": null, + "docomo": null, + "au": "E5CF", + "softbank": "E121", + "google": "FE4BC", + "image": "26f2.png", + "sheet_x": 54, + "sheet_y": 13, + "short_name": "fountain", + "short_names": [ + "fountain" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FLAG IN HOLE", + "unified": "26F3", + "non_qualified": null, + "docomo": "E654", + "au": "E599", + "softbank": "E014", + "google": "FE7D2", + "image": "26f3.png", + "sheet_x": 54, + "sheet_y": 14, + "short_name": "golf", + "short_names": [ + "golf" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26F4-FE0F", + "non_qualified": "26F4", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26f4-fe0f.png", + "sheet_x": 54, + "sheet_y": 15, + "short_name": "ferry", + "short_names": [ + "ferry" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 115, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SAILBOAT", + "unified": "26F5", + "non_qualified": null, + "docomo": "E6A3", + "au": "E4B4", + "softbank": "E01C", + "google": "FE7EA", + "image": "26f5.png", + "sheet_x": 54, + "sheet_y": 16, + "short_name": "boat", + "short_names": [ + "boat", + "sailboat" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 111, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26F7-FE0F", + "non_qualified": "26F7", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26f7-fe0f.png", + "sheet_x": 54, + "sheet_y": 17, + "short_name": "skier", + "short_names": [ + "skier" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 247, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26F8-FE0F", + "non_qualified": "26F8", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26f8-fe0f.png", + "sheet_x": 54, + "sheet_y": 18, + "short_name": "ice_skate", + "short_names": [ + "ice_skate" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "26F9-FE0F-200D-2640-FE0F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26f9-fe0f-200d-2640-fe0f.png", + "sheet_x": 54, + "sheet_y": 19, + "short_name": "woman-bouncing-ball", + "short_names": [ + "woman-bouncing-ball" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 263, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "26F9-1F3FB-200D-2640-FE0F", + "non_qualified": "26F9-1F3FB-200D-2640", + "image": "26f9-1f3fb-200d-2640-fe0f.png", + "sheet_x": 54, + "sheet_y": 20, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "26F9-1F3FC-200D-2640-FE0F", + "non_qualified": "26F9-1F3FC-200D-2640", + "image": "26f9-1f3fc-200d-2640-fe0f.png", + "sheet_x": 54, + "sheet_y": 21, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "26F9-1F3FD-200D-2640-FE0F", + "non_qualified": "26F9-1F3FD-200D-2640", + "image": "26f9-1f3fd-200d-2640-fe0f.png", + "sheet_x": 54, + "sheet_y": 22, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "26F9-1F3FE-200D-2640-FE0F", + "non_qualified": "26F9-1F3FE-200D-2640", + "image": "26f9-1f3fe-200d-2640-fe0f.png", + "sheet_x": 54, + "sheet_y": 23, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "26F9-1F3FF-200D-2640-FE0F", + "non_qualified": "26F9-1F3FF-200D-2640", + "image": "26f9-1f3ff-200d-2640-fe0f.png", + "sheet_x": 54, + "sheet_y": 24, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "26F9-FE0F-200D-2642-FE0F", + "non_qualified": null, + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26f9-fe0f-200d-2642-fe0f.png", + "sheet_x": 54, + "sheet_y": 25, + "short_name": "man-bouncing-ball", + "short_names": [ + "man-bouncing-ball" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 262, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "26F9-1F3FB-200D-2642-FE0F", + "non_qualified": "26F9-1F3FB-200D-2642", + "image": "26f9-1f3fb-200d-2642-fe0f.png", + "sheet_x": 54, + "sheet_y": 26, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "26F9-1F3FC-200D-2642-FE0F", + "non_qualified": "26F9-1F3FC-200D-2642", + "image": "26f9-1f3fc-200d-2642-fe0f.png", + "sheet_x": 54, + "sheet_y": 27, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "26F9-1F3FD-200D-2642-FE0F", + "non_qualified": "26F9-1F3FD-200D-2642", + "image": "26f9-1f3fd-200d-2642-fe0f.png", + "sheet_x": 54, + "sheet_y": 28, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "26F9-1F3FE-200D-2642-FE0F", + "non_qualified": "26F9-1F3FE-200D-2642", + "image": "26f9-1f3fe-200d-2642-fe0f.png", + "sheet_x": 54, + "sheet_y": 29, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "26F9-1F3FF-200D-2642-FE0F", + "non_qualified": "26F9-1F3FF-200D-2642", + "image": "26f9-1f3ff-200d-2642-fe0f.png", + "sheet_x": 54, + "sheet_y": 30, + "added_in": "4.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + }, + "obsoletes": "26F9-FE0F" + }, + { + "name": null, + "unified": "26F9-FE0F", + "non_qualified": "26F9", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "26f9-fe0f.png", + "sheet_x": 54, + "sheet_y": 31, + "short_name": "person_with_ball", + "short_names": [ + "person_with_ball" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 261, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false, + "skin_variations": { + "1F3FB": { + "unified": "26F9-1F3FB", + "non_qualified": null, + "image": "26f9-1f3fb.png", + "sheet_x": 54, + "sheet_y": 32, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FC": { + "unified": "26F9-1F3FC", + "non_qualified": null, + "image": "26f9-1f3fc.png", + "sheet_x": 54, + "sheet_y": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FD": { + "unified": "26F9-1F3FD", + "non_qualified": null, + "image": "26f9-1f3fd.png", + "sheet_x": 54, + "sheet_y": 34, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FE": { + "unified": "26F9-1F3FE", + "non_qualified": null, + "image": "26f9-1f3fe.png", + "sheet_x": 54, + "sheet_y": 35, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + }, + "1F3FF": { + "unified": "26F9-1F3FF", + "non_qualified": null, + "image": "26f9-1f3ff.png", + "sheet_x": 54, + "sheet_y": 36, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": false + } + }, + "obsoleted_by": "26F9-FE0F-200D-2642-FE0F" + }, + { + "name": "TENT", + "unified": "26FA", + "non_qualified": null, + "docomo": null, + "au": "E5D0", + "softbank": "E122", + "google": "FE7FB", + "image": "26fa.png", + "sheet_x": 54, + "sheet_y": 37, + "short_name": "tent", + "short_names": [ + "tent" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "FUEL PUMP", + "unified": "26FD", + "non_qualified": null, + "docomo": "E66B", + "au": "E571", + "softbank": "E03A", + "google": "FE7F5", + "image": "26fd.png", + "sheet_x": 54, + "sheet_y": 38, + "short_name": "fuelpump", + "short_names": [ + "fuelpump" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 104, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK SCISSORS", + "unified": "2702-FE0F", + "non_qualified": "2702", + "docomo": "E675", + "au": "E516", + "softbank": "E313", + "google": "FE53E", + "image": "2702-fe0f.png", + "sheet_x": 54, + "sheet_y": 39, + "short_name": "scissors", + "short_names": [ + "scissors" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 171, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE HEAVY CHECK MARK", + "unified": "2705", + "non_qualified": null, + "docomo": null, + "au": "E55E", + "softbank": null, + "google": "FEB4A", + "image": "2705.png", + "sheet_x": 54, + "sheet_y": 40, + "short_name": "white_check_mark", + "short_names": [ + "white_check_mark" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 107, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "AIRPLANE", + "unified": "2708-FE0F", + "non_qualified": "2708", + "docomo": "E662", + "au": "E4B3", + "softbank": "E01D", + "google": "FE7E9", + "image": "2708-fe0f.png", + "sheet_x": 54, + "sheet_y": 41, + "short_name": "airplane", + "short_names": [ + "airplane" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 118, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ENVELOPE", + "unified": "2709-FE0F", + "non_qualified": "2709", + "docomo": "E6D3", + "au": "E521", + "softbank": null, + "google": "FE529", + "image": "2709-fe0f.png", + "sheet_x": 54, + "sheet_y": 42, + "short_name": "email", + "short_names": [ + "email", + "envelope" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 132, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "RAISED FIST", + "unified": "270A", + "non_qualified": null, + "docomo": "E693", + "au": "EB83", + "softbank": "E010", + "google": "FEB93", + "image": "270a.png", + "sheet_x": 54, + "sheet_y": 43, + "short_name": "fist", + "short_names": [ + "fist" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 21, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "270A-1F3FB", + "non_qualified": null, + "image": "270a-1f3fb.png", + "sheet_x": 54, + "sheet_y": 44, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "270A-1F3FC", + "non_qualified": null, + "image": "270a-1f3fc.png", + "sheet_x": 54, + "sheet_y": 45, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "270A-1F3FD", + "non_qualified": null, + "image": "270a-1f3fd.png", + "sheet_x": 54, + "sheet_y": 46, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "270A-1F3FE", + "non_qualified": null, + "image": "270a-1f3fe.png", + "sheet_x": 54, + "sheet_y": 47, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "270A-1F3FF", + "non_qualified": null, + "image": "270a-1f3ff.png", + "sheet_x": 54, + "sheet_y": 48, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "RAISED HAND", + "unified": "270B", + "non_qualified": null, + "docomo": "E695", + "au": "E5A7", + "softbank": "E012", + "google": "FEB95", + "image": "270b.png", + "sheet_x": 54, + "sheet_y": 49, + "short_name": "hand", + "short_names": [ + "hand", + "raised_hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 4, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "270B-1F3FB", + "non_qualified": null, + "image": "270b-1f3fb.png", + "sheet_x": 54, + "sheet_y": 50, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "270B-1F3FC", + "non_qualified": null, + "image": "270b-1f3fc.png", + "sheet_x": 54, + "sheet_y": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "270B-1F3FD", + "non_qualified": null, + "image": "270b-1f3fd.png", + "sheet_x": 54, + "sheet_y": 52, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "270B-1F3FE", + "non_qualified": null, + "image": "270b-1f3fe.png", + "sheet_x": 54, + "sheet_y": 53, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "270B-1F3FF", + "non_qualified": null, + "image": "270b-1f3ff.png", + "sheet_x": 54, + "sheet_y": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "VICTORY HAND", + "unified": "270C-FE0F", + "non_qualified": "270C", + "docomo": "E694", + "au": "E5A6", + "softbank": "E011", + "google": "FEB94", + "image": "270c-fe0f.png", + "sheet_x": 54, + "sheet_y": 55, + "short_name": "v", + "short_names": [ + "v" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "270C-1F3FB", + "non_qualified": null, + "image": "270c-1f3fb.png", + "sheet_x": 54, + "sheet_y": 56, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "270C-1F3FC", + "non_qualified": null, + "image": "270c-1f3fc.png", + "sheet_x": 55, + "sheet_y": 0, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "270C-1F3FD", + "non_qualified": null, + "image": "270c-1f3fd.png", + "sheet_x": 55, + "sheet_y": 1, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "270C-1F3FE", + "non_qualified": null, + "image": "270c-1f3fe.png", + "sheet_x": 55, + "sheet_y": 2, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "270C-1F3FF", + "non_qualified": null, + "image": "270c-1f3ff.png", + "sheet_x": 55, + "sheet_y": 3, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": null, + "unified": "270D-FE0F", + "non_qualified": "270D", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "270d-fe0f.png", + "sheet_x": 55, + "sheet_y": 4, + "short_name": "writing_hand", + "short_names": [ + "writing_hand" + ], + "text": null, + "texts": null, + "category": "People & Body", + "sort_order": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true, + "skin_variations": { + "1F3FB": { + "unified": "270D-1F3FB", + "non_qualified": null, + "image": "270d-1f3fb.png", + "sheet_x": 55, + "sheet_y": 5, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FC": { + "unified": "270D-1F3FC", + "non_qualified": null, + "image": "270d-1f3fc.png", + "sheet_x": 55, + "sheet_y": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FD": { + "unified": "270D-1F3FD", + "non_qualified": null, + "image": "270d-1f3fd.png", + "sheet_x": 55, + "sheet_y": 7, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FE": { + "unified": "270D-1F3FE", + "non_qualified": null, + "image": "270d-1f3fe.png", + "sheet_x": 55, + "sheet_y": 8, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + "1F3FF": { + "unified": "270D-1F3FF", + "non_qualified": null, + "image": "270d-1f3ff.png", + "sheet_x": 55, + "sheet_y": 9, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } + } + }, + { + "name": "PENCIL", + "unified": "270F-FE0F", + "non_qualified": "270F", + "docomo": "E719", + "au": "E4A1", + "softbank": null, + "google": "FE539", + "image": "270f-fe0f.png", + "sheet_x": 55, + "sheet_y": 10, + "short_name": "pencil2", + "short_names": [ + "pencil2" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 145, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK NIB", + "unified": "2712-FE0F", + "non_qualified": "2712", + "docomo": "E6AE", + "au": "EB03", + "softbank": null, + "google": "FE536", + "image": "2712-fe0f.png", + "sheet_x": 55, + "sheet_y": 11, + "short_name": "black_nib", + "short_names": [ + "black_nib" + ], + "text": null, + "texts": null, + "category": "Objects", + "sort_order": 146, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAVY CHECK MARK", + "unified": "2714-FE0F", + "non_qualified": "2714", + "docomo": null, + "au": "E557", + "softbank": null, + "google": "FEB49", + "image": "2714-fe0f.png", + "sheet_x": 55, + "sheet_y": 12, + "short_name": "heavy_check_mark", + "short_names": [ + "heavy_check_mark" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 109, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAVY MULTIPLICATION X", + "unified": "2716-FE0F", + "non_qualified": "2716", + "docomo": null, + "au": "E54F", + "softbank": null, + "google": "FEB53", + "image": "2716-fe0f.png", + "sheet_x": 55, + "sheet_y": 13, + "short_name": "heavy_multiplication_x", + "short_names": [ + "heavy_multiplication_x" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 110, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "271D-FE0F", + "non_qualified": "271D", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "271d-fe0f.png", + "sheet_x": 55, + "sheet_y": 14, + "short_name": "latin_cross", + "short_names": [ + "latin_cross" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 54, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2721-FE0F", + "non_qualified": "2721", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2721-fe0f.png", + "sheet_x": 55, + "sheet_y": 15, + "short_name": "star_of_david", + "short_names": [ + "star_of_david" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 51, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPARKLES", + "unified": "2728", + "non_qualified": null, + "docomo": "E6FA", + "au": "EAAB", + "softbank": "E32E", + "google": "FEB60", + "image": "2728.png", + "sheet_x": 55, + "sheet_y": 16, + "short_name": "sparkles", + "short_names": [ + "sparkles" + ], + "text": null, + "texts": null, + "category": "Activities", + "sort_order": 6, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EIGHT SPOKED ASTERISK", + "unified": "2733-FE0F", + "non_qualified": "2733", + "docomo": "E6F8", + "au": "E53E", + "softbank": "E206", + "google": "FEB62", + "image": "2733-fe0f.png", + "sheet_x": 55, + "sheet_y": 17, + "short_name": "eight_spoked_asterisk", + "short_names": [ + "eight_spoked_asterisk" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 119, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "EIGHT POINTED BLACK STAR", + "unified": "2734-FE0F", + "non_qualified": "2734", + "docomo": "E6F8", + "au": "E479", + "softbank": "E205", + "google": "FEB61", + "image": "2734-fe0f.png", + "sheet_x": 55, + "sheet_y": 18, + "short_name": "eight_pointed_black_star", + "short_names": [ + "eight_pointed_black_star" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 120, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SNOWFLAKE", + "unified": "2744-FE0F", + "non_qualified": "2744", + "docomo": null, + "au": "E48A", + "softbank": null, + "google": "FE00E", + "image": "2744-fe0f.png", + "sheet_x": 55, + "sheet_y": 19, + "short_name": "snowflake", + "short_names": [ + "snowflake" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 204, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "SPARKLE", + "unified": "2747-FE0F", + "non_qualified": "2747", + "docomo": "E6FA", + "au": "E46C", + "softbank": null, + "google": "FEB77", + "image": "2747-fe0f.png", + "sheet_x": 55, + "sheet_y": 20, + "short_name": "sparkle", + "short_names": [ + "sparkle" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 121, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CROSS MARK", + "unified": "274C", + "non_qualified": null, + "docomo": null, + "au": "E550", + "softbank": "E333", + "google": "FEB45", + "image": "274c.png", + "sheet_x": 55, + "sheet_y": 21, + "short_name": "x", + "short_names": [ + "x" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 111, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "NEGATIVE SQUARED CROSS MARK", + "unified": "274E", + "non_qualified": null, + "docomo": null, + "au": "E551", + "softbank": null, + "google": "FEB46", + "image": "274e.png", + "sheet_x": 55, + "sheet_y": 22, + "short_name": "negative_squared_cross_mark", + "short_names": [ + "negative_squared_cross_mark" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 112, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK QUESTION MARK ORNAMENT", + "unified": "2753", + "non_qualified": null, + "docomo": null, + "au": "E483", + "softbank": "E020", + "google": "FEB09", + "image": "2753.png", + "sheet_x": 55, + "sheet_y": 23, + "short_name": "question", + "short_names": [ + "question" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 124, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE QUESTION MARK ORNAMENT", + "unified": "2754", + "non_qualified": null, + "docomo": null, + "au": "E483", + "softbank": "E336", + "google": "FEB0A", + "image": "2754.png", + "sheet_x": 55, + "sheet_y": 24, + "short_name": "grey_question", + "short_names": [ + "grey_question" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 125, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE EXCLAMATION MARK ORNAMENT", + "unified": "2755", + "non_qualified": null, + "docomo": "E702", + "au": "E482", + "softbank": "E337", + "google": "FEB0B", + "image": "2755.png", + "sheet_x": 55, + "sheet_y": 25, + "short_name": "grey_exclamation", + "short_names": [ + "grey_exclamation" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 126, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAVY EXCLAMATION MARK SYMBOL", + "unified": "2757", + "non_qualified": null, + "docomo": "E702", + "au": "E482", + "softbank": "E021", + "google": "FEB04", + "image": "2757.png", + "sheet_x": 55, + "sheet_y": 26, + "short_name": "exclamation", + "short_names": [ + "exclamation", + "heavy_exclamation_mark" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 127, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": null, + "unified": "2763-FE0F", + "non_qualified": "2763", + "docomo": null, + "au": null, + "softbank": null, + "google": null, + "image": "2763-fe0f.png", + "sheet_x": 55, + "sheet_y": 27, + "short_name": "heavy_heart_exclamation_mark_ornament", + "short_names": [ + "heavy_heart_exclamation_mark_ornament" + ], + "text": null, + "texts": null, + "category": "Smileys & Emotion", + "sort_order": 125, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAVY BLACK HEART", + "unified": "2764-FE0F", + "non_qualified": "2764", + "docomo": "E6EC", + "au": "E595", + "softbank": "E022", + "google": "FEB0C", + "image": "2764-fe0f.png", + "sheet_x": 55, + "sheet_y": 28, + "short_name": "heart", + "short_names": [ + "heart" + ], + "text": "<3", + "texts": [ + "<3" + ], + "category": "Smileys & Emotion", + "sort_order": 127, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAVY PLUS SIGN", + "unified": "2795", + "non_qualified": null, + "docomo": null, + "au": "E53C", + "softbank": null, + "google": "FEB51", + "image": "2795.png", + "sheet_x": 55, + "sheet_y": 29, + "short_name": "heavy_plus_sign", + "short_names": [ + "heavy_plus_sign" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 113, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAVY MINUS SIGN", + "unified": "2796", + "non_qualified": null, + "docomo": null, + "au": "E53D", + "softbank": null, + "google": "FEB52", + "image": "2796.png", + "sheet_x": 55, + "sheet_y": 30, + "short_name": "heavy_minus_sign", + "short_names": [ + "heavy_minus_sign" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 114, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAVY DIVISION SIGN", + "unified": "2797", + "non_qualified": null, + "docomo": null, + "au": "E554", + "softbank": null, + "google": "FEB54", + "image": "2797.png", + "sheet_x": 55, + "sheet_y": 31, + "short_name": "heavy_division_sign", + "short_names": [ + "heavy_division_sign" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 115, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK RIGHTWARDS ARROW", + "unified": "27A1-FE0F", + "non_qualified": "27A1", + "docomo": null, + "au": "E552", + "softbank": "E234", + "google": "FEAFA", + "image": "27a1-fe0f.png", + "sheet_x": 55, + "sheet_y": 32, + "short_name": "arrow_right", + "short_names": [ + "arrow_right" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 29, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CURLY LOOP", + "unified": "27B0", + "non_qualified": null, + "docomo": "E70A", + "au": "EB31", + "softbank": null, + "google": "FEB08", + "image": "27b0.png", + "sheet_x": 55, + "sheet_y": 33, + "short_name": "curly_loop", + "short_names": [ + "curly_loop" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 116, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOUBLE CURLY LOOP", + "unified": "27BF", + "non_qualified": null, + "docomo": "E6DF", + "au": null, + "softbank": "E211", + "google": "FE82B", + "image": "27bf.png", + "sheet_x": 55, + "sheet_y": 34, + "short_name": "loop", + "short_names": [ + "loop" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 117, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS", + "unified": "2934-FE0F", + "non_qualified": "2934", + "docomo": "E6F5", + "au": "EB2D", + "softbank": null, + "google": "FEAF4", + "image": "2934-fe0f.png", + "sheet_x": 55, + "sheet_y": 35, + "short_name": "arrow_heading_up", + "short_names": [ + "arrow_heading_up" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 39, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS", + "unified": "2935-FE0F", + "non_qualified": "2935", + "docomo": "E700", + "au": "EB2E", + "softbank": null, + "google": "FEAF5", + "image": "2935-fe0f.png", + "sheet_x": 55, + "sheet_y": 36, + "short_name": "arrow_heading_down", + "short_names": [ + "arrow_heading_down" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 40, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "LEFTWARDS BLACK ARROW", + "unified": "2B05-FE0F", + "non_qualified": "2B05", + "docomo": null, + "au": "E553", + "softbank": "E235", + "google": "FEAFB", + "image": "2b05-fe0f.png", + "sheet_x": 55, + "sheet_y": 37, + "short_name": "arrow_left", + "short_names": [ + "arrow_left" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 33, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "UPWARDS BLACK ARROW", + "unified": "2B06-FE0F", + "non_qualified": "2B06", + "docomo": null, + "au": "E53F", + "softbank": "E232", + "google": "FEAF8", + "image": "2b06-fe0f.png", + "sheet_x": 55, + "sheet_y": 38, + "short_name": "arrow_up", + "short_names": [ + "arrow_up" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 27, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "DOWNWARDS BLACK ARROW", + "unified": "2B07-FE0F", + "non_qualified": "2B07", + "docomo": null, + "au": "E540", + "softbank": "E233", + "google": "FEAF9", + "image": "2b07-fe0f.png", + "sheet_x": 55, + "sheet_y": 39, + "short_name": "arrow_down", + "short_names": [ + "arrow_down" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 31, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "BLACK LARGE SQUARE", + "unified": "2B1B", + "non_qualified": null, + "docomo": null, + "au": "E549", + "softbank": null, + "google": "FEB6C", + "image": "2b1b.png", + "sheet_x": 55, + "sheet_y": 40, + "short_name": "black_large_square", + "short_names": [ + "black_large_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 200, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE LARGE SQUARE", + "unified": "2B1C", + "non_qualified": null, + "docomo": null, + "au": "E548", + "softbank": null, + "google": "FEB6B", + "image": "2b1c.png", + "sheet_x": 55, + "sheet_y": 41, + "short_name": "white_large_square", + "short_names": [ + "white_large_square" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 201, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WHITE MEDIUM STAR", + "unified": "2B50", + "non_qualified": null, + "docomo": null, + "au": "E48B", + "softbank": "E32F", + "google": "FEB68", + "image": "2b50.png", + "sheet_x": 55, + "sheet_y": 42, + "short_name": "star", + "short_names": [ + "star" + ], + "text": null, + "texts": null, + "category": "Travel & Places", + "sort_order": 181, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "HEAVY LARGE CIRCLE", + "unified": "2B55", + "non_qualified": null, + "docomo": "E6A0", + "au": "EAAD", + "softbank": "E332", + "google": "FEB44", + "image": "2b55.png", + "sheet_x": 55, + "sheet_y": 43, + "short_name": "o", + "short_names": [ + "o" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 106, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "WAVY DASH", + "unified": "3030-FE0F", + "non_qualified": "3030", + "docomo": "E709", + "au": null, + "softbank": null, + "google": "FEB07", + "image": "3030-fe0f.png", + "sheet_x": 55, + "sheet_y": 44, + "short_name": "wavy_dash", + "short_names": [ + "wavy_dash" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 128, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "PART ALTERNATION MARK", + "unified": "303D-FE0F", + "non_qualified": "303D", + "docomo": null, + "au": null, + "softbank": "E12C", + "google": "FE81B", + "image": "303d-fe0f.png", + "sheet_x": 55, + "sheet_y": 45, + "short_name": "part_alternation_mark", + "short_names": [ + "part_alternation_mark" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 118, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CIRCLED IDEOGRAPH CONGRATULATION", + "unified": "3297-FE0F", + "non_qualified": "3297", + "docomo": null, + "au": "EA99", + "softbank": "E30D", + "google": "FEB43", + "image": "3297-fe0f.png", + "sheet_x": 55, + "sheet_y": 46, + "short_name": "congratulations", + "short_names": [ + "congratulations" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 180, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + }, + { + "name": "CIRCLED IDEOGRAPH SECRET", + "unified": "3299-FE0F", + "non_qualified": "3299", + "docomo": "E734", + "au": "E4F1", + "softbank": "E315", + "google": "FEB2B", + "image": "3299-fe0f.png", + "sheet_x": 55, + "sheet_y": 47, + "short_name": "secret", + "short_names": [ + "secret" + ], + "text": null, + "texts": null, + "category": "Symbols", + "sort_order": 181, + "added_in": "2.0", + "has_img_apple": true, + "has_img_google": true, + "has_img_twitter": true, + "has_img_facebook": true + } +] \ No newline at end of file diff --git a/src/format_jsons.js b/src/format_jsons.js new file mode 100644 index 00000000..21502f88 --- /dev/null +++ b/src/format_jsons.js @@ -0,0 +1,75 @@ +let emoji = require('./emoji_pretty.json'); +let countries = require('./countries_pretty.json'); + +console.log(emoji, countries); + +let formatted = emoji.filter(e => e.has_img_apple); + +/* formatted = formatted.map(e => { + let {unified, name, short_names, category, sheet_x, sheet_y} = e; + + return { + unified, + //name, + //short_names, + category, + sheet_x, + sheet_y + }; +}); + +require('fs').writeFileSync('./emoji.json', JSON.stringify(formatted)); */ + +{ + let obj = {}; + formatted.forEach(e => { + let {unified, name, short_names, category, sheet_x, sheet_y, sort_order} = e; + + let emoji = unified.split('-') + .reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), ''); + + obj[/* unified */emoji] = { + //unified, + //name, + //short_names, + category, + sheet_x, + sheet_y, + sort_order + }; + }); + + require('fs').writeFileSync('./emoji.json', JSON.stringify(obj)); +} + +/* { + let obj = {}; + formatted.forEach(e => { + let {unified, name, short_names, category, sheet_x, sheet_y} = e; + + + let categories = ["Smileys & People", "Animals & Nature", "Food & Drink", + "Travel & Places", "Activities", "Objects", "Symbols", "Flags", "Skin Tones"]; + let categoryId = categories.findIndex(c => c == category); + if(categoryId === -1) throw new Error(category); + + obj[unified] = [ + sheet_x, + sheet_y, + categoryId + ]; + }); + + require('fs').writeFileSync('./emoji.json', JSON.stringify(obj)); +} */ + +/* { + let arr = []; + countries.forEach(e => { + let {name, code, phoneCode} = e; + + arr.push([name, code, phoneCode]); + }); + + require('fs').writeFileSync('./countries.json', JSON.stringify(arr)); +} */ diff --git a/src/lib/StackBlur.js b/src/lib/StackBlur.js new file mode 100644 index 00000000..b6c059bd --- /dev/null +++ b/src/lib/StackBlur.js @@ -0,0 +1,612 @@ +/* + +StackBlur - a fast almost Gaussian Blur For Canvas + +Version: 0.5 +Author: Mario Klingemann +Contact: mario@quasimondo.com +Website: http://www.quasimondo.com/StackBlurForCanvas +Twitter: @quasimondo + +In case you find this class useful - especially in commercial projects - +I am not totally unhappy for a small donation to my PayPal account +mario@quasimondo.de + +Or support me on flattr: +https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript + +Copyright (c) 2010 Mario Klingemann + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +*/ + +var mul_table = [ + 512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512, + 454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512, + 482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456, + 437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512, + 497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328, + 320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456, + 446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335, + 329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512, + 505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405, + 399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328, + 324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271, + 268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456, + 451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388, + 385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335, + 332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292, + 289,287,285,282,280,278,275,273,271,269,267,265,263,261,259 +]; + + +var shg_table = [ + 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, + 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 +]; + +export function stackBlurImage(imageID, canvasID, radius, blurAlphaChannel) { + // modifications 02.02.2020 + var img; + if(typeof(imageID) === 'string') { + img = document.getElementById(imageID); + } else { + img = imageID; + } + + var w = img.naturalWidth; + var h = img.naturalHeight; + + var canvas = document.getElementById(canvasID); + + canvas.style.width = w + "px"; + canvas.style.height = h + "px"; + canvas.width = w; + canvas.height = h; + + var context = canvas.getContext("2d"); + context.clearRect(0, 0, w, h); + context.drawImage(img, 0, 0); + + if(isNaN(radius) || radius < 1) return; + + if(blurAlphaChannel) return stackBlurCanvasRGBA(canvasID, 0, 0, w, h, radius); + else return stackBlurCanvasRGB(canvasID, 0, 0, w, h, radius); +} + + +export function stackBlurCanvasRGBA(id, top_x, top_y, width, height, radius) { + if(isNaN(radius) || radius < 1) return; + radius |= 0; + + var canvas = document.getElementById( id ); + var context = canvas.getContext("2d"); + var imageData; + + try { + try { + imageData = context.getImageData( top_x, top_y, width, height ); + } catch(e) { + + // NOTE: this part is supposedly only needed if you want to work with local files + // so it might be okay to remove the whole try/catch block and just use + // imageData = context.getImageData( top_x, top_y, width, height ); + try { + //netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); + imageData = context.getImageData( top_x, top_y, width, height ); + } catch(e) { + alert("Cannot access local image"); + throw new Error("unable to access local image data: " + e); + return; + } + } + } catch(e) { + alert("Cannot access image"); + throw new Error("unable to access image data: " + e); + } + + var pixels = imageData.data; + + var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, + r_out_sum, g_out_sum, b_out_sum, a_out_sum, + r_in_sum, g_in_sum, b_in_sum, a_in_sum, + pr, pg, pb, pa, rbs; + + var div = radius + radius + 1; + var w4 = width << 2; + var widthMinus1 = width - 1; + var heightMinus1 = height - 1; + var radiusPlus1 = radius + 1; + var sumFactor = radiusPlus1 * ( radiusPlus1 + 1 ) / 2; + + var stackStart = new BlurStack(); + var stack = stackStart; + for ( i = 1; i < div; i++ ) + { + stack = stack.next = new BlurStack(); + if ( i == radiusPlus1 ) var stackEnd = stack; + } + stack.next = stackStart; + var stackIn = null; + var stackOut = null; + + yw = yi = 0; + + var mul_sum = mul_table[radius]; + var shg_sum = shg_table[radius]; + + for ( y = 0; y < height; y++ ) + { + r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0; + + r_out_sum = radiusPlus1 * ( pr = pixels[yi] ); + g_out_sum = radiusPlus1 * ( pg = pixels[yi+1] ); + b_out_sum = radiusPlus1 * ( pb = pixels[yi+2] ); + a_out_sum = radiusPlus1 * ( pa = pixels[yi+3] ); + + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + a_sum += sumFactor * pa; + + stack = stackStart; + + for( i = 0; i < radiusPlus1; i++ ) + { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack.a = pa; + stack = stack.next; + } + + for( i = 1; i < radiusPlus1; i++ ) + { + p = yi + (( widthMinus1 < i ? widthMinus1 : i ) << 2 ); + r_sum += ( stack.r = ( pr = pixels[p])) * ( rbs = radiusPlus1 - i ); + g_sum += ( stack.g = ( pg = pixels[p+1])) * rbs; + b_sum += ( stack.b = ( pb = pixels[p+2])) * rbs; + a_sum += ( stack.a = ( pa = pixels[p+3])) * rbs; + + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + a_in_sum += pa; + + stack = stack.next; + } + + + stackIn = stackStart; + stackOut = stackEnd; + for ( x = 0; x < width; x++ ) + { + pixels[yi+3] = pa = (a_sum * mul_sum) >> shg_sum; + if ( pa != 0 ) + { + pa = 255 / pa; + pixels[yi] = ((r_sum * mul_sum) >> shg_sum) * pa; + pixels[yi+1] = ((g_sum * mul_sum) >> shg_sum) * pa; + pixels[yi+2] = ((b_sum * mul_sum) >> shg_sum) * pa; + } else { + pixels[yi] = pixels[yi+1] = pixels[yi+2] = 0; + } + + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + a_sum -= a_out_sum; + + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + a_out_sum -= stackIn.a; + + p = ( yw + ( ( p = x + radius + 1 ) < widthMinus1 ? p : widthMinus1 ) ) << 2; + + r_in_sum += ( stackIn.r = pixels[p]); + g_in_sum += ( stackIn.g = pixels[p+1]); + b_in_sum += ( stackIn.b = pixels[p+2]); + a_in_sum += ( stackIn.a = pixels[p+3]); + + r_sum += r_in_sum; + g_sum += g_in_sum; + b_sum += b_in_sum; + a_sum += a_in_sum; + + stackIn = stackIn.next; + + r_out_sum += ( pr = stackOut.r ); + g_out_sum += ( pg = stackOut.g ); + b_out_sum += ( pb = stackOut.b ); + a_out_sum += ( pa = stackOut.a ); + + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + a_in_sum -= pa; + + stackOut = stackOut.next; + + yi += 4; + } + yw += width; + } + + + for ( x = 0; x < width; x++ ) + { + g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0; + + yi = x << 2; + r_out_sum = radiusPlus1 * ( pr = pixels[yi]); + g_out_sum = radiusPlus1 * ( pg = pixels[yi+1]); + b_out_sum = radiusPlus1 * ( pb = pixels[yi+2]); + a_out_sum = radiusPlus1 * ( pa = pixels[yi+3]); + + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + a_sum += sumFactor * pa; + + stack = stackStart; + + for( i = 0; i < radiusPlus1; i++ ) + { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack.a = pa; + stack = stack.next; + } + + yp = width; + + for( i = 1; i <= radius; i++ ) + { + yi = ( yp + x ) << 2; + + r_sum += ( stack.r = ( pr = pixels[yi])) * ( rbs = radiusPlus1 - i ); + g_sum += ( stack.g = ( pg = pixels[yi+1])) * rbs; + b_sum += ( stack.b = ( pb = pixels[yi+2])) * rbs; + a_sum += ( stack.a = ( pa = pixels[yi+3])) * rbs; + + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + a_in_sum += pa; + + stack = stack.next; + + if( i < heightMinus1 ) + { + yp += width; + } + } + + yi = x; + stackIn = stackStart; + stackOut = stackEnd; + for ( y = 0; y < height; y++ ) + { + p = yi << 2; + pixels[p+3] = pa = (a_sum * mul_sum) >> shg_sum; + if ( pa > 0 ) + { + pa = 255 / pa; + pixels[p] = ((r_sum * mul_sum) >> shg_sum ) * pa; + pixels[p+1] = ((g_sum * mul_sum) >> shg_sum ) * pa; + pixels[p+2] = ((b_sum * mul_sum) >> shg_sum ) * pa; + } else { + pixels[p] = pixels[p+1] = pixels[p+2] = 0; + } + + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + a_sum -= a_out_sum; + + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + a_out_sum -= stackIn.a; + + p = ( x + (( ( p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1 ) * width )) << 2; + + r_sum += ( r_in_sum += ( stackIn.r = pixels[p])); + g_sum += ( g_in_sum += ( stackIn.g = pixels[p+1])); + b_sum += ( b_in_sum += ( stackIn.b = pixels[p+2])); + a_sum += ( a_in_sum += ( stackIn.a = pixels[p+3])); + + stackIn = stackIn.next; + + r_out_sum += ( pr = stackOut.r ); + g_out_sum += ( pg = stackOut.g ); + b_out_sum += ( pb = stackOut.b ); + a_out_sum += ( pa = stackOut.a ); + + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + a_in_sum -= pa; + + stackOut = stackOut.next; + + yi += width; + } + } + + context.putImageData( imageData, top_x, top_y ); + return imageData; +} + + +export function stackBlurCanvasRGB(id, top_x, top_y, width, height, radius) { + if(isNaN(radius) || radius < 1) return; + radius |= 0; + + var canvas = document.getElementById(id); + var context = canvas.getContext("2d"); + var imageData; + + try { + try { + imageData = context.getImageData(top_x, top_y, width, height); + } catch(e) { + + // NOTE: this part is supposedly only needed if you want to work with local files + // so it might be okay to remove the whole try/catch block and just use + // imageData = context.getImageData( top_x, top_y, width, height ); + try { + //netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); + imageData = context.getImageData(top_x, top_y, width, height); + } catch(e) { + //alert("Cannot access local image"); + throw new Error("unable to access local image data: " + e); + return; + } + } + } catch(e) { + //alert("Cannot access image"); + throw new Error("unable to access image data: " + e); + } + + var pixels = imageData.data; + + var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, + r_out_sum, g_out_sum, b_out_sum, + r_in_sum, g_in_sum, b_in_sum, + pr, pg, pb, rbs; + + var div = radius + radius + 1; + var w4 = width << 2; + var widthMinus1 = width - 1; + var heightMinus1 = height - 1; + var radiusPlus1 = radius + 1; + var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2; + + var stackStart = new BlurStack(); + var stack = stackStart; + for(i = 1; i < div; i++) { + stack = stack.next = new BlurStack(); + if(i == radiusPlus1) var stackEnd = stack; + } + stack.next = stackStart; + var stackIn = null; + var stackOut = null; + + yw = yi = 0; + + var mul_sum = mul_table[radius]; + var shg_sum = shg_table[radius]; + + for(y = 0; y < height; y++) { + r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0; + + r_out_sum = radiusPlus1 * ( pr = pixels[yi] ); + g_out_sum = radiusPlus1 * ( pg = pixels[yi+1] ); + b_out_sum = radiusPlus1 * ( pb = pixels[yi+2] ); + + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + + stack = stackStart; + + for( i = 0; i < radiusPlus1; i++ ) + { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack = stack.next; + } + + for( i = 1; i < radiusPlus1; i++ ) + { + p = yi + (( widthMinus1 < i ? widthMinus1 : i ) << 2 ); + r_sum += ( stack.r = ( pr = pixels[p])) * ( rbs = radiusPlus1 - i ); + g_sum += ( stack.g = ( pg = pixels[p+1])) * rbs; + b_sum += ( stack.b = ( pb = pixels[p+2])) * rbs; + + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + + stack = stack.next; + } + + + stackIn = stackStart; + stackOut = stackEnd; + for ( x = 0; x < width; x++ ) + { + pixels[yi] = (r_sum * mul_sum) >> shg_sum; + pixels[yi+1] = (g_sum * mul_sum) >> shg_sum; + pixels[yi+2] = (b_sum * mul_sum) >> shg_sum; + + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + + p = ( yw + ( ( p = x + radius + 1 ) < widthMinus1 ? p : widthMinus1 ) ) << 2; + + r_in_sum += ( stackIn.r = pixels[p]); + g_in_sum += ( stackIn.g = pixels[p+1]); + b_in_sum += ( stackIn.b = pixels[p+2]); + + r_sum += r_in_sum; + g_sum += g_in_sum; + b_sum += b_in_sum; + + stackIn = stackIn.next; + + r_out_sum += ( pr = stackOut.r ); + g_out_sum += ( pg = stackOut.g ); + b_out_sum += ( pb = stackOut.b ); + + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + + stackOut = stackOut.next; + + yi += 4; + } + yw += width; + } + + + for ( x = 0; x < width; x++ ) + { + g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0; + + yi = x << 2; + r_out_sum = radiusPlus1 * ( pr = pixels[yi]); + g_out_sum = radiusPlus1 * ( pg = pixels[yi+1]); + b_out_sum = radiusPlus1 * ( pb = pixels[yi+2]); + + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + + stack = stackStart; + + for( i = 0; i < radiusPlus1; i++ ) + { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack = stack.next; + } + + yp = width; + + for( i = 1; i <= radius; i++ ) + { + yi = ( yp + x ) << 2; + + r_sum += ( stack.r = ( pr = pixels[yi])) * ( rbs = radiusPlus1 - i ); + g_sum += ( stack.g = ( pg = pixels[yi+1])) * rbs; + b_sum += ( stack.b = ( pb = pixels[yi+2])) * rbs; + + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + + stack = stack.next; + + if( i < heightMinus1 ) + { + yp += width; + } + } + + yi = x; + stackIn = stackStart; + stackOut = stackEnd; + for ( y = 0; y < height; y++ ) + { + p = yi << 2; + pixels[p] = (r_sum * mul_sum) >> shg_sum; + pixels[p+1] = (g_sum * mul_sum) >> shg_sum; + pixels[p+2] = (b_sum * mul_sum) >> shg_sum; + + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + + p = ( x + (( ( p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1 ) * width )) << 2; + + r_sum += ( r_in_sum += ( stackIn.r = pixels[p])); + g_sum += ( g_in_sum += ( stackIn.g = pixels[p+1])); + b_sum += ( b_in_sum += ( stackIn.b = pixels[p+2])); + + stackIn = stackIn.next; + + r_out_sum += ( pr = stackOut.r ); + g_out_sum += ( pg = stackOut.g ); + b_out_sum += ( pb = stackOut.b ); + + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + + stackOut = stackOut.next; + + yi += width; + } + } + + context.putImageData(imageData, top_x, top_y); + + return imageData; +} + +function BlurStack() { + this.r = 0; + this.g = 0; + this.b = 0; + this.a = 0; + this.next = null; +} diff --git a/src/lib/appManagers/apiUpdatesManager.ts b/src/lib/appManagers/apiUpdatesManager.ts new file mode 100644 index 00000000..7d5f4e07 --- /dev/null +++ b/src/lib/appManagers/apiUpdatesManager.ts @@ -0,0 +1,519 @@ +import { MTProto } from "../mtproto/mtproto"; +import { dT, $rootScope, tsNow } from "../utils"; +import appPeersManager from "./appPeersManager"; +import appUsersManager from "./appUsersManager"; +import appChatsManager from "./appChatsManager"; + +export class ApiUpdatesManager { + public updatesState: { + pendingPtsUpdates: any[], + pendingSeqUpdates: any, + syncPending: any, + syncLoading: any, + + seq?: any, + pts?: any, + date?: any + } = { + pendingPtsUpdates: [], + pendingSeqUpdates: {}, + syncPending: false, + syncLoading: true + }; + + public channelStates: any = {}; + + public myID = 0; + + constructor() { + MTProto.apiManager.getUserID().then((id) => { + this.myID = id; + }); + } + + public popPendingSeqUpdate() { + var nextSeq = this.updatesState.seq + 1; + var pendingUpdatesData = this.updatesState.pendingSeqUpdates[nextSeq]; + if(!pendingUpdatesData) { + return false; + } + + var updates = pendingUpdatesData.updates; + var length; + for(var i = 0, length = updates.length; i < length; i++) { + this.saveUpdate(updates[i]); + } + this.updatesState.seq = pendingUpdatesData.seq; + if(pendingUpdatesData.date && this.updatesState.date < pendingUpdatesData.date) { + this.updatesState.date = pendingUpdatesData.date; + } + delete this.updatesState.pendingSeqUpdates[nextSeq]; + + if(!this.popPendingSeqUpdate() && + this.updatesState.syncPending && + this.updatesState.syncPending.seqAwaiting && + this.updatesState.seq >= this.updatesState.syncPending.seqAwaiting) { + if(!this.updatesState.syncPending.ptsAwaiting) { + clearTimeout(this.updatesState.syncPending.timeout) + this.updatesState.syncPending = false + } else { + delete this.updatesState.syncPending.seqAwaiting; + } + } + + return true; + } + + public popPendingPtsUpdate(channelID: any) { + var curState = channelID ? this.getChannelState(channelID) : this.updatesState; + if(!curState.pendingPtsUpdates.length) { + return false; + } + curState.pendingPtsUpdates.sort((a: any, b: any) => { + return a.pts - b.pts; + }); + // console.log(dT(), 'pop update', channelID, curState.pendingPtsUpdates) + + var curPts = curState.pts; + var goodPts = false; + var goodIndex = 0; + var update; + for(var i = 0, length = curState.pendingPtsUpdates.length; i < length; i++) { + update = curState.pendingPtsUpdates[i]; + curPts += update.pts_count; + if(curPts >= update.pts) { + goodPts = update.pts; + goodIndex = i; + } + } + + if(!goodPts) { + return false; + } + + console.log(dT(), 'pop pending pts updates', goodPts, curState.pendingPtsUpdates.slice(0, goodIndex + 1)); + + curState.pts = goodPts; + for(i = 0; i <= goodIndex; i++) { + update = curState.pendingPtsUpdates[i]; + this.saveUpdate(update); + } + curState.pendingPtsUpdates.splice(0, goodIndex + 1); + + if(!curState.pendingPtsUpdates.length && curState.syncPending) { + if(!curState.syncPending.seqAwaiting) { + clearTimeout(curState.syncPending.timeout); + curState.syncPending = false; + } else { + delete curState.syncPending.ptsAwaiting; + } + } + + return true; + } + + public forceGetDifference() { + if(!this.updatesState.syncLoading) { + this.getDifference(); + } + } + + public processUpdateMessage(updateMessage: any) { + // return forceGetDifference() + var processOpts = { + date: updateMessage.date, + seq: updateMessage.seq, + seqStart: updateMessage.seq_start + }; + + switch(updateMessage._) { + case 'updatesTooLong': + case 'new_session_created': + this.forceGetDifference(); + break; + + case 'updateShort': + this.processUpdate(updateMessage.update, processOpts); + break; + + case 'updateShortMessage': + case 'updateShortChatMessage': + var isOut = updateMessage.flags & 2; + var fromID = updateMessage.from_id || (isOut ? this.myID : updateMessage.user_id); + var toID = updateMessage.chat_id + ? -updateMessage.chat_id + : (isOut ? updateMessage.user_id : this.myID); + + this.processUpdate({ + _: 'updateNewMessage', + message: { + _: 'message', + flags: updateMessage.flags, + pFlags: updateMessage.pFlags, + id: updateMessage.id, + from_id: fromID, + to_id: appPeersManager.getOutputPeer(toID), + date: updateMessage.date, + message: updateMessage.message, + fwd_from: updateMessage.fwd_from, + reply_to_msg_id: updateMessage.reply_to_msg_id, + entities: updateMessage.entities + }, + pts: updateMessage.pts, + pts_count: updateMessage.pts_count + }, processOpts); + break; + + case 'updatesCombined': + case 'updates': + appUsersManager.saveApiUsers(updateMessage.users); + appChatsManager.saveApiChats(updateMessage.chats); + + updateMessage.updates.forEach((update: any) => { + this.processUpdate(update, processOpts); + }); + break; + + default: + console.warn(dT(), 'Unknown update message', updateMessage); + } + } + + public getDifference() { + // console.trace(dT(), 'Get full diff') + let updatesState = this.updatesState; + if (!updatesState.syncLoading) { + updatesState.syncLoading = true; + updatesState.pendingSeqUpdates = {}; + updatesState.pendingPtsUpdates = []; + } + + if(updatesState.syncPending) { + clearTimeout(updatesState.syncPending.timeout); + updatesState.syncPending = false; + } + + MTProto.apiManager.invokeApi('updates.getDifference', { + pts: updatesState.pts, + date: updatesState.date, + qts: -1 + }, { + timeout: 0x7fffffff + }).then((differenceResult: any) => { + if(differenceResult._ == 'updates.differenceEmpty') { + console.log(dT(), 'apply empty diff', differenceResult.seq); + updatesState.date = differenceResult.date; + updatesState.seq = differenceResult.seq; + updatesState.syncLoading = false; + $rootScope.$broadcast('stateSynchronized'); + return false; + } + + appUsersManager.saveApiUsers(differenceResult.users); + appChatsManager.saveApiChats(differenceResult.chats); + + // Should be first because of updateMessageID + // console.log(dT(), 'applying', differenceResult.other_updates.length, 'other updates') + + differenceResult.other_updates.forEach((update: any) => { + switch(update._) { + case 'updateChannelTooLong': + case 'updateNewChannelMessage': + case 'updateEditChannelMessage': + this.processUpdate(update); + return; + } + + this.saveUpdate(update); + }); + + // console.log(dT(), 'applying', differenceResult.new_messages.length, 'new messages') + differenceResult.new_messages.forEach((apiMessage: any) => { + this.saveUpdate({ + _: 'updateNewMessage', + message: apiMessage, + pts: updatesState.pts, + pts_count: 0 + }); + }); + + var nextState = differenceResult.intermediate_state || differenceResult.state; + updatesState.seq = nextState.seq; + updatesState.pts = nextState.pts; + updatesState.date = nextState.date; + + // console.log(dT(), 'apply diff', updatesState.seq, updatesState.pts) + + if(differenceResult._ == 'updates.differenceSlice') { + this.getDifference(); + } else { + // console.log(dT(), 'finished get diff') + $rootScope.$broadcast('stateSynchronized'); + updatesState.syncLoading = false; + } + }, () => { + updatesState.syncLoading = false; + }); + } + + public getChannelDifference(channelID: any) { + var channelState = this.getChannelState(channelID); + if(!channelState.syncLoading) { + channelState.syncLoading = true; + channelState.pendingPtsUpdates = []; + } + if(channelState.syncPending) { + clearTimeout(channelState.syncPending.timeout); + channelState.syncPending = false; + } + // console.log(dT(), 'Get channel diff', appChatsManager.getChat(channelID), channelState.pts) + MTProto.apiManager.invokeApi('updates.getChannelDifference', { + channel: appChatsManager.getChannelInput(channelID), + filter: {_: 'channelMessagesFilterEmpty'}, + pts: channelState.pts, + limit: 30 + }, {timeout: 0x7fffffff}).then((differenceResult: any) => { + // console.log(dT(), 'channel diff result', differenceResult) + channelState.pts = differenceResult.pts; + + if (differenceResult._ == 'updates.channelDifferenceEmpty') { + console.log(dT(), 'apply channel empty diff', differenceResult); + channelState.syncLoading = false; + $rootScope.$broadcast('stateSynchronized'); + return false; + } + + if(differenceResult._ == 'updates.channelDifferenceTooLong') { + console.log(dT(), 'channel diff too long', differenceResult); + channelState.syncLoading = false; + delete this.channelStates[channelID]; + this.saveUpdate({_: 'updateChannelReload', channel_id: channelID}); + return false; + } + + appUsersManager.saveApiUsers(differenceResult.users); + appChatsManager.saveApiChats(differenceResult.chats); + + // Should be first because of updateMessageID + console.log(dT(), 'applying', differenceResult.other_updates.length, 'channel other updates') + differenceResult.other_updates.forEach((update: any) => { + this.saveUpdate(update); + }); + + console.log(dT(), 'applying', differenceResult.new_messages.length, 'channel new messages') + differenceResult.new_messages.forEach((apiMessage: any) => { + this.saveUpdate({ + _: 'updateNewChannelMessage', + message: apiMessage, + pts: channelState.pts, + pts_count: 0 + }); + }); + + console.log(dT(), 'apply channel diff', channelState.pts); + + if(differenceResult._ == 'updates.channelDifference' && + !differenceResult.pFlags['final']) { + this.getChannelDifference(channelID); + } else { + console.log(dT(), 'finished channel get diff'); + $rootScope.$broadcast('stateSynchronized'); + channelState.syncLoading = false; + } + }, () => { + channelState.syncLoading = false; + }); + } + + public addChannelState(channelID: number, pts: number) { + if(!pts) { + throw new Error('Add channel state without pts ' + channelID); + } + if(!(channelID in this.channelStates)) { + this.channelStates[channelID] = { + pts: pts, + pendingPtsUpdates: [], + syncPending: false, + syncLoading: false + }; + return true; + } + return false; + } + + public getChannelState(channelID: number, pts?: any) { + if(this.channelStates[channelID] === undefined) { + this.addChannelState(channelID, pts); + } + return this.channelStates[channelID]; + } + + public processUpdate(update: any, options: any = {}) { + var channelID: any = false; + switch(update._) { + case 'updateNewChannelMessage': + case 'updateEditChannelMessage': + channelID = -appPeersManager.getPeerID(update.message.to_id); + break; + case 'updateDeleteChannelMessages': + channelID = update.channel_id; + break; + case 'updateChannelTooLong': + channelID = update.channel_id; + if(!(channelID in this.channelStates)) { + return false; + } + break; + } + + var curState = channelID ? this.getChannelState(channelID, update.pts) : this.updatesState; + + // console.log(dT(), 'process', channelID, curState.pts, update) + + if(curState.syncLoading) { + return false; + } + + if(update._ == 'updateChannelTooLong') { + if(!curState.lastPtsUpdateTime || + curState.lastPtsUpdateTime < tsNow() - 10000) { + // console.trace(dT(), 'channel too long, get diff', channelID, update) + this.getChannelDifference(channelID); + } + return false; + } + + if(update._ == 'updateNewMessage' || + update._ == 'updateEditMessage' || + update._ == 'updateNewChannelMessage' || + update._ == 'updateEditChannelMessage') { + var message = update.message; + var toPeerID = appPeersManager.getPeerID(message.to_id); + var fwdHeader = message.fwd_from || {}; + var reason: any = false; + if(message.from_id && !appUsersManager.hasUser(message.from_id, message.pFlags.post/* || channelID*/) && (reason = 'author') || + fwdHeader.from_id && !appUsersManager.hasUser(fwdHeader.from_id, !!fwdHeader.channel_id) && (reason = 'fwdAuthor') || + fwdHeader.channel_id && !appChatsManager.hasChat(fwdHeader.channel_id, true) && (reason = 'fwdChannel') || + toPeerID > 0 && !appUsersManager.hasUser(toPeerID) && (reason = 'toPeer User') || + toPeerID < 0 && !appChatsManager.hasChat(-toPeerID) && (reason = 'toPeer Chat')) { + console.warn(dT(), 'Not enough data for message update', toPeerID, reason, message) + if(channelID && appChatsManager.hasChat(channelID)) { + this.getChannelDifference(channelID); + } else { + this.forceGetDifference(); + } + return false; + } + } else if(channelID && !appChatsManager.hasChat(channelID)) { + // console.log(dT(), 'skip update, missing channel', channelID, update) + return false; + } + + var popPts; + var popSeq; + + if(update.pts) { + var newPts = curState.pts + (update.pts_count || 0); + if(newPts < update.pts) { + console.warn(dT(), 'Pts hole', curState, update, channelID && appChatsManager.getChat(channelID)); + curState.pendingPtsUpdates.push(update); + if(!curState.syncPending) { + curState.syncPending = { + timeout: setTimeout(() => { + if(channelID) { + this.getChannelDifference(channelID); + } else { + this.getDifference(); + } + }, 5000) + } + } + + curState.syncPending.ptsAwaiting = true; + return false; + } + + if(update.pts > curState.pts) { + curState.pts = update.pts; + popPts = true; + + curState.lastPtsUpdateTime = tsNow(); + } else if(update.pts_count) { + // console.warn(dT(), 'Duplicate update', update) + return false; + } + + if(channelID && options.date && this.updatesState.date < options.date) { + this.updatesState.date = options.date; + } + } else if (!channelID && options.seq > 0) { + var seq = options.seq; + var seqStart = options.seqStart || seq; + + if(seqStart != curState.seq + 1) { + if(seqStart > curState.seq) { + console.warn(dT(), 'Seq hole', curState, curState.syncPending && curState.syncPending.seqAwaiting); + + if(curState.pendingSeqUpdates[seqStart] === undefined) { + curState.pendingSeqUpdates[seqStart] = {seq: seq, date: options.date, updates: []}; + } + curState.pendingSeqUpdates[seqStart].updates.push(update); + + if(!curState.syncPending) { + curState.syncPending = { + timeout: setTimeout(() => { + this.getDifference(); + }, 5000) + } + } + + if(!curState.syncPending.seqAwaiting || + curState.syncPending.seqAwaiting < seqStart) { + curState.syncPending.seqAwaiting = seqStart; + } + return false; + } + } + + if(curState.seq != seq) { + curState.seq = seq; + if(options.date && curState.date < options.date) { + curState.date = options.date; + } + + popSeq = true; + } + } + + this.saveUpdate(update); + + if(popPts) { + this.popPendingPtsUpdate(channelID); + } else if(popSeq) { + this.popPendingSeqUpdate(); + } + } + + public saveUpdate(update: any) { + $rootScope.$broadcast('apiUpdate', update); + } + + public attach() { + MTProto.networkerFactory.setUpdatesProcessor(this.processUpdateMessage.bind(this)); + MTProto.apiManager.invokeApi('updates.getState', {}, {noErrorBox: true}).then((stateResult: any) => { + this.updatesState.seq = stateResult.seq; + this.updatesState.pts = stateResult.pts; + this.updatesState.date = stateResult.date; + setTimeout(() => { + this.updatesState.syncLoading = false; + }, 1000); + + // updatesState.seq = 1 + // updatesState.pts = stateResult.pts - 5000 + // updatesState.date = 1 + // getDifference() + }); + } +} + +export default new ApiUpdatesManager(); diff --git a/src/lib/appManagers/appChatsManager.ts b/src/lib/appManagers/appChatsManager.ts new file mode 100644 index 00000000..c48a1aa8 --- /dev/null +++ b/src/lib/appManagers/appChatsManager.ts @@ -0,0 +1,280 @@ +import { $rootScope, isObject, SearchIndexManager, safeReplaceObject, copy } from "../utils"; +import { RichTextProcessor } from "../richtextprocessor"; +import appUsersManager from "./appUsersManager"; + +export class AppChatsManager { + public chats: any = {}; + public usernames: any = {}; + public channelAccess: any = {}; + public megagroups: any = {}; + public cachedPhotoLocations: any = {}; + + constructor() { + $rootScope.$on('apiUpdate', (e: CustomEvent) => { + // console.log('on apiUpdate', update) + let update = e.detail; + switch(update._) { + case 'updateChannel': + var channelID = update.channel_id; + $rootScope.$broadcast('channel_settings', {channelID: channelID}); + break; + } + }); + } + + public saveApiChats(apiChats: any[]) { + apiChats.forEach(this.saveApiChat.bind(this)); + } + + public saveApiChat(apiChat: any) { + if(!isObject(apiChat)) { + return; + } + + apiChat.rTitle = apiChat.title || 'chat_title_deleted'; + apiChat.rTitle = RichTextProcessor.wrapRichText(apiChat.title, {noLinks: true, noLinebreaks: true}) || 'chat_title_deleted'; + + var result = this.chats[apiChat.id]; + var titleWords = SearchIndexManager.cleanSearchText(apiChat.title || '').split(' '); + var firstWord = titleWords.shift(); + var lastWord = titleWords.pop(); + apiChat.initials = firstWord.charAt(0) + (lastWord ? lastWord.charAt(0) : firstWord.charAt(1)); + + apiChat.num = (Math.abs(apiChat.id >> 1) % 8) + 1; + + if(apiChat.pFlags === undefined) { + apiChat.pFlags = {}; + } + + if(apiChat.pFlags.min) { + if(result !== undefined) { + return; + } + } + + if(apiChat._ == 'channel' && + apiChat.participants_count === undefined && + result !== undefined && + result.participants_count) { + apiChat.participants_count = result.participants_count; + } + + if(apiChat.username) { + var searchUsername = SearchIndexManager.cleanUsername(apiChat.username); + this.usernames[searchUsername] = apiChat.id; + } + + if(result === undefined) { + result = this.chats[apiChat.id] = apiChat; + } else { + safeReplaceObject(result, apiChat); + $rootScope.$broadcast('chat_update', apiChat.id); + } + + if(this.cachedPhotoLocations[apiChat.id] !== undefined) { + safeReplaceObject(this.cachedPhotoLocations[apiChat.id], apiChat && + apiChat.photo ? apiChat.photo : {empty: true}); + } + } + + public getChat(id: number) { + return this.chats[id] || {id: id, deleted: true, access_hash: this.channelAccess[id]}; + } + + public hasRights(id: number, action: any) { + if(!(id in this.chats)) { + return false; + } + var chat = this.getChat(id); + if(chat._ == 'chatForbidden' || + chat._ == 'channelForbidden' || + chat.pFlags.kicked || + chat.pFlags.left) { + return false; + } + if(chat.pFlags.creator) { + return true; + } + + switch(action) { + case 'send': + if(chat._ == 'channel' && + !chat.pFlags.megagroup && + !chat.pFlags.editor) { + return false; + } + break; + + case 'edit_title': + case 'edit_photo': + case 'invite': + if(chat._ == 'channel') { + if(chat.pFlags.megagroup) { + if(!chat.pFlags.editor && + !(action == 'invite' && chat.pFlags.democracy)) { + return false; + } + } else { + return false; + } + } else { + if(chat.pFlags.admins_enabled && + !chat.pFlags.admin) { + return false; + } + } + break; + } + return true; + } + + public resolveUsername(username: string) { + return this.usernames[username] || 0; + } + + public saveChannelAccess(id: number, accessHash: string) { + this.channelAccess[id] = accessHash; + } + + public saveIsMegagroup(id: number) { + this.megagroups[id] = true; + } + + public isChannel(id: number) { + var chat = this.chats[id]; + if(chat && (chat._ == 'channel' || chat._ == 'channelForbidden') || + this.channelAccess[id]) { + return true; + } + return false; + } + + public isMegagroup(id: number) { + if(this.megagroups[id]) { + return true; + } + + var chat = this.chats[id]; + if(chat && chat._ == 'channel' && chat.pFlags.megagroup) { + return true; + } + return false; + } + + public isBroadcast(id: number) { + return this.isChannel(id) && !this.isMegagroup(id); + } + + public getChatInput(id: number) { + return id || 0; + } + + public getChannelInput(id: number) { + if(!id) { + return {_: 'inputChannelEmpty'}; + } + + return { + _: 'inputChannel', + channel_id: id, + access_hash: this.getChat(id).access_hash || this.channelAccess[id] || 0 + }; + } + + public hasChat(id: number, allowMin?: any) { + var chat = this.chats[id] + return isObject(chat) && (allowMin || !chat.pFlags.min); + } + + public getChatPhoto(id: number) { + var chat = this.getChat(id); + + if(this.cachedPhotoLocations[id] === undefined) { + this.cachedPhotoLocations[id] = chat && chat.photo ? chat.photo : {empty: true}; + } + + return this.cachedPhotoLocations[id]; + } + + public getChatString(id: number) { + var chat = this.getChat(id); + if(this.isChannel(id)) { + return (this.isMegagroup(id) ? 's' : 'c') + id + '_' + chat.access_hash; + } + return 'g' + id; + } + + public wrapForFull(id: number, fullChat: any) { + var chatFull = copy(fullChat); + var chat = this.getChat(id); + + if (!chatFull.participants_count) { + chatFull.participants_count = chat.participants_count; + } + + if(chatFull.participants && + chatFull.participants._ == 'chatParticipants') { + chatFull.participants.participants = this.wrapParticipants(id, chatFull.participants.participants); + } + + if (chatFull.about) { + chatFull.rAbout = RichTextProcessor.wrapRichText(chatFull.about, {noLinebreaks: true}); + } + + chatFull.peerString = this.getChatString(id); + chatFull.chat = chat; + + return chatFull; + } + + public wrapParticipants(id: number, participants: any[]) { + var chat = this.getChat(id); + var myID = appUsersManager.getSelf().id; + if(this.isChannel(id)) { + var isAdmin = chat.pFlags.creator || chat.pFlags.editor || chat.pFlags.moderator + participants.forEach((participant) => { + participant.canLeave = myID == participant.user_id; + participant.canKick = isAdmin && participant._ == 'channelParticipant'; + + // just for order by last seen + participant.user = appUsersManager.getUser(participant.user_id); + }); + } else { + var isAdmin = chat.pFlags.creator || chat.pFlags.admins_enabled && chat.pFlags.admin + participants.forEach((participant) => { + participant.canLeave = myID == participant.user_id; + participant.canKick = !participant.canLeave && ( + chat.pFlags.creator || + participant._ == 'chatParticipant' && (isAdmin || myID == participant.inviter_id) + ); + + // just for order by last seen + participant.user = appUsersManager.getUser(participant.user_id); + }); + } + return participants; + } + + /* public openChat(chatID: number, accessHash: string) { + var scope = $rootScope.$new() + scope.chatID = chatID + + if(this.isChannel(chatID)) { + var modalInstance = $modal.open({ + templateUrl: templateUrl('channel_modal'), + controller: 'ChannelModalController', + scope: scope, + windowClass: 'chat_modal_window channel_modal_window mobile_modal' + }) + } else { + var modalInstance = $modal.open({ + templateUrl: templateUrl('chat_modal'), + controller: 'ChatModalController', + scope: scope, + windowClass: 'chat_modal_window mobile_modal' + }) + } + } */ +} + +export default new AppChatsManager(); diff --git a/src/lib/appManagers/appDialogsManager.ts b/src/lib/appManagers/appDialogsManager.ts new file mode 100644 index 00000000..da71a3a8 --- /dev/null +++ b/src/lib/appManagers/appDialogsManager.ts @@ -0,0 +1,425 @@ +import { MTProto } from "../mtproto/mtproto"; +import { $rootScope, findUpTag } from "../utils"; +import appImManager from "./appImManager"; +import appPeersManager from './appPeersManager'; +import { DialogDom } from "../services"; +import appMessagesManager from "./appMessagesManager"; +import appUsersManager from "./appUsersManager"; +import appSidebarRight from "./appSidebarRight"; +import { RichTextProcessor } from "../richtextprocessor"; +import { ripple } from "../../components/misc"; + +export class AppDialogsManager { + public pinnedChatList = document.getElementById('dialogs-pinned') as HTMLUListElement; + public chatList = document.getElementById('dialogs') as HTMLUListElement; + + private topbar: HTMLDivElement = null; + private chatInput: HTMLDivElement = null; + + public myID = 0; + public doms: {[x: number]: any} = {}; + + constructor() { + MTProto.apiManager.getUserID().then((id) => { + this.myID = id; + }); + + $rootScope.$on('user_auth', (e: CustomEvent) => { + let userAuth = e.detail; + this.myID = userAuth ? userAuth.id : 0; + }); + + //let chatClosedDiv = document.getElementById('chat-closed'); + this.topbar = document.getElementById('topbar') as HTMLDivElement; + this.chatInput = document.getElementById('chat-input') as HTMLDivElement; + + this.setListClickListener(this.pinnedChatList); + this.setListClickListener(this.chatList); + } + + public setListClickListener(list: HTMLUListElement, onFound?: () => void) { + list.addEventListener('click', (e: Event) => { + let target = e.target as HTMLElement; + let elem = target.tagName != 'LI' ? findUpTag(target, 'LI') : target; + + if(elem) { + /* if(chatClosedDiv) { + chatClosedDiv.style.display = 'none'; + } */ + this.topbar.style.display = this.chatInput.style.display = ''; + + if(onFound) onFound(); + + + let peerID = +elem.getAttribute('data-peerID'); + let lastMsgID = +elem.getAttribute('data-mid'); + appImManager.setPeer(peerID, lastMsgID); + } else /* if(chatClosedDiv) */ { + appSidebarRight.toggleSidebar(false); + this.topbar.style.display = this.chatInput.style.display = 'none'; + //chatClosedDiv.style.display = ''; + } + }); + } + + public async loadDialogPhoto(div: HTMLDivElement, peerID: number | string, isDialog = false): Promise { + let inputPeer: any; + let location: any; + if(typeof(peerID) != 'string') { + inputPeer = appPeersManager.getInputPeerByID(peerID); + location = appPeersManager.getPeerPhoto(peerID); + } + + //console.log('loadDialogPhoto location:', location, inputPeer); + + if(peerID == this.myID && (isDialog || $rootScope.selectedPeerID == this.myID)) { + if(div.firstChild) { + div.firstChild.remove(); + } + + div.style.fontSize = ''; + div.classList.add('tgico-savedmessages'); + return true; + } + + //if(!location || location.empty || !location.photo_small) { + if(div.firstChild) { + div.firstChild.remove(); + } + + div.classList.remove('tgico-savedmessages'); + div.style.fontSize = ''; + + let abbrSplitted = (typeof(peerID) != 'string' ? appPeersManager.getPeerTitle(peerID) : peerID).split(' '); + let abbr = (abbrSplitted.length == 2 ? + abbrSplitted[0][0] + abbrSplitted[1][0] : + abbrSplitted[0][0]).toUpperCase(); + + //div.innerText = peer.initials.toUpperCase(); + div.innerText = abbr.toUpperCase(); + //return Promise.resolve(true); + //} + + if(!location || location.empty || !location.photo_small) { + return true; + } + + let res = await MTProto.apiFileManager.downloadSmallFile({ + _: 'inputPeerPhotoFileLocation', + dc_id: location.dc_id, + flags: 0, + peer: inputPeer, + volume_id: location.photo_small.volume_id, + local_id: location.photo_small.local_id + }); + + let img = new Image(); + img.src = URL.createObjectURL(res); + div.innerHTML = ''; + div.style.fontSize = '0'; // need + div.append(img); + + return true; + } + + public sortDom() { + /* let sorted = */appMessagesManager.dialogsStorage.dialogs + .filter((d: any) => !d.pFlags.pinned) + .sort((a: any, b: any) => { + let timeA = appMessagesManager.getMessage(a.top_message).date; + let timeB = appMessagesManager.getMessage(b.top_message).date; + + return timeB - timeA; + }) + .forEach((d: any) => { + let dom = this.getDialogDom(d.peerID); + if(!dom) return; + + this.chatList.append(dom.listEl); + }); + } + + public setLastMessage(dialog: any, lastMessage?: any, dom?: DialogDom) { + if(!lastMessage) { + lastMessage = appMessagesManager.getMessage(dialog.top_message); + } + + if(lastMessage._ == 'messageEmpty') return; + + if(!dom) { + dom = this.getDialogDom(dialog.peerID); + } + + let peer = dialog.peer; + let peerID = dialog.peerID; + //let peerID = appMessagesManager.getMessagePeer(lastMessage); + + //console.log('setting last message:', lastMessage); + + /* if(!dom.lastMessageSpan.classList.contains('user-typing')) */ { + let lastMessageText = ''; + + if(lastMessage.media) { + switch(lastMessage.media._) { + case 'messageMediaPhoto': + lastMessageText += 'Photo' + (lastMessage.message ? ', ' : '') + ''; + break; + case 'messageMediaGeo': + lastMessageText += 'Geolocation'; + break; + case 'messageMediaDocument': + let document = lastMessage.media.document; + + let found = false; + for(let attribute of document.attributes) { + if(found) break; + + switch(attribute._) { + case 'documentAttributeSticker': + lastMessageText += RichTextProcessor.wrapRichText(attribute.alt) + 'Sticker'; + found = true; + break; + case 'documentAttributeFilename': + lastMessageText += '' + attribute.file_name + ''; + found = true; + break; + /* default: + console.warn('Got unknown document type!', lastMessage); + break; */ + } + } + + if(document.type == 'video') { + lastMessageText += 'Video'; + found = true; + } else if(document.type == 'voice') { + lastMessageText += 'Voice message'; + found = true; + } + + if(found) { + break; + } + + default: + console.warn('Got unknown lastMessage.media type!', lastMessage); + break; + } + } + + dom.lastMessageSpan.innerHTML = lastMessageText + + (lastMessage.message ? RichTextProcessor.wrapRichText(lastMessage.message.replace(/\n/g, ' '), {noLinebreakers: true}) : ''); + + /* if(lastMessage.from_id == auth.id) { // You: */ + if(peer._ != 'peerUser' && peerID != -lastMessage.from_id) { + let sender = appUsersManager.getUser(lastMessage.from_id); + if(sender && sender.id) { + let senderBold = document.createElement('b'); + + let str = ''; + if(sender.id == this.myID) { + str = 'You'; + } else { + str = sender.first_name || sender.last_name || sender.username; + } + + senderBold.innerText = str + ': '; + //console.log(sender, senderBold.innerText); + dom.lastMessageSpan.prepend(senderBold); + } else console.log('no sender', lastMessage, peerID); + } + } + + let timeStr = ''; + let timestamp = lastMessage.date; + let now = Date.now() / 1000; + let time = new Date(lastMessage.date * 1000); + + if((now - timestamp) < 86400) { // if < 1 day + timeStr = ('0' + time.getHours()).slice(-2) + + ':' + ('0' + time.getMinutes()).slice(-2); + } else if((now - timestamp) < (86400 * 7)) { // week + let date = new Date(timestamp * 1000); + timeStr = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()]; + } else { + let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + + timeStr = months[time.getMonth()] + + ' ' + ('0' + time.getDate()).slice(-2); + } + + dom.lastTimeSpan.innerHTML = timeStr; + + dom.listEl.setAttribute('data-mid', lastMessage.mid); + + if(this.doms[peerID]) { + this.setUnreadMessages(dialog); + } + } + + public setUnreadMessages(dialog: any) { + let dom = this.getDialogDom(dialog.peerID); + + if(dialog.peerID == 228260936) { + console.log('dialog setUnreadMessages', dialog); + } + + dom.statusSpan.innerHTML = ''; + let lastMessage = appMessagesManager.getMessage(dialog.top_message); + if(lastMessage._ != 'messageEmpty' && + lastMessage.from_id == this.myID && lastMessage.peerID != this.myID && + dialog.read_outbox_max_id) { // maybe comment, 06.20.2020 + let outgoing = (lastMessage.pFlags && lastMessage.pFlags.unread) + /* && dialog.read_outbox_max_id != 0 */; // maybe uncomment, 31.01.2020 + + console.log('outgoing', outgoing, lastMessage); + + if(outgoing) { + dom.statusSpan.classList.remove('tgico-checks'); + dom.statusSpan.classList.add('tgico-check'); + } else { + dom.statusSpan.classList.remove('tgico-check'); + dom.statusSpan.classList.add('tgico-checks'); + } + } else dom.statusSpan.classList.remove('tgico-check', 'tgico-checks'); + + dom.unreadMessagesSpan.innerHTML = ''; + if(dialog.unread_count) { + dom.unreadMessagesSpan.innerHTML = dialog.unread_count; + dom.unreadMessagesSpan.classList.remove('tgico-pinnedchat'); + dom.unreadMessagesSpan.classList.add(new Date(dialog.notify_settings.mute_until * 1000) > new Date() ? + 'unread-muted' : 'unread'); + } else if(dialog.pFlags.pinned) { + dom.unreadMessagesSpan.classList.remove('unread', 'unread-muted'); + dom.unreadMessagesSpan.classList.add('tgico-pinnedchat'); + } + } + + public getDialogDom(peerID: number) { + return this.doms[peerID] as DialogDom; + } + + public addDialog(dialog: any, container?: HTMLUListElement, drawStatus = true) { + let peerID: number = dialog.peerID; + + if((peerID in this.doms) && !container) return; + + let title = appPeersManager.getPeerTitle(peerID); + + let avatarDiv = document.createElement('div'); + avatarDiv.classList.add('user-avatar'); + + if(drawStatus && peerID != this.myID) { + let peer = dialog.peer; + + switch(peer._) { + case 'peerUser': + let user = appUsersManager.getUser(peerID); + //console.log('found user', user); + + if(user.status && user.status._ == 'userStatusOnline') { + avatarDiv.classList.add('is-online'); + } + + break; + default: + break; + } + } + + let captionDiv = document.createElement('div'); + captionDiv.classList.add('user-caption'); + + let titleSpan = document.createElement('span'); + titleSpan.classList.add('user-title'); + + if(peerID == this.myID) { + title = 'Saved Messages'; + } + + //console.log('trying to load photo for:', title); + this.loadDialogPhoto(avatarDiv, dialog.peerID, true); + + titleSpan.innerText = title; + //p.classList.add('') + + let span = document.createElement('span'); + span.classList.add('user-last-message'); + + //captionDiv.append(titleSpan); + //captionDiv.append(span); + + let li = document.createElement('li'); + li.classList.add('rp'); + li.append(avatarDiv, captionDiv); + li.setAttribute('data-peerID', '' + peerID); + + ripple(li); + + /* let detailsDiv = document.createElement('div'); + detailsDiv.classList.add('dialog-details'); */ + + let statusSpan = document.createElement('span'); + statusSpan.classList.add('message-status'); + + let lastTimeSpan = document.createElement('span'); + lastTimeSpan.classList.add('message-time'); + + let unreadMessagesSpan = document.createElement('span'); + + let titleP = document.createElement('p'); + + let rightSpan = document.createElement('span'); + rightSpan.append(statusSpan, lastTimeSpan); + titleP.append(titleSpan, rightSpan); + + let messageP = document.createElement('p'); + messageP.append(span, unreadMessagesSpan); + + captionDiv.append(titleP, messageP); + + let dom: DialogDom = { + avatarDiv, + captionDiv, + titleSpan, + statusSpan, + lastTimeSpan, + unreadMessagesSpan, + lastMessageSpan: span, + listEl: li + }; + + if(!container) { + (dialog.pFlags.pinned ? this.pinnedChatList : this.chatList).append(li); + this.doms[dialog.peerID] = dom; + this.setLastMessage(dialog); + } else { + container.append(li); + } + + return {dom, dialog}; + } + + public setTyping(dialog: any, user: any) { + let dom = this.getDialogDom(dialog.peerID); + + let str = ''; + + let senderBold = document.createElement('i'); + if(dialog.peerID < 0) str = (user.first_name || user.last_name || user.username) + ' '; + str += 'typing...'; + senderBold.innerText = str; + + dom.lastMessageSpan.innerHTML = ''; + dom.lastMessageSpan.append(senderBold); + dom.lastMessageSpan.classList.add('user-typing'); + } + + public unsetTyping(dialog: any) { + let dom = this.getDialogDom(dialog.peerID); + dom.lastMessageSpan.classList.remove('user-typing'); + this.setLastMessage(dialog, null, dom); + } +} + +export default new AppDialogsManager(); diff --git a/src/lib/appManagers/appDocsManager.ts b/src/lib/appManagers/appDocsManager.ts new file mode 100644 index 00000000..20bd25b8 --- /dev/null +++ b/src/lib/appManagers/appDocsManager.ts @@ -0,0 +1,258 @@ +import apiFileManager, { CancellablePromise } from '../mtproto/apiFileManager'; +import {$rootScope} from '../utils'; +import FileManager from '../filemanager'; +import {RichTextProcessor} from '../richtextprocessor'; +//import { MTDocument } from '../../components/misc'; + +class AppDocsManager { + private docs: any = {}; + + constructor() { + + } + + public saveDoc(apiDoc: /* MTDocument */any, context?: any) { + this.docs[apiDoc.id] = apiDoc; + + if(context) { + Object.assign(apiDoc, context); + } + + if(apiDoc.thumb && apiDoc.thumb._ == 'photoCachedSize') { + apiFileManager.saveSmallFile(apiDoc.thumb.location, apiDoc.thumb.bytes); + + // Memory + apiDoc.thumb.size = apiDoc.thumb.bytes.length; + delete apiDoc.thumb.bytes; + apiDoc.thumb._ = 'photoSize'; + } + + if(apiDoc.thumb && apiDoc.thumb._ == 'photoSizeEmpty') { + delete apiDoc.thumb; + } + + apiDoc.attributes.forEach((attribute: any) => { + switch(attribute._) { + case 'documentAttributeFilename': + apiDoc.file_name = attribute.file_name + break; + + case 'documentAttributeAudio': + apiDoc.duration = attribute.duration + apiDoc.audioTitle = attribute.title + apiDoc.audioPerformer = attribute.performer + apiDoc.type = attribute.pFlags.voice ? 'voice' : 'audio' + break; + + case 'documentAttributeVideo': + apiDoc.duration = attribute.duration; + apiDoc.w = attribute.w; + apiDoc.h = attribute.h; + if(apiDoc.thumbs && attribute.pFlags.round_message) { + apiDoc.type = 'round'; + } else if(apiDoc.thumbs) { + apiDoc.type = 'video'; + } + break; + + case 'documentAttributeSticker': + apiDoc.sticker = true; + + if(attribute.alt !== undefined) { + apiDoc.stickerEmojiRaw = attribute.alt; + apiDoc.stickerEmoji = RichTextProcessor.wrapRichText(apiDoc.stickerEmojiRaw, {noLinks: true, noLinebreaks: true}); + } + + if(attribute.stickerset) { + if(attribute.stickerset._ == 'inputStickerSetEmpty') { + delete attribute.stickerset + } else if(attribute.stickerset._ == 'inputStickerSetID') { + apiDoc.stickerSetInput = attribute.stickerset + } + } + + if(apiDoc.thumbs && apiDoc.mime_type == 'image/webp') { + apiDoc.type = 'sticker' + } else if(apiDoc.mime_type == 'application/x-tgsticker') { + apiDoc.type = 'sticker'; + apiDoc.animated = true; + } + break; + + case 'documentAttributeImageSize': + apiDoc.w = attribute.w; + apiDoc.h = attribute.h; + break; + + case 'documentAttributeAnimated': + if((apiDoc.mime_type == 'image/gif' || apiDoc.mime_type == 'video/mp4') && apiDoc.thumbs) { + apiDoc.type = 'gif'; + } + + apiDoc.animated = true; + break; + } + }); + + if(!apiDoc.mime_type) { + switch(apiDoc.type) { + case 'gif': + apiDoc.mime_type = 'video/mp4'; + break; + case 'video': + case 'round': + apiDoc.mime_type = 'video/mp4'; + break; + case 'sticker': + apiDoc.mime_type = 'image/webp' + break + case 'audio': + apiDoc.mime_type = 'audio/mpeg' + break + case 'voice': + apiDoc.mime_type = 'audio/ogg' + break + default: + apiDoc.mime_type = 'application/octet-stream' + break + } + } + + if(!apiDoc.file_name) { + apiDoc.file_name = '' + } + + if(apiDoc._ == 'documentEmpty') { + apiDoc.size = 0; + } + } + + public getDoc(docID: string) { + return this.docs[docID] || {_: 'documentEmpty'}; + } + + public hasDoc(docID: string) { + return this.docs[docID] !== undefined; + } + + public getFileName(doc: any) { + if (doc.file_name) { + return doc.file_name + } + var fileExt = '.' + doc.mime_type.split('/')[1] + if (fileExt == '.octet-stream') { + fileExt = '' + } + return 't_' + (doc.type || 'file') + doc.id + fileExt + } + + public updateDocDownloaded(docID: string) { + var doc = this.docs[docID]; + var inputFileLocation = { + _: 'inputDocumentFileLocation', + id: docID, + access_hash: doc.access_hash, + version: doc.version, + file_name: this.getFileName(doc) + }; + + if(doc.downloaded === undefined) { + apiFileManager.getDownloadedFile(inputFileLocation, doc.size).then(() => { + doc.downloaded = true; + }, () => { + doc.downloaded = false; + }); + } + } + + public downloadDoc(docID: any, toFileEntry?: any): CancellablePromise { + let doc: any; + if(typeof(docID) === 'string') { + doc = this.docs[docID]; + } else { + doc = docID; + } + + var inputFileLocation = { + _: 'inputDocumentFileLocation', + id: doc.id, + access_hash: doc.access_hash, + file_reference: doc.file_reference, + thumb_size: '', + version: doc.version, + file_name: this.getFileName(doc) + }; + + if(doc._ == 'documentEmpty') { + return Promise.reject(); + } + + if(doc.downloaded && !toFileEntry) { + var cachedBlob = apiFileManager.getCachedFile(inputFileLocation); + if(cachedBlob) { + return Promise.resolve(cachedBlob); + } + } + + //historyDoc.progress = {enabled: !historyDoc.downloaded, percent: 1, total: doc.size}; + + // нет смысла делать объект с выполняющимися промисами, нижняя строка и так вернёт загружающийся + var downloadPromise: CancellablePromise = apiFileManager.downloadFile(doc.dc_id, inputFileLocation, doc.size, { + mimeType: doc.mime_type || 'application/octet-stream', + toFileEntry: toFileEntry + }); + + downloadPromise.then((blob) => { + if(blob) { + doc.downloaded = true; + + /* FileManager.getFileCorrectUrl(blob, doc.mime_type).then((url) => { + doc.url = url; + }); */ + } + + /* doc.progress.percent = 100; + setTimeout(() => { + delete doc.progress; + }, 0); */ + // console.log('file save done') + + return blob; + }, (e) => { + console.log('document download failed', e); + //historyDoc.progress.enabled = false; + }); + + /* downloadPromise.notify = (progress) => { + console.log('dl progress', progress); + historyDoc.progress.enabled = true; + historyDoc.progress.done = progress.done; + historyDoc.progress.percent = Math.max(1, Math.floor(100 * progress.done / progress.total)); + $rootScope.$broadcast('history_update'); + }; */ + + //historyDoc.progress.cancel = downloadPromise.cancel; + + return downloadPromise; + } + + /* public saveDocFile(docID: string) { + var doc = this.docs[docID] + var historyDoc = this.docsForHistory[docID] || doc || {} + var mimeType = doc.mime_type + var fileName = this.getFileName(doc) + var ext = (fileName.split('.', 2) || [])[1] || '' + + FileManager.chooseSave(this.getFileName(doc), ext, doc.mime_type).then((writableFileEntry) => { + if (writableFileEntry) { + this.downloadDoc(docID, writableFileEntry) + } + }, () => { + this.downloadDoc(docID).then((blob) => { + FileManager.download(blob, doc.mime_type, fileName) + }) + }) + } */ +} + +export default new AppDocsManager(); diff --git a/src/lib/appManagers/appImManager.ts b/src/lib/appManagers/appImManager.ts new file mode 100644 index 00000000..3af8ebf5 --- /dev/null +++ b/src/lib/appManagers/appImManager.ts @@ -0,0 +1,1223 @@ +import { MTProto } from "../mtproto/mtproto"; +import { $rootScope, isElementInViewport, numberWithCommas } from "../utils"; +import appUsersManager from "./appUsersManager"; +import appMessagesManager from "./appMessagesManager"; +import appPeersManager from "./appPeersManager"; +import appProfileManager from "./appProfileManager"; +import { ProgressivePreloader, wrapDocument, wrapSticker, wrapVideo } from "../../components/misc"; +import appDialogsManager from "./appDialogsManager"; +import { RichTextProcessor } from "../richtextprocessor"; +import appPhotosManager from "./appPhotosManager"; +import appSidebarRight from './appSidebarRight'; + +import { logger } from "../polyfill"; +import lottieLoader from "../lottieLoader"; +import appMediaViewer from "./appMediaViewer"; +import appSidebarLeft from "./appSidebarLeft"; +import appChatsManager from "./appChatsManager"; + +console.log('appImManager included!'); + +let testScroll = false; + +class ScrollPosition { + public previousScrollHeightMinusTop = 0; + public readyFor = 'up'; + public container: HTMLElement; + + constructor(public node: HTMLElement) { + this.container = node.parentElement; + } + + /* public restore() { + if(!this.scroll) return; + //console.log('restore', this.readyFor, this.previousScrollHeightMinusTop); + + //if(this.readyFor === 'up') { + this.scroll.update(true); + + //console.log('restore 2', this.node.scrollHeight, (this.node.scrollHeight + //- this.previousScrollHeightMinusTop) + 'px') + + this.scroll.scroll({y: (this.node.scrollHeight + - this.previousScrollHeightMinusTop) + 'px'}); + //} + + // 'down' doesn't need to be special cased unless the + // content was flowing upwards, which would only happen + // if the container is position: absolute, bottom: 0 for + // a Facebook messages effect + } + + public prepareFor(direction: string) { + if(!this.scroll) return; + + this.readyFor = direction || 'up'; + + this.scroll.update(true); + let pos = this.scroll.scroll(); + this.previousScrollHeightMinusTop = this.node.scrollHeight + - pos.position.y; + } */ + + public restore() { + //console.log('scrollPosition restore 2', this.node.scrollHeight, (this.node.scrollHeight + //- this.previousScrollHeightMinusTop) + 'px', this.container); + + //if(this.readyFor === 'up') { + this.container.scrollTop = this.node.scrollHeight + - this.previousScrollHeightMinusTop; + //} + + // 'down' doesn't need to be special cased unless the + // content was flowing upwards, which would only happen + // if the container is position: absolute, bottom: 0 for + // a Facebook messages effect + } + + public prepareFor(direction: string) { + this.readyFor = direction || 'up'; + this.previousScrollHeightMinusTop = this.node.scrollHeight + - this.container.scrollTop; + + //console.log('scrollPosition prepareFor', direction, this.node.scrollHeight, this.previousScrollHeightMinusTop + 'px') + } +} + +export class AppImManager { + public pageEl = document.querySelector('.page-chats') as HTMLDivElement; + public btnMute = this.pageEl.querySelector('.tool-mute') as HTMLButtonElement; + public avatarEl = document.getElementById('im-avatar') as HTMLDivElement; + public titleEl = document.getElementById('im-title') as HTMLDivElement; + public subtitleEl = document.getElementById('im-subtitle') as HTMLDivElement; + public chatInner = document.getElementById('bubbles-inner') as HTMLDivElement; + public searchBtn = this.pageEl.querySelector('.chat-search-button') as HTMLButtonElement; + public firstContainerDiv: HTMLDivElement; + public lastContainerDiv: HTMLDivElement; + private getHistoryPromise: Promise; + private getHistoryTimeout = 0; + + public myID = 0; + public peerID = 0; + + public lastDialog: any; + public bubbles: {[mid: number]: HTMLDivElement} = {}; + public dateMessages: {[timestamp: number]: { div: HTMLDivElement, firstTimestamp: number }} = {}; + public unreaded: number[] = []; + public unreadOut: number[] = []; + + public offline = false; + public updateStatusInterval = 0; + + public pinnedMsgID = 0; + private pinnedMessageContainer = this.pageEl.querySelector('.pinned-message') as HTMLDivElement; + private pinnedMessageContent = this.pinnedMessageContainer.querySelector('.pinned-message-subtitle') as HTMLDivElement; + + private firstTopMsgID = 0; + + public loadMediaQueue: Array<() => Promise> = []; + private loadMediaQueuePromise: Promise = null; + + public scroll: HTMLDivElement = null; + public scrollPosition: ScrollPosition = null; + + private log: ReturnType; + + private preloader: ProgressivePreloader = null; + + private typingTimeouts: {[peerID: number]: number} = {}; + private typingUsers: {[userID: number]: number} = {} // to peerID + + constructor() { + this.log = logger('IM'); + + this.preloader = new ProgressivePreloader(null, false); + + MTProto.apiManager.getUserID().then((id) => { + this.myID = id; + }); + + $rootScope.$on('user_auth', (e: CustomEvent) => { + let userAuth = e.detail; + this.myID = userAuth ? userAuth.id : 0; + }); + + $rootScope.$on('history_append', (e: CustomEvent) => { + let details = e.detail; + + this.renderMessagesByIDs([details.messageID]); + }); + + $rootScope.$on('history_multiappend', (e: CustomEvent) => { + let msgIDsByPeer = e.detail; + if(!(this.peerID in msgIDsByPeer)) return; + + let msgIDs = msgIDsByPeer[this.peerID]; + + this.renderMessagesByIDs(msgIDs); + }); + + $rootScope.$on('message_sent', (e: CustomEvent) => { + let {tempID, mid} = e.detail; + + let bubble = this.bubbles[tempID]; + if(bubble) { + this.bubbles[mid] = bubble; + delete this.bubbles[tempID]; + } + + let length = this.unreadOut.length; + for(let i = 0; i < length; i++) { + if(this.unreadOut[i] == tempID) { + this.unreadOut[i] = mid; + } + } + }); + + $rootScope.$on('messages_downloaded', (e: CustomEvent) => { + let mid = e.detail; + + if(this.pinnedMsgID == mid) { + let message = appMessagesManager.getMessage(mid); + this.log('setting pinned message', message); + this.pinnedMessageContainer.setAttribute('data-mid', mid); + this.pinnedMessageContainer.style.display = ''; + this.pinnedMessageContent.innerHTML = RichTextProcessor.wrapPlainText(message.message); + } + }); + + $rootScope.$on('apiUpdate', (e: CustomEvent) => { + let update = e.detail; + + switch(update._) { + case 'updateUserTyping': + case 'updateChatUserTyping': + if(this.myID == update.user_id) { + return; + } + + var peerID = update._ == 'updateUserTyping' ? update.user_id : -update.chat_id; + this.typingUsers[update.user_id] = peerID; + + if(!appUsersManager.hasUser(update.user_id)) { + if(update.chat_id && + appChatsManager.hasChat(update.chat_id) && + !appChatsManager.isChannel(update.chat_id)) { + appProfileManager.getChatFull(update.chat_id); + } + + //return; + } + + appUsersManager.forceUserOnline(update.user_id); + + let dialog = appMessagesManager.getDialogByPeerID(peerID)[0]; + let currentPeer = this.peerID == peerID; + + if(this.typingTimeouts[peerID]) clearTimeout(this.typingTimeouts[peerID]); + else if(dialog) { + appDialogsManager.setTyping(dialog, appUsersManager.getUser(update.user_id)); + + if(currentPeer) { // user + this.setPeerStatus(); + } + } + + this.typingTimeouts[peerID] = setTimeout(() => { + this.typingTimeouts[peerID] = 0; + delete this.typingUsers[update.user_id]; + + if(dialog) { + appDialogsManager.unsetTyping(dialog); + } + + // лень просчитывать случаи + this.setPeerStatus(); + }, 6000); + break; + } + }) + + window.addEventListener('blur', () => { + lottieLoader.checkAnimations(true); + + this.offline = true; + this.updateStatus(); + clearInterval(this.updateStatusInterval); + + window.addEventListener('focus', () => { + lottieLoader.checkAnimations(false); + + this.offline = false; + this.updateStatus(); + this.updateStatusInterval = window.setInterval(() => this.updateStatus(), 50e3); + }, {once: true}); + }); + + (this.pageEl.querySelector('.person') as HTMLDivElement).addEventListener('click', (e) => { + appSidebarRight.toggleSidebar(true); + }); + + this.chatInner.addEventListener('click', (e) => { + let target = e.target as HTMLElement; + if(target.tagName == 'IMG' || target.tagName == 'VIDEO') { + let messageID = +target.getAttribute('message-id'); + let message = appMessagesManager.getMessage(messageID); + + if(!message) { + this.log.warn('no message by messageID:', messageID); + return; + } + + appMediaViewer.openMedia(message, true); + } + + //console.log('chatInner click', e); + }); + + this.searchBtn.addEventListener('click', (e) => { + if(this.peerID) { + appSidebarLeft.beginSearch(this.peerID); + } + }); + + this.pinnedMessageContainer.addEventListener('click', (e) => { + e.preventDefault(); + e.cancelBubble = true; + + let mid = +this.pinnedMessageContainer.getAttribute('data-mid'); + this.setPeer(this.peerID, mid); + }); + + this.updateStatusInterval = window.setInterval(() => this.updateStatus(), 50e3); + this.updateStatus(); + setInterval(() => this.setPeerStatus(), 60e3); + + this.loadMediaQueueProcess(); + } + + public loadMediaQueuePush(cb: () => Promise) { + this.loadMediaQueue.push(cb); + this.loadMediaQueueProcess(); + } + + public async loadMediaQueueProcess(): Promise { + if(this.loadMediaQueuePromise /* || 1 == 1 */) return this.loadMediaQueuePromise; + + let woo = this.loadMediaQueue.splice(-5, 5).reverse().map(f => f()); + + if(woo.length) { + this.log('Will load more media:', woo.length); + + try { + this.loadMediaQueuePromise = Promise.all(woo); + await this.loadMediaQueuePromise; + } catch(err) { + this.log.error('loadMediaQueue error:', err); + } + } + + this.loadMediaQueuePromise = null; + + if(this.loadMediaQueue.length) return this.loadMediaQueueProcess(); + return this.loadMediaQueuePromise; + } + + public updateStatus() { + if(!this.myID) return Promise.resolve(); + + appUsersManager.setUserStatus(this.myID, this.offline); + return MTProto.apiManager.invokeApi('account.updateStatus', { + offline: this.offline + }, {noErrorBox: true}); + } + + public onScroll() { + let length = this.unreaded.length; + let readed: number[] = []; + + for(let i = length - 1; i >= 0; --i) { + let msgID = this.unreaded[i]; + let bubble = this.bubbles[msgID]; + + if(isElementInViewport(bubble)) { + readed.push(msgID); + this.unreaded.splice(i, 1); + } + } + + lottieLoader.checkAnimations(); + + if(readed.length) { + let max = Math.max(...readed); + + //appMessagesManager.readMessages(readed); + appMessagesManager.readHistory(this.peerID, max); + } + + if(this.scroll.scrollHeight - (this.scroll.scrollTop + this.scroll.offsetHeight) == 0/* <= 5 */) { + this.scroll.parentElement.classList.add('scrolled-down'); + } else if(this.scroll.parentElement.classList.contains('scrolled-down')) { + this.scroll.parentElement.classList.remove('scrolled-down'); + } + + // load more history + if(!this.getHistoryPromise && !this.getHistoryTimeout /* && false */) { + let history = Object.keys(this.bubbles).map(id => +id).sort(); + /* let history = appMessagesManager.historiesStorage[this.peerID].history; + let length = history.length; */ + this.getHistoryTimeout = setTimeout(() => { // must be + this.getHistoryTimeout = 0; + + let willLoad = false; + for(let i = 0; i < 10; ++i) { + let msgID = history[i]; + if(!(msgID in this.bubbles) || msgID <= 0) continue; + + let bubble = this.bubbles[msgID]; + + if(isElementInViewport(bubble)) { + willLoad = true; + + this.log('Will load more (up) history by id:', history[0], 'maxID:', history[history.length - 1], history, bubble); + /* false && */!testScroll && this.getHistory(history[0], true).then(() => { // uncomment + this.onScroll(); + }).catch(err => { + this.log.warn('Could not load more history, err:', err); + }); + + break; + } + } + + let dialog = appMessagesManager.getDialogByPeerID(this.peerID)[0]; + + // if scroll down after search + if(!willLoad && history.indexOf(/* this.lastDialog */dialog.top_message) === -1) { + let lastMsgIDs = history.slice(-10); + for(let msgID of lastMsgIDs) { + if(!(msgID in this.bubbles) || msgID <= 0) continue; + + let bubble = this.bubbles[msgID]; + + if(isElementInViewport(bubble)) { + willLoad = true; + + this.log('Will load more (down) history by maxID:', lastMsgIDs[lastMsgIDs.length - 1], lastMsgIDs, bubble); + /* false && */!testScroll && this.getHistory(lastMsgIDs[lastMsgIDs.length - 1], false, true).then(() => { // uncomment + this.onScroll(); + }).catch(err => { + this.log.warn('Could not load more history, err:', err); + }); + + break; + } + } + } + }, 0); + } + } + + public setScroll(scroll: HTMLDivElement) { + this.scroll = scroll; + this.scrollPosition = new ScrollPosition(this.chatInner); + this.scroll.onscroll = this.onScroll.bind(this); + } + + public setPeerStatus() { + if(!this.myID) return; + + // set subtitle + this.subtitleEl.innerText = appSidebarRight.profileElements.subtitle.innerText = ''; + this.subtitleEl.classList.remove('online'); + appSidebarRight.profileElements.subtitle.classList.remove('online'); + + if(this.peerID < 0) { // not human + let chat = appPeersManager.getPeer(this.peerID); + let isChannel = appPeersManager.isChannel(this.peerID) && !appPeersManager.isMegagroup(this.peerID); + + this.log('setPeerStatus', chat); + // will redirect if wrong + appProfileManager.getChatFull(chat.id).then((res: any) => { + this.log('chatInfo res:', res); + + if(res.pinned_msg_id) { // request pinned message + this.pinnedMsgID = res.pinned_msg_id; + appMessagesManager.wrapSingleMessage(res.pinned_msg_id); + } + + let participants_count = res.participants_count || res.participants.participants.length; + let subtitle = numberWithCommas(participants_count) + ' ' + (isChannel ? 'subscribers' : 'members'); + + this.subtitleEl.innerText = appSidebarRight.profileElements.subtitle.innerText = subtitle; + }); + } else if(!appUsersManager.isBot(this.peerID)) { // user + let user = appUsersManager.getUser(this.peerID); + + //this.subtitleEl.classList.remove('online'); + + if(user && user.status && this.myID != this.peerID) { + let subtitle = ''; + switch(user.status._) { + case 'userStatusRecently': + subtitle += 'last seen recently'; + break; + case 'userStatusOffline': + subtitle = 'last seen '; + + let date = user.status.was_online; + let now = Date.now() / 1000; + + if((now - date) < 60) { + subtitle += ' just now'; + } else if((now - date) < 3600) { + subtitle += ((now - date) / 60 | 0) + ' minutes ago'; + } else if(now - date < 86400) { + subtitle += ((now - date) / 3600 | 0) + ' hours ago'; + } else { + let d = new Date(date * 1000); + subtitle += ('0' + d.getDate()).slice(-2) + '.' + ('0' + (d.getMonth() + 1)).slice(-2) + ' at ' + + ('0' + d.getHours()).slice(-2) + ':' + ('0' + d.getMinutes()).slice(-2); + } + + break; + + case 'userStatusOnline': + this.subtitleEl.classList.add('online'); + appSidebarRight.profileElements.subtitle.classList.add('online'); + subtitle = 'online'; + break; + } + + appSidebarRight.profileElements.subtitle.innerText = subtitle; + + if(this.typingUsers[this.peerID] == this.peerID) { + this.subtitleEl.innerText = 'typing...'; + this.subtitleEl.classList.add('online'); + } else this.subtitleEl.innerText = subtitle; + } + } + } + + + + public cleanup() { + this.peerID = $rootScope.selectedPeerID = 0; + + if(this.lastContainerDiv) this.lastContainerDiv.remove(); + if(this.firstContainerDiv) this.firstContainerDiv.remove(); + this.lastContainerDiv = undefined; + this.firstContainerDiv = undefined; + + for(let i in this.bubbles) { + let bubble = this.bubbles[i]; + bubble.remove(); + } + this.bubbles = {}; + this.dateMessages = {}; + this.unreaded = []; + this.unreadOut = []; + this.loadMediaQueue = []; + + console.time('chatInner clear'); + + this.chatInner.innerHTML = ''; + /* Array.from(this.chatInner.children).forEach(c => { + this.chatInner.removeChild(c); + }); */ + + console.timeEnd('chatInner clear'); + + //appSidebarRight.minMediaID = {}; + } + + public setPeer(peerID: number, lastMsgID = 0) { + let samePeer = this.peerID == peerID; + + if(samePeer && !testScroll && !lastMsgID) { + return Promise.resolve(true); // uncomment + } + + if(samePeer && lastMsgID == this.lastDialog.top_message) { + if(this.bubbles[lastMsgID]) { + this.scroll.scrollTop = this.scroll.scrollHeight; + return Promise.resolve(true); + } + } + + // clear + this.cleanup(); + + // set new + this.peerID = $rootScope.selectedPeerID = peerID; + + // no dialog + if(!appMessagesManager.getDialogByPeerID(this.peerID).length) { + this.log.error('No dialog by peerID:', this.peerID); + return Promise.reject(); + } + + this.pinnedMessageContainer.style.display = 'none'; + + this.preloader.attach(this.chatInner); + + if(this.lastDialog) { + let lastDom = appDialogsManager.getDialogDom(this.lastDialog.peerID); + lastDom.listEl.classList.remove('active'); + } + + let dialog = this.lastDialog = appMessagesManager.getDialogByPeerID(this.peerID)[0]; + this.log('setPeer peerID:', this.peerID, dialog); + appDialogsManager.loadDialogPhoto(this.avatarEl, dialog.peerID); + appDialogsManager.loadDialogPhoto(appSidebarRight.profileElements.avatar, dialog.peerID); + + this.firstTopMsgID = dialog.top_message || 0; + + let dom = appDialogsManager.getDialogDom(this.peerID); + if(!dom) { + this.log.warn('No rendered dialog by peerID:', this.peerID); + appDialogsManager.addDialog(dialog); + dom = appDialogsManager.getDialogDom(this.peerID); + } + // warning need check + dom.listEl.classList.add('active'); + + this.setPeerStatus(); + + this.titleEl.innerText = appSidebarRight.profileElements.name.innerText = dom.titleSpan.innerText; + + appSidebarRight.toggleSidebar(true); + + return Promise.all([ + this.getHistory(lastMsgID).then(() => { + this.log('setPeer removing preloader'); + + if(lastMsgID) { + this.renderMessage(appMessagesManager.getMessage(lastMsgID)); + + if(lastMsgID != dialog.top_message) { + this.bubbles[lastMsgID].scrollIntoView(); + } + } else if(dialog.top_message) { // add last message, bc in getHistory will load < max_id + this.renderMessage(appMessagesManager.getMessage(dialog.top_message)); + } + + if(this.scroll) { + this.onScroll(); + } + + this.preloader.detach(); + + setTimeout(() => { + //appSidebarRight.fillProfileElements(); + appSidebarRight.loadSidebarMedia(); + }, 0); + + return true; + })/* .catch(err => { + this.log.error(err); + }) */, + + appSidebarRight.fillProfileElements() + ]).catch(err => { + this.log.error(err); + }); + } + + public updateUnreadByDialog(dialog: any) { + let maxID = dialog.read_outbox_max_id; + + let length = this.unreadOut.length; + for(let i = length - 1; i >= 0; --i) { + let msgID = this.unreadOut[i]; + if(msgID <= maxID) { + let bubble = this.bubbles[msgID]; + bubble.classList.remove('sent'); + bubble.classList.add('read'); + this.unreadOut.splice(i, 1); + } + } + } + + public deleteMessagesByIDs(msgIDs: number[]) { + msgIDs.forEach(id => { + if(!(id in this.bubbles)) return; + + let bubble = this.bubbles[id]; + let parent = bubble.parentNode as HTMLDivElement; + delete this.bubbles[id]; + bubble.remove(); + + if(!parent.childNodes.length) { + parent.remove(); + } + }); + + lottieLoader.checkAnimations(); + } + + public renderMessagesByIDs(msgIDs: number[]) { + if(!this.bubbles[this.firstTopMsgID]) { // seems search active + return; + } + + msgIDs.forEach((msgID: number) => { + let message = appMessagesManager.getMessage(msgID); + + this.log('got new message to append:', message); + + //this.unreaded.push(msgID); + this.renderMessage(message); + }); + } + + public renderMessage(message: any, reverse = false, multipleRender?: boolean) { + let peerID = this.peerID; + let our = message.fromID == this.myID; + + let messageDiv = document.createElement('div'); + messageDiv.classList.add('message'); + + this.log('message to render:', message); + + //messageDiv.innerText = message.message; + + // time section + + let date = new Date(message.date * 1000); + let time = ('0' + date.getHours()).slice(-2) + + ':' + ('0' + date.getMinutes()).slice(-2); + + let timeSpan = document.createElement('span'); + timeSpan.classList.add('time'); + + let timeInner = document.createElement('div'); + timeInner.classList.add('inner', 'tgico'); + timeInner.innerText = time; + + // bubble + let bubble = document.createElement('div'); + bubble.classList.add('bubble'); + + this.bubbles[+message.mid] = bubble; + + let richText = RichTextProcessor.wrapRichText(message.message, { + entities: message.totalEntities + }); + + if(message.totalEntities) { + let emojiEntities = message.totalEntities.filter((e: any) => e._ == 'messageEntityEmoji'); + let strLength = message.message.length; + let emojiStrLength = emojiEntities.reduce((acc: number, curr: any) => acc + curr.length, 0); + + if(emojiStrLength == strLength && emojiEntities.length <= 3) { + let attachmentDiv = document.createElement('div'); + attachmentDiv.classList.add('attachment'); + + attachmentDiv.innerHTML = richText; + + messageDiv.classList.add('message-empty'); + bubble.classList.add('emoji-' + emojiEntities.length + 'x', 'emoji-big'); + + bubble.append(attachmentDiv); + } else { + messageDiv.innerHTML = richText; + } + + /* if(strLength == emojiStrLength) { + messageDiv.classList.add('emoji-only'); + messageDiv.classList.add('message-empty'); + } */ + } else { + messageDiv.innerHTML = richText; + } + + //messageDiv.innerHTML = 'samsung samsung samsung'; + + timeSpan.appendChild(timeInner); + messageDiv.append(timeSpan); + bubble.prepend(messageDiv); + + if(our) { + if(message.pFlags.unread) this.unreadOut.push(message.mid); + let status = message.pFlags.unread ? 'sent' : 'read'; + bubble.classList.add(status); + } else { + this.log('not our message', message, message.pFlags.unread); + if(message.pFlags.unread) this.unreaded.push(message.mid); + } + + // media + if(message.media) { + let attachmentDiv = document.createElement('div'); + attachmentDiv.classList.add('attachment'); + + if(!message.message) { + messageDiv.classList.add('message-empty'); + } + + let processingWebPage = false; + switch(message.media._) { + case 'messageMediaPhoto': { + let photo = message.media.photo; + this.log('messageMediaPhoto', photo); + + bubble.classList.add('photo'); + + let size = appPhotosManager.setAttachmentSize(photo.id, attachmentDiv); + let load = () => appPhotosManager.preloadPhoto(photo.id, size).then((blob) => { + if(this.peerID != peerID) { + this.log.warn('peer changed'); + return; + } + + if(attachmentDiv.firstElementChild) { + attachmentDiv.firstElementChild.remove(); + } + + let image = new Image(); + image.src = URL.createObjectURL(blob); + image.setAttribute('message-id', message.mid); + attachmentDiv.append(image); + }); + + bubble.classList.add('hide-name'); + + this.loadMediaQueuePush(load); + break; + } + + case 'messageMediaWebPage': { + processingWebPage = true; + + let webpage = message.media.webpage; + this.log('messageMediaWebPage', webpage); + if(webpage._ == 'webPageEmpty') { + break; + } + + bubble.classList.add('webpage'); + + let box = document.createElement('div'); + box.classList.add('box', 'web'); + + let quote = document.createElement('div'); + quote.classList.add('quote'); + + let nameEl = document.createElement('a'); + nameEl.classList.add('name'); + + let titleDiv = document.createElement('div'); + titleDiv.classList.add('title'); + + let textDiv = document.createElement('div'); + textDiv.classList.add('text'); + + let loadedVideo = false; + + let preview: HTMLDivElement = null; + if(webpage.photo || webpage.document) { + preview = document.createElement('div'); + preview.classList.add('preview'); + } + + let doc: any = null; + if(webpage.document) { + doc = webpage.document; + + if(doc.type == 'gif' || doc.type == 'video') { + appPhotosManager.setAttachmentSize(doc, preview); + + bubble.classList.add('video'); + + let load = () => wrapVideo(doc, preview, () => { + if(this.peerID != peerID) { + this.log.warn('peer changed'); + return false; + } + + loadedVideo = true; + + return true; + }, message.mid); + + this.loadMediaQueuePush(load); + } else { + doc = null; + } + } + + if(webpage.photo && !doc) { + appPhotosManager.savePhoto(webpage.photo); // hot-fix because no webpage manager + + bubble.classList.add('photo'); + + let size = appPhotosManager.setAttachmentSize(webpage.photo.id, preview); + let load = () => appPhotosManager.preloadPhoto(webpage.photo.id, size).then((blob) => { + if(this.peerID != peerID) { + this.log.warn('peer changed'); + return; + } + + if(loadedVideo) { + return; + } + + let img = preview.firstElementChild as HTMLImageElement || new Image(); + this.log('night running 1', bubble, bubble.scrollHeight, img.src); + + //setTimeout(() => { + img.src = URL.createObjectURL(blob); + ///}, 5e3); + + if(!preview.contains(img)) { + preview.append(img); + } + + this.log('night running 2', bubble, bubble.scrollHeight); + }); + + this.loadMediaQueuePush(load); + } + + if(preview) { + quote.append(preview); + } + + nameEl.setAttribute('target', '_blank'); + nameEl.href = webpage.url || '#'; + nameEl.innerText = webpage.site_name || ''; + + if(webpage.description) { + textDiv.innerHTML = RichTextProcessor.wrapRichText(webpage.description); + } + + //textDiv.innerText = webpage.description || ''; + + quote.append(nameEl, titleDiv, textDiv); + box.append(quote); + + bubble.prepend(box); + + //this.log('night running', bubble.scrollHeight); + + break; + } + + case 'messageMediaDocument': { + let doc = message.media.document; + /* if(document.size > 1e6) { // 1mb + break; + } */ + + this.log('messageMediaDocument', doc); + + if(doc.sticker && doc.size <= 1e6) { + bubble.classList.add('sticker'); + + if(doc.animated) { + bubble.classList.add('sticker-animated'); + } + + appPhotosManager.setAttachmentSize(doc, attachmentDiv); + bubble.style.height = attachmentDiv.style.height; + bubble.style.width = attachmentDiv.style.width; + //appPhotosManager.setAttachmentSize(doc, bubble); + let load = () => wrapSticker(doc, attachmentDiv, () => { + if(this.peerID != peerID) { + this.log.warn('peer changed, canceling sticker attach'); + return false; + } + + return true; + })/* .then(() => { + attachmentDiv.style.width = ''; + attachmentDiv.style.height = ''; + }) */; + + this.loadMediaQueuePush(load); + + break; + } else if(doc.mime_type == 'video/mp4') { + this.log('never get free 2', doc); + + bubble.classList.add('video'); + + appPhotosManager.setAttachmentSize(doc, attachmentDiv); + let load = () => wrapVideo(doc, attachmentDiv, () => { + if(this.peerID != peerID) { + this.log.warn('peer changed'); + return false; + } + + return true; + }, message.mid); + + this.loadMediaQueuePush(load); + + break; + } else { + let docDiv = wrapDocument(doc); + + messageDiv.classList.remove('message-empty'); + messageDiv.append(docDiv); + processingWebPage = true; + + break; + } + } + + default: + messageDiv.classList.remove('message-empty'); + messageDiv.innerHTML = 'unrecognized media type: ' + message.media._; + messageDiv.append(timeSpan); + this.log.warn('unrecognized media type:', message.media._, message); + break; + } + + if(!processingWebPage) { + bubble.append(attachmentDiv); + } + } + + if(message.fwd_from) { + let fwd = message.fwd_from; + //let peerFrom = appPeersManager.getPeerTitle() + /* let fromTitle = */appPeersManager.getPeerTitle(fwd.from_id); + } + + if((this.peerID < 0 && !our) || message.fwd_from) { // chat + let title = appPeersManager.getPeerTitle(message.fwdFromID || message.fromID); + //this.log(title); + + if(message.fwdFromID) { + bubble.classList.add('forwarded'); + + if(!bubble.classList.contains('sticker')) { + let nameDiv = document.createElement('div'); + nameDiv.classList.add('name'); + nameDiv.innerText = 'Forwarded from ' + title; + bubble.append(nameDiv); + } + } else { + if(message.reply_to_mid) { + let box = document.createElement('div'); + box.classList.add('box'); + + let quote = document.createElement('div'); + quote.classList.add('quote'); + + let nameEl = document.createElement('a'); + nameEl.classList.add('name'); + + let textDiv = document.createElement('div'); + textDiv.classList.add('text'); + + let originalMessage = appMessagesManager.getMessage(message.reply_to_mid); + let originalPeerTitle = appPeersManager.getPeerTitle(originalMessage.fromID) || ''; + + nameEl.innerText = originalPeerTitle; + textDiv.innerHTML = RichTextProcessor.wrapRichText(originalMessage.message, { + entities: originalMessage.totalEntities + }); + + quote.append(nameEl, textDiv); + box.append(quote); + + bubble.append(box); + } + + /* if(message.media) { + switch(message.media._) { + case 'messageMediaWebPage': { + let nameDiv = document.createElement('div'); + nameDiv.classList.add('name'); + nameDiv.innerText = title; + bubble.append(nameDiv); + break; + } + } + } */ + + if(!bubble.classList.contains('sticker')) { + let nameDiv = document.createElement('div'); + nameDiv.classList.add('name'); + nameDiv.innerText = title; + bubble.append(nameDiv); + } + + //bubble.prepend(avatarDiv); + /* if(messageDiv.nextElementSibling) { + bubble.insertBefore(avatarDiv, messageDiv.nextElementSibling); + } else { */ + + //} + } + + let avatarDiv = document.createElement('div'); + avatarDiv.classList.add('user-avatar'); + + this.log('exec loadDialogPhoto', message); + if(message.fromID) { // if no - user hidden + appDialogsManager.loadDialogPhoto(avatarDiv, message.fromID); + } else if(!title && message.fwd_from && message.fwd_from.from_name) { + title = message.fwd_from.from_name; + + appDialogsManager.loadDialogPhoto(avatarDiv, title); + } + + bubble.append(avatarDiv); + } + + let type = our ? 'out' : 'in'; + + let containerDiv = reverse ? this.firstContainerDiv : this.lastContainerDiv; + if(!containerDiv || !containerDiv.classList.contains(type)) { + /* if(containerDiv) { + if(reverse) this.chatInner.prepend(containerDiv); + else this.chatInner.append(containerDiv); + } */ + + containerDiv = document.createElement('div'); + containerDiv.classList.add(type); + + if(!this.firstContainerDiv) this.firstContainerDiv = containerDiv; + + if(reverse) this.firstContainerDiv = containerDiv; + else this.lastContainerDiv = containerDiv; + } + + if(reverse) { + if(!multipleRender) { + this.scrollPosition.prepareFor('up'); // лагает из-за этого + } + + containerDiv.prepend(bubble); + this.chatInner.prepend(containerDiv); + } else { + if(!multipleRender) { + this.scrollPosition.prepareFor('down'); // лагает из-за этого + } + + containerDiv.append(bubble); + this.chatInner.append(containerDiv); + } + + if(bubble.classList.contains('webpage')) { + this.log('night running', bubble, bubble.scrollHeight); + } + + //return //this.scrollPosition.restore(); + + let justDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()); + let dateTimestamp = justDate.getTime(); + if(!(dateTimestamp in this.dateMessages)) { + const months = ['January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December']; + let str = justDate.getFullYear() == new Date().getFullYear() ? + months[justDate.getMonth()] + ' ' + justDate.getDate() : + justDate.toISOString().split('T')[0].split('-').reverse().join('.'); + + let div = document.createElement('div'); + div.classList.add('service'); + div.innerHTML = `
${str}
`; + this.log('need to render date message', dateTimestamp, str); + + this.dateMessages[dateTimestamp] = { + div, + firstTimestamp: date.getTime() + }; + + //this.chatInner.insertBefore(div, containerDiv); + containerDiv.insertBefore(div, bubble); + } else { + let dateMessage = this.dateMessages[dateTimestamp]; + if(dateMessage.firstTimestamp > date.getTime()) { + //this.chatInner.insertBefore(dateMessage.div, containerDiv); + containerDiv.insertBefore(dateMessage.div, bubble); + } + } + + if(!multipleRender) { + this.scrollPosition.restore(); // лагает из-за этого + } + + //this.log('history msg', message); + } + + // reverse means scroll up + public getHistory(maxID = 0, reverse = false, isBackLimit = false) { + let peerID = this.peerID; + + if(!maxID && this.lastDialog.top_message) { + maxID = this.lastDialog.top_message/* + 1 */; + } + + let loadCount = Object.keys(this.bubbles).length > 0 ? + 20 : + (this.chatInner.parentElement.parentElement.scrollHeight) / 30 * 1.25 | 0; + + console.time('render getHistory'); + console.time('render history total'); + + let backLimit = 0; + if(isBackLimit) { + backLimit = loadCount; + loadCount = 0; + maxID += 1; + } + + return this.getHistoryPromise = appMessagesManager.getHistory(this.peerID, maxID, loadCount, backLimit) + .then((result: any) => { + this.log('getHistory result by maxID:', maxID, reverse, isBackLimit, result); + + console.timeEnd('render getHistory'); + + if(this.peerID != peerID) { + this.log.warn('peer changed'); + console.timeEnd('render history total'); + return Promise.reject(); + } + + if(!result || !result.history) { + console.timeEnd('render history total'); + return true; + } + + //this.chatInner.innerHTML = ''; + + let history = result.history.slice(); + + if(reverse) history.reverse(); + + console.time('render history'); + + if(!isBackLimit) { + this.scrollPosition.prepareFor(reverse ? 'up' : 'down'); + } + + let length = history.length; + for(let i = length - 1; i >= 0; --i) { + let msgID = history[i]; + + let message = appMessagesManager.getMessage(msgID); + + this.renderMessage(message, reverse, true); + } + + if(!isBackLimit) { + this.scrollPosition.restore(); + } + + console.timeEnd('render history'); + + this.getHistoryPromise = undefined; + + console.timeEnd('render history total'); + + return true; + }); + } +} + +export default new AppImManager(); diff --git a/src/lib/appManagers/appMediaViewer.ts b/src/lib/appManagers/appMediaViewer.ts new file mode 100644 index 00000000..45b764a9 --- /dev/null +++ b/src/lib/appManagers/appMediaViewer.ts @@ -0,0 +1,233 @@ +import { MTDocument, ProgressivePreloader, wrapVideo } from "../../components/misc"; +import appPeersManager from "./appPeersManager"; +import appDialogsManager from "./appDialogsManager"; +import appPhotosManager from "./appPhotosManager"; +import appSidebarRight from "./appSidebarRight"; +import { $rootScope } from "../utils"; +import appMessagesManager from "./appMessagesManager"; +import { CancellablePromise } from "../mtproto/apiFileManager"; +import { RichTextProcessor } from "../richtextprocessor"; + +class AppMediaViewer { + private overlaysDiv = document.querySelector('.overlays') as HTMLDivElement; + private author = { + avatarEl: this.overlaysDiv.querySelector('.user-avatar') as HTMLDivElement, + nameEl: this.overlaysDiv.querySelector('.media-viewer-name') as HTMLDivElement, + date: this.overlaysDiv.querySelector('.media-viewer-date') as HTMLDivElement + }; + private buttons = { + delete: this.overlaysDiv.querySelector('.media-viewer-delete-button') as HTMLDivElement, + forward: this.overlaysDiv.querySelector('.media-viewer-forward-button') as HTMLDivElement, + download: this.overlaysDiv.querySelector('.media-viewer-download-button') as HTMLDivElement, + close: this.overlaysDiv.querySelector('.media-viewer-close-button') as HTMLDivElement, + prev: this.overlaysDiv.querySelector('.media-viewer-switcher-left') as HTMLDivElement, + next: this.overlaysDiv.querySelector('.media-viewer-switcher-right') as HTMLDivElement, + }; + private content = { + container: this.overlaysDiv.querySelector('.media-viewer-media') as HTMLDivElement, + caption: this.overlaysDiv.querySelector('.media-viewer-caption') as HTMLDivElement + }; + + private reverse = false; + private currentMessageID = 0; + private higherMsgID: number | undefined = 0; + private lowerMsgID: number | undefined = 0; + private preloader: ProgressivePreloader = null; + + constructor() { + this.preloader = new ProgressivePreloader(); + + this.buttons.close.addEventListener('click', () => { + this.overlaysDiv.classList.remove('active'); + this.content.container.innerHTML = ''; + }); + + this.buttons.prev.addEventListener('click', () => { + let id = this.reverse ? this.lowerMsgID : this.higherMsgID; + if(id) { + this.openMedia(appMessagesManager.getMessage(id), this.reverse); + } else { + this.buttons.prev.style.display = 'none'; + } + }); + + this.buttons.next.addEventListener('click', () => { + let id = this.reverse ? this.higherMsgID : this.lowerMsgID; + if(id) { + this.openMedia(appMessagesManager.getMessage(id), this.reverse); + } else { + this.buttons.next.style.display = 'none'; + } + }); + /* this.buttons.prev.onclick = (e) => { + let history = appSidebarRight.historiesStorage[$rootScope.selectedPeerID]['inputMessagesFilterPhotoVideo'].slice(); + + let message: any; + + if(!this.reverse) { + for(let mid of history) { + if(mid > this.currentMessageID) { + let _message = appMessagesManager.getMessage(mid); + if(_message.media && _message.media.photo) { + message = _message; + } + } else break; + } + } else { + for(let mid of history) { + if(mid < this.currentMessageID) { + let _message = appMessagesManager.getMessage(mid); + if(_message.media && _message.media.photo) { + message = _message; + break; + } + } + } + } + + if(message) { + this.openMedia(message.media.photo, message.mid, this.reverse); + } else { + this.buttons.prev.style.display = 'none'; + } + }; + + this.buttons.next.onclick = (e) => { + let history = appSidebarRight.historiesStorage[$rootScope.selectedPeerID]['inputMessagesFilterPhotoVideo'].slice(); + + let message: any; + + if(this.reverse) { + for(let mid of history) { + if(mid > this.currentMessageID) { + let _message = appMessagesManager.getMessage(mid); + if(_message.media && _message.media.photo) { + message = _message; + } + } else break; + } + } else { + for(let mid of history) { + if(mid < this.currentMessageID) { + let _message = appMessagesManager.getMessage(mid); + if(_message.media && _message.media.photo) { + message = _message; + break; + } + } + } + } + + if(message) { + this.openMedia(message.media.photo, message.mid, this.reverse); + } else { + this.buttons.next.style.display = 'none'; + } + }; */ + } + + public openMedia(message: any, reverse = false) { + console.log('openMedia doc:', message); + let media = message.media.photo || message.media.document || message.media.webpage.document; + + let isVideo = media.mime_type == 'video/mp4'; + + this.currentMessageID = message.mid; + this.reverse = reverse; + + let container = this.content.container; + + if(container.firstElementChild) { + container.firstElementChild.remove(); + } + + let date = new Date(media.date * 1000); + let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + + let dateStr = months[date.getMonth()] + ' ' + date.getDate() + ' at '+ date.getHours() + ':' + ('0' + date.getMinutes()).slice(-2); + this.author.date.innerText = dateStr; + + let name = appPeersManager.getPeerTitle(message.fromID); + this.author.nameEl.innerText = name; + + if(message.message) { + this.content.caption.innerHTML = RichTextProcessor.wrapRichText(message.message, { + entities: message.totalEntities + }); + } else { + this.content.caption.innerHTML = ''; + } + + appDialogsManager.loadDialogPhoto(this.author.avatarEl, message.fromID); + + this.overlaysDiv.classList.add('active'); + + if(isVideo) { + appPhotosManager.setAttachmentSize(media, container); + + this.preloader.attach(container); + //this.preloader.setProgress(75); + + console.log('will wrap video'); + + wrapVideo(media, container, () => { + if(this.currentMessageID != message.mid) { + console.warn('media viewer changed photo'); + return false; + } + + return true; + }, message.mid, false, this.preloader); + } else { + let size = appPhotosManager.setAttachmentSize(media.id, container, appPhotosManager.windowW, appPhotosManager.windowH); + + this.preloader.attach(container); + //this.preloader.setProgress(75); + + let cancellablePromise = appPhotosManager.preloadPhoto(media.id, size); + cancellablePromise.then((blob) => { + if(this.currentMessageID != message.mid) { + console.warn('media viewer changed photo'); + return; + } + + console.log('indochina', blob); + if(container.firstElementChild) { + container.firstElementChild.remove(); + } + + let image = new Image(); + image.src = URL.createObjectURL(blob); + container.append(image); + + container.style.width = ''; + container.style.height = ''; + + this.preloader.detach(); + }); + } + + let history = appSidebarRight.historiesStorage[$rootScope.selectedPeerID]['inputMessagesFilterPhotoVideo'].slice(); + let index = history.findIndex(m => m == message.mid); + let comparer = (mid: number) => { + let _message = appMessagesManager.getMessage(mid); + if(_message.media && _message.media.photo) return true; + return false; + }; + + this.higherMsgID = history.slice(0, index).reverse().find(comparer); + this.lowerMsgID = history.slice(index + 1).find(comparer); + + if(this.reverse) { + this.buttons.prev.style.display = this.lowerMsgID !== undefined ? '' : 'none'; + this.buttons.next.style.display = this.higherMsgID !== undefined ? '' : 'none'; + } else { + this.buttons.prev.style.display = this.higherMsgID !== undefined ? '' : 'none'; + this.buttons.next.style.display = this.lowerMsgID !== undefined ? '' : 'none'; + } + + //console.log('prev and next', prevMsgID, nextMsgID); + } +} + +export default new AppMediaViewer(); diff --git a/src/lib/appManagers/appMessagesIDsManager.ts b/src/lib/appManagers/appMessagesIDsManager.ts new file mode 100644 index 00000000..b01cec0c --- /dev/null +++ b/src/lib/appManagers/appMessagesIDsManager.ts @@ -0,0 +1,64 @@ +export class AppMessagesIDsManager { + public channelLocals = {} as any; + public channelsByLocals = {} as any; + public channelCurLocal = 0; + public fullMsgIDModulus = 4294967296; + + public getFullMessageID(msgID: number, channelID: number): number { + if(!channelID || msgID <= 0) { + return msgID; + } + msgID = this.getMessageLocalID(msgID); + var localStart = this.channelLocals[channelID]; + if(!localStart) { + localStart = (++this.channelCurLocal) * this.fullMsgIDModulus; + this.channelsByLocals[localStart] = channelID; + this.channelLocals[channelID] = localStart; + } + + return localStart + msgID; + } + + public getMessageIDInfo(fullMsgID: number) { + if (fullMsgID < this.fullMsgIDModulus) { + return [fullMsgID, 0]; + } + var msgID = fullMsgID % this.fullMsgIDModulus; + var channelID = this.channelsByLocals[fullMsgID - msgID]; + + return [msgID, channelID]; + } + + public getMessageLocalID(fullMsgID: number) { + if (!fullMsgID) { + return 0; + } + return fullMsgID % this.fullMsgIDModulus; + } + + public splitMessageIDsByChannels (mids: any[]) { + var msgIDsByChannels: any = {}; + var midsByChannels: any = {}; + var i; + var mid, msgChannel; + var channelID; + for(i = 0; i < mids.length; i++) { + mid = mids[i]; + msgChannel = this.getMessageIDInfo(mid); + channelID = msgChannel[1]; + if(msgIDsByChannels[channelID] === undefined) { + msgIDsByChannels[channelID] = []; + midsByChannels[channelID] = []; + } + msgIDsByChannels[channelID].push(msgChannel[0]); + midsByChannels[channelID].push(mid); + } + + return { + msgIDs: msgIDsByChannels, + mids: midsByChannels + }; + } +} + +export default new AppMessagesIDsManager(); diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts new file mode 100644 index 00000000..b8daed98 --- /dev/null +++ b/src/lib/appManagers/appMessagesManager.ts @@ -0,0 +1,3259 @@ +import { SearchIndexManager, $rootScope, copy, tsNow, safeReplaceObject, dT, _, listMergeSorted, deepEqual } from "../utils"; +import appMessagesIDsManager from "./appMessagesIDsManager"; +import appChatsManager from "./appChatsManager"; +import appUsersManager from "./appUsersManager"; +import { RichTextProcessor } from "../richtextprocessor"; +import { nextRandomInt, bigint } from "../bin_utils"; +import { MTProto, telegramMeWebService } from "../mtproto/mtproto"; +import apiUpdatesManager from "./apiUpdatesManager"; +import appPhotosManager from "./appPhotosManager"; +import appProfileManager from "./appProfileManager"; + +import AppStorage from '../storage'; +import AppPeersManager from "./appPeersManager"; +import ServerTimeManager from "../mtproto/serverTimeManager"; +import apiFileManager, { CancellablePromise } from "../mtproto/apiFileManager"; +import { MTDocument } from "../../components/misc"; +import appDocsManager from "./appDocsManager"; + +type HistoryStorage = { + count: number | null, + history: number[], + pending: number[], + readPromise?: any +}; + +export class AppMessagesManager { + public messagesStorage: any = {}; + public messagesForHistory: any = {}; + public messagesForDialogs: any = {}; + public historiesStorage: { + [peerID: string]: HistoryStorage + } = {}; + public dialogsStorage: { + count: any, + dialogs: any[] + } = {count: null, dialogs: []}; + public pendingByRandomID: any = {}; + public pendingByMessageID: any = {}; + public pendingAfterMsgs: any = {}; + public pendingTopMsgs: any = {}; + public sendFilePromise: CancellablePromise = Promise.resolve(); + public tempID = -1; + + public dialogsIndex: any = SearchIndexManager.createIndex(); + public cachedResults: any = {query: false}; + + public lastSearchFilter: any = {}; + public lastSearchResults: any = []; + + public needSingleMessages: any = []; + public fetchSingleMessagesTimeout = 0; + private fetchSingleMessagesPromise: Promise = null; + + public incrementedMessageViews: any = {}; + public needIncrementMessageViews: any = []; + public incrementMessageViewsTimeout: any = false; + + public maxSeenID = 0; + + public allDialogsLoaded = false; + public dialogsOffsetDate = 0; + public pinnedIndex = 0; + public dialogsNum = 0; + + public migratedFromTo: any = {}; + public migratedToFrom: any = {}; + + public newMessagesHandlePromise = 0; + public newMessagesToHandle: any = {}; + public newDialogsHandlePromise = 0; + public newDialogsToHandle: any = {}; + public notificationsHandlePromise = 0; + public notificationsToHandle: any = {}; + public newUpdatesAfterReloadToHandle: any = {}; + + public fwdMessagesPluralize = _('conversation_forwarded_X_messages'); + public gameScorePluralize = _('conversation_scored_X'); + + constructor() { + AppStorage.get('max_seen_msg').then((maxID) => { + if(maxID && !appMessagesIDsManager.getMessageIDInfo(maxID)[1]) { + this.maxSeenID = maxID; + } + }) + + $rootScope.$on('apiUpdate', (e: CustomEvent) => { + let update: any = e.detail; + // if(update._ != 'updateUserStatus') { + // console.log('on apiUpdate', update) + // } + this.handleUpdate(update); + }); + + $rootScope.$on('webpage_updated', (e: CustomEvent) => { + let eventData = e.detail; + eventData.msgs((msgID: number) => { + var historyMessage = this.messagesForHistory[msgID]; + if(historyMessage) { + /* historyMessage.media = { + _: 'messageMediaWebPage', + webpage: AppWebPagesManager.wrapForHistory(eventData.id) + }; */ // warning + + $rootScope.$broadcast('message_edit', { + peerID: this.getMessagePeer(historyMessage), + id: historyMessage.id, + mid: msgID, + justMedia: true + }); + } + }); + }); + + $rootScope.$on('draft_updated', (e: CustomEvent) => { + let eventData = e.detail;; + var peerID = eventData.peerID; + var draft = eventData.draft; + + var dialog = this.getDialogByPeerID(peerID)[0]; + if(dialog) { + var topDate; + if(draft && draft.date) { + topDate = draft.date; + } else { + var channelID = AppPeersManager.isChannel(peerID) ? -peerID : 0 + var topDate = this.getMessage(dialog.top_message).date; + + if(channelID) { + var channel = appChatsManager.getChat(channelID); + if(!topDate || channel.date && channel.date > topDate) { + topDate = channel.date; + } + } + } + + if(!dialog.pFlags.pinned) { + dialog.index = this.generateDialogIndex(topDate); + } + + this.pushDialogToStorage(dialog); + + $rootScope.$broadcast('dialog_draft', { + peerID: peerID, + draft: draft, + index: dialog.index + }); + } + }) + } + + public getInputEntities(entities: any) { + var sendEntites = copy(entities); + sendEntites.forEach((entity: any) => { + if(entity._ == 'messageEntityMentionName') { + entity._ = 'inputMessageEntityMentionName'; + entity.user_id = appUsersManager.getUserInput(entity.user_id); + } + }); + return sendEntites; + } + + public sendText(peerID: number, text: string, options: any = {}) { + if(typeof(text) != 'string') { + return; + } + + peerID = AppPeersManager.getPeerMigratedTo(peerID) || peerID; + + var entities = options.entities || []; + if(!options.viaBotID) { + text = RichTextProcessor.parseMarkdown(text, entities); + } + if(!text.length) { + return; + } + + var sendEntites = this.getInputEntities(entities); + var messageID = this.tempID--; + var randomID = [nextRandomInt(0xFFFFFFFF), nextRandomInt(0xFFFFFFFF)]; + var randomIDS = bigint(randomID[0]).shiftLeft(32).add(bigint(randomID[1])).toString(); + var historyStorage = this.historiesStorage[peerID]; + var flags = 0; + var pFlags: any = {}; + var replyToMsgID = options.replyToMsgID; + var isChannel = AppPeersManager.isChannel(peerID); + var isMegagroup = isChannel && AppPeersManager.isMegagroup(peerID); + var asChannel = isChannel && !isMegagroup ? true : false; + var message: any; + + if(historyStorage === undefined) { + historyStorage = this.historiesStorage[peerID] = {count: null, history: [], pending: []} + } + + var fromID = appUsersManager.getSelf().id; + if(peerID != fromID) { + flags |= 2; + pFlags.out = true; + + if(!isChannel && !appUsersManager.isBot(peerID)) { + flags |= 1; + pFlags.unread = true; + } + } + + if(replyToMsgID) { + flags |= 8 + } + + if(asChannel) { + fromID = 0 + pFlags.post = true + } else { + flags |= 256 + } + + message = { + _: 'message', + id: messageID, + from_id: fromID, + to_id: AppPeersManager.getOutputPeer(peerID), + flags: flags, + pFlags: pFlags, + date: tsNow(true) + MTProto.serverTimeManager.serverTimeOffset, + message: text, + random_id: randomIDS, + reply_to_msg_id: replyToMsgID, + via_bot_id: options.viaBotID, + reply_markup: options.reply_markup, + entities: entities, + views: asChannel && 1, + pending: true + }; + + var toggleError = (on: any) => { + var historyMessage = this.messagesForHistory[messageID]; + if(on) { + message.error = true; + if(historyMessage) { + historyMessage.error = true; + } + } else { + delete message.error; + if(historyMessage) { + delete historyMessage.error; + } + } + $rootScope.$broadcast('messages_pending'); + } + + message.send = () => { + toggleError(false); + var sentRequestOptions: any = {}; + if(this.pendingAfterMsgs[peerID]) { + sentRequestOptions.afterMessageID = this.pendingAfterMsgs[peerID].messageID; + } + + var flags = 0; + if(replyToMsgID) { + flags |= 1; + } + + if(asChannel) { + flags |= 16; + } + + if(options.clearDraft) { + flags |= 128; + } + + var apiPromise: any; + if(options.viaBotID) { + apiPromise = MTProto.apiManager.invokeApi('messages.sendInlineBotResult', { + flags: flags, + peer: AppPeersManager.getInputPeerByID(peerID), + random_id: randomID, + reply_to_msg_id: appMessagesIDsManager.getMessageLocalID(replyToMsgID), + query_id: options.queryID, + id: options.resultID + }, sentRequestOptions); + } else { + if(sendEntites.length) { + flags |= 8; + } + + apiPromise = MTProto.apiManager.invokeApi('messages.sendMessage', { + flags: flags, + peer: AppPeersManager.getInputPeerByID(peerID), + message: text, + random_id: randomID, + reply_to_msg_id: appMessagesIDsManager.getMessageLocalID(replyToMsgID), + entities: sendEntites + }, sentRequestOptions); + } + + // console.log(flags, entities) + apiPromise.then((updates: any) => { + if(updates._ == 'updateShortSentMessage') { + message.flags = updates.flags; + message.date = updates.date; + message.id = updates.id; + message.media = updates.media; + message.entities = updates.entities; + updates = { + _: 'updates', + users: [], + chats: [], + seq: 0, + updates: [{ + _: 'updateMessageID', + random_id: randomIDS, + id: updates.id + }, { + _: isChannel + ? 'updateNewChannelMessage' + : 'updateNewMessage', + message: message, + pts: updates.pts, + pts_count: updates.pts_count + }] + }; + } else if(updates.updates) { + updates.updates.forEach((update: any) => { + if(update._ == 'updateDraftMessage') { + update.local = true; + } + }); + } + // Testing bad situations + // var upd = angular.copy(updates) + // updates.updates.splice(0, 1) + + apiUpdatesManager.processUpdateMessage(updates); + + // $timeout(function () { + // ApiUpdatesManager.processUpdateMessage(upd) + // }, 5000) + }, (/* error: any */) => { + toggleError(true); + }).finally(() => { + if(this.pendingAfterMsgs[peerID] === sentRequestOptions) { + delete this.pendingAfterMsgs[peerID]; + } + }) + + this.pendingAfterMsgs[peerID] = sentRequestOptions; + } + + this.saveMessages([message]); + historyStorage.pending.unshift(messageID); + $rootScope.$broadcast('history_append', {peerID: peerID, messageID: messageID, my: true}); + + setTimeout(() => message.send(), 0); + // setTimeout(function () { + // message.send() + // }, 5000) + + /* if(options.clearDraft) { // WARNING + DraftsManager.clearDraft(peerID) + } */ + + this.pendingByRandomID[randomIDS] = [peerID, messageID]; + } + + public sendFile(peerID: number, file: File | Blob | MTDocument, options: { + isMedia?: boolean, + replyToMsgID?: number, + caption?: string, + entities?: any[] + } = {}) { + peerID = AppPeersManager.getPeerMigratedTo(peerID) || peerID; + var messageID = this.tempID--; + var randomID = [nextRandomInt(0xFFFFFFFF), nextRandomInt(0xFFFFFFFF)]; + var randomIDS = bigint(randomID[0]).shiftLeft(32).add(bigint(randomID[1])).toString(); + var historyStorage = this.historiesStorage[peerID]; + var flags = 0; + var pFlags: any = {}; + var replyToMsgID = options.replyToMsgID; + var isChannel = AppPeersManager.isChannel(peerID); + var isMegagroup = isChannel && AppPeersManager.isMegagroup(peerID); + var asChannel = isChannel && !isMegagroup ? true : false; + var attachType: string, apiFileName: string; + + let fileType = 'mime_type' in file ? file.mime_type : file.type; + let fileName = file instanceof File ? file.name : ''; + let isDocument = !(file instanceof File) && !(file instanceof Blob); + let caption = options.caption || ''; + + if(caption) { + let entities = options.entities || []; + caption = RichTextProcessor.parseMarkdown(caption, entities); + } + + if(!options.isMedia) { + attachType = 'document'; + apiFileName = 'document.' + fileType.split('/')[1]; + } else if(isDocument) { // maybe it's a sticker + attachType = 'document'; + apiFileName = ''; + } else if(['image/jpeg', 'image/png', 'image/bmp'].indexOf(fileType) >= 0) { + attachType = 'photo'; + apiFileName = 'photo.' + fileType.split('/')[1]; + } else if(fileType.substr(0, 6) == 'audio/' || ['video/ogg'].indexOf(fileType) >= 0) { + attachType = 'audio'; + apiFileName = 'audio.' + (fileType.split('/')[1] == 'ogg' ? 'ogg' : 'mp3'); + } else if(fileType.substr(0, 6) == 'video/') { + attachType = 'video'; + apiFileName = 'video.mp4'; + } else { + attachType = 'document'; + apiFileName = 'document.' + fileType.split('/')[1]; + } + + // console.log(attachType, apiFileName, file.type) + + if(historyStorage === undefined) { + historyStorage = this.historiesStorage[peerID] = {count: null, history: [], pending: []}; + } + + var fromID = appUsersManager.getSelf().id; + if(peerID != fromID) { + flags |= 2; + pFlags.out = true; + + if(!isChannel && !appUsersManager.isBot(peerID)) { + flags |= 1; + pFlags.unread = true; + } + } + + if(replyToMsgID) { + flags |= 8; + } + + if(asChannel) { + fromID = 0; + pFlags.post = true; + } else { + flags |= 256; + } + + var media = { + _: 'messageMediaPending', + type: attachType, + file_name: fileName || apiFileName, + size: file.size, + progress: { + percent: 1, + total: file.size, + done: 0, + cancel: () => {} + } + }; + + var message: any = { + _: 'message', + id: messageID, + from_id: fromID, + to_id: AppPeersManager.getOutputPeer(peerID), + flags: flags, + pFlags: pFlags, + date: tsNow(true) + ServerTimeManager.serverTimeOffset, + message: caption, + media: isDocument ? { + _: 'messageMediaDocument', + pFlags: {}, + flags: 1, + document: file + } : media, + random_id: randomIDS, + reply_to_msg_id: replyToMsgID, + views: asChannel && 1, + pending: true + }; + + var toggleError = (on: boolean) => { + var historyMessage = this.messagesForHistory[messageID]; + if(on) { + message.error = true; + + if(historyMessage) { + historyMessage.error = true; + } + } else { + delete message.error; + + if(historyMessage) { + delete historyMessage.error; + } + } + + $rootScope.$broadcast('messages_pending'); + }; + + var uploaded = false, + uploadPromise: ReturnType = null; + + let invoke = (flags: number, inputMedia: any) => { + return MTProto.apiManager.invokeApi('messages.sendMedia', { + flags: flags, + peer: AppPeersManager.getInputPeerByID(peerID), + media: inputMedia, + message: caption, + random_id: randomID, + reply_to_msg_id: appMessagesIDsManager.getMessageLocalID(replyToMsgID) + }).then((updates) => { + apiUpdatesManager.processUpdateMessage(updates); + }, (error) => { + if(attachType == 'photo' && + error.code == 400 && + (error.type == 'PHOTO_INVALID_DIMENSIONS' || + error.type == 'PHOTO_SAVE_FILE_INVALID')) { + error.handled = true + attachType = 'document' + message.send(); + return; + } + + toggleError(true); + }); + }; + + message.send = () => { + let flags = 0; + if(replyToMsgID) { + flags |= 1; + } + if(asChannel) { + flags |= 16; + } + + if(isDocument) { + let {id, access_hash, file_reference} = file as MTDocument; + + let inputMedia = { + _: 'inputMediaDocument', + flags: 0, + id: { + _: 'inputDocument', + id: id, + access_hash: access_hash, + file_reference: file_reference + } + }; + + invoke(flags, inputMedia); + } else if(file instanceof File || file instanceof Blob) { + let deferredHelper: { + resolve?: () => void, + reject?: (error: any) => void + } = {}; + let deferred: CancellablePromise = new Promise((resolve, reject) => { + deferredHelper.resolve = resolve; + deferredHelper.reject = reject; + }); + Object.assign(deferred, deferredHelper); + + this.sendFilePromise.then(() => { + if(!uploaded || message.error) { + uploaded = false; + uploadPromise = apiFileManager.uploadFile(file); + } + + uploadPromise && uploadPromise.then((inputFile) => { + inputFile.name = apiFileName; + uploaded = true; + var inputMedia; + switch(attachType) { + case 'photo': + inputMedia = { + _: 'inputMediaUploadedPhoto', + flags: 0, + file: inputFile + }; + break; + + case 'document': + default: + inputMedia = { + _: 'inputMediaUploadedDocument', + file: inputFile, + mime_type: fileType, + caption: '', + attributes: [ + {_: 'documentAttributeFilename', file_name: fileName} + ] + }; + } + + invoke(flags, inputMedia); + }, (/* error */) => { + toggleError(true); + }); + + uploadPromise.notify = (progress: {done: number, total: number}) => { + // console.log('upload progress', progress) + media.progress.done = progress.done; + media.progress.percent = Math.max(1, Math.floor(100 * progress.done / progress.total)); + $rootScope.$broadcast('history_update', {peerID: peerID}); + }; + + media.progress.cancel = () => { + if(!uploaded) { + deferred.resolve(); + uploadPromise.cancel(); + this.cancelPendingMessage(randomIDS); + } + } + + // @ts-ignore + uploadPromise['finally'](() => deferred.resolve()); + }); + + this.sendFilePromise = deferred; + } + }; + + this.saveMessages([message]); + historyStorage.pending.unshift(messageID); + $rootScope.$broadcast('history_append', {peerID: peerID, messageID: messageID, my: true}); + + setTimeout(message.send.bind(this), 0); + + this.pendingByRandomID[randomIDS] = [peerID, messageID]; + } + + public cancelPendingMessage(randomID: string) { + var pendingData = this.pendingByRandomID[randomID]; + + console.log('pending', randomID, pendingData); + + if(pendingData) { + var peerID = pendingData[0]; + var tempID = pendingData[1]; + var historyStorage = this.historiesStorage[peerID]; + var pos = historyStorage.pending.indexOf(tempID); + + apiUpdatesManager.processUpdateMessage({ + _: 'updateShort', + update: { + _: 'updateDeleteMessages', + messages: [tempID] + } + }); + + if(pos != -1) { + historyStorage.pending.splice(pos, 1); + } + + delete this.messagesForHistory[tempID]; + delete this.messagesStorage[tempID]; + + return true; + } + + return false; + } + + public async getConversation(peerID: number) { + var foundDialog = this.getDialogByPeerID(peerID) + if(foundDialog.length) { + return foundDialog[0]; + } + + return { + peerID: peerID, + top_message: 0, + index: this.generateDialogIndex(this.generateDialogPinnedDate()), + pFlags: {} + }; + } + + public getConversations(query?: string, offsetIndex?: number, limit = 20) { + var curDialogStorage = this.dialogsStorage; + var isSearch = typeof(query) == 'string' && query.length; + + if(isSearch) { + if(!limit || this.cachedResults.query !== query) { + this.cachedResults.query = query + + var results: any = SearchIndexManager.search(query, this.dialogsIndex); + + this.cachedResults.dialogs = [] + this.dialogsStorage.dialogs.forEach((dialog: any) => { + if(results[dialog.peerID]) { + this.cachedResults.dialogs.push(dialog); + } + }) + this.cachedResults.count = this.cachedResults.dialogs.length; + } + curDialogStorage = this.cachedResults; + } else { + this.cachedResults.query = false; + } + + var offset = 0 + if(offsetIndex > 0) { + for(offset = 0; offset < curDialogStorage.dialogs.length; offset++) { + if(offsetIndex > curDialogStorage.dialogs[offset].index) { + break; + } + } + } + + if( + isSearch || + this.allDialogsLoaded || + curDialogStorage.dialogs.length >= offset + limit + ) { + return Promise.resolve({ + dialogs: curDialogStorage.dialogs.slice(offset, offset + limit) + }); + } + + return this.getTopMessages(limit).then(() => { + offset = 0 + if(offsetIndex > 0) { + for(offset = 0; offset < curDialogStorage.dialogs.length; offset++) { + if(offsetIndex > curDialogStorage.dialogs[offset].index) { + break; + } + } + } + + //console.warn(offset, offset + limit, curDialogStorage.dialogs.length, this.dialogsStorage.dialogs.length); + + return { + dialogs: curDialogStorage.dialogs.slice(offset, offset + limit) + }; + }); + } + + public getTopMessages(limit: number) { + var dialogs = this.dialogsStorage.dialogs; + var offsetDate = 0; + var offsetID = 0; + var offsetPeerID = 0; + var offsetIndex = 0; + var flags = 0; + + if(this.dialogsOffsetDate) { + offsetDate = this.dialogsOffsetDate + MTProto.serverTimeManager.serverTimeOffset; + offsetIndex = this.dialogsOffsetDate * 0x10000; + flags |= 1; + } + + let hash = 0; + /* let id = 296814355; + hash = (((hash * 0x4F25) & 0x7FFFFFFF) + id) & 0x7FFFFFFF; */ + + return MTProto.apiManager.invokeApi('messages.getDialogs', { + flags: flags, + offset_date: offsetDate, + offset_id: appMessagesIDsManager.getMessageLocalID(offsetID), + offset_peer: AppPeersManager.getInputPeerByID(offsetPeerID), + limit: limit, + hash: hash + }, { + timeout: 300 + }).then((dialogsResult: any) => { + if(!offsetDate) { + telegramMeWebService.setAuthorized(true); + } + + appUsersManager.saveApiUsers(dialogsResult.users); + appChatsManager.saveApiChats(dialogsResult.chats); + this.saveMessages(dialogsResult.messages); + + var maxSeenIdIncremented = offsetDate ? true : false; + var hasPrepend = false; + //dialogsResult.dialogs.reverse(); + let length = dialogsResult.dialogs.length; + let noIDsDialogs: any = {}; + for(let i = length - 1; i >= 0; --i) { + let dialog = dialogsResult.dialogs[i]; + //} + //dialogsResult.dialogs.forEach((dialog: any) => { + + this.saveConversation(dialog); + if(offsetIndex && dialog.index > offsetIndex) { + this.newDialogsToHandle[dialog.peerID] = dialog; + hasPrepend = true; + } + + if(!dialog.read_inbox_max_id && !dialog.read_outbox_max_id) { + noIDsDialogs[dialog.peerID] = dialog; + } + + if(!maxSeenIdIncremented && + !AppPeersManager.isChannel(AppPeersManager.getPeerID(dialog.peer))) { + this.incrementMaxSeenID(dialog.top_message); + maxSeenIdIncremented = true; + } + } + //}); + //dialogsResult.dialogs.reverse(); + + if(Object.keys(noIDsDialogs).length) { + //setTimeout(() => { // test bad situation + this.reloadConversation(Object.keys(noIDsDialogs).map(id => +id)).then(() => { + $rootScope.$broadcast('dialogs_multiupdate', noIDsDialogs); + + for(let peerID in noIDsDialogs) { + $rootScope.$broadcast('dialog_unread', {peerID: +peerID}); + } + }); + //}, 10e3); + } + + if(!dialogsResult.dialogs.length || + !dialogsResult.count || + dialogs.length >= dialogsResult.count) { + this.allDialogsLoaded = true; + } + + if(hasPrepend && !this.newDialogsHandlePromise) { + this.newDialogsHandlePromise = window.setTimeout(this.handleNewDialogs.bind(this), 0); + } else { + $rootScope.$broadcast('dialogs_multiupdate', {}); + } + }); + } + + public generateDialogIndex(date?: any) { + if(date === undefined) { + date = tsNow(true) + MTProto.serverTimeManager.serverTimeOffset; + } + return (date * 0x10000) + ((++this.dialogsNum) & 0xFFFF); + } + + public pushDialogToStorage(dialog: any, offsetDate?: any) { + var dialogs = this.dialogsStorage.dialogs; + var pos = this.getDialogByPeerID(dialog.peerID)[1]; + if(pos !== undefined) { + dialogs.splice(pos, 1); + } + + if(offsetDate && + !dialog.pFlags.pinned && + (!this.dialogsOffsetDate || offsetDate < this.dialogsOffsetDate)) { + if(pos !== undefined) { + // So the dialog jumped to the last position + return false; + } + this.dialogsOffsetDate = offsetDate; + } + + var index = dialog.index; + var i; + var len = dialogs.length; + if(!len || index < dialogs[len - 1].index) { + dialogs.push(dialog); + } else if(index >= dialogs[0].index) { + dialogs.unshift(dialog); + } else { + for(i = 0; i < len; i++) { + if(index > dialogs[i].index) { + dialogs.splice(i, 0, dialog); + break; + } + } + } + } + + public getMessage(messageID: number) { + return this.messagesStorage[messageID] || { + _: 'messageEmpty', + deleted: true, + pFlags: {out: false, unread: false} + }; + } + + public getMessagePeer(message: any): number { + var toID = message.to_id && AppPeersManager.getPeerID(message.to_id) || 0; + + if(toID < 0) { + return toID; + } else if(message.pFlags && message.pFlags.out || message.flags & 2) { + return toID; + } + return message.from_id; + } + + public getDialogByPeerID(peerID: number) { + let length = this.dialogsStorage.dialogs.length; + for(var i = 0; i < length; i++) { + if(this.dialogsStorage.dialogs[i].peerID == peerID) { + return [this.dialogsStorage.dialogs[i], i]; + } + } + + return []; + } + + public reloadConversation(peerID: number | number[]) { + let peers = [].concat(peerID).map(peerID => AppPeersManager.getInputPeerByID(peerID)); + + console.log('will reloadConversation', peerID); + + return MTProto.apiManager.invokeApi('messages.getPeerDialogs', { + peers: peers + }).then(this.applyConversations.bind(this)); + } + + public saveMessages(apiMessages: any[], options: any = {}) { + apiMessages.forEach((apiMessage) => { + if(apiMessage.pFlags === undefined) { + apiMessage.pFlags = {}; + } + + if(!apiMessage.pFlags.out) { + apiMessage.pFlags.out = false; + } + + if(!apiMessage.pFlags.unread) { + apiMessage.pFlags.unread = false; + } + + if(apiMessage._ == 'messageEmpty') { + return; + } + + var peerID = this.getMessagePeer(apiMessage); + var isChannel = apiMessage.to_id._ == 'peerChannel'; + var channelID = isChannel ? -peerID : 0; + var isBroadcast = isChannel && appChatsManager.isBroadcast(channelID); + + var mid = appMessagesIDsManager.getFullMessageID(apiMessage.id, channelID); + apiMessage.mid = mid; + + var dialog = this.getDialogByPeerID(peerID)[0]; + if(dialog && mid > 0) { + let dialogKey = apiMessage.pFlags.out + ? 'read_outbox_max_id' + : 'read_inbox_max_id'; + + apiMessage.pFlags.unread = mid > dialog[dialogKey]; + } else if(options.isNew) { + apiMessage.pFlags.unread = true; + } + // console.log(dT(), 'msg unread', mid, apiMessage.pFlags.out, dialog && dialog[apiMessage.pFlags.out ? 'read_outbox_max_id' : 'read_inbox_max_id']) + + if(apiMessage.reply_to_msg_id) { + apiMessage.reply_to_mid = appMessagesIDsManager.getFullMessageID(apiMessage.reply_to_msg_id, channelID); + } + + apiMessage.date -= MTProto.serverTimeManager.serverTimeOffset; + + apiMessage.peerID = peerID; + apiMessage.fromID = apiMessage.pFlags.post ? peerID : apiMessage.from_id; + + var fwdHeader = apiMessage.fwd_from; + if(fwdHeader) { + if(peerID == appUsersManager.getSelf().id) { + if(fwdHeader.saved_from_peer && fwdHeader.saved_from_msg_id) { + var savedFromPeerID = AppPeersManager.getPeerID(fwdHeader.saved_from_peer); + var savedFromMid = appMessagesIDsManager.getFullMessageID(fwdHeader.saved_from_msg_id, + AppPeersManager.isChannel(savedFromPeerID) ? -savedFromPeerID : 0); + apiMessage.savedFrom = savedFromPeerID + '_' + savedFromMid; + } + + apiMessage.fromID = fwdHeader.channel_id ? -fwdHeader.channel_id : fwdHeader.from_id; + } else { + apiMessage.fwdFromID = fwdHeader.channel_id ? -fwdHeader.channel_id : fwdHeader.from_id; + apiMessage.fwdPostID = fwdHeader.channel_post; + } + + fwdHeader.date -= MTProto.serverTimeManager.serverTimeOffset; + } + + if(apiMessage.via_bot_id > 0) { + apiMessage.viaBotID = apiMessage.via_bot_id; + } + + var mediaContext = { + user_id: apiMessage.fromID, + date: apiMessage.date + }; + + if(apiMessage.media) { + switch(apiMessage.media._) { + case 'messageMediaEmpty': + delete apiMessage.media; + break; + case 'messageMediaPhoto': + if(apiMessage.media.ttl_seconds) { + apiMessage.media = {_: 'messageMediaUnsupportedWeb'}; + } else { + appPhotosManager.savePhoto(apiMessage.media.photo, mediaContext); + } + break + case 'messageMediaDocument': + if(apiMessage.media.ttl_seconds) { + apiMessage.media = {_: 'messageMediaUnsupportedWeb'}; + } else { + appDocsManager.saveDoc(apiMessage.media.document, mediaContext); + } + break; + case 'messageMediaWebPage': + if(apiMessage.media.webpage.document) { + appDocsManager.saveDoc(apiMessage.media.webpage.document, mediaContext); + } + //AppWebPagesManager.saveWebPage(apiMessage.media.webpage, apiMessage.mid, mediaContext); + break; + /*case 'messageMediaWebPage': + AppWebPagesManager.saveWebPage(apiMessage.media.webpage, apiMessage.mid, mediaContext); + break; + case 'messageMediaGame': + AppGamesManager.saveGame(apiMessage.media.game, apiMessage.mid, mediaContext); + apiMessage.media.handleMessage = true; + break; */ + case 'messageMediaInvoice': + apiMessage.media = {_: 'messageMediaUnsupportedWeb'}; + break; + case 'messageMediaGeoLive': + apiMessage.media._ = 'messageMediaGeo'; + break; + } + } + + if(apiMessage.action) { + var migrateFrom; + var migrateTo; + switch (apiMessage.action._) { + case 'messageActionChatEditPhoto': + appPhotosManager.savePhoto(apiMessage.action.photo, mediaContext); + if(isBroadcast) { + apiMessage.action._ = 'messageActionChannelEditPhoto'; + } + break; + + case 'messageActionChatEditTitle': + if(isBroadcast) { + apiMessage.action._ = 'messageActionChannelEditTitle'; + } + break; + + case 'messageActionChatDeletePhoto': + if(isBroadcast) { + apiMessage.action._ = 'messageActionChannelDeletePhoto'; + } + break; + + case 'messageActionChatAddUser': + if(apiMessage.action.users.length == 1) { + apiMessage.action.user_id = apiMessage.action.users[0]; + if(apiMessage.fromID == apiMessage.action.user_id) { + if(isChannel) { + apiMessage.action._ = 'messageActionChatJoined'; + } else { + apiMessage.action._ = 'messageActionChatReturn'; + } + } + } else if(apiMessage.action.users.length > 1) { + apiMessage.action._ = 'messageActionChatAddUsers'; + } + break; + + case 'messageActionChatDeleteUser': + if(apiMessage.fromID == apiMessage.action.user_id) { + apiMessage.action._ = 'messageActionChatLeave'; + } + break; + + case 'messageActionChannelMigrateFrom': + migrateFrom = -apiMessage.action.chat_id; + migrateTo = -channelID; + break + + case 'messageActionChatMigrateTo': + migrateFrom = -channelID; + migrateTo = -apiMessage.action.channel_id; + break; + + case 'messageActionHistoryClear': + apiMessage.deleted = true; + apiMessage.clear_history = true; + apiMessage.pFlags.out = false; + apiMessage.pFlags.unread = false; + break; + + case 'messageActionPhoneCall': + delete apiMessage.fromID; + apiMessage.action.type = + (apiMessage.pFlags.out ? 'out_' : 'in_') + + ( + apiMessage.action.reason._ == 'phoneCallDiscardReasonMissed' || + apiMessage.action.reason._ == 'phoneCallDiscardReasonBusy' + ? 'missed' + : 'ok' + ); + break; + } + + if(migrateFrom && + migrateTo && + !this.migratedFromTo[migrateFrom] && + !this.migratedToFrom[migrateTo]) { + this.migrateChecks(migrateFrom, migrateTo); + } + } + + if(apiMessage.message && apiMessage.message.length) { + var myEntities = RichTextProcessor.parseEntities(apiMessage.message); + var apiEntities = apiMessage.entities || []; + apiMessage.totalEntities = RichTextProcessor.mergeEntities(myEntities, apiEntities, !apiMessage.pending); + } + + apiMessage.canBeEdited = this.canMessageBeEdited(apiMessage); + + if(!options.isEdited) { + this.messagesStorage[mid] = apiMessage; + } + }) + } + + public migrateChecks(migrateFrom: any, migrateTo: any) { + if(!this.migratedFromTo[migrateFrom] && + !this.migratedToFrom[migrateTo] && + appChatsManager.hasChat(-migrateTo)) { + var fromChat = appChatsManager.getChat(-migrateFrom); + if(fromChat && + fromChat.migrated_to && + fromChat.migrated_to.channel_id == -migrateTo) { + this.migratedFromTo[migrateFrom] = migrateTo; + this.migratedToFrom[migrateTo] = migrateFrom; + + setTimeout(() => { + var foundDialog = this.getDialogByPeerID(migrateFrom); + if(foundDialog.length) { + this.dialogsStorage.dialogs.splice(foundDialog[1], 1); + $rootScope.$broadcast('dialog_drop', {peerID: migrateFrom}); + } + $rootScope.$broadcast('dialog_migrate', {migrateFrom: migrateFrom, migrateTo: migrateTo}); + }, 100); + } + } + } + + public canMessageBeEdited(message: any) { + var goodMedias = [ + 'messageMediaPhoto', + 'messageMediaDocument', + 'messageMediaWebPage', + 'messageMediaPending' + ] + if(message._ != 'message' || + message.deleted || + message.fwd_from || + message.via_bot_id || + message.media && goodMedias.indexOf(message.media._) == -1 || + message.fromID && appUsersManager.isBot(message.fromID)) { + return false; + } + if(message.media && + message.media._ == 'messageMediaDocument' && + message.media.document.sticker) { + return false; + } + + return true; + } + + public applyConversations(dialogsResult: any) { + appUsersManager.saveApiUsers(dialogsResult.users); + appChatsManager.saveApiChats(dialogsResult.chats); + this.saveMessages(dialogsResult.messages); + + //console.log('applyConversation', dialogsResult); + + var updatedDialogs: any = {}; + var hasUpdated = false; + dialogsResult.dialogs.forEach((dialog: any) => { + var peerID = AppPeersManager.getPeerID(dialog.peer); + var topMessage = dialog.top_message; + var topPendingMesage = this.pendingTopMsgs[peerID]; + if(topPendingMesage) { + if(!topMessage || this.getMessage(topPendingMesage).date > this.getMessage(topMessage).date) { + dialog.top_message = topMessage = topPendingMesage; + } + } + + if(topMessage) { + var wasBefore = this.getDialogByPeerID(peerID).length > 0; + this.saveConversation(dialog); + if(wasBefore) { + this.clearDialogCache(topMessage); + $rootScope.$broadcast('dialog_top', dialog); + } else { + updatedDialogs[peerID] = dialog; + hasUpdated = true; + } + } else { + var foundDialog = this.getDialogByPeerID(peerID); + if(foundDialog.length) { + this.dialogsStorage.dialogs.splice(foundDialog[1], 1); + $rootScope.$broadcast('dialog_drop', {peerID: peerID}); + } + } + + if(this.newUpdatesAfterReloadToHandle[peerID] !== undefined) { + for(let i in this.newUpdatesAfterReloadToHandle[peerID]) { + let update = this.newUpdatesAfterReloadToHandle[peerID][i]; + this.handleUpdate(update); + } + + delete this.newUpdatesAfterReloadToHandle[peerID]; + } + }); + + if(hasUpdated) { + $rootScope.$broadcast('dialogs_multiupdate', updatedDialogs); + } + } + + public clearDialogCache(msgID: number) { + delete this.messagesForDialogs[msgID]; + } + + public saveConversation(dialog: any) { + var peerID = AppPeersManager.getPeerID(dialog.peer); + if(!peerID) { + return false; + } + var channelID = AppPeersManager.isChannel(peerID) ? -peerID : 0; + var peerText = AppPeersManager.getPeerSearchText(peerID); + SearchIndexManager.indexObject(peerID, peerText, this.dialogsIndex); + + //var isMegagroup = AppPeersManager.isMegagroup(channelID); + if(dialog.top_message) { + var mid = appMessagesIDsManager.getFullMessageID(dialog.top_message, channelID); + var message = this.getMessage(mid); + } else { + var mid = this.tempID--; + var message: any = { + _: 'message', + id: mid, + mid: mid, + from_id: appUsersManager.getSelf().id, + to_id: AppPeersManager.getOutputPeer(peerID), + deleted: true, + flags: 0, + pFlags: {unread: false, out: true}, + date: 0, + message: '' + } + this.saveMessages([message]); + } + var offsetDate = message.date; + + if(!channelID && peerID < 0) { + var chat = appChatsManager.getChat(-peerID) + if(chat && chat.migrated_to && chat.pFlags.deactivated) { + var migratedToPeer = AppPeersManager.getPeerID(chat.migrated_to) + this.migratedFromTo[peerID] = migratedToPeer; + this.migratedToFrom[migratedToPeer] = peerID; + return; + } + } + + dialog.top_message = mid; + dialog.read_inbox_max_id = appMessagesIDsManager.getFullMessageID(dialog.read_inbox_max_id, channelID); + + //peerID == 228260936 && console.log('we get drunk', dialog, dialog.read_outbox_max_id); + dialog.read_outbox_max_id = appMessagesIDsManager.getFullMessageID(dialog.read_outbox_max_id, channelID); + //peerID == 228260936 && console.log('we get high', dialog, dialog.read_outbox_max_id); + + var topDate = message.date; + if(channelID) { + var channel = appChatsManager.getChat(channelID); + if(!topDate || channel.date && channel.date > topDate) { + topDate = channel.date; + } + } + var savedDraft: any = {};// DraftsManager.saveDraft(peerID, dialog.draft); // warning + if(savedDraft && savedDraft.date > topDate) { + topDate = savedDraft.date; + } + if(dialog.pFlags.pinned) { + topDate = this.generateDialogPinnedDate(); + } + + dialog.index = this.generateDialogIndex(topDate); + dialog.peerID = peerID; + + this.pushDialogToStorage(dialog, offsetDate); + + // Because we saved message without dialog present + var unreadKey = message.pFlags.out ? 'read_outbox_max_id' : 'read_inbox_max_id'; + if(message.mid > 0) { + if(message.mid > dialog[unreadKey]) message.pFlags.unread = true; + else message.pFlags.unread = false; + } + + if(this.historiesStorage[peerID] === undefined && !message.deleted) { + var historyStorage: any = {count: null, history: [], pending: []}; + historyStorage[mid > 0 ? 'history' : 'pending'].push(mid) + if(mid < 0 && message.pFlags.unread) { + dialog.unread_count++; + } + this.historiesStorage[peerID] = historyStorage + if(this.mergeReplyKeyboard(historyStorage, message)) { + $rootScope.$broadcast('history_reply_markup', {peerID: peerID}); + } + } + + //NotificationsManager.savePeerSettings(peerID, dialog.notify_settings); // warning + + /* if(dialog.pts || dialog.pFlags.pts) { + console.warn('dialog pts!', dialog, dialog.pts); + } */ + + if(channelID && dialog.pts) { + apiUpdatesManager.addChannelState(channelID, dialog.pts); + } + + /*if(Config.Modes.packed && !channelID && dialog.unread_count > 0 && + this.maxSeenID && dialog.top_message > this.maxSeenID && + message.pFlags.unread && !message.pFlags.out) { + var notifyPeer = message.flags & 16 ? message.from_id : peerID + NotificationsManager.getPeerMuted(notifyPeer).then((muted: any) => { + if(!muted) { + this.notifyAboutMessage(message); + } + }); + }*/ // WARNING + } + + public handleNotifications() { + clearTimeout(this.notificationsHandlePromise); + this.notificationsHandlePromise = 0; + + var timeout = $rootScope.idle.isIDLE /* && StatusManager.isOtherDeviceActive() */ ? 30000 : 1000; + Object.keys(this.notificationsToHandle).forEach((key: any) => { + let notifyPeerToHandle = this.notificationsToHandle[key]; + notifyPeerToHandle.isMutedPromise.then((muted: boolean) => { + var topMessage = notifyPeerToHandle.top_message + if(muted || + !topMessage.pFlags.unread) { + return; + } + + setTimeout(() => { + if(topMessage.pFlags.unread) { + this.notifyAboutMessage(topMessage, { + fwd_count: notifyPeerToHandle.fwd_count + }); + } + }, timeout); + }); + }); + + this.notificationsToHandle = {}; + } + + public notifyAboutMessage(message: any, options: any = {}) { + var peerID = this.getMessagePeer(message); + var peerString: string; + var notification: any = {}; + var notificationMessage = '', + notificationPhoto; + + var notifySettings: any = {}; //NotificationsManager.getNotifySettings(); // warning + + if(message.fwdFromID && options.fwd_count) { + notificationMessage = options.fwd_count;// this.fwdMessagesPluralize(options.fwd_count); // warning + } else if(message.message) { + if(notifySettings.nopreview) { + notificationMessage = 'conversation_message_sent'; + } else { + notificationMessage = RichTextProcessor.wrapPlainText(message.message); + } + } else if(message.media) { + var captionEmoji = ''; + switch (message.media._) { + case 'messageMediaPhoto': + notificationMessage = _('conversation_media_photo_raw'); + captionEmoji = 'рџ–ј'; + break + case 'messageMediaDocument': + switch (message.media.document.type) { + case 'gif': + notificationMessage = _('conversation_media_gif_raw'); + captionEmoji = 'рџЋ¬' + break + case 'sticker': + notificationMessage = _('conversation_media_sticker'); + var stickerEmoji = message.media.document.stickerEmojiRaw; + if(stickerEmoji !== undefined) { + notificationMessage = RichTextProcessor.wrapPlainText(stickerEmoji) + ' ' + notificationMessage; + } + break; + case 'video': + notificationMessage = _('conversation_media_video_raw'); + captionEmoji = 'рџ“№'; + break; + case 'round': + notificationMessage = _('conversation_media_round_raw'); + captionEmoji = 'рџ“№'; + break; + case 'voice': + case 'audio': + notificationMessage = _('conversation_media_audio_raw'); + break; + default: + if(message.media.document.file_name) { + notificationMessage = RichTextProcessor.wrapPlainText('рџ“Ћ ' + message.media.document.file_name); + } else { + notificationMessage = _('conversation_media_document_raw'); + captionEmoji = 'рџ“Ћ'; + } + break; + } + break; + + case 'messageMediaGeo': + case 'messageMediaVenue': + notificationMessage = _('conversation_media_location_raw'); + captionEmoji = 'рџ“Ќ'; + break; + case 'messageMediaContact': + notificationMessage = _('conversation_media_contact_raw'); + break; + case 'messageMediaGame': + notificationMessage = RichTextProcessor.wrapPlainText('рџЋ® ' + message.media.game.title); + break; + case 'messageMediaUnsupported': + notificationMessage = _('conversation_media_unsupported_raw'); + break; + default: + notificationMessage = _('conversation_media_attachment_raw'); + break; + } + + if(captionEmoji != '' && + message.media.caption) { + notificationMessage = RichTextProcessor.wrapPlainText(captionEmoji + ' ' + message.media.caption); + } + } else if(message._ == 'messageService') { + switch(message.action._) { + case 'messageActionChatCreate': + notificationMessage = _('conversation_group_created_raw'); + break + case 'messageActionChatEditTitle': + notificationMessage = _('conversation_group_renamed_raw'); + break + case 'messageActionChatEditPhoto': + notificationMessage = _('conversation_group_photo_updated_raw'); + break + case 'messageActionChatDeletePhoto': + notificationMessage = _('conversation_group_photo_removed_raw'); + break + case 'messageActionChatAddUser': + case 'messageActionChatAddUsers': + notificationMessage = _('conversation_invited_user_message_raw'); + break + case 'messageActionChatReturn': + notificationMessage = _('conversation_returned_to_group_raw'); + break + case 'messageActionChatJoined': + notificationMessage = _('conversation_joined_group_raw'); + break + case 'messageActionChatDeleteUser': + notificationMessage = _('conversation_kicked_user_message_raw'); + break + case 'messageActionChatLeave': + notificationMessage = _('conversation_left_group_raw'); + break + case 'messageActionChatJoinedByLink': + notificationMessage = _('conversation_joined_by_link_raw'); + break + case 'messageActionChannelCreate': + notificationMessage = _('conversation_created_channel_raw'); + break + case 'messageActionChannelEditTitle': + notificationMessage = _('conversation_changed_channel_name_raw'); + break + case 'messageActionChannelEditPhoto': + notificationMessage = _('conversation_changed_channel_photo_raw') + break + case 'messageActionChannelDeletePhoto': + notificationMessage = _('conversation_removed_channel_photo_raw') + break + case 'messageActionPinMessage': + notificationMessage = _('conversation_pinned_message_raw') + break + case 'messageActionGameScore': + notificationMessage = message.action.score;//this.gameScorePluralize(message.action.score); // warning + break + + case 'messageActionPhoneCall': + switch(message.action.type) { + case 'out_missed': + notificationMessage = _('message_service_phonecall_canceled_raw') + break + case 'in_missed': + notificationMessage = _('message_service_phonecall_missed_raw') + break + case 'out_ok': + notificationMessage = _('message_service_phonecall_outgoing_raw') + break + case 'in_ok': + notificationMessage = _('message_service_phonecall_incoming_raw') + break + } + break + } + } + + if(peerID > 0) { + var fromUser = appUsersManager.getUser(message.from_id); + var fromPhoto = appUsersManager.getUserPhoto(message.from_id); + + notification.title = (fromUser.first_name || '') + + (fromUser.first_name && fromUser.last_name ? ' ' : '') + + (fromUser.last_name || '') + if(!notification.title) { + notification.title = fromUser.phone || _('conversation_unknown_user_raw') + } + + notificationPhoto = fromPhoto + + peerString = appUsersManager.getUserString(peerID) + } else { + notification.title = appChatsManager.getChat(-peerID).title || _('conversation_unknown_chat_raw') + + if(message.from_id > 0) { + var fromUser = appUsersManager.getUser(message.from_id) + notification.title = (fromUser.first_name || fromUser.last_name || _('conversation_unknown_user_raw')) + + ' @ ' + + notification.title + } + + notificationPhoto = appChatsManager.getChatPhoto(-peerID) + + peerString = appChatsManager.getChatString(-peerID) + } + + notification.title = RichTextProcessor.wrapPlainText(notification.title) + + notification.onclick = function () { + $rootScope.$broadcast('history_focus', { + peerString: peerString, + messageID: message.flags & 16 ? message.mid : 0 + }) + } + + notification.message = notificationMessage + notification.key = 'msg' + message.mid + notification.tag = peerString + notification.silent = message.pFlags.silent || false + + if(notificationPhoto.location && !notificationPhoto.location.empty) { + MTProto.apiFileManager.downloadSmallFile(notificationPhoto.location/* , notificationPhoto.size */) + .then((blob) => { + if(message.pFlags.unread) { + notification.image = blob + // NotificationsManager.notify(notification) // warning + } + }) + } else { + // NotificationsManager.notify(notification) // warning + } + } + + public mergeReplyKeyboard(historyStorage: any, message: any) { + // console.log('merge', message.mid, message.reply_markup, historyStorage.reply_markup) + if(!message.reply_markup && + !message.pFlags.out && + !message.action) { + return false; + } + if(message.reply_markup && + message.reply_markup._ == 'replyInlineMarkup') { + return false; + } + var messageReplyMarkup = message.reply_markup; + var lastReplyMarkup = historyStorage.reply_markup; + if(messageReplyMarkup) { + if(lastReplyMarkup && lastReplyMarkup.mid >= message.mid) { + return false; + } + + if(messageReplyMarkup.pFlags.selective && + !(message.flags & 16)) { + return false; + } + + if(historyStorage.maxOutID && + message.mid < historyStorage.maxOutID && + messageReplyMarkup.pFlags.single_use) { + messageReplyMarkup.pFlags.hidden = true; + } + messageReplyMarkup = Object.assign({ + mid: message.mid + }, messageReplyMarkup); + if(messageReplyMarkup._ != 'replyKeyboardHide') { + messageReplyMarkup.fromID = message.from_id; + } + historyStorage.reply_markup = messageReplyMarkup; + // console.log('set', historyStorage.reply_markup) + return true; + } + + if(message.pFlags.out) { + if(lastReplyMarkup) { + if(lastReplyMarkup.pFlags.single_use && + !lastReplyMarkup.pFlags.hidden && + (message.mid > lastReplyMarkup.mid || message.mid < 0) && + message.message) { + lastReplyMarkup.pFlags.hidden = true; + // console.log('set', historyStorage.reply_markup) + return true; + } + } else if(!historyStorage.maxOutID || + message.mid > historyStorage.maxOutID) { + historyStorage.maxOutID = message.mid; + } + } + + if(message.action && + message.action._ == 'messageActionChatDeleteUser' && + (lastReplyMarkup + ? message.action.user_id == lastReplyMarkup.fromID + : appUsersManager.isBot(message.action.user_id) + ) + ) { + historyStorage.reply_markup = { + _: 'replyKeyboardHide', + mid: message.mid, + flags: 0, + pFlags: {} + }; + // console.log('set', historyStorage.reply_markup) + return true; + } + + return false; + } + + public getSearch(peerID = 0, query: string = '', inputFilter: { + _?: string + } = {_: 'inputMessagesFilterEmpty'}, maxID: number, limit: number) { + //peerID = peerID ? parseInt(peerID) : 0; + var foundMsgs: number[] = []; + var useSearchCache = !query; + var newSearchFilter = {peer: peerID, filter: inputFilter}; + var sameSearchCache = useSearchCache + && deepEqual(this.lastSearchFilter, newSearchFilter); //angular.equals(this.lastSearchFilter, newSearchFilter); + + if(useSearchCache && !sameSearchCache) { + // console.warn(dT(), 'new search filter', lastSearchFilter, newSearchFilter) + this.lastSearchFilter = newSearchFilter; + this.lastSearchResults = []; + } + + console.log(dT(), 'search', useSearchCache, sameSearchCache, this.lastSearchResults, maxID); + + if(peerID && !maxID && !query) { + var historyStorage = this.historiesStorage[peerID]; + + if(historyStorage !== undefined && historyStorage.history.length) { + var neededContents: { + [type: string]: boolean + } = {}, + neededDocType: string | boolean; + var neededLimit = limit || 20; + var message; + + switch(inputFilter._) { + case 'inputMessagesFilterPhotos': + neededContents['messageMediaPhoto'] = true; + break; + + case 'inputMessagesFilterPhotoVideo': + neededContents['messageMediaPhoto'] = true; + neededContents['messageMediaDocument'] = true; + neededDocType = 'video'; + break; + + case 'inputMessagesFilterVideo': + neededContents['messageMediaDocument'] = true; + neededDocType = 'video'; + break; + + case 'inputMessagesFilterDocument': + neededContents['messageMediaDocument'] = true; + neededDocType = false; + break; + + case 'inputMessagesFilterVoice': + neededContents['messageMediaDocument'] = true; + neededDocType = 'voice'; + break; + + case 'inputMessagesFilterRoundVideo': + neededContents['messageMediaDocument'] = true; + neededDocType = 'round'; + break; + + case 'inputMessagesFilterMusic': + neededContents['messageMediaDocument'] = true; + neededDocType = 'audio'; + break; + + case 'inputMessagesFilterUrl': + neededContents['url'] = true; + break; + + case 'inputMessagesFilterMyMentions': + neededContents['mentioned'] = true; + break; + + default: + return Promise.resolve({ + count: 0, + history: [] as number[] + }); + } + + for(let i = 0; i < historyStorage.history.length; i++) { + message = this.messagesStorage[historyStorage.history[i]]; + if(message.media && neededContents[message.media._]) { + if(neededDocType !== undefined && + message.media._ == 'messageMediaDocument' && + message.media.document.type != neededDocType) { + continue; + } + + foundMsgs.push(message.mid); + if(foundMsgs.length >= neededLimit) { + break; + } + } + } + } + + // console.warn(dT(), 'before append', foundMsgs) + if(foundMsgs.length < neededLimit && this.lastSearchResults.length && sameSearchCache) { + var minID = foundMsgs.length ? foundMsgs[foundMsgs.length - 1] : false; + for(let i = 0; i < this.lastSearchResults.length; i++) { + if(minID === false || this.lastSearchResults[i] < minID) { + foundMsgs.push(this.lastSearchResults[i]); + if(foundMsgs.length >= neededLimit) { + break; + } + } + } + } + // console.warn(dT(), 'after append', foundMsgs) + } + + if(foundMsgs.length || limit == 1000) { + if(useSearchCache) { + this.lastSearchResults = listMergeSorted(this.lastSearchResults, foundMsgs) + } + + return Promise.resolve({ + count: 0, + history: foundMsgs + }); + } + + var apiPromise + + if(peerID || !query) { + apiPromise = MTProto.apiManager.invokeApi('messages.search', { + flags: 0, + peer: AppPeersManager.getInputPeerByID(peerID), + q: query || '', + filter: inputFilter || {_: 'inputMessagesFilterEmpty'}, + min_date: 0, + max_date: 0, + limit: limit || 20, + offset_id: appMessagesIDsManager.getMessageLocalID(maxID) || 0, + add_offset: 0, + max_id: 0, + min_id: 0 + }, { + timeout: 300, + noErrorBox: true + }); + } else { + var offsetDate = 0; + var offsetPeerID = 0; + var offsetID = 0; + var offsetMessage = maxID && this.getMessage(maxID); + + if(offsetMessage && offsetMessage.date) { + offsetDate = offsetMessage.date + ServerTimeManager.serverTimeOffset; + offsetID = offsetMessage.id; + offsetPeerID = this.getMessagePeer(offsetMessage); + } + + apiPromise = MTProto.apiManager.invokeApi('messages.searchGlobal', { + q: query, + offset_date: offsetDate, + offset_peer: AppPeersManager.getInputPeerByID(offsetPeerID), + offset_id: appMessagesIDsManager.getMessageLocalID(offsetID), + limit: limit || 20 + }, { + timeout: 300, + noErrorBox: true + }); + } + + return apiPromise.then((searchResult: any) => { + appUsersManager.saveApiUsers(searchResult.users); + appChatsManager.saveApiChats(searchResult.chats); + this.saveMessages(searchResult.messages); + + var foundCount: number = searchResult.count || searchResult.messages.length; + + foundMsgs = []; + searchResult.messages.forEach((message: any) => { + var peerID = this.getMessagePeer(message); + if(peerID < 0) { + var chat = appChatsManager.getChat(-peerID); + if(chat.migrated_to) { + this.migrateChecks(peerID, -chat.migrated_to.channel_id); + } + } + foundMsgs.push(message.mid); + }); + + if(useSearchCache && + (!maxID || sameSearchCache && this.lastSearchResults.indexOf(maxID) >= 0)) { + this.lastSearchResults = listMergeSorted(this.lastSearchResults, foundMsgs); + } + // console.log(dT(), 'after API', foundMsgs, lastSearchResults) + + return { + count: foundCount, + history: foundMsgs + } + }, (error) => { + if(error.code == 400) { + error.handled = true; + } + return Promise.reject(error); + }); + } + + public generateDialogPinnedDate() { + return 0x7fffff00 + ((this.pinnedIndex++) & 0xff); + } + + public handleNewMessages() { + clearTimeout(this.newMessagesHandlePromise); + this.newMessagesHandlePromise = 0; + + $rootScope.$broadcast('history_multiappend', this.newMessagesToHandle); + this.newMessagesToHandle = {}; + } + + public handleNewDialogs() { + clearTimeout(this.newDialogsHandlePromise); + this.newDialogsHandlePromise = 0; + + var newMaxSeenID = 0 + Object.keys(this.newDialogsToHandle).forEach((peerID) => { + let dialog = this.newDialogsToHandle[peerID]; + if(dialog.reload) { + this.reloadConversation(+peerID); + delete this.newDialogsToHandle[peerID]; + } else { + this.pushDialogToStorage(dialog); + if(!AppPeersManager.isChannel(+peerID)) { + newMaxSeenID = Math.max(newMaxSeenID, dialog.top_message || 0); + } + } + }) + + if(newMaxSeenID != 0) { + this.incrementMaxSeenID(newMaxSeenID); + } + + $rootScope.$broadcast('dialogs_multiupdate', this.newDialogsToHandle); + this.newDialogsToHandle = {}; + } + + public readHistory(peerID: number, maxID = 0) { + // console.trace('start read') + var isChannel = AppPeersManager.isChannel(peerID); + var historyStorage = this.historiesStorage[peerID]; + var foundDialog = this.getDialogByPeerID(peerID)[0]; + + if(!foundDialog || !foundDialog.unread_count) { + if(!historyStorage || !historyStorage.history.length) { + return false; + } + + let messageID, message; + let foundUnread = false; + for(let i = historyStorage.history.length; i >= 0; i--) { + messageID = historyStorage.history[i]; + message = this.messagesStorage[messageID]; + if(message && !message.pFlags.out && message.pFlags.unread) { + foundUnread = true; + break; + } + } + + if(!foundUnread) { + return false; + } + } + + if(historyStorage.readPromise) { + return historyStorage.readPromise; + } + + var apiPromise: any; + if(isChannel) { + apiPromise = MTProto.apiManager.invokeApi('channels.readHistory', { + channel: appChatsManager.getChannelInput(-peerID), + max_id: maxID + }); + } else { + apiPromise = MTProto.apiManager.invokeApi('messages.readHistory', { + peer: AppPeersManager.getInputPeerByID(peerID), + max_id: maxID + }).then((affectedMessages: any) => { + apiUpdatesManager.processUpdateMessage({ + _: 'updateShort', + update: { + _: 'updatePts', + pts: affectedMessages.pts, + pts_count: affectedMessages.pts_count + } + }); + }); + } + + historyStorage.readPromise = apiPromise.then(() => { + if(foundDialog) { + // console.log('done read history', peerID) + + let index = -1; + if(maxID != 0 && historyStorage && historyStorage.history.length) { + index = historyStorage.history.findIndex((mid: number) => mid == maxID); + } + + foundDialog.unread_count = index == -1 ? 0 : index; + console.log('readHistory set unread_count to:', foundDialog.unread_count, foundDialog); + $rootScope.$broadcast('dialog_unread', {peerID: peerID, count: foundDialog.unread_count}); + $rootScope.$broadcast('messages_read'); + if(historyStorage && historyStorage.history.length) { + console.warn('readPromise:', index, historyStorage.history[index != -1 ? index : 0]); + foundDialog.read_inbox_max_id = historyStorage.history[index != -1 ? index : 0]; + } + } + /* if(foundDialog) { + // console.log('done read history', peerID) + foundDialog.unread_count = 0 + $rootScope.$broadcast('dialog_unread', {peerID: peerID, count: 0}) + $rootScope.$broadcast('messages_read') + if(historyStorage && historyStorage.history.length) { + foundDialog.read_inbox_max_id = historyStorage.history[0] + } + } */ + }).finally(() => { + delete historyStorage.readPromise; + }); + + if(historyStorage && historyStorage.history.length) { + let messageID: number; + let message, i; + for(i = 0; i < historyStorage.history.length; i++) { + messageID = historyStorage.history[i]; + + message = this.messagesStorage[messageID]; + if(message && !message.pFlags.out) { + message.pFlags.unread = false; + if(this.messagesForHistory[messageID]) { + this.messagesForHistory[messageID].pFlags.unread = false; + } + if(this.messagesForDialogs[messageID]) { + this.messagesForDialogs[messageID].pFlags.unread = false; + } + //NotificationsManager.cancel('msg' + messageID); // warning + } + + if(messageID == maxID) break; + } + } + + // NotificationsManager.soundReset(AppPeersManager.getPeerString(peerID)) // warning + + return historyStorage.readPromise; + } + + public readMessages(messageIDs: number[]) { + var splitted = appMessagesIDsManager.splitMessageIDsByChannels(messageIDs); + Object.keys(splitted.msgIDs).forEach((channelID: number | string) => { + channelID = +channelID; + let msgIDs = splitted.msgIDs[channelID]; + + if(channelID > 0) { + MTProto.apiManager.invokeApi('channels.readMessageContents', { + channel: appChatsManager.getChannelInput(channelID), + id: msgIDs + }).then(() => { + apiUpdatesManager.processUpdateMessage({ + _: 'updateShort', + update: { + _: 'updateChannelReadMessagesContents', + channel_id: channelID, + messages: msgIDs + } + }); + }); + } else { + MTProto.apiManager.invokeApi('messages.readMessageContents', { + id: msgIDs + }).then((affectedMessages: any) => { + apiUpdatesManager.processUpdateMessage({ + _: 'updateShort', + update: { + _: 'updateReadMessagesContents', + messages: msgIDs, + pts: affectedMessages.pts, + pts_count: affectedMessages.pts_count + } + }); + }); + } + }); + } + + public handleUpdate(update: any) { + console.log('AMM: handleUpdate:', update._); + switch(update._) { + case 'updateMessageID': { + var randomID = update.random_id; + var pendingData = this.pendingByRandomID[randomID]; + if(pendingData) { + var peerID: number = pendingData[0]; + var tempID = pendingData[1]; + var channelID = AppPeersManager.isChannel(peerID) ? -peerID : 0; + var mid = appMessagesIDsManager.getFullMessageID(update.id, channelID); + var message = this.messagesStorage[mid]; + if(message) { + var historyStorage = this.historiesStorage[peerID]; + var pos = historyStorage.pending.indexOf(tempID); + if(pos != -1) { + historyStorage.pending.splice(pos, 1); + } + delete this.messagesForHistory[tempID]; + delete this.messagesStorage[tempID]; + + var msgs: any = {} + msgs[tempID] = true; + + $rootScope.$broadcast('history_delete', {peerID: peerID, msgs: msgs}); + + this.finalizePendingMessageCallbacks(tempID, mid); + } else { + this.pendingByMessageID[mid] = randomID; + } + } + break; + } + + case 'updateNewMessage': + case 'updateNewChannelMessage': { + var message = update.message; + var peerID = this.getMessagePeer(message); + var historyStorage = this.historiesStorage[peerID]; + var foundDialog = this.getDialogByPeerID(peerID); + + if(!foundDialog.length) { + this.newDialogsToHandle[peerID] = {reload: true} + if(!this.newDialogsHandlePromise) { + this.newDialogsHandlePromise = window.setTimeout(this.handleNewDialogs.bind(this), 0); + } + if(this.newUpdatesAfterReloadToHandle[peerID] === undefined) { + this.newUpdatesAfterReloadToHandle[peerID] = []; + } + this.newUpdatesAfterReloadToHandle[peerID].push(update); + break; + } + + if(update._ == 'updateNewChannelMessage') { + var chat = appChatsManager.getChat(-peerID); + if(chat.pFlags && (chat.pFlags.left || chat.pFlags.kicked)) { + break; + } + } + + this.saveMessages([message], {isNew: true}); + // console.warn(dT(), 'message unread', message.mid, message.pFlags.unread) + + if(historyStorage === undefined) { + historyStorage = this.historiesStorage[peerID] = { + count: null, + history: [], + pending: [] + }; + } + + var history = message.mid > 0 ? historyStorage.history : historyStorage.pending; + if(history.indexOf(message.mid) != -1) { + return false; + } + var topMsgID = history[0]; + history.unshift(message.mid); + if(message.mid > 0 && message.mid < topMsgID) { + history.sort((a: any, b: any) => { + return b - a; + }); + } + + if(message.mid > 0 && + historyStorage.count !== null) { + historyStorage.count++; + } + + if(this.mergeReplyKeyboard(historyStorage, message)) { + $rootScope.$broadcast('history_reply_markup', {peerID: peerID}); + } + + if(!message.pFlags.out && message.from_id) { + appUsersManager.forceUserOnline(message.from_id); + } + + var randomID = this.pendingByMessageID[message.mid], + pendingMessage; + + if(randomID) { + if(pendingMessage = this.finalizePendingMessage(randomID, message)) { + $rootScope.$broadcast('history_update', {peerID: peerID}); + } + + delete this.pendingByMessageID[message.mid]; + } + + if(!pendingMessage) { + if(this.newMessagesToHandle[peerID] === undefined) { + this.newMessagesToHandle[peerID] = []; + } + + this.newMessagesToHandle[peerID].push(message.mid); + if(!this.newMessagesHandlePromise) { + this.newMessagesHandlePromise = window.setTimeout(this.handleNewMessages.bind(this), 0); + } + } + + var inboxUnread = !message.pFlags.out && message.pFlags.unread; + var dialog = foundDialog[0]; + dialog.top_message = message.mid; + if(inboxUnread) { + dialog.unread_count++; + } + if(!dialog.pFlags.pinned || !dialog.index) { + dialog.index = this.generateDialogIndex(message.date); + } + + this.newDialogsToHandle[peerID] = dialog; + if(!this.newDialogsHandlePromise) { + this.newDialogsHandlePromise = window.setTimeout(this.handleNewDialogs.bind(this), 0); + } + + if(inboxUnread && + ($rootScope.selectedPeerID != peerID || $rootScope.idle.isIDLE)) { + var notifyPeer = message.flags & 16 ? message.from_id : peerID; + var notifyPeerToHandle = this.notificationsToHandle[notifyPeer]; + if(notifyPeerToHandle === undefined) { + notifyPeerToHandle = this.notificationsToHandle[notifyPeer] = { + isMutedPromise: Promise.resolve()/* NotificationsManager.getPeerMuted(notifyPeer) */, // WARNING + fwd_count: 0, + from_id: 0 + }; + } + + if(notifyPeerToHandle.from_id != message.from_id) { + notifyPeerToHandle.from_id = message.from_id; + notifyPeerToHandle.fwd_count = 0; + } + if(message.fwdFromID) { + notifyPeerToHandle.fwd_count++; + } + + notifyPeerToHandle.top_message = message; + + if(!this.notificationsHandlePromise) { + this.notificationsHandlePromise = window.setTimeout(this.handleNotifications.bind(this), 1000); + } + } + break; + } + + case 'updateDialogPinned': { + var peerID = AppPeersManager.getPeerID(update.peer); + var foundDialog = this.getDialogByPeerID(peerID); + + if(!foundDialog.length || !update.pFlags.pinned) { + this.newDialogsToHandle[peerID] = {reload: true}; + if(!this.newDialogsHandlePromise) { + this.newDialogsHandlePromise = window.setTimeout(this.handleNewDialogs.bind(this), 0); + } + break; + } + + var dialog = foundDialog[0]; + dialog.index = this.generateDialogIndex(this.generateDialogPinnedDate()); + dialog.pFlags.pinned = true; + break; + } + + case 'updatePinnedDialogs': { + var newPinned: any = {}; + if(!update.order) { + MTProto.apiManager.invokeApi('messages.getPinnedDialogs', {}).then((dialogsResult: any) => { + dialogsResult.dialogs.reverse(); + this.applyConversations(dialogsResult); + + dialogsResult.dialogs.forEach((dialog: any) => { + newPinned[dialog.peerID] = true; + }); + + this.dialogsStorage.dialogs.forEach((dialog: any) => { + var peerID = dialog.peerID; + if(dialog.pFlags.pinned && !newPinned[peerID]) { + this.newDialogsToHandle[peerID] = {reload: true}; + if(!this.newDialogsHandlePromise) { + this.newDialogsHandlePromise = window.setTimeout(this.handleNewDialogs.bind(this), 0); + } + } + }); + }); + break; + } + + update.order.reverse(); + update.order.forEach((peer: any) => { + var peerID = AppPeersManager.getPeerID(peer); + newPinned[peerID] = true; + + var foundDialog = this.getDialogByPeerID(peerID); + + if(!foundDialog.length) { + this.newDialogsToHandle[peerID] = {reload: true} + if(!this.newDialogsHandlePromise) { + this.newDialogsHandlePromise = window.setTimeout(this.handleNewDialogs.bind(this), 0); + } + return; + } + + var dialog = foundDialog[0] + dialog.index = this.generateDialogIndex(this.generateDialogPinnedDate()); + dialog.pFlags.pinned = true; + + this.newDialogsToHandle[peerID] = dialog + if(!this.newDialogsHandlePromise) { + this.newDialogsHandlePromise = window.setTimeout(this.handleNewDialogs.bind(this), 0); + } + }) + + this.dialogsStorage.dialogs.forEach((dialog: any) => { + var peerID = dialog.peerID; + if(dialog.pFlags.pinned && !newPinned[peerID]) { + this.newDialogsToHandle[peerID] = {reload: true} + if(!this.newDialogsHandlePromise) { + this.newDialogsHandlePromise = window.setTimeout(this.handleNewDialogs.bind(this), 0); + } + } + }) + break; + } + + case 'updateEditMessage': + case 'updateEditChannelMessage': { + var message = update.message; + var peerID = this.getMessagePeer(message); + var channelID = message.to_id._ == 'peerChannel' ? -peerID : 0; + var mid = appMessagesIDsManager.getFullMessageID(message.id, channelID); + if(this.messagesStorage[mid] === undefined) { + break; + } + + // console.trace(dT(), 'edit message', message) + this.saveMessages([message], {isEdited: true}); + safeReplaceObject(this.messagesStorage[mid], message); + + var wasForHistory = this.messagesForHistory[mid]; + if(wasForHistory !== undefined) { + delete this.messagesForHistory[mid]; + var newForHistory = this.wrapForHistory(mid); + safeReplaceObject(wasForHistory, newForHistory); + this.messagesForHistory[mid] = wasForHistory; + } + + var dialog = this.getDialogByPeerID(peerID)[0]; + var isTopMessage = dialog && dialog.top_message == mid; + if(message.clear_history) { + if(isTopMessage) { + $rootScope.$broadcast('dialog_flush', {peerID: peerID}); + } else { + var msgs: any = {}; + msgs[mid] = true; + $rootScope.$broadcast('history_delete', {peerID: peerID, msgs: msgs}); + } + } else { + $rootScope.$broadcast('message_edit', { + peerID: peerID, + id: message.id, + mid: mid + }); + + if(isTopMessage) { + var updatedDialogs: any = {}; + updatedDialogs[peerID] = dialog; + $rootScope.$broadcast('dialogs_multiupdate', updatedDialogs); + } + } + break; + } + + case 'updateReadHistoryInbox': + case 'updateReadHistoryOutbox': + case 'updateReadChannelInbox': + case 'updateReadChannelOutbox': { + var isOut = update._ == 'updateReadHistoryOutbox' || update._ == 'updateReadChannelOutbox'; + var channelID: number = update.channel_id; + var maxID = appMessagesIDsManager.getFullMessageID(update.max_id, channelID); + var peerID = channelID ? -channelID : AppPeersManager.getPeerID(update.peer); + var foundDialog = this.getDialogByPeerID(peerID); + var history = (this.historiesStorage[peerID] || {}).history || []; + var newUnreadCount = 0; + var length = history.length; + var foundAffected = false; + var messageID: number, message; + var i; + + //console.warn(dT(), 'read', peerID, isOut ? 'out' : 'in', maxID) + + if(peerID > 0 && isOut) { + appUsersManager.forceUserOnline(peerID); + } + + for(i = 0; i < length; i++) { + messageID = history[i]; + if(messageID > maxID) { + continue; + } + message = this.messagesStorage[messageID]; + + if(message.pFlags.out != isOut) { + continue; + } + if(!message.pFlags.unread) { + break; + } + // console.warn('read', messageID, message.pFlags.unread, message) + if(message && message.pFlags.unread) { + message.pFlags.unread = false + if(this.messagesForHistory[messageID]) { + this.messagesForHistory[messageID].pFlags.unread = false; + if(!foundAffected) { + foundAffected = true; + } + } + if(this.messagesForDialogs[messageID]) { + this.messagesForDialogs[messageID].pFlags.unread = false; + } + if(!message.pFlags.out) { + if(foundDialog[0]) { + newUnreadCount = --foundDialog[0].unread_count; + } + //NotificationsManager.cancel('msg' + messageID); // warning + } + } + } + if(foundDialog[0]) { + if(!isOut && + newUnreadCount && + foundDialog[0].top_message <= maxID) { + newUnreadCount = foundDialog[0].unread_count = 0; + } + let dialogKey = isOut ? 'read_outbox_max_id' : 'read_inbox_max_id'; + foundDialog[0][dialogKey] = maxID; + } + + // need be commented for read out messages + //if(newUnreadCount != 0 || !isOut) { // fix 16.11.2019 (maybe not) + console.warn(dT(), 'cnt', peerID, newUnreadCount); + $rootScope.$broadcast('dialog_unread', {peerID: peerID, count: newUnreadCount}); + //} + + if(foundAffected) { + $rootScope.$broadcast('messages_read'); + } + break; + } + + case 'updateChannelReadMessagesContents': { + var channelID: number = update.channel_id; + var newMessages: any[] = []; + update.messages.forEach((msgID: number) => { + newMessages.push(appMessagesIDsManager.getFullMessageID(msgID, channelID)); + }); + update.messages = newMessages; + } + + case 'updateReadMessagesContents': { + var messages: any[] = update.messages; + var len = messages.length; + var i; + var messageID: number, message; + var historyMessage; + for(i = 0; i < len; i++) { + messageID = messages[i]; + if(message = this.messagesStorage[messageID]) { + delete message.pFlags.media_unread; + } + if(historyMessage = this.messagesForHistory[messageID]) { + delete historyMessage.pFlags.media_unread; + } + } + break; + } + + case 'updateChannelAvailableMessages': { + var channelID: number = update.channel_id; + var messages: any[] = []; + var peerID: number = -channelID; + var history = (this.historiesStorage[peerID] || {}).history || []; + if(history.length) { + history.forEach((msgID: number) => { + if(!update.available_min_id || + appMessagesIDsManager.getMessageLocalID(msgID) <= update.available_min_id) { + messages.push(msgID); + } + }); + } + update.messages = messages; + } + + case 'updateDeleteMessages': + case 'updateDeleteChannelMessages': { + var historiesUpdated: any = {}; + var channelID: number = update.channel_id; + var messageID: number; + var message, i; + var peerID: number, foundDialog: any[]; + let history: any; + var peerMessagesToHandle; + var peerMessagesHandlePos; + + for (i = 0; i < update.messages.length; i++) { + messageID = appMessagesIDsManager.getFullMessageID(update.messages[i], channelID); + message = this.messagesStorage[messageID]; + if(message) { + peerID = this.getMessagePeer(message); + history = historiesUpdated[peerID] || (historiesUpdated[peerID] = {count: 0, unread: 0, msgs: {}}); + + if(!message.pFlags.out && message.pFlags.unread) { + history.unread++; + // NotificationsManager.cancel('msg' + messageID); // warning + } + history.count++; + history.msgs[messageID] = true; + + if(this.messagesForHistory[messageID]) { + this.messagesForHistory[messageID].deleted = true; + delete this.messagesForHistory[messageID]; + } + if(this.messagesForDialogs[messageID]) { + this.messagesForDialogs[messageID].deleted = true; + delete this.messagesForDialogs[messageID]; + } + message.deleted = true + this.messagesStorage[messageID] = { + deleted: true, + id: messageID, + from_id: message.from_id, + to_id: message.to_id, + flags: message.flags, + pFlags: message.pFlags, + date: message.date + }; + + peerMessagesToHandle = this.newMessagesToHandle[peerID]; + if(peerMessagesToHandle && peerMessagesToHandle.length) { + peerMessagesHandlePos = peerMessagesToHandle.indexOf(messageID); + if(peerMessagesHandlePos != -1) { + peerMessagesToHandle.splice(peerMessagesHandlePos); + } + } + } + } + + Object.keys(historiesUpdated).forEach((peerID: string) => { + let updatedData = historiesUpdated[peerID]; + var historyStorage = this.historiesStorage[peerID]; + if(historyStorage !== undefined) { + var newHistory = [] + var newPending = [] + for(var i = 0; i < historyStorage.history.length; i++) { + if(!updatedData.msgs[historyStorage.history[i]]) { + newHistory.push(historyStorage.history[i]); + } + } + historyStorage.history = newHistory; + if(updatedData.count && + historyStorage.count !== null && + historyStorage.count > 0) { + historyStorage.count -= updatedData.count + if(historyStorage.count < 0) { + historyStorage.count = 0; + } + } + + for(var i = 0; i < historyStorage.pending.length; i++) { + if(!updatedData.msgs[historyStorage.pending[i]]) { + newPending.push(historyStorage.pending[i]); + } + } + historyStorage.pending = newPending; + + $rootScope.$broadcast('history_delete', {peerID: peerID, msgs: updatedData.msgs}); + } + + var foundDialog = this.getDialogByPeerID(+peerID)[0]; + if(foundDialog) { + if(updatedData.unread) { + foundDialog.unread_count -= updatedData.unread; + + $rootScope.$broadcast('dialog_unread', { + peerID: peerID, + count: foundDialog.unread_count + }); + } + + if(updatedData.msgs[foundDialog.top_message]) { + this.reloadConversation(+peerID); + } + } + }) + break; + } + + case 'updateChannel': { + var channelID: number = update.channel_id; + var peerID = -channelID; + var channel = appChatsManager.getChat(channelID); + + var needDialog = channel._ == 'channel' && (!channel.pFlags.left && !channel.pFlags.kicked); + var foundDialog = this.getDialogByPeerID(peerID); + var hasDialog = foundDialog.length > 0; + + var canViewHistory = channel._ == 'channel' && (channel.username || !channel.pFlags.left && !channel.pFlags.kicked) && true || false; + var hasHistory = this.historiesStorage[peerID] !== undefined; + + if(canViewHistory != hasHistory) { + delete this.historiesStorage[peerID]; + $rootScope.$broadcast('history_forbidden', peerID); + } + if(hasDialog != needDialog) { + if(needDialog) { + this.reloadConversation(-channelID); + } else { + if(foundDialog[0]) { + this.dialogsStorage.dialogs.splice(foundDialog[1], 1); + $rootScope.$broadcast('dialog_drop', {peerID: peerID}); + } + } + } + break; + } + + case 'updateChannelReload': { + var channelID: number = update.channel_id; + var peerID = -channelID; + var foundDialog = this.getDialogByPeerID(peerID); + if(foundDialog[0]) { + this.dialogsStorage.dialogs.splice(foundDialog[1], 1); + } + delete this.historiesStorage[peerID]; + this.reloadConversation(-channelID).then(() => { + $rootScope.$broadcast('history_reload', peerID); + }); + break; + } + + case 'updateChannelMessageViews': { + var views = update.views; + var mid = appMessagesIDsManager.getFullMessageID(update.id, update.channel_id); + var message = this.getMessage(mid); + if(message && message.views && message.views < views) { + message.views = views; + $rootScope.$broadcast('message_views', { + mid: mid, + views: views + }); + } + break; + } + + case 'updateServiceNotification': { + // update.inbox_date = tsNow(true) + // update.pFlags = {popup: true} + var fromID = 777000; + var peerID = fromID; + var messageID = this.tempID--; + var message: any = { + _: 'message', + id: messageID, + from_id: fromID, + to_id: AppPeersManager.getOutputPeer(peerID), + flags: 0, + pFlags: {unread: true}, + date: (update.inbox_date || tsNow(true)) + MTProto.serverTimeManager.serverTimeOffset, + message: update.message, + media: update.media, + entities: update.entities + }; + if(!appUsersManager.hasUser(fromID)) { + appUsersManager.saveApiUsers([{ + _: 'user', + id: fromID, + pFlags: {verified: true}, + access_hash: 0, + first_name: 'Telegram', + phone: '42777' + }]); + } + this.saveMessages([message]); + + if(update.inbox_date) { + this.pendingTopMsgs[peerID] = messageID; + this.handleUpdate({ + _: 'updateNewMessage', + message: message + }); + } + if(update.pFlags.popup && update.message) { + var historyMessage = this.wrapForHistory(messageID); + //ErrorService.show({error: {code: 400, type: 'UPDATE_SERVICE_NOTIFICATION'}, historyMessage: historyMessage}); // warning + } + break; + } + } + } + + public wrapForHistory(msgID: number) { + if(this.messagesForHistory[msgID] !== undefined) { + return this.messagesForHistory[msgID]; + } + + var message = copy(this.messagesStorage[msgID]) || {id: msgID}; + + if(message.media && message.media.progress !== undefined) { + message.media.progress = this.messagesStorage[msgID].media.progress; + } + + var fromUser = message.from_id && appUsersManager.getUser(message.from_id); + var fromBot = fromUser && fromUser.pFlags.bot && fromUser.username || false; + var withBot = (fromBot || + message.to_id && ( + message.to_id.chat_id || + message.to_id.user_id && appUsersManager.isBot(message.to_id.user_id) + ) + ) + + if(message.media) { + if(message.media.caption && + message.media.caption.length) { + message.media.rCaption = RichTextProcessor.wrapRichText(message.media.caption, { + noCommands: !withBot, + fromBot: fromBot + }) + } + + switch (message.media._) { + case 'messageMediaPhoto': + message.media.photo = appPhotosManager.wrapForHistory(message.media.photo.id) + break + + /* case 'messageMediaDocument': + message.media.document = appDocsManager.wrapForHistory(message.media.document.id) + break */ + + case 'messageMediaGeo': + var mapUrl = 'https://maps.google.com/?q=' + message.media.geo['lat'] + ',' + message.media.geo['long'] + message.media.mapUrl = mapUrl;//$sce.trustAsResourceUrl(mapUrl) // warning + break + + case 'messageMediaVenue': + var mapUrl: string; + if(message.media.provider == 'foursquare' && + message.media.venue_id) { + mapUrl = 'https://foursquare.com/v/' + encodeURIComponent(message.media.venue_id) + } else { + mapUrl = 'https://maps.google.com/?q=' + message.media.geo['lat'] + ',' + message.media.geo['long'] + } + message.media.mapUrl = mapUrl;//$sce.trustAsResourceUrl(mapUrl) // warning + break + + case 'messageMediaContact': + message.media.rFullName = RichTextProcessor.wrapRichText( + message.media.first_name + ' ' + (message.media.last_name || ''), + {noLinks: true, noLinebreaks: true} + ) + break + + /* case 'messageMediaWebPage': + if(!message.media.webpage || + message.media.webpage._ == 'webPageEmpty') { + delete message.media + break + } + message.media.webpage = AppWebPagesManager.wrapForHistory(message.media.webpage.id) + break + + case 'messageMediaGame': + message.media.game = AppGamesManager.wrapForHistory(message.media.game.id) + break */ + } + } else if(message.action) { + switch (message.action._) { + case 'messageActionChatEditPhoto': + case 'messageActionChannelEditPhoto': + message.action.photo = appPhotosManager.wrapForHistory(message.action.photo.id); + break + + case 'messageActionChatCreate': + case 'messageActionChatEditTitle': + case 'messageActionChannelCreate': + case 'messageActionChannelEditTitle': + message.action.rTitle = RichTextProcessor.wrapRichText(message.action.title, {noLinebreaks: true}) || 'chat_title_deleted'; + break + + case 'messageActionBotIntro': + message.action.rDescription = RichTextProcessor.wrapRichText(message.action.description, { + noCommands: !withBot, + fromBot: fromBot + }); + break; + } + } + + return this.messagesForHistory[msgID] = message; + } + + public finalizePendingMessage(randomID: number, finalMessage: any) { + var pendingData = this.pendingByRandomID[randomID]; + // console.log('pdata', randomID, pendingData) + + if(pendingData) { + var peerID = pendingData[0]; + var tempID = pendingData[1]; + var historyStorage = this.historiesStorage[peerID], + message, + historyMessage; + + // console.log('pending', randomID, historyStorage.pending) + var pos = historyStorage.pending.indexOf(tempID); + if(pos != -1) { + historyStorage.pending.splice(pos, 1); + } + + if(message = this.messagesStorage[tempID]) { + delete message.pending; + delete message.error; + delete message.random_id; + delete message.send; + } + + if(historyMessage = this.messagesForHistory[tempID]) { + this.messagesForHistory[finalMessage.mid] = Object.assign(historyMessage, this.wrapForHistory(finalMessage.mid)); + delete historyMessage.pending; + delete historyMessage.error; + delete historyMessage.random_id; + delete historyMessage.send; + + $rootScope.$broadcast('messages_pending'); + } + + delete this.messagesForHistory[tempID]; + delete this.messagesStorage[tempID]; + + this.finalizePendingMessageCallbacks(tempID, finalMessage.mid); + + return message; + } + + return false + } + + public finalizePendingMessageCallbacks(tempID: number, mid: number) { + $rootScope.$broadcast('message_sent', {tempID, mid}); + } + + public incrementMaxSeenID(maxID: number) { + if(!maxID || !(!this.maxSeenID || maxID > this.maxSeenID)) { + return false; + } + + AppStorage.set({ + max_seen_msg: maxID + }); + + MTProto.apiManager.invokeApi('messages.receivedMessages', { + max_id: maxID + }); + } + + public getHistory(peerID: number, maxID = 0, limit = 0, backLimit?: number, prerendered?: number) { + if(this.migratedFromTo[peerID]) { + peerID = this.migratedFromTo[peerID]; + } + var historyStorage = this.historiesStorage[peerID]; + var offset = 0; + var offsetNotFound = false; + var unreadOffset = 0; + var unreadSkip = false; + + prerendered = prerendered ? Math.min(50, prerendered) : 0; + + if(historyStorage === undefined) { + historyStorage = this.historiesStorage[peerID] = {count: null, history: [], pending: []}; + } + + if(maxID < 0) { + maxID = 0; + } + var isMigrated = false; + var reqPeerID = peerID; + if(this.migratedToFrom[peerID]) { + isMigrated = true; + if(maxID && maxID < appMessagesIDsManager.fullMsgIDModulus) { + reqPeerID = this.migratedToFrom[peerID]; + } + } + + if(!limit && !maxID) { + var foundDialog = this.getDialogByPeerID(peerID)[0]; + if(foundDialog && foundDialog.unread_count > 1) { + var unreadCount = foundDialog.unread_count; + if(unreadSkip = (unreadCount > 50)) { + if(foundDialog.read_inbox_max_id) { + maxID = foundDialog.read_inbox_max_id; + backLimit = 16; + unreadOffset = 16; + limit = 4; + } else { + limit = 20; + unreadOffset = 16; + offset = unreadCount - unreadOffset; + } + } else { + limit = Math.max(10, prerendered, unreadCount + 2); + unreadOffset = unreadCount; + } + } else if('Mobile' in Config) { + limit = 20; + } + } + + if(maxID > 0) { + offsetNotFound = true; + for(offset = 0; offset < historyStorage.history.length; offset++) { + if(maxID > historyStorage.history[offset]) { + offsetNotFound = false; + break; + } + } + } + + if(!offsetNotFound && ( + historyStorage.count !== null && historyStorage.history.length == historyStorage.count || + historyStorage.history.length >= offset + (limit || 1) + )) { + if(backLimit) { + backLimit = Math.min(offset, backLimit); + offset = Math.max(0, offset - backLimit); + limit += backLimit; + } else { + limit = limit || (offset ? 20 : (prerendered || 5)); + } + var history = historyStorage.history.slice(offset, offset + limit); + if(!maxID && historyStorage.pending.length) { + history = historyStorage.pending.slice().concat(history); + } + return this.wrapHistoryResult(peerID, { + count: historyStorage.count, + history: history, + unreadOffset: unreadOffset, + unreadSkip: unreadSkip + }); + } + + if(!backLimit && !limit) { + limit = prerendered || 20; + } + if(offsetNotFound) { + offset = 0; + } + if((backLimit || unreadSkip || maxID) && historyStorage.history.indexOf(maxID) == -1) { + if(backLimit) { + offset = -backLimit; + limit += backLimit; + } + + return this.requestHistory(reqPeerID, maxID, limit, offset).then((historyResult: any) => { + historyStorage.count = historyResult.count || historyResult.messages.length; + if(isMigrated) { + historyStorage.count++; + } + + var history: number[] = []; + historyResult.messages.forEach((message: any) => { + history.push(message.mid); + }) + + if(!maxID && historyStorage.pending.length) { + history = historyStorage.pending.slice().concat(history); + } + + return this.wrapHistoryResult(peerID, { + count: historyStorage.count, + history: history, + unreadOffset: unreadOffset, + unreadSkip: unreadSkip + }); + }); + } + + return this.fillHistoryStorage(peerID, maxID, limit, historyStorage).then(() => { + offset = 0; + if(maxID > 0) { + for(offset = 0; offset < historyStorage.history.length; offset++) { + if(maxID > historyStorage.history[offset]) { + break; + } + } + } + + var history = historyStorage.history.slice(offset, offset + limit); + if(!maxID && historyStorage.pending.length) { + history = historyStorage.pending.slice().concat(history); + } + + return this.wrapHistoryResult(peerID, { + count: historyStorage.count, + history: history, + unreadOffset: unreadOffset, + unreadSkip: unreadSkip + }); + }); + } + + public fillHistoryStorage(peerID: number, maxID: number, fullLimit: number, historyStorage: HistoryStorage): Promise { + // console.log('fill history storage', peerID, maxID, fullLimit, angular.copy(historyStorage)) + var offset = (this.migratedFromTo[peerID] && !maxID) ? 1 : 0; + return this.requestHistory(peerID, maxID, fullLimit, offset).then((historyResult: any) => { + historyStorage.count = historyResult.count || historyResult.messages.length; + + var offset = 0; + if(!maxID && historyResult.messages.length) { + maxID = historyResult.messages[0].mid + 1; + } + if(maxID > 0) { + for(offset = 0; offset < historyStorage.history.length; offset++) { + if(maxID > historyStorage.history[offset]) { + break; + } + } + } + + var wasTotalCount = historyStorage.history.length; + + historyStorage.history.splice(offset, historyStorage.history.length - offset) + historyResult.messages.forEach((message: any) => { + if(this.mergeReplyKeyboard(historyStorage, message)) { + $rootScope.$broadcast('history_reply_markup', {peerID: peerID}); + } + + historyStorage.history.push(message.mid); + }); + + var totalCount = historyStorage.history.length; + fullLimit -= (totalCount - wasTotalCount); + + var migratedNextPeer = this.migratedFromTo[peerID]; + var migratedPrevPeer = this.migratedToFrom[peerID] + var isMigrated = migratedNextPeer !== undefined || migratedPrevPeer !== undefined; + + if(isMigrated) { + historyStorage.count = Math.max(historyStorage.count, totalCount) + 1; + } + + if(fullLimit > 0) { + maxID = historyStorage.history[totalCount - 1]; + if(isMigrated) { + if(!historyResult.messages.length) { + if(migratedPrevPeer) { + maxID = 0; + peerID = migratedPrevPeer; + } else { + historyStorage.count = totalCount; + return true; + } + } + + return this.fillHistoryStorage(peerID, maxID, fullLimit, historyStorage); + } else if(totalCount < historyStorage.count) { + return this.fillHistoryStorage(peerID, maxID, fullLimit, historyStorage); + } + } + + return true; + }); + } + + public wrapHistoryResult(peerID: number, result: any) { + var unreadOffset = result.unreadOffset; + if(unreadOffset) { + var i; + var message; + for(i = result.history.length - 1; i >= 0; i--) { + message = this.messagesStorage[result.history[i]]; + if(message && !message.pFlags.out && message.pFlags.unread) { + result.unreadOffset = i + 1; + break; + } + } + } + return Promise.resolve(result); + } + + public requestHistory(peerID: number, maxID: number, limit: number, offset = 0) { + var isChannel = AppPeersManager.isChannel(peerID); + + console.trace('requestHistory', peerID, maxID, limit, offset); + + return MTProto.apiManager.invokeApi('messages.getHistory', { + peer: AppPeersManager.getInputPeerByID(peerID), + offset_id: maxID ? appMessagesIDsManager.getMessageLocalID(maxID) : 0, + offset_date: 0, + add_offset: offset || 0, + limit: limit || 0, + max_id: 0, + min_id: 0, + hash: 0 + }/* { + peer: AppPeersManager.getInputPeerByID(peerID), + offset_id: offset, + offset_date: 0, + add_offset: offset || 0, + limit: limit || 0, + max_id: maxID, + min_id: 0, + hash: 0 + } */, { + timeout: 300, + noErrorBox: true + }).then((historyResult: any) => { + appUsersManager.saveApiUsers(historyResult.users); + appChatsManager.saveApiChats(historyResult.chats); + this.saveMessages(historyResult.messages); + + if(isChannel) { + apiUpdatesManager.addChannelState(-peerID, historyResult.pts); + } + + var length = historyResult.messages.length; + if(length && + historyResult.messages[length - 1].deleted) { + historyResult.messages.splice(length - 1, 1); + length--; + historyResult.count--; + } + + if( + peerID < 0 || + !appUsersManager.isBot(peerID) || + (length == limit && limit < historyResult.count) + ) { + return historyResult; + } + + return appProfileManager.getProfile(peerID).then((userFull: any) => { + var description = userFull.bot_info && userFull.bot_info.description; + if(description) { + var messageID = this.tempID--; + var message = { + _: 'messageService', + id: messageID, + from_id: peerID, + to_id: AppPeersManager.getOutputPeer(peerID), + flags: 0, + pFlags: {}, + date: tsNow(true) + MTProto.serverTimeManager.serverTimeOffset, + action: { + _: 'messageActionBotIntro', + description: description + } + } + + this.saveMessages([message]); + historyResult.messages.push(message); + if(historyResult.count) { + historyResult.count++; + } + } + + return historyResult; + }); + }, (error) => { + switch (error.type) { + case 'CHANNEL_PRIVATE': + var channel = appChatsManager.getChat(-peerID); + channel = {_: 'channelForbidden', access_hash: channel.access_hash, title: channel.title}; + apiUpdatesManager.processUpdateMessage({ + _: 'updates', + updates: [{ + _: 'updateChannel', + channel_id: -peerID + }], + chats: [channel], + users: [] + }); + break; + } + + return Promise.reject(error); + }); + } + + public wrapForDialog(msgID: number, dialog?: any) { + var useCache = msgID && dialog !== undefined; + var unreadCount = dialog && dialog.unread_count; + + if(useCache && this.messagesForDialogs[msgID] !== undefined) { + delete this.messagesForDialogs[msgID].typing; + this.messagesForDialogs[msgID].unreadCount = unreadCount; + return this.messagesForDialogs[msgID]; + } + + var message = copy(this.messagesStorage[msgID]); + + if(!message || !message.to_id) { + if(dialog && dialog.peerID) { + message = { + _: 'message', + to_id: AppPeersManager.getOutputPeer(dialog.peerID), + deleted: true, + date: tsNow(true), + pFlags: {out: true} + } + } else { + return message; + } + } + + message.peerID = this.getMessagePeer(message); + message.peerData = AppPeersManager.getPeer(message.peerID); + message.peerString = AppPeersManager.getPeerString(message.peerID); + message.unreadCount = unreadCount; + message.index = dialog && dialog.index || (message.date * 0x10000); + message.pinned = dialog && dialog.pFlags.pinned || false; + + if(message._ == 'messageService' && message.action.user_id) { + message.action.user = appUsersManager.getUser(message.action.user_id); + } + + if(message.message && message.message.length) { + message.richMessage = RichTextProcessor.wrapRichText(message.message.substr(0, 128), {noLinks: true, noLinebreaks: true}); + } + + message.dateText = message.date; //dateOrTimeFilter(message.date); // warning + + if(useCache) { + message.draft = '';//DraftsManager.getServerDraft(message.peerID); // warning + this.messagesForDialogs[msgID] = message; + } + + return message; + } + + public fetchSingleMessages() { + if(this.fetchSingleMessagesPromise) { + return this.fetchSingleMessagesPromise; + } + + var mids = this.needSingleMessages.slice(); + this.needSingleMessages = []; + + var splitted = appMessagesIDsManager.splitMessageIDsByChannels(mids); + let promises: Promise[] = []; + Object.keys(splitted.msgIDs).forEach((channelID: number | string) => { + let msgIDs = splitted.msgIDs[channelID].map((mid: number) => { + return { + _: 'inputMessageID', + id: mid + }; + }); + + var promise; + channelID = +channelID; + if(channelID > 0) { + promise = MTProto.apiManager.invokeApi('channels.getMessages', { + channel: appChatsManager.getChannelInput(channelID), + id: msgIDs + }); + } else { + promise = MTProto.apiManager.invokeApi('messages.getMessages', { + id: msgIDs + }); + } + + promises.push(promise.then((getMessagesResult: any) => { + appUsersManager.saveApiUsers(getMessagesResult.users); + appChatsManager.saveApiChats(getMessagesResult.chats); + this.saveMessages(getMessagesResult.messages); + + $rootScope.$broadcast('messages_downloaded', splitted.mids[channelID]) + })); + }); + + return this.fetchSingleMessagesPromise = Promise.all(promises).then(() => { + this.fetchSingleMessagesPromise = null; + if(this.needSingleMessages.length) this.fetchSingleMessages(); + }).catch(() => { + this.fetchSingleMessagesPromise = null; + if(this.needSingleMessages.length) this.fetchSingleMessages(); + }); + } + + /* public wrapSingleMessage(msgID: number) { + if(this.messagesStorage[msgID]) { + return this.wrapForDialog(msgID); + } + + if(this.needSingleMessages.indexOf(msgID) == -1) { + this.needSingleMessages.push(msgID); + if(this.fetchSingleMessagesTimeout == 0) { + this.fetchSingleMessagesTimeout = window.setTimeout(this.fetchSingleMessages.bind(this), 100); + } + } + + return {mid: msgID, loading: true}; + } */ + public wrapSingleMessage(msgID: number) { + if(this.messagesStorage[msgID]) { + $rootScope.$broadcast('messages_downloaded', msgID); + return; + } + + if(this.needSingleMessages.indexOf(msgID) == -1) { + this.needSingleMessages.push(msgID); + this.fetchSingleMessages(); + } + } +} + +export default new AppMessagesManager(); diff --git a/src/lib/appManagers/appPeersManager.ts b/src/lib/appManagers/appPeersManager.ts new file mode 100644 index 00000000..ac67adb7 --- /dev/null +++ b/src/lib/appManagers/appPeersManager.ts @@ -0,0 +1,133 @@ +import appUsersManager from "./appUsersManager"; +import appChatsManager from "./appChatsManager"; +import { isObject } from "../utils"; + +const AppPeersManager = { + getPeerPhoto: (peerID: number) => { + return peerID > 0 + ? appUsersManager.getUserPhoto(peerID) + : appChatsManager.getChatPhoto(-peerID); + }, + + getPeerMigratedTo: (peerID: number) => { + if(peerID >= 0) { + return false; + } + var chat = appChatsManager.getChat(-peerID); + if(chat && chat.migrated_to && chat.pFlags.deactivated) { + return AppPeersManager.getPeerID(chat.migrated_to); + } + return false; + }, + + getPeerTitle: (peerID: number | any) => { + let peer: any = {}; + if(!isObject(peerID)) { + peer = AppPeersManager.getPeer(peerID); + } else peer = peerID; + + let title = ''; + if(peerID > 0) { + if(peer.first_name) title += peer.first_name; + if(peer.last_name) title += ' ' + peer.last_name; + + if(!title) title = peer.pFlags.deleted ? 'Deleted account' : peer.username; + else title = title.trim(); + } else { + title = peer.title; + } + + return title; + }, + + getOutputPeer: (peerID: number) => { + if(peerID > 0) { + return {_: 'peerUser', user_id: peerID}; + } + + var chatID = -peerID; + if(appChatsManager.isChannel(chatID)) { + return {_: 'peerChannel', channel_id: chatID}; + } + return {_: 'peerChat', chat_id: chatID}; + }, + + getPeerString: (peerID: number) => { + if(peerID > 0) { + return appUsersManager.getUserString(peerID); + } + return appChatsManager.getChatString(-peerID); + }, + + getPeerUsername: (peerID: number): string => { + if(peerID > 0) { + return appUsersManager.getUser(peerID).username || ''; + } + return appChatsManager.getChat(-peerID).username || ''; + }, + + getPeer: (peerID: number) => { + return peerID > 0 + ? appUsersManager.getUser(peerID) + : appChatsManager.getChat(-peerID) + }, + + getPeerID: (peerString: any): number => { + if(isObject(peerString)) { + return peerString.user_id + ? peerString.user_id + : -(peerString.channel_id || peerString.chat_id); + } + var isUser = peerString.charAt(0) == 'u'; + var peerParams = peerString.substr(1).split('_'); + + return isUser ? peerParams[0] : -peerParams[0] || 0; + }, + + isChannel: (peerID: number): boolean => { + return (peerID < 0) && appChatsManager.isChannel(-peerID); + }, + + getInputPeerByID: (peerID: number) => { + if (!peerID) { + return {_: 'inputPeerEmpty'} + } + if (peerID < 0) { + var chatID = -peerID + if (!appChatsManager.isChannel(chatID)) { + return { + _: 'inputPeerChat', + chat_id: chatID + }; + } else { + return { + _: 'inputPeerChannel', + channel_id: chatID, + access_hash: appChatsManager.getChat(chatID).access_hash || 0 + }; + } + } + return { + _: 'inputPeerUser', + user_id: peerID, + access_hash: appUsersManager.getUser(peerID).access_hash || 0 + }; + }, + + isMegagroup: (peerID: number) => { + return (peerID < 0) && appChatsManager.isMegagroup(-peerID); + }, + + getPeerSearchText: (peerID: number) => { + var text + if(peerID > 0) { + text = '%pu ' + appUsersManager.getUserSearchText(peerID); + } else if(peerID < 0) { + var chat = appChatsManager.getChat(-peerID); + text = '%pg ' + (chat.title || ''); + } + return text; + } +}; + +export default AppPeersManager; diff --git a/src/lib/appManagers/appPhotosManager.ts b/src/lib/appManagers/appPhotosManager.ts new file mode 100644 index 00000000..99f53aec --- /dev/null +++ b/src/lib/appManagers/appPhotosManager.ts @@ -0,0 +1,389 @@ +import { MTProto } from "../mtproto/mtproto"; +import appUsersManager from "./appUsersManager"; +import { copy, calcImageInBox } from "../utils"; +import fileManager from '../filemanager'; +import { bytesFromHex } from "../bin_utils"; +import { MTPhotoSize } from "../../components/misc"; + +type MTPhoto = { + _: 'photo', + pFlags: any, + flags: number, + id: string, + access_hash: string, + file_reference: Uint8Array, + date: number, + sizes: Array, + dc_id: number, + user_id: number +}; + +export class AppPhotosManager { + private photos: { + [id: string]: MTPhoto + } = {}; + public windowW = document.body.scrollWidth; + public windowH = document.body.scrollHeight; + + public static jf = new Uint8Array(bytesFromHex('ffd8ffe000104a46494600010100000100010000ffdb004300281c1e231e19282321232d2b28303c64413c37373c7b585d4964918099968f808c8aa0b4e6c3a0aadaad8a8cc8ffcbdaeef5ffffff9bc1fffffffaffe6fdfff8ffdb0043012b2d2d3c353c76414176f8a58ca5f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8ffc00011080000000003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00')); + public static Df = bytesFromHex('ffd9'); + + constructor() { + window.addEventListener('resize', (e) => { + this.windowW = document.body.scrollWidth; + this.windowH = document.body.scrollHeight; + + //console.log(`Set windowW, windowH: ${this.windowW}x${this.windowH}`); + }); + + /* $rootScope.openPhoto = openPhoto + $rootScope.preloadPhoto = preloadPhoto; */ + } + + public savePhoto(apiPhoto: any, context?: any) { + if(context) { + Object.assign(apiPhoto, context); + } + + if(!apiPhoto.id) { + console.warn('no apiPhoto.id', apiPhoto); + } else this.photos[apiPhoto.id] = apiPhoto; + + if(!('sizes' in apiPhoto)) return; + + apiPhoto.sizes.forEach((photoSize: any) => { + if(photoSize._ == 'photoCachedSize') { + MTProto.apiFileManager.saveSmallFile(photoSize.location, photoSize.bytes); + + console.log('clearing photo cached size', apiPhoto); + + // Memory + photoSize.size = photoSize.bytes.length; + delete photoSize.bytes; + photoSize._ = 'photoSize'; + } + }); + } + + public choosePhotoSize(photo: any, width = 0, height = 0) { + if(Config.Navigator.retina) { + width *= 2; + height *= 2; + } + + /* + s box 100x100 + m box 320x320 + x box 800x800 + y box 1280x1280 + w box 2560x2560 + a crop 160x160 + b crop 320x320 + c crop 640x640 + d crop 1280x1280 */ + + let bestPhotoSize: MTPhotoSize = {_: 'photoSizeEmpty'}; + let bestDiff = 0xFFFFFF; + + //console.log('choosePhotoSize', photo); + + let sizes = photo.sizes || photo.thumbs; + sizes.forEach((photoSize: typeof bestPhotoSize) => { + if(!photoSize.w || !photoSize.h) return; + + let diff = Math.abs(photoSize.w * photoSize.h - width * height); + if(diff < bestDiff) { + bestPhotoSize = photoSize; + bestDiff = diff; + } + + //console.log('diff', diff, photoSize, bestPhotoSize); + }); + + //console.log('choosing', photo, width, height, bestPhotoSize); + + return bestPhotoSize; + } + + public getUserPhotos(userID: number, maxID: number, limit: number) { + var inputUser = appUsersManager.getUserInput(userID); + return MTProto.apiManager.invokeApi('photos.getUserPhotos', { + user_id: inputUser, + offset: 0, + limit: limit || 20, + max_id: maxID || 0 + }).then((photosResult: any) => { + appUsersManager.saveApiUsers(photosResult.users); + var photoIDs = []; + var context = {user_id: userID}; + for(var i = 0; i < photosResult.photos.length; i++) { + this.savePhoto(photosResult.photos[i], context); + photoIDs.push(photosResult.photos[i].id); + } + + return { + count: photosResult.count || photosResult.photos.length, + photos: photoIDs + }; + }); + } + + public setAttachmentPreview(bytes: Uint8Array, div: HTMLDivElement, isSticker = false, background = false) { + //image.src = "data:image/jpeg;base64," + bytesToBase64(photo.sizes[0].bytes); + //photo.sizes[0].bytes = new Uint8Array([...photo.sizes[0].bytes].reverse()); + + let arr: Uint8Array; + if(!isSticker) { + arr = AppPhotosManager.jf.concat(bytes.slice(3), AppPhotosManager.Df); + arr[164] = bytes[1]; + arr[166] = bytes[2]; + } else { + arr = bytes; + } + + //console.log('setAttachmentPreview', bytes, arr, div, isSticker); + + let blob = new Blob([arr], { type: "image/jpeg" } ); + + if(background) { + div.style.backgroundImage = 'url(' + URL.createObjectURL(blob) + ')'; + } else { + let image = new Image(); + image.src = URL.createObjectURL(blob); + + image.style.width = '100%'; + image.style.height = '100%'; + div.append(image); + } + } + + public setAttachmentSize(photoID: any, div: HTMLDivElement, w = 380, h = 0) { + let photo: /* MTDocument | MTPhoto */any = null; + + if(typeof(photoID) === 'string') { + photo = this.photos[photoID]; + if(!photo) return {_: 'photoEmpty'}; + } else { + photo = photoID; + } + + let photoSize = this.choosePhotoSize(photo, w, h); + //console.log('setAttachmentSize', photo, photo.sizes[0].bytes, div); + + let thumb: any; + let sizes = photo.sizes || photo.thumbs; + if(sizes && (sizes[0]._ == 'photoStrippedSize' || sizes[0]._ == 'photoCachedSize' && sizes[0].bytes)) { + thumb = sizes[0]; + this.setAttachmentPreview(thumb.bytes, div); + } + + if(photo._ == 'document' /* && photo.type != 'video' */ && photo.type != 'gif') { + div.style.width = (photo.w || 512) + 'px'; + div.style.height = (photo.h || 512) + 'px'; + + /* if(div.lastElementChild) { + div.lastElementChild.width + } */ + } else { + div.style.width = (photoSize.w || 100) + 'px'; + div.style.height = (photoSize.h || 100) + 'px'; + } + + return photoSize; + } + + public async preloadPhoto(photoID: any, photoSize?: any): Promise { + let photo: any = null; + + if(typeof(photoID) === 'string') { + photo = this.photos[photoID]; + if(!photo) return Promise.reject(); + } else { + photo = photoID; + } + + if(!photoSize) { + let fullWidth = this.windowW/* - (Config.Mobile ? 20 : 32) */; + let fullHeight = this.windowH/* - (Config.Mobile ? 150 : 116) */; + + photoSize = this.choosePhotoSize(photo, fullWidth, fullHeight); + } + + if(photoSize) { + photoSize.preloaded = true; + + // maybe it's a thumb + let isPhoto = photoSize.size && photo.access_hash && photo.file_reference; + let location = isPhoto ? { + _: photo._ == 'document' ? 'inputDocumentFileLocation' : 'inputPhotoFileLocation', + id: photo.id, + access_hash: photo.access_hash, + file_reference: photo.file_reference, + thumb_size: photoSize.type + } : photoSize.location; + + /* if(overwrite) { + await MTProto.apiFileManager.deleteFile(location); + console.log('Photos deleted file!'); + } */ + + if(isPhoto/* && photoSize.size >= 1e6 */) { + console.log('Photos downloadFile exec', photo); + /* let promise = MTProto.apiFileManager.downloadFile(photo.dc_id, location, photoSize.size); + + let blob = await promise; + if(blob.size < photoSize.size && overwrite) { + await MTProto.apiFileManager.deleteFile(location); + console.log('Photos deleted file!'); + return MTProto.apiFileManager.downloadFile(photo.dc_id, location, photoSize.size); + } + + return blob; */ + return MTProto.apiFileManager.downloadFile(photo.dc_id, location, photoSize.size); + } else { + console.log('Photos downloadSmallFile exec', photo, location); + return MTProto.apiFileManager.downloadSmallFile(location); + } + } else return Promise.reject('no fullPhotoSize'); + } + + public getPhoto(photoID: string) { + return this.photos[photoID] || {_: 'photoEmpty'}; + } + + public wrapForHistory(photoID: string, options: any = {}) { + var photo = copy(this.photos[photoID]) || {_: 'photoEmpty'}; + var width = options.website ? 64 : Math.min(this.windowW - 80, Config.Mobile ? 210 : 260); + var height = options.website ? 64 : Math.min(this.windowH - 100, Config.Mobile ? 210 : 260); + var thumbPhotoSize = this.choosePhotoSize(photo, width, height); + var thumb: any = { + width: width, + height: height + }; + + if(options.website && Config.Mobile) { + width = 50; + height = 50; + } + + // console.log('chosen photo size', photoID, thumbPhotoSize) + if(thumbPhotoSize && thumbPhotoSize._ != 'photoSizeEmpty') { + var dim = calcImageInBox(thumbPhotoSize.w, thumbPhotoSize.h, width, height); + thumb.width = dim.w; + thumb.height = dim.h; + thumb.location = thumbPhotoSize.location; + thumb.size = thumbPhotoSize.size; + } else { + thumb.width = 100; + thumb.height = 100; + } + + photo.thumb = thumb; + + return photo; + } + + public wrapForFull(photoID: string) { + var photo = this.wrapForHistory(photoID); + var fullWidth = document.body.scrollWidth - (Config.Mobile ? 0 : 32); + var fullHeight = document.body.scrollHeight - (Config.Mobile ? 0 : 116); + if (!Config.Mobile && fullWidth > 800) { + fullWidth -= 208; + } + var fullPhotoSize = this.choosePhotoSize(photo, fullWidth, fullHeight); + var full: any = {}; + + full.width = fullWidth; + full.height = fullHeight; + + if (fullPhotoSize && fullPhotoSize._ != 'photoSizeEmpty') { + var wh = calcImageInBox(fullPhotoSize.w, fullPhotoSize.h, fullWidth, fullHeight, true); + full.width = wh.w; + full.height = wh.h; + + full.modalWidth = Math.max(full.width, Math.min(400, fullWidth)); + + full.location = fullPhotoSize.location; + full.size = fullPhotoSize.size; + } + + photo.full = full; + + return photo; + } + + /* public openPhoto(photoID: number, list: any) { + if(!photoID || photoID === '0') { + return false; + } + + var scope = $rootScope.$new(true); + + scope.photoID = photoID; + + var controller = 'PhotoModalController'; + if (list && list.p > 0) { + controller = 'UserpicModalController'; + scope.userID = list.p; + } else if (list && list.p < 0) { + controller = 'ChatpicModalController'; + scope.chatID = -list.p; + } else if (list && list.m > 0) { + scope.messageID = list.m; + if (list.w) { + scope.webpageID = list.w; + } + } + + var modalInstance = $modal.open({ + templateUrl: templateUrl('photo_modal'), + windowTemplateUrl: templateUrl('media_modal_layout'), + controller: controller, + scope: scope, + windowClass: 'photo_modal_window' + }); + } */ + + public downloadPhoto(photoID: string) { + var photo = this.photos[photoID]; + var ext = 'jpg'; + var mimeType = 'image/jpeg'; + var fileName = 'photo' + photoID + '.' + ext; + var fullWidth = Math.max(screen.width || 0, document.body.scrollWidth - 36, 800); + var fullHeight = Math.max(screen.height || 0, document.body.scrollHeight - 150, 800); + var fullPhotoSize = this.choosePhotoSize(photo, fullWidth, fullHeight); + var inputFileLocation = { + _: 'inputFileLocation', + volume_id: fullPhotoSize.location.volume_id, + local_id: fullPhotoSize.location.local_id, + secret: fullPhotoSize.location.secret + }; + + fileManager.chooseSaveFile(fileName, ext, mimeType).then((writableFileEntry) => { + if(writableFileEntry) { + MTProto.apiFileManager.downloadFile(photo.dc_id, inputFileLocation, fullPhotoSize.size, { + mimeType: mimeType, + toFileEntry: writableFileEntry + }).then(() => { + // console.log('file save done') + }, (e: any) => { + console.log('photo download failed', e); + }); + } + }, () => { + var cachedBlob = MTProto.apiFileManager.getCachedFile(inputFileLocation) + if (cachedBlob) { + return fileManager.download(cachedBlob, mimeType, fileName); + } + + MTProto.apiFileManager.downloadFile(photo.dc_id, inputFileLocation, fullPhotoSize.size, {mimeType: mimeType}) + .then((blob: Blob) => { + fileManager.download(blob, mimeType, fileName); + }, (e: any) => { + console.log('photo download failed', e); + }); + }); + } +} + +export default new AppPhotosManager(); diff --git a/src/lib/appManagers/appSharedMediaManager.ts b/src/lib/appManagers/appSharedMediaManager.ts new file mode 100644 index 00000000..360bfe8e --- /dev/null +++ b/src/lib/appManagers/appSharedMediaManager.ts @@ -0,0 +1,5 @@ +class AppSharedMediaManager { + +} + +export default new AppSharedMediaManager(); diff --git a/src/lib/appManagers/appSidebarLeft.ts b/src/lib/appManagers/appSidebarLeft.ts new file mode 100644 index 00000000..fad63e14 --- /dev/null +++ b/src/lib/appManagers/appSidebarLeft.ts @@ -0,0 +1,109 @@ +import { logger } from "../polyfill"; +import { scrollable } from "../../components/misc"; +import appMessagesManager from "./appMessagesManager"; +import appDialogsManager from "./appDialogsManager"; + +class AppSidebarLeft { + private sidebarEl = document.querySelector('.page-chats .chats-container') as HTMLDivElement; + private searchInput = document.getElementById('global-search') as HTMLInputElement; + private toolsBtn = this.sidebarEl.querySelector('.sidebar-tools-button') as HTMLButtonElement; + private searchContainer = this.sidebarEl.querySelector('#search-container') as HTMLDivElement; + + private listsContainer: HTMLDivElement = null; + private searchMessagesList: HTMLUListElement = null; + + private log = logger('SL'); + + private peerID = 0; + + private searchPromise: Promise = null; + + constructor() { + this.listsContainer = scrollable(this.searchContainer); + this.searchMessagesList = document.createElement('ul'); + + this.searchContainer.append(this.listsContainer); + + appDialogsManager.setListClickListener(this.searchMessagesList); + + this.searchInput.addEventListener('focus', (e) => { + this.toolsBtn.classList.remove('tgico-menu'); + this.toolsBtn.classList.add('tgico-back'); + this.searchContainer.classList.add('active'); + + if(!this.searchInput.value) { + this.searchMessagesList.innerHTML = ''; + } + + this.searchInput.addEventListener('blur', (e) => { + if(!this.searchInput.value) { + this.toolsBtn.classList.add('tgico-menu'); + this.toolsBtn.classList.remove('tgico-back'); + this.searchContainer.classList.remove('active'); + } + + this.peerID = 0; + }, {once: true}); + }); + + this.searchInput.addEventListener('input', (e) => { + //console.log('messageInput input', this.innerText, serializeNodes(Array.from(messageInput.childNodes))); + let value = this.searchInput.value; + this.log('input', value); + + if(this.listsContainer.contains(this.searchMessagesList)) { + this.listsContainer.removeChild(this.searchMessagesList) + } + + if(!value.trim()) { + return; + } + + appMessagesManager.getSearch(this.peerID, value, null, 0, 20).then(res => { + if(this.searchInput.value != value) { + return; + } + + this.log('input search result:', res); + + let {count, history} = res; + + this.searchMessagesList.innerHTML = ''; + + history.forEach((msgID: number) => { + let message = appMessagesManager.getMessage(msgID); + let originalDialog = appMessagesManager.getDialogByPeerID(message.peerID)[0]; + + if(!originalDialog) { + this.log.warn('no original dialog by message:', msgID); + return; + } + + let {dialog, dom} = appDialogsManager.addDialog(originalDialog, this.searchMessagesList, false); + appDialogsManager.setLastMessage(dialog, message, dom); + }); + + this.listsContainer.append(this.searchMessagesList); + }); + }); + + this.toolsBtn.addEventListener('click', () => { + if(this.toolsBtn.classList.contains('tgico-back')) { + this.searchInput.value = ''; + this.toolsBtn.classList.add('tgico-menu'); + this.toolsBtn.classList.remove('tgico-back'); + this.searchContainer.classList.remove('active'); + } + }); + } + + public beginSearch(peerID?: number) { + if(peerID) { + this.peerID = peerID; + } + + this.searchInput.focus(); + } +} + +export default new AppSidebarLeft(); diff --git a/src/lib/appManagers/appSidebarRight.ts b/src/lib/appManagers/appSidebarRight.ts new file mode 100644 index 00000000..078a542c --- /dev/null +++ b/src/lib/appManagers/appSidebarRight.ts @@ -0,0 +1,390 @@ +import { LazyLoadQueue, horizontalMenu, wrapDocument } from "../../components/misc"; +import { isElementInViewport, $rootScope } from "../utils"; +import appMessagesManager from "./appMessagesManager"; +import appPhotosManager from "./appPhotosManager"; +import appPeersManager from "./appPeersManager"; +import appUsersManager from "./appUsersManager"; +import appProfileManager from "./appProfileManager"; +import { RichTextProcessor } from "../richtextprocessor"; +import { logger } from "../polyfill"; +import appImManager from "./appImManager"; +import appMediaViewer from "./appMediaViewer"; +import appDocsManager from "./appDocsManager"; + +class AppSidebarRight { + public sidebarEl = document.querySelector('.profile-container') as HTMLDivElement; + public profileContentEl = document.querySelector('.profile-content') as HTMLDivElement; + public profileElements = { + avatar: this.profileContentEl.querySelector('.profile-avatar') as HTMLDivElement, + name: this.profileContentEl.querySelector('.profile-name') as HTMLDivElement, + subtitle: this.profileContentEl.querySelector('.profile-subtitle') as HTMLDivElement, + bio: this.profileContentEl.querySelector('.profile-row-bio') as HTMLDivElement, + username: this.profileContentEl.querySelector('.profile-row-username') as HTMLDivElement, + phone: this.profileContentEl.querySelector('.profile-row-phone') as HTMLDivElement, + notificationsCheckbox: this.profileContentEl.querySelector('#profile-notifications') as HTMLInputElement, + notificationsStatus: this.profileContentEl.querySelector('.profile-row-notifications > p') as HTMLParagraphElement + }; + public sharedMedia: { + [type: string]: HTMLDivElement + } = { + contentMembers: this.profileContentEl.querySelector('#content-members') as HTMLDivElement, + contentMedia: this.profileContentEl.querySelector('#content-media') as HTMLDivElement, + contentDocuments: this.profileContentEl.querySelector('#content-docs') as HTMLDivElement, + contentLinks: this.profileContentEl.querySelector('#content-links') as HTMLDivElement, + contentAudio: this.profileContentEl.querySelector('#content-audio') as HTMLDivElement, + }; + + public sidebarScroll: HTMLDivElement = null; + + private loadSidebarMediaPromises: { + [type: string]: Promise + } = {}; + + public sharedMediaTypes = [ + 'inputMessagesFilterContacts', + 'inputMessagesFilterPhotoVideo', + 'inputMessagesFilterDocument', + 'inputMessagesFilterUrl', + 'inputMessagesFilterVoice' + ]; + public sharedMediaType: string = ''; + private sharedMediaSelected: HTMLDivElement = null; + + private lazyLoadQueueSidebar = new LazyLoadQueue(); + /* public minMediaID: { + [type: string]: number + } = {}; */ + public cleared: { + [type: string]: boolean + } = {}; + + public historiesStorage: { + [peerID: number]: { + [type: string]: number[] + } + } = {}; + + private log = logger('SR'); + + constructor() { + let container = this.profileContentEl.querySelector('.profile-tabs-content') as HTMLDivElement; + let tabs = this.profileContentEl.querySelector('.profile-tabs') as HTMLUListElement; + + horizontalMenu(tabs, container, (id, tabContent) => { + this.sharedMediaType = this.sharedMediaTypes[id]; + this.sharedMediaSelected = tabContent.firstElementChild as HTMLDivElement; + }, this.onSidebarScroll.bind(this)); + + (tabs.children[1] as HTMLLIElement).click(); // set media + + let sidebarCloseBtn = this.sidebarEl.querySelector('.sidebar-close-button') as HTMLButtonElement; + sidebarCloseBtn.addEventListener('click', () => { + this.toggleSidebar(false); + }); + + this.sharedMedia.contentMedia.addEventListener('click', (e) => { + let target = e.target as HTMLDivElement; + + let messageID = +target.getAttribute('message-id'); + if(!messageID) { + this.log.warn('no messageID by click on target:', target); + return; + } + + let message = appMessagesManager.getMessage(messageID); + appMediaViewer.openMedia(message, false); + }); + + window.addEventListener('resize', () => { + setTimeout(() => this.onSidebarScroll(), 0); + }); + } + + public onSidebarScroll() { + this.lazyLoadQueueSidebar.check(); + + if(this.sharedMediaSelected) { + let media = Array.from(this.sharedMediaSelected.childNodes).slice(-15); + for(let div of media) { + if(isElementInViewport(div)) { + this.log('Will load more media'); + this.loadSidebarMedia(true); + + break; + } + } + } + } + + public setScroll(scroll: HTMLDivElement) { + this.sidebarScroll = scroll; + this.sidebarScroll.onscroll = this.onSidebarScroll.bind(this); + /* this.sidebarScroll.options({ + callbacks: { + onScroll: this.onSidebarScroll.bind(this) + } + }); */ + } + + public toggleSidebar(enable?: boolean) { + this.log('sidebarEl', this.sidebarEl, enable, isElementInViewport(this.sidebarEl)); + + /* if(enable !== undefined) { + this.sidebarEl.style.display = enable ? 'block' : 'none'; + return; + } + + this.sidebarEl.style.display = isElementInViewport(this.sidebarEl) ? 'none' : 'block'; */ + if(enable !== undefined) { + this.sidebarEl.style.width = enable ? '25%' : '0%'; + return; + } + + this.sidebarEl.style.width = isElementInViewport(this.sidebarEl) ? '0%' : '25%'; + } + + public loadSidebarMedia(single = false) { + let peerID = $rootScope.selectedPeerID; + + let typesToLoad = single ? [this.sharedMediaType] : this.sharedMediaTypes; + + if(!this.historiesStorage[peerID]) this.historiesStorage[peerID] = {}; + let historyStorage = this.historiesStorage[peerID]; + + let promises = typesToLoad.map(type => { + if(this.loadSidebarMediaPromises[type]) return this.loadSidebarMediaPromises[type]; + + if(!historyStorage[type]) historyStorage[type] = []; + let history = historyStorage[type]; + + // заливать новую картинку сюда только после полной отправки! + //let maxID = this.minMediaID[type] || 0; + let maxID = history[history.length - 1] || 0; + + let ids = !maxID && appMessagesManager.historiesStorage[peerID] + ? appMessagesManager.historiesStorage[peerID].history.slice() : []; + + maxID = !maxID && ids.length ? ids[ids.length - 1] : maxID; + this.log('search house of glass pre', type, ids, maxID); + + return this.loadSidebarMediaPromises[type] = appMessagesManager.getSearch(peerID, '', {_: type}, maxID, 50) + .then(value => { + ids = ids.concat(value.history); + history.push(...ids); + + this.log('search house of glass', type, value, ids, this.cleared); + + if($rootScope.selectedPeerID != peerID) { + this.log.warn('peer changed'); + return; + } + + if(this.cleared[type]) { + ids = history; + delete this.cleared[type]; + } + + ids.forEach(mid => { + //this.minMediaID[type] = mid; + let message = appMessagesManager.getMessage(mid); + if(!message.media) return; + + /* 'inputMessagesFilterContacts', + 'inputMessagesFilterPhotoVideo', + 'inputMessagesFilterDocument', + 'inputMessagesFilterUrl', + 'inputMessagesFilterVoice'*/ + switch(type) { + case 'inputMessagesFilterPhotoVideo': { + /* if(!(message.media.photo || message.media.document || message.media.webpage.document)) { + this.log.error('no media!', message); + break; + } */ + + let media = message.media.photo || message.media.document || (message.media.webpage && message.media.webpage.document); + + if(!media) { + this.log('no media!', message); + break; + } + + if(media._ == 'document' && media.type != 'video'/* && media.type != 'gif' */) { + this.log('broken video', media); + break; + } + + let div = document.createElement('div'); + //console.log(message, photo); + + let sizes = media.sizes || media.thumbs; + if(sizes && sizes[0].bytes) { + appPhotosManager.setAttachmentPreview(sizes[0].bytes, div, false, true); + } /* else { + this.log('no stripped size', message, media); + } */ + + //this.log('inputMessagesFilterPhotoVideo', message, media); + + let load = () => appPhotosManager.preloadPhoto(media, appPhotosManager.choosePhotoSize(media, 380, 0)) + .then((blob) => { + if($rootScope.selectedPeerID != peerID) { + this.log.warn('peer changed'); + return; + } + + div.style.backgroundImage = 'url(' + URL.createObjectURL(blob) + ')'; + }); + + div.setAttribute('message-id', '' + mid); + + this.lazyLoadQueueSidebar.push({div, load}); + + this.sharedMedia.contentMedia.append(div); + + break; + } + + case 'inputMessagesFilterDocument': { + if(!message.media.document) { + break; + } + + let doc = message.media.document; + if(doc.attributes) { + if(doc.attributes.find((a: any) => a._ == "documentAttributeSticker")) { + break; + } + } + + //console.log('come back down to my knees', message); + + let div = wrapDocument(message.media.document, true); + this.sharedMedia.contentDocuments.append(div); + break; + } + + default: + //console.warn('death is my friend', message); + break; + } + }); + + this.onSidebarScroll(); + }).then(() => { + this.loadSidebarMediaPromises[type] = null; + }, (err) => { + this.log.error('load error:', err); + this.loadSidebarMediaPromises[type] = null; + }); + }); + + return promises; + } + + public fillProfileElements() { + let peerID = $rootScope.selectedPeerID; + + this.profileContentEl.parentElement.scrollTop = 0; + this.profileElements.bio.style.display = 'none'; + this.profileElements.phone.style.display = 'none'; + this.profileElements.username.style.display = 'none'; + this.profileElements.notificationsCheckbox.setAttribute('checked', 'checked'); + this.profileElements.notificationsStatus.innerText = 'Enabled'; + + Object.keys(this.sharedMedia).forEach(key => { + this.sharedMedia[key].innerHTML = ''; + }); + + this.sharedMediaTypes.forEach(type => { + //this.minMediaID[type] = 0; + this.cleared[type] = true; + }); + + let setText = (text: string, el: HTMLDivElement) => { + el.style.display = ''; + if(el.childElementCount > 1) { + el.firstElementChild.remove(); + } + + let p = document.createElement('p'); + p.innerHTML = text; + el.prepend(p); + }; + + // username + let username = appPeersManager.getPeerUsername($rootScope.selectedPeerID); + if(username) { + setText(appPeersManager.getPeerUsername($rootScope.selectedPeerID), this.profileElements.username); + } + + if($rootScope.selectedPeerID > 0) { + let user = appUsersManager.getUser($rootScope.selectedPeerID); + if(user.phone) { + setText(user.phone, this.profileElements.phone); + } + + appProfileManager.getProfile($rootScope.selectedPeerID, true).then(userFull => { + if($rootScope.selectedPeerID != peerID) { + this.log.warn('peer changed'); + return; + } + + if(userFull.rAbout) { + setText(userFull.rAbout, this.profileElements.bio); + } + + this.log('userFull', userFull); + + if(userFull.pinned_msg_id) { // request pinned message + appImManager.pinnedMsgID = userFull.pinned_msg_id; + appMessagesManager.wrapSingleMessage(userFull.pinned_msg_id); + } + }); + } else { + let chat = appPeersManager.getPeer($rootScope.selectedPeerID); + + appProfileManager.getChatFull(chat.id).then((chatFull: any) => { + if($rootScope.selectedPeerID != peerID) { + this.log.warn('peer changed'); + return; + } + + this.log('chatInfo res 2:', chatFull); + + if(chatFull.about) { + setText(RichTextProcessor.wrapRichText(chatFull.about), this.profileElements.bio); + } + }); + } + + let dialog: any = appMessagesManager.getDialogByPeerID($rootScope.selectedPeerID); + if(dialog.length) { + dialog = dialog[0]; + let muted = false; + if(dialog.notify_settings && dialog.notify_settings.mute_until) { + muted = new Date(dialog.notify_settings.mute_until * 1000) > new Date(); + if(muted) { + this.profileElements.notificationsCheckbox.removeAttribute('checked'); + this.profileElements.notificationsStatus.innerText = 'Disabled'; + } + } + + if($rootScope.selectedPeerID < 0) { // not human + let isChannel = appPeersManager.isChannel($rootScope.selectedPeerID) && !appPeersManager.isMegagroup($rootScope.selectedPeerID); + if(isChannel) { + appImManager.btnMute.classList.remove('tgico-mute', 'tgico-unmute'); + appImManager.btnMute.classList.add(muted ? 'tgico-unmute' : 'tgico-mute'); + appImManager.btnMute.style.display = ''; + } else { + appImManager.btnMute.style.display = 'none'; + } + } else { + appImManager.btnMute.style.display = 'none'; + } + } + + //this.loadSidebarMedia(); + } +} + +export default new AppSidebarRight(); diff --git a/src/lib/appManagers/appStickersManager.ts b/src/lib/appManagers/appStickersManager.ts new file mode 100644 index 00000000..b2bd118c --- /dev/null +++ b/src/lib/appManagers/appStickersManager.ts @@ -0,0 +1,150 @@ +import { MTDocument } from "../../components/misc"; +import AppStorage from '../storage'; +import { MTProto } from "../mtproto/mtproto"; + +export type MTStickerSet = { + _: 'stickerSet', + flags: number, + archived?: true, + official?: true, + masks?: true, + animated?: true, + installed_date?: number, + id: string, // long + access_hash: string, // long, + title: string, + short_name: string, // Short name of stickerset to use in tg://addstickers?set=short_name + thumb?: { + _: 'photoSize', + type: 'm', + location: { + _: string, + volume_id: string, + local_id: number + }, + w: number, + h: number, + size: number + }, + thumb_dc_id?: number, + count: number, + hash: number +}; + +export type MTStickerSetFull = { + set: MTStickerSet, + packs: any[], + documents: MTDocument[] +}; + +class appStickersManager { + private documents: { + [fileID: string]: MTDocument + } = {}; + + private stickerSets: { + [stickerSetID: string]: MTStickerSetFull + } = {}; + + constructor() { + AppStorage.get<{ + [stickerSetID: string]: MTStickerSetFull + }>('stickerSets').then((sets) => { + if(sets) { + this.stickerSets = sets; + } + }); + } + + public saveSticker(doc: MTDocument) { + /* Object.keys(doc).forEach(key => { + if(doc[key] instanceof Uint8Array) { + doc[key] = Array.from(doc[key]); + } + }); */ + + doc.file_reference = Array.from(doc.file_reference); + + this.documents[doc.id] = doc; + } + + public getSticker(fileID: string) { + return this.documents[fileID]; + } + + public async getStickerSet(set: { + id: string, + access_hash: string + }) { + if(this.stickerSets[set.id]) return this.stickerSets[set.id]; + + let promise = MTProto.apiManager.invokeApi('messages.getStickerSet', { + stickerset: { + _: 'inputStickerSetID', + id: set.id, + access_hash: set.access_hash + } + }); + + let res = await promise; + let stickerSet: { + _: "messages.stickerSet", + set: MTStickerSet, + packs: any[], + documents: MTDocument[] + } = res as any; + + this.saveStickerSet(stickerSet); + + return stickerSet; + } + + public async saveStickerSet(res: { + _: "messages.stickerSet", + set: MTStickerSet, + packs: any[], + documents: MTDocument[] + }) { + let id = res.set.id; + + //console.log('stickers save set', res); + + this.stickerSets[id] = { + set: res.set, + packs: res.packs, + documents: res.documents + }; + + res.documents.forEach(this.saveSticker.bind(this)); + + //console.log('stickers wrote', this.stickerSets); + await AppStorage.set({ + stickerSets: this.stickerSets + }); + + /* AppStorage.get('stickerSets').then((sets: any) => { + this.stickerSets = sets; + console.log('stickers got', this.stickerSets); + }); */ + } + + public async getStickerSetThumb(stickerSet: MTStickerSet) { + let thumb = stickerSet.thumb; + let dcID = stickerSet.thumb_dc_id; + + let promise = MTProto.apiFileManager.downloadSmallFile({ + _: 'inputStickerSetThumb', + stickerset: { + _: 'inputStickerSetID', + id: stickerSet.id, + access_hash: stickerSet.access_hash + }, + volume_id: thumb.location.volume_id, + local_id: thumb.location.local_id + }, {dcID: dcID}); + + return await promise; + } +} + +export default new appStickersManager(); diff --git a/src/lib/appManagers/appUsersManager.ts b/src/lib/appManagers/appUsersManager.ts new file mode 100644 index 00000000..d15e29f8 --- /dev/null +++ b/src/lib/appManagers/appUsersManager.ts @@ -0,0 +1,491 @@ +import { SearchIndexManager, safeReplaceObject, isObject, tsNow, copy, $rootScope } from "../utils"; +import { MTProto } from "../mtproto/mtproto"; +import { RichTextProcessor } from "../richtextprocessor"; + +export class AppUsersManager { + public users: any = {}; + public usernames: any = {}; + public userAccess: {[x: number]: string} = {}; + public cachedPhotoLocations: any = {}; + public contactsIndex = SearchIndexManager.createIndex(); + public contactsFillPromise: any; + public contactsList: any; + public myID: number; + + constructor() { + MTProto.apiManager.getUserID().then((id) => { + this.myID = id; + }); + + $rootScope.$on('user_auth', (e: CustomEvent) => { + let userAuth = e.detail; + this.myID = userAuth ? userAuth.id : 0; + }); + + setInterval(this.updateUsersStatuses.bind(this), 60000); + + $rootScope.$on('stateSynchronized', this.updateUsersStatuses.bind(this)); + + $rootScope.$on('apiUpdate', (e: CustomEvent) => { + let update = e.detail; + console.log('on apiUpdate', update); + switch(update._) { + case 'updateUserStatus': + var userID = update.user_id; + var user = this.users[userID]; + if(user) { + user.status = update.status; + if(user.status) { + if(user.status.expires) { + user.status.expires -= MTProto.serverTimeManager.serverTimeOffset; + } + + if(user.status.was_online) { + user.status.was_online -= MTProto.serverTimeManager.serverTimeOffset; + } + } + + user.sortStatus = this.getUserStatusForSort(user.status); + $rootScope.$broadcast('user_update', userID); + } else console.warn('No user by id:', userID); + break; + + case 'updateUserPhoto': + var userID = update.user_id; + var user = this.users[userID]; + if(user) { + this.forceUserOnline(userID); + if(!user.photo) { + user.photo = update.photo; + } else { + safeReplaceObject(user.photo, update.photo); + } + + if(this.cachedPhotoLocations[userID] !== undefined) { + safeReplaceObject(this.cachedPhotoLocations[userID], update.photo ? + update.photo : {empty: true}); + } + + $rootScope.$broadcast('user_update', userID); + } else console.warn('No user by id:', userID); + break + + case 'updateContactLink': + this.onContactUpdated(update.user_id, update.my_link._ == 'contactLinkContact'); + break; + } + }); + } + + /* public fillContacts () { + if(this.contactsFillPromise) { + return this.contactsFillPromise; + } + + return this.contactsFillPromise = MTProto.apiManager.invokeApi('contacts.getContacts', { + hash: 0 + }).then((result: any) => { + var userID, searchText; + var i; + this.contactsList = []; + this.saveApiUsers(result.users); + + for(var i = 0; i < result.contacts.length; i++) { + userID = result.contacts[i].user_id + this.contactsList.push(userID); + //SearchIndexManager.indexObject(userID, getUserSearchText(userID), contactsIndex); WARNING + } + + return this.contactsList; + }) + } */ + + public getUserSearchText(id: number) { + var user = this.users[id]; + if(!user) { + return false; + } + var serviceText = ''; + if(user.pFlags.self) { + serviceText = 'user_name_saved_msgs_raw'; + } + + return (user.first_name || '') + + ' ' + (user.last_name || '') + + ' ' + (user.phone || '') + + ' ' + (user.username || '') + + ' ' + serviceText; + } + + /* function getContacts (query) { + return fillContacts().then(function (contactsList) { + if (angular.isString(query) && query.length) { + var results = SearchIndexManager.search(query, contactsIndex) + var filteredContactsList = [] + + for (var i = 0; i < contactsList.length; i++) { + if (results[contactsList[i]]) { + filteredContactsList.push(contactsList[i]) + } + } + contactsList = filteredContactsList + } + + contactsList.sort(function (userID1, userID2) { + var sortName1 = (users[userID1] || {}.sortName) || '' + var sortName2 = (users[userID2] || {}.sortName) || '' + if (sortName1 == sortName2) { + return 0 + } + return sortName1 > sortName2 ? 1 : -1 + }) + + return contactsList + }) + } */ + + public resolveUsername(username: string) { + return this.usernames[username] || 0; + } + + public saveApiUsers(apiUsers: any[]) { + // @ts-ignore + apiUsers.forEach(this.saveApiUser.bind(this)); + } + + public saveApiUser(apiUser: any, noReplace?: boolean) { + if(!isObject(apiUser) || + noReplace && isObject(this.users[apiUser.id]) && this.users[apiUser.id].first_name) { + return; + } + + var userID = apiUser.id; + var result = this.users[userID]; + + if(apiUser.pFlags === undefined) { + apiUser.pFlags = {}; + } + + if(apiUser.pFlags.min) { + if(result !== undefined) { + return; + } + } + + if(apiUser.phone) { + //apiUser.rPhone = $filter('phoneNumber')(apiUser.phone); // warning + } + + apiUser.num = (Math.abs(userID) % 8) + 1; + + if(apiUser.first_name) { + apiUser.rFirstName = RichTextProcessor.wrapRichText(apiUser.first_name, {noLinks: true, noLinebreaks: true}) + apiUser.rFullName = apiUser.last_name ? RichTextProcessor.wrapRichText(apiUser.first_name + ' ' + (apiUser.last_name || ''), {noLinks: true, noLinebreaks: true}) : apiUser.rFirstName; + } else { + apiUser.rFirstName = RichTextProcessor.wrapRichText(apiUser.last_name, {noLinks: true, noLinebreaks: true}) || apiUser.rPhone || 'user_first_name_deleted'; + apiUser.rFullName = RichTextProcessor.wrapRichText(apiUser.last_name, {noLinks: true, noLinebreaks: true}) || apiUser.rPhone || 'user_name_deleted'; + } + + if(apiUser.username) { + var searchUsername = SearchIndexManager.cleanUsername(apiUser.username); + this.usernames[searchUsername] = userID; + } + + apiUser.sortName = apiUser.pFlags.deleted ? '' : SearchIndexManager.cleanSearchText(apiUser.first_name + ' ' + (apiUser.last_name || '')); + + var nameWords = apiUser.sortName.split(' '); + var firstWord = nameWords.shift(); + var lastWord = nameWords.pop(); + apiUser.initials = firstWord.charAt(0) + (lastWord ? lastWord.charAt(0) : firstWord.charAt(1)); + + if(apiUser.status) { + if(apiUser.status.expires) { + apiUser.status.expires -= MTProto.serverTimeManager.serverTimeOffset + } + + if(apiUser.status.was_online) { + apiUser.status.was_online -= MTProto.serverTimeManager.serverTimeOffset + } + } + + if(apiUser.pFlags.bot) { + apiUser.sortStatus = -1; + } else { + apiUser.sortStatus = this.getUserStatusForSort(apiUser.status); + } + + var result = this.users[userID]; + if(result === undefined) { + result = this.users[userID] = apiUser; + } else { + safeReplaceObject(result, apiUser); + } + + $rootScope.$broadcast('user_update', userID); + + if(this.cachedPhotoLocations[userID] !== undefined) { + safeReplaceObject(this.cachedPhotoLocations[userID], apiUser && + apiUser.photo ? apiUser.photo : {empty: true}); + } + } + + public saveUserAccess(id: number, accessHash: string) { + this.userAccess[id] = accessHash; + } + + public getUserStatusForSort(status: any) { + if(status) { + var expires = status.expires || status.was_online; + if(expires) { + return expires; + } + var timeNow = tsNow(true); + switch (status._) { + case 'userStatusRecently': + return timeNow - 86400 * 3; + case 'userStatusLastWeek': + return timeNow - 86400 * 7; + case 'userStatusLastMonth': + return timeNow - 86400 * 30; + } + } + + return 0; + } + + public getUser(id: any) { + if(isObject(id)) { + return id; + } + return this.users[id] || {id: id, deleted: true, num: 1, access_hash: this.userAccess[id]}; + } + + public getSelf() { + return this.getUser(this.myID); + } + + public isBot(id: number) { + return this.users[id] && this.users[id].pFlags.bot; + } + + public hasUser(id: number, allowMin?: boolean) { + var user = this.users[id]; + return isObject(user) && (allowMin || !user.pFlags.min); + } + + public getUserPhoto(id: number) { + var user = this.getUser(id); + + if(this.cachedPhotoLocations[id] === undefined) { + this.cachedPhotoLocations[id] = user && user.photo ? user.photo : {empty: true}; + } + + return this.cachedPhotoLocations[id]; + } + + public getUserString(id: number) { + var user = this.getUser(id); + return 'u' + id + (user.access_hash ? '_' + user.access_hash : ''); + } + + public getUserInput(id: number) { + var user = this.getUser(id); + if(user.pFlags.self) { + return {_: 'inputUserSelf'}; + } + + return { + _: 'inputUser', + user_id: id, + access_hash: user.access_hash || 0 + }; + } + + public updateUsersStatuses() { + var timestampNow = tsNow(true); + for(let i in this.users) { + let user = this.users[i]; + + if(user.status && + user.status._ == 'userStatusOnline' && + user.status.expires < timestampNow) { + + user.status = user.status.wasStatus || {_: 'userStatusOffline', was_online: user.status.expires}; + delete user.status.wasStatus; + $rootScope.$broadcast('user_update', user.id); + } + } + } + + public forceUserOnline(id: number) { + if(this.isBot(id)) { + return; + } + + var user = this.getUser(id); + if(user && + user.status && + user.status._ != 'userStatusOnline' && + user.status._ != 'userStatusEmpty') { + var wasStatus; + if(user.status._ != 'userStatusOffline') { + delete user.status.wasStatus + wasStatus = copy(user.status); + } + + user.status = { + _: 'userStatusOnline', + expires: tsNow(true) + 60, + wasStatus: wasStatus + }; + user.sortStatus = this.getUserStatusForSort(user.status); + $rootScope.$broadcast('user_update', id); + } + } + + public wrapForFull(id: number) { + var user = this.getUser(id); + + return user; + } + + /* public openUser(userID: number, override) { + var scope = $rootScope.$new() + scope.userID = userID + scope.override = override || {} + + var modalInstance = $modal.open({ + templateUrl: templateUrl('user_modal'), + controller: 'UserModalController', + scope: scope, + windowClass: 'user_modal_window mobile_modal', + backdrop: 'single' + }) + } */ + + /* function importContact (phone, firstName, lastName) { + return MtpApiManager.invokeApi('contacts.importContacts', { + contacts: [{ + _: 'inputPhoneContact', + client_id: '1', + phone: phone, + first_name: firstName, + last_name: lastName + }], + replace: false + }).then(function (importedContactsResult) { + saveApiUsers(importedContactsResult.users) + + var foundUserID = false + angular.forEach(importedContactsResult.imported, function (importedContact) { + onContactUpdated(foundUserID = importedContact.user_id, true) + }) + + return foundUserID || false + }) + } + + function importContacts (contacts) { + var inputContacts = [], + i + var j + + for (i = 0; i < contacts.length; i++) { + for (j = 0; j < contacts[i].phones.length; j++) { + inputContacts.push({ + _: 'inputPhoneContact', + client_id: (i << 16 | j).toString(10), + phone: contacts[i].phones[j], + first_name: contacts[i].first_name, + last_name: contacts[i].last_name + }) + } + } + + return MtpApiManager.invokeApi('contacts.importContacts', { + contacts: inputContacts, + replace: false + }).then(function (importedContactsResult) { + saveApiUsers(importedContactsResult.users) + + var result = [] + angular.forEach(importedContactsResult.imported, function (importedContact) { + onContactUpdated(importedContact.user_id, true) + result.push(importedContact.user_id) + }) + + return result + }) + } */ + + public deleteContacts(userIDs: number[]) { + var ids: any[] = []; + userIDs.forEach((userID) => { + ids.push(this.getUserInput(userID)); + }) + + return MTProto.apiManager.invokeApi('contacts.deleteContacts', { + id: ids + }).then(() => { + userIDs.forEach((userID) => { + this.onContactUpdated(userID, false); + }); + }); + } + + public onContactUpdated(userID: number, isContact: boolean) { + userID = parseInt('' + userID); + + if(Array.isArray(this.contactsList)) { + var curPos = this.contactsList.indexOf(userID); + var curIsContact = curPos != -1; + + if(isContact != curIsContact) { + if(isContact) { + this.contactsList.push(userID) + SearchIndexManager.indexObject(userID, this.getUserSearchText(userID), this.contactsIndex); + } else { + this.contactsList.splice(curPos, 1); + } + + $rootScope.$broadcast('contacts_update', userID); + } + } + } + + /* function openImportContact () { + return $modal.open({ + templateUrl: templateUrl('import_contact_modal'), + controller: 'ImportContactModalController', + windowClass: 'md_simple_modal_window mobile_modal' + }).result.then(function (foundUserID) { + if (!foundUserID) { + return $q.reject() + } + return foundUserID + }) + } */ + + public setUserStatus(userID: number, offline: boolean) { + if(this.isBot(userID)) { + return; + } + + var user = this.users[userID]; + if(user) { + var status = offline ? { + _: 'userStatusOffline', + was_online: tsNow(true) + } : { + _: 'userStatusOnline', + expires: tsNow(true) + 500 + }; + + user.status = status; + user.sortStatus = this.getUserStatusForSort(user.status); + $rootScope.$broadcast('user_update', userID); + } + } +} + +export default new AppUsersManager(); diff --git a/src/lib/bin_utils.ts b/src/lib/bin_utils.ts new file mode 100644 index 00000000..4d94e4ac --- /dev/null +++ b/src/lib/bin_utils.ts @@ -0,0 +1,376 @@ +/*! + * Webogram v0.7.0 - messaging web application for MTProto + * https://github.com/zhukov/webogram + * Copyright (C) 2014 Igor Zhukov + * https://github.com/zhukov/webogram/blob/master/LICENSE + */ + +// @ts-ignore +import {BigInteger, SecureRandom} from 'jsbn'; +// @ts-ignore +import pako from 'pako/dist/pako_inflate.min.js'; + +//import { dT } from './utils.js'; + +/* import './closure_long.js'; +//var goog = window ? window.goog as any : this.goog; +var goog = typeof(window) !== 'undefined' ? window.goog : this.goog; */ + + +var _logTimer = (new Date()).getTime() +export function dT () { + return '[' + (((new Date()).getTime() - _logTimer) / 1000).toFixed(3) + ']' +} + +export function bigint(num: number) { + return new BigInteger(num.toString(16), 16); +} + +export function bigStringInt(strNum: string) { + return new BigInteger(strNum, 10); +} + +export function bytesToHex(bytes: any) { + bytes = bytes || []; + var arr = []; + for(var i = 0; i < bytes.length; i++) { + arr.push((bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16)); + } + return arr.join(''); +} + +export function bytesFromHex(hexString: string) { + var len = hexString.length, + i; + var start = 0; + var bytes = []; + + if(hexString.length % 2) { + bytes.push(parseInt(hexString.charAt(0), 16)); + start++; + } + + for(i = start; i < len; i += 2) { + bytes.push(parseInt(hexString.substr(i, 2), 16)); + } + + return bytes; +} + +export function bytesToBase64(bytes: number[]) { + var mod3 + var result = '' + + for (var nLen = bytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) { + mod3 = nIdx % 3 + nUint24 |= bytes[nIdx] << (16 >>> mod3 & 24) + if (mod3 === 2 || nLen - nIdx === 1) { + result += String.fromCharCode( + uint6ToBase64(nUint24 >>> 18 & 63), + uint6ToBase64(nUint24 >>> 12 & 63), + uint6ToBase64(nUint24 >>> 6 & 63), + uint6ToBase64(nUint24 & 63) + ) + nUint24 = 0 + } + } + + return result.replace(/A(?=A$|$)/g, '=') +} + +export function uint6ToBase64(nUint6: number) { + return nUint6 < 26 + ? nUint6 + 65 + : nUint6 < 52 + ? nUint6 + 71 + : nUint6 < 62 + ? nUint6 - 4 + : nUint6 === 62 + ? 43 + : nUint6 === 63 + ? 47 + : 65 +} + +export function base64ToBlob(base64str: string, mimeType: string) { + var sliceSize = 1024; + var byteCharacters = atob(base64str); + var bytesLength = byteCharacters.length; + var slicesCount = Math.ceil(bytesLength / sliceSize); + var byteArrays = new Array(slicesCount); + + for(var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { + var begin = sliceIndex * sliceSize; + var end = Math.min(begin + sliceSize, bytesLength); + + var bytes = new Array(end - begin); + for(var offset = begin, i = 0; offset < end; ++i, ++offset) { + bytes[i] = byteCharacters[offset].charCodeAt(0); + } + byteArrays[sliceIndex] = new Uint8Array(bytes); + } + + return blobConstruct(byteArrays, mimeType); +} + +export function dataUrlToBlob(url: string) { + // var name = 'b64blob ' + url.length + // console.time(name) + var urlParts = url.split(','); + var base64str = urlParts[1]; + var mimeType = urlParts[0].split(':')[1].split(';')[0]; + var blob = base64ToBlob(base64str, mimeType); + // console.timeEnd(name) + return blob; +} + +export function blobConstruct(blobParts: any, mimeType: string = '') { + var blob; + var safeMimeType = blobSafeMimeType(mimeType); + try { + blob = new Blob(blobParts, {type: safeMimeType}); + } catch(e) { + // @ts-ignore + var bb = new BlobBuilder; + blobParts.forEach(function(blobPart: any) { + bb.append(blobPart); + }); + blob = bb.getBlob(safeMimeType); + } + return blob; +} + +export function blobSafeMimeType(mimeType: string) { + if([ + 'image/jpeg', + 'image/png', + 'image/gif', + 'image/webp', + 'image/bmp', + 'video/mp4', + 'video/webm', + 'video/quicktime', + 'audio/ogg', + 'audio/mpeg', + 'audio/mp4', + ].indexOf(mimeType) === -1) { + return 'application/octet-stream'; + } + + return mimeType; +} + +export function bytesCmp(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) { + var len = bytes1.length; + if(len != bytes2.length) { + return false; + } + + for(var i = 0; i < len; i++) { + if(bytes1[i] != bytes2[i]) { + return false; + } + } + + return true; +} + +export function bytesXor(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) { + var len = bytes1.length; + var bytes = []; + + for (var i = 0; i < len; ++i) { + bytes[i] = bytes1[i] ^ bytes2[i]; + } + + return bytes; +} + +export function bytesFromBigInt(bigInt: BigInteger, len?: number) { + var bytes = bigInt.toByteArray(); + + if(len && bytes.length < len) { + var padding = []; + for(var i = 0, needPadding = len - bytes.length; i < needPadding; i++) { + padding[i] = 0; + } + if(bytes instanceof ArrayBuffer) { + bytes = bufferConcat(padding, bytes); + } else { + bytes = padding.concat(bytes); + } + } else { + while (!bytes[0] && (!len || bytes.length > len)) { + bytes = bytes.slice(1); + } + } + + return bytes; +} + +export function bytesToArrayBuffer(b: Iterable) { + return (new Uint8Array(b)).buffer; +} + +export function convertToArrayBuffer(bytes: any | ArrayBuffer | Uint8Array) { + // Be careful with converting subarrays!! + if(bytes instanceof ArrayBuffer) { + return bytes; + } + if(bytes.buffer !== undefined && + bytes.buffer.byteLength == bytes.length * bytes.BYTES_PER_ELEMENT) { + return bytes.buffer; + } + return bytesToArrayBuffer(bytes); +} + +export function convertToUint8Array(bytes: any) { + if(bytes.buffer !== undefined) { + return bytes; + } + + return new Uint8Array(bytes); +} + +export function convertToByteArray(bytes: any) { + if(Array.isArray(bytes)) { + return bytes; + } + + bytes = convertToUint8Array(bytes); + var newBytes = []; + for(var i = 0, len = bytes.length; i < len; i++) { + newBytes.push(bytes[i]); + } + + return newBytes; +} + +export function bytesFromArrayBuffer(buffer: ArrayBuffer) { + var len = buffer.byteLength; + var byteView = new Uint8Array(buffer); + var bytes = []; + + for(var i = 0; i < len; ++i) { + bytes[i] = byteView[i]; + } + + return bytes; +} + +export function bufferConcat(buffer1: any, buffer2: any) { + var l1 = buffer1.byteLength || buffer1.length; + var l2 = buffer2.byteLength || buffer2.length; + var tmp = new Uint8Array(l1 + l2); + tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0); + tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1); + + return tmp.buffer; +} + +export function bufferConcats(...args: any[]) { + let length = 0; + args.forEach(b => length += b.byteLength || b.length); + + var tmp = new Uint8Array(length); + + let lastLength = 0; + args.forEach(b => { + tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength); + lastLength += b.byteLength || b.length; + }); + + return tmp/* .buffer */; +} + +export function longToInts(sLong: string) { + var divRem = bigStringInt(sLong).divideAndRemainder(bigint(0x100000000)); + + return [divRem[0].intValue(), divRem[1].intValue()]; +} + +export function bytesFromWords(wordArray: any) { + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var bytes = []; + + for(var i = 0; i < sigBytes; i++) { + bytes.push((words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff); + } + + return bytes; +} + +export function longToBytes(sLong: string) { + return bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse(); +} + +export function longFromInts(high: number, low: number) { + return bigint(high).shiftLeft(32).add(bigint(low)).toString(10); +} + +export function intToUint(val: number | string) { + if(typeof(val) === 'string') val = parseInt(val); + + if(val < 0) { + val = val + 4294967296; + } + + return val; +} + +export function uintToInt(val: number) { + if(val > 2147483647) { + val = val - 4294967296; + } + + return val; +} + +export function addPadding(bytes: any, blockSize: number = 16, zeroes?: boolean, full = false, prepend = false) { + let len = bytes.byteLength || bytes.length; + let needPadding = blockSize - (len % blockSize); + if(needPadding > 0 && (needPadding < blockSize || full)) { + console.log('addPadding()', len, blockSize, needPadding); + let padding = new Array(needPadding); + if(zeroes) { + for(let i = 0; i < needPadding; i++) { + padding[i] = 0; + } + } else { + (new SecureRandom()).nextBytes(padding); + } + + if(bytes instanceof ArrayBuffer) { + bytes = prepend ? bufferConcat(padding, bytes) : bufferConcat(bytes, padding); + } else if(bytes instanceof Uint8Array) { + let _bytes = new Uint8Array(bytes.length + padding.length); + if(prepend) { + _bytes.set(padding); + _bytes.set(bytes, padding.length); + } else { + _bytes.set(bytes); + _bytes.set(padding, bytes.length); + } + + bytes = _bytes; + } else { + bytes = prepend ? padding.concat(bytes) : bytes.concat(padding); + } + } + + return bytes; +} + +export function gzipUncompress(bytes: ArrayBuffer, toString: true): string; +export function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array; +export function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array { + //console.log(dT(), 'Gzip uncompress start'); + var result = pako.inflate(bytes, toString ? {to: 'string'} : undefined); + //console.log(dT(), 'Gzip uncompress finish'/* , result */); + return result; +} + +export function nextRandomInt(maxValue: number) { + return Math.floor(Math.random() * maxValue); +} diff --git a/src/lib/config.js b/src/lib/config.js new file mode 100644 index 00000000..33d1490b --- /dev/null +++ b/src/lib/config.js @@ -0,0 +1,306 @@ +/*! + * Webogram v0.7.0 - messaging web application for MTProto + * https://github.com/zhukov/webogram + * Copyright (C) 2014 Igor Zhukov + * https://github.com/zhukov/webogram/blob/master/LICENSE + */ + +Config = window.Config || {}; + +/* + + IMPORTANT NOTICE + ================ + + Do not publish your Webogram fork with my app credentials (below), or your application may be blocked. + You can get your own api_id, api_hash at https://my.telegram.org, see manual at https://core.telegram.org/api/obtaining_api_id. + +*/ + +Config.App = { + id: 1025907, + hash: '452b0359b988148995f22ff0f4229750', + version: '0.3.0', + domains: [], + baseDcID: 2 +}; + +Config.Modes = { + test: location.search.indexOf('test=1') > 0/* || true */, + debug: location.search.indexOf('debug=1') > 0, + http: location.search.indexOf('http=1') > 0, + ssl: location.search.indexOf('ssl=1') > 0 || location.protocol == 'https:' && location.search.indexOf('ssl=0') == -1, + force_mobile: location.search.indexOf('mobile=1') > 0, + force_desktop: location.search.indexOf('desktop=1') > 0, + webcrypto: location.search.indexOf('webcrypto=0') == -1 && 1 == 2, + packed: location.protocol == 'app:' || location.protocol == 'chrome-extension:', + ios_standalone: window.navigator.standalone && navigator.userAgent.match(/iOS|iPhone|iPad/), + chrome_packed: window.chrome && chrome.app && chrome.app.window && true || false, + animations: true, + memory_only: false, + allow_tmpfs: location.search.indexOf('tmpfs=yeahImSureIknowWhatImDoing') > 0 || false, + push_api: location.search.indexOf('push=1') == -1, + multipleConnections: true +}; + +Config.Mobile = false; + +Config.Navigator = { + nativeEmoji: /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform || ''), + osX: (navigator.platform || '').toLowerCase().indexOf('mac') != -1 || + (navigator.userAgent || '').toLowerCase().indexOf('mac') != -1, + msie: (navigator.userAgent || '').search(/MSIE | Trident\/|Edge\//) != -1, + retina: window.devicePixelRatio > 1, + ffos: navigator.userAgent.search(/mobi.+Gecko/i) != -1, + ffos2p: navigator.userAgent.search(/mobi.+Gecko\/[34567]/i) != -1, + touch: screen.width <= 768 || ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch, + mobile: screen.width && screen.width < 480 || navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1 +}; + +Config.ExtCredentials = { + gmaps: { + api_key: 'AIzaSyC72t5GDcP-dob20d-ARwSwOQ41-zgbArg' + } +}; + +{ + /* let img_size = 32; + let side = 52; + let sheetUrl = `assets/img/sheet_apple_${img_size}_`; // #.png + let multiplyX = 100 / 6; + let sheetSizeX = 6 * (img_size + 2); // size of image in pixels + let sheetSizeY = side * (img_size + 2); // size of image in pixels + let sizeX = 100 * (sheetSizeX / img_size); + let sizeY = 100 * (sheetSizeY / img_size); + let splitted = true; */ + + let img_size = 64; + let side = 56; + let sheetUrl = `assets/img/sheet_apple_${img_size}`; // #.png + let multiplyX = 100 / side; + let sheetSizeX = side * (img_size + 2); // size of image in pixels + let sheetSizeY = side * (img_size + 2); // size of image in pixels + let sizeX = 100 * (sheetSizeX / img_size); + let sizeY = 100 * (sheetSizeY / img_size); + let splitted = false; + + Config.Emoji = { + img_size, + sheetUrl, + multiplyX, + sheetSizeX, + sheetSizeY, + sizeX, + sizeY, + side, + splitted, + keyCategory: 'category', + keyX: 'sheet_x', + keyY: 'sheet_y', + /* keyCategory: '2', + keyX: '0', // 'sheet_x' + keyY: '1', // 'sheet_y' */ + + emoji: {"#️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":0,"sort_order":132},"*️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":1,"sort_order":133},"0️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":2,"sort_order":134},"1️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":3,"sort_order":135},"2️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":4,"sort_order":136},"3️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":5,"sort_order":137},"4️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":6,"sort_order":138},"5️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":7,"sort_order":139},"6️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":8,"sort_order":140},"7️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":9,"sort_order":141},"8️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":10,"sort_order":142},"9️⃣":{"category":"Symbols","sheet_x":0,"sheet_y":11,"sort_order":143},"©️":{"category":"Symbols","sheet_x":0,"sheet_y":12,"sort_order":129},"®️":{"category":"Symbols","sheet_x":0,"sheet_y":13,"sort_order":130},"🀄":{"category":"Activities","sheet_x":0,"sheet_y":14,"sort_order":73},"🃏":{"category":"Activities","sheet_x":0,"sheet_y":15,"sort_order":72},"🅰️":{"category":"Symbols","sheet_x":0,"sheet_y":16,"sort_order":150},"🅱️":{"category":"Symbols","sheet_x":0,"sheet_y":17,"sort_order":152},"🅾️":{"category":"Symbols","sheet_x":0,"sheet_y":18,"sort_order":161},"🅿️":{"category":"Symbols","sheet_x":0,"sheet_y":19,"sort_order":163},"🆎":{"category":"Symbols","sheet_x":0,"sheet_y":20,"sort_order":151},"🆑":{"category":"Symbols","sheet_x":0,"sheet_y":21,"sort_order":153},"🆒":{"category":"Symbols","sheet_x":0,"sheet_y":22,"sort_order":154},"🆓":{"category":"Symbols","sheet_x":0,"sheet_y":23,"sort_order":155},"🆔":{"category":"Symbols","sheet_x":0,"sheet_y":24,"sort_order":157},"🆕":{"category":"Symbols","sheet_x":0,"sheet_y":25,"sort_order":159},"🆖":{"category":"Symbols","sheet_x":0,"sheet_y":26,"sort_order":160},"🆗":{"category":"Symbols","sheet_x":0,"sheet_y":27,"sort_order":162},"🆘":{"category":"Symbols","sheet_x":0,"sheet_y":28,"sort_order":164},"🆙":{"category":"Symbols","sheet_x":0,"sheet_y":29,"sort_order":165},"🆚":{"category":"Symbols","sheet_x":0,"sheet_y":30,"sort_order":166},"🇦🇨":{"category":"Flags","sheet_x":0,"sheet_y":31,"sort_order":8},"🇦🇩":{"category":"Flags","sheet_x":0,"sheet_y":32,"sort_order":9},"🇦🇪":{"category":"Flags","sheet_x":0,"sheet_y":33,"sort_order":10},"🇦🇫":{"category":"Flags","sheet_x":0,"sheet_y":34,"sort_order":11},"🇦🇬":{"category":"Flags","sheet_x":0,"sheet_y":35,"sort_order":12},"🇦🇮":{"category":"Flags","sheet_x":0,"sheet_y":36,"sort_order":13},"🇦🇱":{"category":"Flags","sheet_x":0,"sheet_y":37,"sort_order":14},"🇦🇲":{"category":"Flags","sheet_x":0,"sheet_y":38,"sort_order":15},"🇦🇴":{"category":"Flags","sheet_x":0,"sheet_y":39,"sort_order":16},"🇦🇶":{"category":"Flags","sheet_x":0,"sheet_y":40,"sort_order":17},"🇦🇷":{"category":"Flags","sheet_x":0,"sheet_y":41,"sort_order":18},"🇦🇸":{"category":"Flags","sheet_x":0,"sheet_y":42,"sort_order":19},"🇦🇹":{"category":"Flags","sheet_x":0,"sheet_y":43,"sort_order":20},"🇦🇺":{"category":"Flags","sheet_x":0,"sheet_y":44,"sort_order":21},"🇦🇼":{"category":"Flags","sheet_x":0,"sheet_y":45,"sort_order":22},"🇦🇽":{"category":"Flags","sheet_x":0,"sheet_y":46,"sort_order":23},"🇦🇿":{"category":"Flags","sheet_x":0,"sheet_y":47,"sort_order":24},"🇧🇦":{"category":"Flags","sheet_x":0,"sheet_y":48,"sort_order":25},"🇧🇧":{"category":"Flags","sheet_x":0,"sheet_y":49,"sort_order":26},"🇧🇩":{"category":"Flags","sheet_x":0,"sheet_y":50,"sort_order":27},"🇧🇪":{"category":"Flags","sheet_x":0,"sheet_y":51,"sort_order":28},"🇧🇫":{"category":"Flags","sheet_x":0,"sheet_y":52,"sort_order":29},"🇧🇬":{"category":"Flags","sheet_x":0,"sheet_y":53,"sort_order":30},"🇧🇭":{"category":"Flags","sheet_x":0,"sheet_y":54,"sort_order":31},"🇧🇮":{"category":"Flags","sheet_x":0,"sheet_y":55,"sort_order":32},"🇧🇯":{"category":"Flags","sheet_x":0,"sheet_y":56,"sort_order":33},"🇧🇱":{"category":"Flags","sheet_x":1,"sheet_y":0,"sort_order":34},"🇧🇲":{"category":"Flags","sheet_x":1,"sheet_y":1,"sort_order":35},"🇧🇳":{"category":"Flags","sheet_x":1,"sheet_y":2,"sort_order":36},"🇧🇴":{"category":"Flags","sheet_x":1,"sheet_y":3,"sort_order":37},"🇧🇶":{"category":"Flags","sheet_x":1,"sheet_y":4,"sort_order":38},"🇧🇷":{"category":"Flags","sheet_x":1,"sheet_y":5,"sort_order":39},"🇧🇸":{"category":"Flags","sheet_x":1,"sheet_y":6,"sort_order":40},"🇧🇹":{"category":"Flags","sheet_x":1,"sheet_y":7,"sort_order":41},"🇧🇻":{"category":"Flags","sheet_x":1,"sheet_y":8,"sort_order":42},"🇧🇼":{"category":"Flags","sheet_x":1,"sheet_y":9,"sort_order":43},"🇧🇾":{"category":"Flags","sheet_x":1,"sheet_y":10,"sort_order":44},"🇧🇿":{"category":"Flags","sheet_x":1,"sheet_y":11,"sort_order":45},"🇨🇦":{"category":"Flags","sheet_x":1,"sheet_y":12,"sort_order":46},"🇨🇨":{"category":"Flags","sheet_x":1,"sheet_y":13,"sort_order":47},"🇨🇩":{"category":"Flags","sheet_x":1,"sheet_y":14,"sort_order":48},"🇨🇫":{"category":"Flags","sheet_x":1,"sheet_y":15,"sort_order":49},"🇨🇬":{"category":"Flags","sheet_x":1,"sheet_y":16,"sort_order":50},"🇨🇭":{"category":"Flags","sheet_x":1,"sheet_y":17,"sort_order":51},"🇨🇮":{"category":"Flags","sheet_x":1,"sheet_y":18,"sort_order":52},"🇨🇰":{"category":"Flags","sheet_x":1,"sheet_y":19,"sort_order":53},"🇨🇱":{"category":"Flags","sheet_x":1,"sheet_y":20,"sort_order":54},"🇨🇲":{"category":"Flags","sheet_x":1,"sheet_y":21,"sort_order":55},"🇨🇳":{"category":"Flags","sheet_x":1,"sheet_y":22,"sort_order":56},"🇨🇴":{"category":"Flags","sheet_x":1,"sheet_y":23,"sort_order":57},"🇨🇵":{"category":"Flags","sheet_x":1,"sheet_y":24,"sort_order":58},"🇨🇷":{"category":"Flags","sheet_x":1,"sheet_y":25,"sort_order":59},"🇨🇺":{"category":"Flags","sheet_x":1,"sheet_y":26,"sort_order":60},"🇨🇻":{"category":"Flags","sheet_x":1,"sheet_y":27,"sort_order":61},"🇨🇼":{"category":"Flags","sheet_x":1,"sheet_y":28,"sort_order":62},"🇨🇽":{"category":"Flags","sheet_x":1,"sheet_y":29,"sort_order":63},"🇨🇾":{"category":"Flags","sheet_x":1,"sheet_y":30,"sort_order":64},"🇨🇿":{"category":"Flags","sheet_x":1,"sheet_y":31,"sort_order":65},"🇩🇪":{"category":"Flags","sheet_x":1,"sheet_y":32,"sort_order":66},"🇩🇬":{"category":"Flags","sheet_x":1,"sheet_y":33,"sort_order":67},"🇩🇯":{"category":"Flags","sheet_x":1,"sheet_y":34,"sort_order":68},"🇩🇰":{"category":"Flags","sheet_x":1,"sheet_y":35,"sort_order":69},"🇩🇲":{"category":"Flags","sheet_x":1,"sheet_y":36,"sort_order":70},"🇩🇴":{"category":"Flags","sheet_x":1,"sheet_y":37,"sort_order":71},"🇩🇿":{"category":"Flags","sheet_x":1,"sheet_y":38,"sort_order":72},"🇪🇦":{"category":"Flags","sheet_x":1,"sheet_y":39,"sort_order":73},"🇪🇨":{"category":"Flags","sheet_x":1,"sheet_y":40,"sort_order":74},"🇪🇪":{"category":"Flags","sheet_x":1,"sheet_y":41,"sort_order":75},"🇪🇬":{"category":"Flags","sheet_x":1,"sheet_y":42,"sort_order":76},"🇪🇭":{"category":"Flags","sheet_x":1,"sheet_y":43,"sort_order":77},"🇪🇷":{"category":"Flags","sheet_x":1,"sheet_y":44,"sort_order":78},"🇪🇸":{"category":"Flags","sheet_x":1,"sheet_y":45,"sort_order":79},"🇪🇹":{"category":"Flags","sheet_x":1,"sheet_y":46,"sort_order":80},"🇪🇺":{"category":"Flags","sheet_x":1,"sheet_y":47,"sort_order":81},"🇫🇮":{"category":"Flags","sheet_x":1,"sheet_y":48,"sort_order":82},"🇫🇯":{"category":"Flags","sheet_x":1,"sheet_y":49,"sort_order":83},"🇫🇰":{"category":"Flags","sheet_x":1,"sheet_y":50,"sort_order":84},"🇫🇲":{"category":"Flags","sheet_x":1,"sheet_y":51,"sort_order":85},"🇫🇴":{"category":"Flags","sheet_x":1,"sheet_y":52,"sort_order":86},"🇫🇷":{"category":"Flags","sheet_x":1,"sheet_y":53,"sort_order":87},"🇬🇦":{"category":"Flags","sheet_x":1,"sheet_y":54,"sort_order":88},"🇬🇧":{"category":"Flags","sheet_x":1,"sheet_y":55,"sort_order":89},"🇬🇩":{"category":"Flags","sheet_x":1,"sheet_y":56,"sort_order":90},"🇬🇪":{"category":"Flags","sheet_x":2,"sheet_y":0,"sort_order":91},"🇬🇫":{"category":"Flags","sheet_x":2,"sheet_y":1,"sort_order":92},"🇬🇬":{"category":"Flags","sheet_x":2,"sheet_y":2,"sort_order":93},"🇬🇭":{"category":"Flags","sheet_x":2,"sheet_y":3,"sort_order":94},"🇬🇮":{"category":"Flags","sheet_x":2,"sheet_y":4,"sort_order":95},"🇬🇱":{"category":"Flags","sheet_x":2,"sheet_y":5,"sort_order":96},"🇬🇲":{"category":"Flags","sheet_x":2,"sheet_y":6,"sort_order":97},"🇬🇳":{"category":"Flags","sheet_x":2,"sheet_y":7,"sort_order":98},"🇬🇵":{"category":"Flags","sheet_x":2,"sheet_y":8,"sort_order":99},"🇬🇶":{"category":"Flags","sheet_x":2,"sheet_y":9,"sort_order":100},"🇬🇷":{"category":"Flags","sheet_x":2,"sheet_y":10,"sort_order":101},"🇬🇸":{"category":"Flags","sheet_x":2,"sheet_y":11,"sort_order":102},"🇬🇹":{"category":"Flags","sheet_x":2,"sheet_y":12,"sort_order":103},"🇬🇺":{"category":"Flags","sheet_x":2,"sheet_y":13,"sort_order":104},"🇬🇼":{"category":"Flags","sheet_x":2,"sheet_y":14,"sort_order":105},"🇬🇾":{"category":"Flags","sheet_x":2,"sheet_y":15,"sort_order":106},"🇭🇰":{"category":"Flags","sheet_x":2,"sheet_y":16,"sort_order":107},"🇭🇲":{"category":"Flags","sheet_x":2,"sheet_y":17,"sort_order":108},"🇭🇳":{"category":"Flags","sheet_x":2,"sheet_y":18,"sort_order":109},"🇭🇷":{"category":"Flags","sheet_x":2,"sheet_y":19,"sort_order":110},"🇭🇹":{"category":"Flags","sheet_x":2,"sheet_y":20,"sort_order":111},"🇭🇺":{"category":"Flags","sheet_x":2,"sheet_y":21,"sort_order":112},"🇮🇨":{"category":"Flags","sheet_x":2,"sheet_y":22,"sort_order":113},"🇮🇩":{"category":"Flags","sheet_x":2,"sheet_y":23,"sort_order":114},"🇮🇪":{"category":"Flags","sheet_x":2,"sheet_y":24,"sort_order":115},"🇮🇱":{"category":"Flags","sheet_x":2,"sheet_y":25,"sort_order":116},"🇮🇲":{"category":"Flags","sheet_x":2,"sheet_y":26,"sort_order":117},"🇮🇳":{"category":"Flags","sheet_x":2,"sheet_y":27,"sort_order":118},"🇮🇴":{"category":"Flags","sheet_x":2,"sheet_y":28,"sort_order":119},"🇮🇶":{"category":"Flags","sheet_x":2,"sheet_y":29,"sort_order":120},"🇮🇷":{"category":"Flags","sheet_x":2,"sheet_y":30,"sort_order":121},"🇮🇸":{"category":"Flags","sheet_x":2,"sheet_y":31,"sort_order":122},"🇮🇹":{"category":"Flags","sheet_x":2,"sheet_y":32,"sort_order":123},"🇯🇪":{"category":"Flags","sheet_x":2,"sheet_y":33,"sort_order":124},"🇯🇲":{"category":"Flags","sheet_x":2,"sheet_y":34,"sort_order":125},"🇯🇴":{"category":"Flags","sheet_x":2,"sheet_y":35,"sort_order":126},"🇯🇵":{"category":"Flags","sheet_x":2,"sheet_y":36,"sort_order":127},"🇰🇪":{"category":"Flags","sheet_x":2,"sheet_y":37,"sort_order":128},"🇰🇬":{"category":"Flags","sheet_x":2,"sheet_y":38,"sort_order":129},"🇰🇭":{"category":"Flags","sheet_x":2,"sheet_y":39,"sort_order":130},"🇰🇮":{"category":"Flags","sheet_x":2,"sheet_y":40,"sort_order":131},"🇰🇲":{"category":"Flags","sheet_x":2,"sheet_y":41,"sort_order":132},"🇰🇳":{"category":"Flags","sheet_x":2,"sheet_y":42,"sort_order":133},"🇰🇵":{"category":"Flags","sheet_x":2,"sheet_y":43,"sort_order":134},"🇰🇷":{"category":"Flags","sheet_x":2,"sheet_y":44,"sort_order":135},"🇰🇼":{"category":"Flags","sheet_x":2,"sheet_y":45,"sort_order":136},"🇰🇾":{"category":"Flags","sheet_x":2,"sheet_y":46,"sort_order":137},"🇰🇿":{"category":"Flags","sheet_x":2,"sheet_y":47,"sort_order":138},"🇱🇦":{"category":"Flags","sheet_x":2,"sheet_y":48,"sort_order":139},"🇱🇧":{"category":"Flags","sheet_x":2,"sheet_y":49,"sort_order":140},"🇱🇨":{"category":"Flags","sheet_x":2,"sheet_y":50,"sort_order":141},"🇱🇮":{"category":"Flags","sheet_x":2,"sheet_y":51,"sort_order":142},"🇱🇰":{"category":"Flags","sheet_x":2,"sheet_y":52,"sort_order":143},"🇱🇷":{"category":"Flags","sheet_x":2,"sheet_y":53,"sort_order":144},"🇱🇸":{"category":"Flags","sheet_x":2,"sheet_y":54,"sort_order":145},"🇱🇹":{"category":"Flags","sheet_x":2,"sheet_y":55,"sort_order":146},"🇱🇺":{"category":"Flags","sheet_x":2,"sheet_y":56,"sort_order":147},"🇱🇻":{"category":"Flags","sheet_x":3,"sheet_y":0,"sort_order":148},"🇱🇾":{"category":"Flags","sheet_x":3,"sheet_y":1,"sort_order":149},"🇲🇦":{"category":"Flags","sheet_x":3,"sheet_y":2,"sort_order":150},"🇲🇨":{"category":"Flags","sheet_x":3,"sheet_y":3,"sort_order":151},"🇲🇩":{"category":"Flags","sheet_x":3,"sheet_y":4,"sort_order":152},"🇲🇪":{"category":"Flags","sheet_x":3,"sheet_y":5,"sort_order":153},"🇲🇫":{"category":"Flags","sheet_x":3,"sheet_y":6,"sort_order":154},"🇲🇬":{"category":"Flags","sheet_x":3,"sheet_y":7,"sort_order":155},"🇲🇭":{"category":"Flags","sheet_x":3,"sheet_y":8,"sort_order":156},"🇲🇰":{"category":"Flags","sheet_x":3,"sheet_y":9,"sort_order":157},"🇲🇱":{"category":"Flags","sheet_x":3,"sheet_y":10,"sort_order":158},"🇲🇲":{"category":"Flags","sheet_x":3,"sheet_y":11,"sort_order":159},"🇲🇳":{"category":"Flags","sheet_x":3,"sheet_y":12,"sort_order":160},"🇲🇴":{"category":"Flags","sheet_x":3,"sheet_y":13,"sort_order":161},"🇲🇵":{"category":"Flags","sheet_x":3,"sheet_y":14,"sort_order":162},"🇲🇶":{"category":"Flags","sheet_x":3,"sheet_y":15,"sort_order":163},"🇲🇷":{"category":"Flags","sheet_x":3,"sheet_y":16,"sort_order":164},"🇲🇸":{"category":"Flags","sheet_x":3,"sheet_y":17,"sort_order":165},"🇲🇹":{"category":"Flags","sheet_x":3,"sheet_y":18,"sort_order":166},"🇲🇺":{"category":"Flags","sheet_x":3,"sheet_y":19,"sort_order":167},"🇲🇻":{"category":"Flags","sheet_x":3,"sheet_y":20,"sort_order":168},"🇲🇼":{"category":"Flags","sheet_x":3,"sheet_y":21,"sort_order":169},"🇲🇽":{"category":"Flags","sheet_x":3,"sheet_y":22,"sort_order":170},"🇲🇾":{"category":"Flags","sheet_x":3,"sheet_y":23,"sort_order":171},"🇲🇿":{"category":"Flags","sheet_x":3,"sheet_y":24,"sort_order":172},"🇳🇦":{"category":"Flags","sheet_x":3,"sheet_y":25,"sort_order":173},"🇳🇨":{"category":"Flags","sheet_x":3,"sheet_y":26,"sort_order":174},"🇳🇪":{"category":"Flags","sheet_x":3,"sheet_y":27,"sort_order":175},"🇳🇫":{"category":"Flags","sheet_x":3,"sheet_y":28,"sort_order":176},"🇳🇬":{"category":"Flags","sheet_x":3,"sheet_y":29,"sort_order":177},"🇳🇮":{"category":"Flags","sheet_x":3,"sheet_y":30,"sort_order":178},"🇳🇱":{"category":"Flags","sheet_x":3,"sheet_y":31,"sort_order":179},"🇳🇴":{"category":"Flags","sheet_x":3,"sheet_y":32,"sort_order":180},"🇳🇵":{"category":"Flags","sheet_x":3,"sheet_y":33,"sort_order":181},"🇳🇷":{"category":"Flags","sheet_x":3,"sheet_y":34,"sort_order":182},"🇳🇺":{"category":"Flags","sheet_x":3,"sheet_y":35,"sort_order":183},"🇳🇿":{"category":"Flags","sheet_x":3,"sheet_y":36,"sort_order":184},"🇴🇲":{"category":"Flags","sheet_x":3,"sheet_y":37,"sort_order":185},"🇵🇦":{"category":"Flags","sheet_x":3,"sheet_y":38,"sort_order":186},"🇵🇪":{"category":"Flags","sheet_x":3,"sheet_y":39,"sort_order":187},"🇵🇫":{"category":"Flags","sheet_x":3,"sheet_y":40,"sort_order":188},"🇵🇬":{"category":"Flags","sheet_x":3,"sheet_y":41,"sort_order":189},"🇵🇭":{"category":"Flags","sheet_x":3,"sheet_y":42,"sort_order":190},"🇵🇰":{"category":"Flags","sheet_x":3,"sheet_y":43,"sort_order":191},"🇵🇱":{"category":"Flags","sheet_x":3,"sheet_y":44,"sort_order":192},"🇵🇲":{"category":"Flags","sheet_x":3,"sheet_y":45,"sort_order":193},"🇵🇳":{"category":"Flags","sheet_x":3,"sheet_y":46,"sort_order":194},"🇵🇷":{"category":"Flags","sheet_x":3,"sheet_y":47,"sort_order":195},"🇵🇸":{"category":"Flags","sheet_x":3,"sheet_y":48,"sort_order":196},"🇵🇹":{"category":"Flags","sheet_x":3,"sheet_y":49,"sort_order":197},"🇵🇼":{"category":"Flags","sheet_x":3,"sheet_y":50,"sort_order":198},"🇵🇾":{"category":"Flags","sheet_x":3,"sheet_y":51,"sort_order":199},"🇶🇦":{"category":"Flags","sheet_x":3,"sheet_y":52,"sort_order":200},"🇷🇪":{"category":"Flags","sheet_x":3,"sheet_y":53,"sort_order":201},"🇷🇴":{"category":"Flags","sheet_x":3,"sheet_y":54,"sort_order":202},"🇷🇸":{"category":"Flags","sheet_x":3,"sheet_y":55,"sort_order":203},"🇷🇺":{"category":"Flags","sheet_x":3,"sheet_y":56,"sort_order":204},"🇷🇼":{"category":"Flags","sheet_x":4,"sheet_y":0,"sort_order":205},"🇸🇦":{"category":"Flags","sheet_x":4,"sheet_y":1,"sort_order":206},"🇸🇧":{"category":"Flags","sheet_x":4,"sheet_y":2,"sort_order":207},"🇸🇨":{"category":"Flags","sheet_x":4,"sheet_y":3,"sort_order":208},"🇸🇩":{"category":"Flags","sheet_x":4,"sheet_y":4,"sort_order":209},"🇸🇪":{"category":"Flags","sheet_x":4,"sheet_y":5,"sort_order":210},"🇸🇬":{"category":"Flags","sheet_x":4,"sheet_y":6,"sort_order":211},"🇸🇭":{"category":"Flags","sheet_x":4,"sheet_y":7,"sort_order":212},"🇸🇮":{"category":"Flags","sheet_x":4,"sheet_y":8,"sort_order":213},"🇸🇯":{"category":"Flags","sheet_x":4,"sheet_y":9,"sort_order":214},"🇸🇰":{"category":"Flags","sheet_x":4,"sheet_y":10,"sort_order":215},"🇸🇱":{"category":"Flags","sheet_x":4,"sheet_y":11,"sort_order":216},"🇸🇲":{"category":"Flags","sheet_x":4,"sheet_y":12,"sort_order":217},"🇸🇳":{"category":"Flags","sheet_x":4,"sheet_y":13,"sort_order":218},"🇸🇴":{"category":"Flags","sheet_x":4,"sheet_y":14,"sort_order":219},"🇸🇷":{"category":"Flags","sheet_x":4,"sheet_y":15,"sort_order":220},"🇸🇸":{"category":"Flags","sheet_x":4,"sheet_y":16,"sort_order":221},"🇸🇹":{"category":"Flags","sheet_x":4,"sheet_y":17,"sort_order":222},"🇸🇻":{"category":"Flags","sheet_x":4,"sheet_y":18,"sort_order":223},"🇸🇽":{"category":"Flags","sheet_x":4,"sheet_y":19,"sort_order":224},"🇸🇾":{"category":"Flags","sheet_x":4,"sheet_y":20,"sort_order":225},"🇸🇿":{"category":"Flags","sheet_x":4,"sheet_y":21,"sort_order":226},"🇹🇦":{"category":"Flags","sheet_x":4,"sheet_y":22,"sort_order":227},"🇹🇨":{"category":"Flags","sheet_x":4,"sheet_y":23,"sort_order":228},"🇹🇩":{"category":"Flags","sheet_x":4,"sheet_y":24,"sort_order":229},"🇹🇫":{"category":"Flags","sheet_x":4,"sheet_y":25,"sort_order":230},"🇹🇬":{"category":"Flags","sheet_x":4,"sheet_y":26,"sort_order":231},"🇹🇭":{"category":"Flags","sheet_x":4,"sheet_y":27,"sort_order":232},"🇹🇯":{"category":"Flags","sheet_x":4,"sheet_y":28,"sort_order":233},"🇹🇰":{"category":"Flags","sheet_x":4,"sheet_y":29,"sort_order":234},"🇹🇱":{"category":"Flags","sheet_x":4,"sheet_y":30,"sort_order":235},"🇹🇲":{"category":"Flags","sheet_x":4,"sheet_y":31,"sort_order":236},"🇹🇳":{"category":"Flags","sheet_x":4,"sheet_y":32,"sort_order":237},"🇹🇴":{"category":"Flags","sheet_x":4,"sheet_y":33,"sort_order":238},"🇹🇷":{"category":"Flags","sheet_x":4,"sheet_y":34,"sort_order":239},"🇹🇹":{"category":"Flags","sheet_x":4,"sheet_y":35,"sort_order":240},"🇹🇻":{"category":"Flags","sheet_x":4,"sheet_y":36,"sort_order":241},"🇹🇼":{"category":"Flags","sheet_x":4,"sheet_y":37,"sort_order":242},"🇹🇿":{"category":"Flags","sheet_x":4,"sheet_y":38,"sort_order":243},"🇺🇦":{"category":"Flags","sheet_x":4,"sheet_y":39,"sort_order":244},"🇺🇬":{"category":"Flags","sheet_x":4,"sheet_y":40,"sort_order":245},"🇺🇲":{"category":"Flags","sheet_x":4,"sheet_y":41,"sort_order":246},"🇺🇳":{"category":"Flags","sheet_x":4,"sheet_y":42,"sort_order":247},"🇺🇸":{"category":"Flags","sheet_x":4,"sheet_y":43,"sort_order":248},"🇺🇾":{"category":"Flags","sheet_x":4,"sheet_y":44,"sort_order":249},"🇺🇿":{"category":"Flags","sheet_x":4,"sheet_y":45,"sort_order":250},"🇻🇦":{"category":"Flags","sheet_x":4,"sheet_y":46,"sort_order":251},"🇻🇨":{"category":"Flags","sheet_x":4,"sheet_y":47,"sort_order":252},"🇻🇪":{"category":"Flags","sheet_x":4,"sheet_y":48,"sort_order":253},"🇻🇬":{"category":"Flags","sheet_x":4,"sheet_y":49,"sort_order":254},"🇻🇮":{"category":"Flags","sheet_x":4,"sheet_y":50,"sort_order":255},"🇻🇳":{"category":"Flags","sheet_x":4,"sheet_y":51,"sort_order":256},"🇻🇺":{"category":"Flags","sheet_x":4,"sheet_y":52,"sort_order":257},"🇼🇫":{"category":"Flags","sheet_x":4,"sheet_y":53,"sort_order":258},"🇼🇸":{"category":"Flags","sheet_x":4,"sheet_y":54,"sort_order":259},"🇽🇰":{"category":"Flags","sheet_x":4,"sheet_y":55,"sort_order":260},"🇾🇪":{"category":"Flags","sheet_x":4,"sheet_y":56,"sort_order":261},"🇾🇹":{"category":"Flags","sheet_x":5,"sheet_y":0,"sort_order":262},"🇿🇦":{"category":"Flags","sheet_x":5,"sheet_y":1,"sort_order":263},"🇿🇲":{"category":"Flags","sheet_x":5,"sheet_y":2,"sort_order":264},"🇿🇼":{"category":"Flags","sheet_x":5,"sheet_y":3,"sort_order":265},"🈁":{"category":"Symbols","sheet_x":5,"sheet_y":4,"sort_order":167},"🈂️":{"category":"Symbols","sheet_x":5,"sheet_y":5,"sort_order":168},"🈚":{"category":"Symbols","sheet_x":5,"sheet_y":6,"sort_order":174},"🈯":{"category":"Symbols","sheet_x":5,"sheet_y":7,"sort_order":171},"🈲":{"category":"Symbols","sheet_x":5,"sheet_y":8,"sort_order":175},"🈳":{"category":"Symbols","sheet_x":5,"sheet_y":9,"sort_order":179},"🈴":{"category":"Symbols","sheet_x":5,"sheet_y":10,"sort_order":178},"🈵":{"category":"Symbols","sheet_x":5,"sheet_y":11,"sort_order":183},"🈶":{"category":"Symbols","sheet_x":5,"sheet_y":12,"sort_order":170},"🈷️":{"category":"Symbols","sheet_x":5,"sheet_y":13,"sort_order":169},"🈸":{"category":"Symbols","sheet_x":5,"sheet_y":14,"sort_order":177},"🈹":{"category":"Symbols","sheet_x":5,"sheet_y":15,"sort_order":173},"🈺":{"category":"Symbols","sheet_x":5,"sheet_y":16,"sort_order":182},"🉐":{"category":"Symbols","sheet_x":5,"sheet_y":17,"sort_order":172},"🉑":{"category":"Symbols","sheet_x":5,"sheet_y":18,"sort_order":176},"🌀":{"category":"Travel & Places","sheet_x":5,"sheet_y":19,"sort_order":197},"🌁":{"category":"Travel & Places","sheet_x":5,"sheet_y":20,"sort_order":49},"🌂":{"category":"Travel & Places","sheet_x":5,"sheet_y":21,"sort_order":199},"🌃":{"category":"Travel & Places","sheet_x":5,"sheet_y":22,"sort_order":50},"🌄":{"category":"Travel & Places","sheet_x":5,"sheet_y":23,"sort_order":52},"🌅":{"category":"Travel & Places","sheet_x":5,"sheet_y":24,"sort_order":53},"🌆":{"category":"Travel & Places","sheet_x":5,"sheet_y":25,"sort_order":54},"🌇":{"category":"Travel & Places","sheet_x":5,"sheet_y":26,"sort_order":55},"🌈":{"category":"Travel & Places","sheet_x":5,"sheet_y":27,"sort_order":198},"🌉":{"category":"Travel & Places","sheet_x":5,"sheet_y":28,"sort_order":56},"🌊":{"category":"Travel & Places","sheet_x":5,"sheet_y":29,"sort_order":210},"🌋":{"category":"Travel & Places","sheet_x":5,"sheet_y":30,"sort_order":10},"🌌":{"category":"Travel & Places","sheet_x":5,"sheet_y":31,"sort_order":184},"🌍":{"category":"Travel & Places","sheet_x":5,"sheet_y":32,"sort_order":1},"🌎":{"category":"Travel & Places","sheet_x":5,"sheet_y":33,"sort_order":2},"🌏":{"category":"Travel & Places","sheet_x":5,"sheet_y":34,"sort_order":3},"🌐":{"category":"Travel & Places","sheet_x":5,"sheet_y":35,"sort_order":4},"🌑":{"category":"Travel & Places","sheet_x":5,"sheet_y":36,"sort_order":164},"🌒":{"category":"Travel & Places","sheet_x":5,"sheet_y":37,"sort_order":165},"🌓":{"category":"Travel & Places","sheet_x":5,"sheet_y":38,"sort_order":166},"🌔":{"category":"Travel & Places","sheet_x":5,"sheet_y":39,"sort_order":167},"🌕":{"category":"Travel & Places","sheet_x":5,"sheet_y":40,"sort_order":168},"🌖":{"category":"Travel & Places","sheet_x":5,"sheet_y":41,"sort_order":169},"🌗":{"category":"Travel & Places","sheet_x":5,"sheet_y":42,"sort_order":170},"🌘":{"category":"Travel & Places","sheet_x":5,"sheet_y":43,"sort_order":171},"🌙":{"category":"Travel & Places","sheet_x":5,"sheet_y":44,"sort_order":172},"🌚":{"category":"Travel & Places","sheet_x":5,"sheet_y":45,"sort_order":173},"🌛":{"category":"Travel & Places","sheet_x":5,"sheet_y":46,"sort_order":174},"🌜":{"category":"Travel & Places","sheet_x":5,"sheet_y":47,"sort_order":175},"🌝":{"category":"Travel & Places","sheet_x":5,"sheet_y":48,"sort_order":178},"🌞":{"category":"Travel & Places","sheet_x":5,"sheet_y":49,"sort_order":179},"🌟":{"category":"Travel & Places","sheet_x":5,"sheet_y":50,"sort_order":182},"🌠":{"category":"Travel & Places","sheet_x":5,"sheet_y":51,"sort_order":183},"🌡️":{"category":"Travel & Places","sheet_x":5,"sheet_y":52,"sort_order":176},"🌤️":{"category":"Travel & Places","sheet_x":5,"sheet_y":53,"sort_order":188},"🌥️":{"category":"Travel & Places","sheet_x":5,"sheet_y":54,"sort_order":189},"🌦️":{"category":"Travel & Places","sheet_x":5,"sheet_y":55,"sort_order":190},"🌧️":{"category":"Travel & Places","sheet_x":5,"sheet_y":56,"sort_order":191},"🌨️":{"category":"Travel & Places","sheet_x":6,"sheet_y":0,"sort_order":192},"🌩️":{"category":"Travel & Places","sheet_x":6,"sheet_y":1,"sort_order":193},"🌪️":{"category":"Travel & Places","sheet_x":6,"sheet_y":2,"sort_order":194},"🌫️":{"category":"Travel & Places","sheet_x":6,"sheet_y":3,"sort_order":195},"🌬️":{"category":"Travel & Places","sheet_x":6,"sheet_y":4,"sort_order":196},"🌭":{"category":"Food & Drink","sheet_x":6,"sheet_y":5,"sort_order":47},"🌮":{"category":"Food & Drink","sheet_x":6,"sheet_y":6,"sort_order":49},"🌯":{"category":"Food & Drink","sheet_x":6,"sheet_y":7,"sort_order":50},"🌰":{"category":"Food & Drink","sheet_x":6,"sheet_y":8,"sort_order":31},"🌱":{"category":"Animals & Nature","sheet_x":6,"sheet_y":9,"sort_order":116},"🌲":{"category":"Animals & Nature","sheet_x":6,"sheet_y":10,"sort_order":117},"🌳":{"category":"Animals & Nature","sheet_x":6,"sheet_y":11,"sort_order":118},"🌴":{"category":"Animals & Nature","sheet_x":6,"sheet_y":12,"sort_order":119},"🌵":{"category":"Animals & Nature","sheet_x":6,"sheet_y":13,"sort_order":120},"🌶️":{"category":"Food & Drink","sheet_x":6,"sheet_y":14,"sort_order":23},"🌷":{"category":"Animals & Nature","sheet_x":6,"sheet_y":15,"sort_order":115},"🌸":{"category":"Animals & Nature","sheet_x":6,"sheet_y":16,"sort_order":107},"🌹":{"category":"Animals & Nature","sheet_x":6,"sheet_y":17,"sort_order":110},"🌺":{"category":"Animals & Nature","sheet_x":6,"sheet_y":18,"sort_order":112},"🌻":{"category":"Animals & Nature","sheet_x":6,"sheet_y":19,"sort_order":113},"🌼":{"category":"Animals & Nature","sheet_x":6,"sheet_y":20,"sort_order":114},"🌽":{"category":"Food & Drink","sheet_x":6,"sheet_y":21,"sort_order":22},"🌾":{"category":"Animals & Nature","sheet_x":6,"sheet_y":22,"sort_order":121},"🌿":{"category":"Animals & Nature","sheet_x":6,"sheet_y":23,"sort_order":122},"🍀":{"category":"Animals & Nature","sheet_x":6,"sheet_y":24,"sort_order":124},"🍁":{"category":"Animals & Nature","sheet_x":6,"sheet_y":25,"sort_order":125},"🍂":{"category":"Animals & Nature","sheet_x":6,"sheet_y":26,"sort_order":126},"🍃":{"category":"Animals & Nature","sheet_x":6,"sheet_y":27,"sort_order":127},"🍄":{"category":"Food & Drink","sheet_x":6,"sheet_y":28,"sort_order":29},"🍅":{"category":"Food & Drink","sheet_x":6,"sheet_y":29,"sort_order":16},"🍆":{"category":"Food & Drink","sheet_x":6,"sheet_y":30,"sort_order":19},"🍇":{"category":"Food & Drink","sheet_x":6,"sheet_y":31,"sort_order":1},"🍈":{"category":"Food & Drink","sheet_x":6,"sheet_y":32,"sort_order":2},"🍉":{"category":"Food & Drink","sheet_x":6,"sheet_y":33,"sort_order":3},"🍊":{"category":"Food & Drink","sheet_x":6,"sheet_y":34,"sort_order":4},"🍋":{"category":"Food & Drink","sheet_x":6,"sheet_y":35,"sort_order":5},"🍌":{"category":"Food & Drink","sheet_x":6,"sheet_y":36,"sort_order":6},"🍍":{"category":"Food & Drink","sheet_x":6,"sheet_y":37,"sort_order":7},"🍎":{"category":"Food & Drink","sheet_x":6,"sheet_y":38,"sort_order":9},"🍏":{"category":"Food & Drink","sheet_x":6,"sheet_y":39,"sort_order":10},"🍐":{"category":"Food & Drink","sheet_x":6,"sheet_y":40,"sort_order":11},"🍑":{"category":"Food & Drink","sheet_x":6,"sheet_y":41,"sort_order":12},"🍒":{"category":"Food & Drink","sheet_x":6,"sheet_y":42,"sort_order":13},"🍓":{"category":"Food & Drink","sheet_x":6,"sheet_y":43,"sort_order":14},"🍔":{"category":"Food & Drink","sheet_x":6,"sheet_y":44,"sort_order":44},"🍕":{"category":"Food & Drink","sheet_x":6,"sheet_y":45,"sort_order":46},"🍖":{"category":"Food & Drink","sheet_x":6,"sheet_y":46,"sort_order":40},"🍗":{"category":"Food & Drink","sheet_x":6,"sheet_y":47,"sort_order":41},"🍘":{"category":"Food & Drink","sheet_x":6,"sheet_y":48,"sort_order":64},"🍙":{"category":"Food & Drink","sheet_x":6,"sheet_y":49,"sort_order":65},"🍚":{"category":"Food & Drink","sheet_x":6,"sheet_y":50,"sort_order":66},"🍛":{"category":"Food & Drink","sheet_x":6,"sheet_y":51,"sort_order":67},"🍜":{"category":"Food & Drink","sheet_x":6,"sheet_y":52,"sort_order":68},"🍝":{"category":"Food & Drink","sheet_x":6,"sheet_y":53,"sort_order":69},"🍞":{"category":"Food & Drink","sheet_x":6,"sheet_y":54,"sort_order":32},"🍟":{"category":"Food & Drink","sheet_x":6,"sheet_y":55,"sort_order":45},"🍠":{"category":"Food & Drink","sheet_x":6,"sheet_y":56,"sort_order":70},"🍡":{"category":"Food & Drink","sheet_x":7,"sheet_y":0,"sort_order":76},"🍢":{"category":"Food & Drink","sheet_x":7,"sheet_y":1,"sort_order":71},"🍣":{"category":"Food & Drink","sheet_x":7,"sheet_y":2,"sort_order":72},"🍤":{"category":"Food & Drink","sheet_x":7,"sheet_y":3,"sort_order":73},"🍥":{"category":"Food & Drink","sheet_x":7,"sheet_y":4,"sort_order":74},"🍦":{"category":"Food & Drink","sheet_x":7,"sheet_y":5,"sort_order":85},"🍧":{"category":"Food & Drink","sheet_x":7,"sheet_y":6,"sort_order":86},"🍨":{"category":"Food & Drink","sheet_x":7,"sheet_y":7,"sort_order":87},"🍩":{"category":"Food & Drink","sheet_x":7,"sheet_y":8,"sort_order":88},"🍪":{"category":"Food & Drink","sheet_x":7,"sheet_y":9,"sort_order":89},"🍫":{"category":"Food & Drink","sheet_x":7,"sheet_y":10,"sort_order":94},"🍬":{"category":"Food & Drink","sheet_x":7,"sheet_y":11,"sort_order":95},"🍭":{"category":"Food & Drink","sheet_x":7,"sheet_y":12,"sort_order":96},"🍮":{"category":"Food & Drink","sheet_x":7,"sheet_y":13,"sort_order":97},"🍯":{"category":"Food & Drink","sheet_x":7,"sheet_y":14,"sort_order":98},"🍰":{"category":"Food & Drink","sheet_x":7,"sheet_y":15,"sort_order":91},"🍱":{"category":"Food & Drink","sheet_x":7,"sheet_y":16,"sort_order":63},"🍲":{"category":"Food & Drink","sheet_x":7,"sheet_y":17,"sort_order":56},"🍳":{"category":"Food & Drink","sheet_x":7,"sheet_y":18,"sort_order":54},"🍴":{"category":"Food & Drink","sheet_x":7,"sheet_y":19,"sort_order":118},"🍵":{"category":"Food & Drink","sheet_x":7,"sheet_y":20,"sort_order":102},"🍶":{"category":"Food & Drink","sheet_x":7,"sheet_y":21,"sort_order":103},"🍷":{"category":"Food & Drink","sheet_x":7,"sheet_y":22,"sort_order":105},"🍸":{"category":"Food & Drink","sheet_x":7,"sheet_y":23,"sort_order":106},"🍹":{"category":"Food & Drink","sheet_x":7,"sheet_y":24,"sort_order":107},"🍺":{"category":"Food & Drink","sheet_x":7,"sheet_y":25,"sort_order":108},"🍻":{"category":"Food & Drink","sheet_x":7,"sheet_y":26,"sort_order":109},"🍼":{"category":"Food & Drink","sheet_x":7,"sheet_y":27,"sort_order":99},"🍽️":{"category":"Food & Drink","sheet_x":7,"sheet_y":28,"sort_order":117},"🍾":{"category":"Food & Drink","sheet_x":7,"sheet_y":29,"sort_order":104},"🍿":{"category":"Food & Drink","sheet_x":7,"sheet_y":30,"sort_order":59},"🎀":{"category":"Activities","sheet_x":7,"sheet_y":31,"sort_order":17},"🎁":{"category":"Activities","sheet_x":7,"sheet_y":32,"sort_order":18},"🎂":{"category":"Food & Drink","sheet_x":7,"sheet_y":33,"sort_order":90},"🎃":{"category":"Activities","sheet_x":7,"sheet_y":34,"sort_order":1},"🎄":{"category":"Activities","sheet_x":7,"sheet_y":35,"sort_order":2},"🎅":{"category":"People & Body","sheet_x":7,"sheet_y":36,"sort_order":177},"🎆":{"category":"Activities","sheet_x":7,"sheet_y":42,"sort_order":3},"🎇":{"category":"Activities","sheet_x":7,"sheet_y":43,"sort_order":4},"🎈":{"category":"Activities","sheet_x":7,"sheet_y":44,"sort_order":7},"🎉":{"category":"Activities","sheet_x":7,"sheet_y":45,"sort_order":8},"🎊":{"category":"Activities","sheet_x":7,"sheet_y":46,"sort_order":9},"🎋":{"category":"Activities","sheet_x":7,"sheet_y":47,"sort_order":10},"🎌":{"category":"Flags","sheet_x":7,"sheet_y":48,"sort_order":3},"🎍":{"category":"Activities","sheet_x":7,"sheet_y":49,"sort_order":11},"🎎":{"category":"Activities","sheet_x":7,"sheet_y":50,"sort_order":12},"🎏":{"category":"Activities","sheet_x":7,"sheet_y":51,"sort_order":13},"🎐":{"category":"Activities","sheet_x":7,"sheet_y":52,"sort_order":14},"🎑":{"category":"Activities","sheet_x":7,"sheet_y":53,"sort_order":15},"🎒":{"category":"Objects","sheet_x":7,"sheet_y":54,"sort_order":25},"🎓":{"category":"Objects","sheet_x":7,"sheet_y":55,"sort_order":37},"🎖️":{"category":"Activities","sheet_x":7,"sheet_y":56,"sort_order":22},"🎗️":{"category":"Activities","sheet_x":8,"sheet_y":0,"sort_order":19},"🎙️":{"category":"Objects","sheet_x":8,"sheet_y":1,"sort_order":56},"🎚️":{"category":"Objects","sheet_x":8,"sheet_y":2,"sort_order":57},"🎛️":{"category":"Objects","sheet_x":8,"sheet_y":3,"sort_order":58},"🎞️":{"category":"Objects","sheet_x":8,"sheet_y":4,"sort_order":89},"🎟️":{"category":"Activities","sheet_x":8,"sheet_y":5,"sort_order":20},"🎠":{"category":"Travel & Places","sheet_x":8,"sheet_y":6,"sort_order":58},"🎡":{"category":"Travel & Places","sheet_x":8,"sheet_y":7,"sort_order":59},"🎢":{"category":"Travel & Places","sheet_x":8,"sheet_y":8,"sort_order":60},"🎣":{"category":"Activities","sheet_x":8,"sheet_y":9,"sort_order":49},"🎤":{"category":"Objects","sheet_x":8,"sheet_y":10,"sort_order":59},"🎥":{"category":"Objects","sheet_x":8,"sheet_y":11,"sort_order":88},"🎦":{"category":"Symbols","sheet_x":8,"sheet_y":12,"sort_order":91},"🎧":{"category":"Objects","sheet_x":8,"sheet_y":13,"sort_order":60},"🎨":{"category":"Activities","sheet_x":8,"sheet_y":14,"sort_order":77},"🎩":{"category":"Objects","sheet_x":8,"sheet_y":15,"sort_order":36},"🎪":{"category":"Travel & Places","sheet_x":8,"sheet_y":16,"sort_order":62},"🎫":{"category":"Activities","sheet_x":8,"sheet_y":17,"sort_order":21},"🎬":{"category":"Objects","sheet_x":8,"sheet_y":18,"sort_order":91},"🎭":{"category":"Activities","sheet_x":8,"sheet_y":19,"sort_order":75},"🎮":{"category":"Activities","sheet_x":8,"sheet_y":20,"sort_order":61},"🎯":{"category":"Activities","sheet_x":8,"sheet_y":21,"sort_order":55},"🎰":{"category":"Activities","sheet_x":8,"sheet_y":22,"sort_order":63},"🎱":{"category":"Activities","sheet_x":8,"sheet_y":23,"sort_order":58},"🎲":{"category":"Activities","sheet_x":8,"sheet_y":24,"sort_order":64},"🎳":{"category":"Activities","sheet_x":8,"sheet_y":25,"sort_order":37},"🎴":{"category":"Activities","sheet_x":8,"sheet_y":26,"sort_order":74},"🎵":{"category":"Objects","sheet_x":8,"sheet_y":27,"sort_order":54},"🎶":{"category":"Objects","sheet_x":8,"sheet_y":28,"sort_order":55},"🎷":{"category":"Objects","sheet_x":8,"sheet_y":29,"sort_order":62},"🎸":{"category":"Objects","sheet_x":8,"sheet_y":30,"sort_order":63},"🎹":{"category":"Objects","sheet_x":8,"sheet_y":31,"sort_order":64},"🎺":{"category":"Objects","sheet_x":8,"sheet_y":32,"sort_order":65},"🎻":{"category":"Objects","sheet_x":8,"sheet_y":33,"sort_order":66},"🎼":{"category":"Objects","sheet_x":8,"sheet_y":34,"sort_order":53},"🎽":{"category":"Activities","sheet_x":8,"sheet_y":35,"sort_order":51},"🎾":{"category":"Activities","sheet_x":8,"sheet_y":36,"sort_order":35},"🎿":{"category":"Activities","sheet_x":8,"sheet_y":37,"sort_order":52},"🏀":{"category":"Activities","sheet_x":8,"sheet_y":38,"sort_order":31},"🏁":{"category":"Flags","sheet_x":8,"sheet_y":39,"sort_order":1},"🏂":{"category":"People & Body","sheet_x":8,"sheet_y":40,"sort_order":248},"🏃‍♀️":{"category":"People & Body","sheet_x":8,"sheet_y":46,"sort_order":232},"🏃‍♂️":{"category":"People & Body","sheet_x":8,"sheet_y":52,"sort_order":231},"🏃":{"category":"People & Body","sheet_x":9,"sheet_y":1,"sort_order":230},"🏄‍♀️":{"category":"People & Body","sheet_x":9,"sheet_y":7,"sort_order":254},"🏄‍♂️":{"category":"People & Body","sheet_x":9,"sheet_y":13,"sort_order":253},"🏄":{"category":"People & Body","sheet_x":9,"sheet_y":19,"sort_order":252},"🏅":{"category":"Activities","sheet_x":9,"sheet_y":25,"sort_order":24},"🏆":{"category":"Activities","sheet_x":9,"sheet_y":26,"sort_order":23},"🏇":{"category":"People & Body","sheet_x":9,"sheet_y":27,"sort_order":246},"🏈":{"category":"Activities","sheet_x":9,"sheet_y":33,"sort_order":33},"🏉":{"category":"Activities","sheet_x":9,"sheet_y":34,"sort_order":34},"🏊‍♀️":{"category":"People & Body","sheet_x":9,"sheet_y":35,"sort_order":260},"🏊‍♂️":{"category":"People & Body","sheet_x":9,"sheet_y":41,"sort_order":259},"🏊":{"category":"People & Body","sheet_x":9,"sheet_y":47,"sort_order":258},"🏋️‍♀️":{"category":"People & Body","sheet_x":9,"sheet_y":53,"sort_order":266},"🏋️‍♂️":{"category":"People & Body","sheet_x":10,"sheet_y":2,"sort_order":265},"🏋️":{"category":"People & Body","sheet_x":10,"sheet_y":8,"sort_order":264},"🏌️‍♀️":{"category":"People & Body","sheet_x":10,"sheet_y":14,"sort_order":251},"🏌️‍♂️":{"category":"People & Body","sheet_x":10,"sheet_y":20,"sort_order":250},"🏌️":{"category":"People & Body","sheet_x":10,"sheet_y":26,"sort_order":249},"🏍️":{"category":"Travel & Places","sheet_x":10,"sheet_y":32,"sort_order":92},"🏎️":{"category":"Travel & Places","sheet_x":10,"sheet_y":33,"sort_order":91},"🏏":{"category":"Activities","sheet_x":10,"sheet_y":34,"sort_order":38},"🏐":{"category":"Activities","sheet_x":10,"sheet_y":35,"sort_order":32},"🏑":{"category":"Activities","sheet_x":10,"sheet_y":36,"sort_order":39},"🏒":{"category":"Activities","sheet_x":10,"sheet_y":37,"sort_order":40},"🏓":{"category":"Activities","sheet_x":10,"sheet_y":38,"sort_order":42},"🏔️":{"category":"Travel & Places","sheet_x":10,"sheet_y":39,"sort_order":8},"🏕️":{"category":"Travel & Places","sheet_x":10,"sheet_y":40,"sort_order":12},"🏖️":{"category":"Travel & Places","sheet_x":10,"sheet_y":41,"sort_order":13},"🏗️":{"category":"Travel & Places","sheet_x":10,"sheet_y":42,"sort_order":19},"🏘️":{"category":"Travel & Places","sheet_x":10,"sheet_y":43,"sort_order":21},"🏙️":{"category":"Travel & Places","sheet_x":10,"sheet_y":44,"sort_order":51},"🏚️":{"category":"Travel & Places","sheet_x":10,"sheet_y":45,"sort_order":22},"🏛️":{"category":"Travel & Places","sheet_x":10,"sheet_y":46,"sort_order":18},"🏜️":{"category":"Travel & Places","sheet_x":10,"sheet_y":47,"sort_order":14},"🏝️":{"category":"Travel & Places","sheet_x":10,"sheet_y":48,"sort_order":15},"🏞️":{"category":"Travel & Places","sheet_x":10,"sheet_y":49,"sort_order":16},"🏟️":{"category":"Travel & Places","sheet_x":10,"sheet_y":50,"sort_order":17},"🏠":{"category":"Travel & Places","sheet_x":10,"sheet_y":51,"sort_order":23},"🏡":{"category":"Travel & Places","sheet_x":10,"sheet_y":52,"sort_order":24},"🏢":{"category":"Travel & Places","sheet_x":10,"sheet_y":53,"sort_order":25},"🏣":{"category":"Travel & Places","sheet_x":10,"sheet_y":54,"sort_order":26},"🏤":{"category":"Travel & Places","sheet_x":10,"sheet_y":55,"sort_order":27},"🏥":{"category":"Travel & Places","sheet_x":10,"sheet_y":56,"sort_order":28},"🏦":{"category":"Travel & Places","sheet_x":11,"sheet_y":0,"sort_order":29},"🏧":{"category":"Symbols","sheet_x":11,"sheet_y":1,"sort_order":1},"🏨":{"category":"Travel & Places","sheet_x":11,"sheet_y":2,"sort_order":30},"🏩":{"category":"Travel & Places","sheet_x":11,"sheet_y":3,"sort_order":31},"🏪":{"category":"Travel & Places","sheet_x":11,"sheet_y":4,"sort_order":32},"🏫":{"category":"Travel & Places","sheet_x":11,"sheet_y":5,"sort_order":33},"🏬":{"category":"Travel & Places","sheet_x":11,"sheet_y":6,"sort_order":34},"🏭":{"category":"Travel & Places","sheet_x":11,"sheet_y":7,"sort_order":35},"🏮":{"category":"Objects","sheet_x":11,"sheet_y":8,"sort_order":102},"🏯":{"category":"Travel & Places","sheet_x":11,"sheet_y":9,"sort_order":36},"🏰":{"category":"Travel & Places","sheet_x":11,"sheet_y":10,"sort_order":37},"🏳️‍🌈":{"category":"Flags","sheet_x":11,"sheet_y":11,"sort_order":6},"🏳️":{"category":"Flags","sheet_x":11,"sheet_y":12,"sort_order":5},"🏴‍☠️":{"category":"Flags","sheet_x":11,"sheet_y":13,"sort_order":7},"🏴󠁧󠁢󠁥󠁮󠁧󠁿":{"category":"Flags","sheet_x":11,"sheet_y":14,"sort_order":266},"🏴󠁧󠁢󠁳󠁣󠁴󠁿":{"category":"Flags","sheet_x":11,"sheet_y":15,"sort_order":267},"🏴󠁧󠁢󠁷󠁬󠁳󠁿":{"category":"Flags","sheet_x":11,"sheet_y":16,"sort_order":268},"🏴":{"category":"Flags","sheet_x":11,"sheet_y":17,"sort_order":4},"🏵️":{"category":"Animals & Nature","sheet_x":11,"sheet_y":18,"sort_order":109},"🏷️":{"category":"Objects","sheet_x":11,"sheet_y":19,"sort_order":120},"🏸":{"category":"Activities","sheet_x":11,"sheet_y":20,"sort_order":43},"🏹":{"category":"Objects","sheet_x":11,"sheet_y":21,"sort_order":189},"🏺":{"category":"Food & Drink","sheet_x":11,"sheet_y":22,"sort_order":121},"🏻":{"category":"Skin Tones","sheet_x":11,"sheet_y":23,"sort_order":1},"🏼":{"category":"Skin Tones","sheet_x":11,"sheet_y":24,"sort_order":2},"🏽":{"category":"Skin Tones","sheet_x":11,"sheet_y":25,"sort_order":3},"🏾":{"category":"Skin Tones","sheet_x":11,"sheet_y":26,"sort_order":4},"🏿":{"category":"Skin Tones","sheet_x":11,"sheet_y":27,"sort_order":5},"🐀":{"category":"Animals & Nature","sheet_x":11,"sheet_y":28,"sort_order":44},"🐁":{"category":"Animals & Nature","sheet_x":11,"sheet_y":29,"sort_order":43},"🐂":{"category":"Animals & Nature","sheet_x":11,"sheet_y":30,"sort_order":25},"🐃":{"category":"Animals & Nature","sheet_x":11,"sheet_y":31,"sort_order":26},"🐄":{"category":"Animals & Nature","sheet_x":11,"sheet_y":32,"sort_order":27},"🐅":{"category":"Animals & Nature","sheet_x":11,"sheet_y":33,"sort_order":17},"🐆":{"category":"Animals & Nature","sheet_x":11,"sheet_y":34,"sort_order":18},"🐇":{"category":"Animals & Nature","sheet_x":11,"sheet_y":35,"sort_order":47},"🐈":{"category":"Animals & Nature","sheet_x":11,"sheet_y":36,"sort_order":14},"🐉":{"category":"Animals & Nature","sheet_x":11,"sheet_y":37,"sort_order":82},"🐊":{"category":"Animals & Nature","sheet_x":11,"sheet_y":38,"sort_order":77},"🐋":{"category":"Animals & Nature","sheet_x":11,"sheet_y":39,"sort_order":86},"🐌":{"category":"Animals & Nature","sheet_x":11,"sheet_y":40,"sort_order":94},"🐍":{"category":"Animals & Nature","sheet_x":11,"sheet_y":41,"sort_order":80},"🐎":{"category":"Animals & Nature","sheet_x":11,"sheet_y":42,"sort_order":20},"🐏":{"category":"Animals & Nature","sheet_x":11,"sheet_y":43,"sort_order":32},"🐐":{"category":"Animals & Nature","sheet_x":11,"sheet_y":44,"sort_order":34},"🐑":{"category":"Animals & Nature","sheet_x":11,"sheet_y":45,"sort_order":33},"🐒":{"category":"Animals & Nature","sheet_x":11,"sheet_y":46,"sort_order":2},"🐓":{"category":"Animals & Nature","sheet_x":11,"sheet_y":47,"sort_order":62},"🐔":{"category":"Animals & Nature","sheet_x":11,"sheet_y":48,"sort_order":61},"🐕‍🦺":{"category":"Animals & Nature","sheet_x":11,"sheet_y":49,"sort_order":8},"🐕":{"category":"Animals & Nature","sheet_x":11,"sheet_y":50,"sort_order":6},"🐖":{"category":"Animals & Nature","sheet_x":11,"sheet_y":51,"sort_order":29},"🐗":{"category":"Animals & Nature","sheet_x":11,"sheet_y":52,"sort_order":30},"🐘":{"category":"Animals & Nature","sheet_x":11,"sheet_y":53,"sort_order":39},"🐙":{"category":"Animals & Nature","sheet_x":11,"sheet_y":54,"sort_order":92},"🐚":{"category":"Animals & Nature","sheet_x":11,"sheet_y":55,"sort_order":93},"🐛":{"category":"Animals & Nature","sheet_x":11,"sheet_y":56,"sort_order":96},"🐜":{"category":"Animals & Nature","sheet_x":12,"sheet_y":0,"sort_order":97},"🐝":{"category":"Animals & Nature","sheet_x":12,"sheet_y":1,"sort_order":98},"🐞":{"category":"Animals & Nature","sheet_x":12,"sheet_y":2,"sort_order":99},"🐟":{"category":"Animals & Nature","sheet_x":12,"sheet_y":3,"sort_order":88},"🐠":{"category":"Animals & Nature","sheet_x":12,"sheet_y":4,"sort_order":89},"🐡":{"category":"Animals & Nature","sheet_x":12,"sheet_y":5,"sort_order":90},"🐢":{"category":"Animals & Nature","sheet_x":12,"sheet_y":6,"sort_order":78},"🐣":{"category":"Animals & Nature","sheet_x":12,"sheet_y":7,"sort_order":63},"🐤":{"category":"Animals & Nature","sheet_x":12,"sheet_y":8,"sort_order":64},"🐥":{"category":"Animals & Nature","sheet_x":12,"sheet_y":9,"sort_order":65},"🐦":{"category":"Animals & Nature","sheet_x":12,"sheet_y":10,"sort_order":66},"🐧":{"category":"Animals & Nature","sheet_x":12,"sheet_y":11,"sort_order":67},"🐨":{"category":"Animals & Nature","sheet_x":12,"sheet_y":12,"sort_order":52},"🐩":{"category":"Animals & Nature","sheet_x":12,"sheet_y":13,"sort_order":9},"🐪":{"category":"Animals & Nature","sheet_x":12,"sheet_y":14,"sort_order":35},"🐫":{"category":"Animals & Nature","sheet_x":12,"sheet_y":15,"sort_order":36},"🐬":{"category":"Animals & Nature","sheet_x":12,"sheet_y":16,"sort_order":87},"🐭":{"category":"Animals & Nature","sheet_x":12,"sheet_y":17,"sort_order":42},"🐮":{"category":"Animals & Nature","sheet_x":12,"sheet_y":18,"sort_order":24},"🐯":{"category":"Animals & Nature","sheet_x":12,"sheet_y":19,"sort_order":16},"🐰":{"category":"Animals & Nature","sheet_x":12,"sheet_y":20,"sort_order":46},"🐱":{"category":"Animals & Nature","sheet_x":12,"sheet_y":21,"sort_order":13},"🐲":{"category":"Animals & Nature","sheet_x":12,"sheet_y":22,"sort_order":81},"🐳":{"category":"Animals & Nature","sheet_x":12,"sheet_y":23,"sort_order":85},"🐴":{"category":"Animals & Nature","sheet_x":12,"sheet_y":24,"sort_order":19},"🐵":{"category":"Animals & Nature","sheet_x":12,"sheet_y":25,"sort_order":1},"🐶":{"category":"Animals & Nature","sheet_x":12,"sheet_y":26,"sort_order":5},"🐷":{"category":"Animals & Nature","sheet_x":12,"sheet_y":27,"sort_order":28},"🐸":{"category":"Animals & Nature","sheet_x":12,"sheet_y":28,"sort_order":76},"🐹":{"category":"Animals & Nature","sheet_x":12,"sheet_y":29,"sort_order":45},"🐺":{"category":"Animals & Nature","sheet_x":12,"sheet_y":30,"sort_order":10},"🐻":{"category":"Animals & Nature","sheet_x":12,"sheet_y":31,"sort_order":51},"🐼":{"category":"Animals & Nature","sheet_x":12,"sheet_y":32,"sort_order":53},"🐽":{"category":"Animals & Nature","sheet_x":12,"sheet_y":33,"sort_order":31},"🐾":{"category":"Animals & Nature","sheet_x":12,"sheet_y":34,"sort_order":59},"🐿️":{"category":"Animals & Nature","sheet_x":12,"sheet_y":35,"sort_order":48},"👀":{"category":"People & Body","sheet_x":12,"sheet_y":36,"sort_order":45},"👁️‍🗨️":{"category":"Smileys & Emotion","sheet_x":12,"sheet_y":37,"sort_order":145},"👁️":{"category":"People & Body","sheet_x":12,"sheet_y":38,"sort_order":46},"👂":{"category":"People & Body","sheet_x":12,"sheet_y":39,"sort_order":39},"👃":{"category":"People & Body","sheet_x":12,"sheet_y":45,"sort_order":41},"👄":{"category":"People & Body","sheet_x":12,"sheet_y":51,"sort_order":48},"👅":{"category":"People & Body","sheet_x":12,"sheet_y":52,"sort_order":47},"👆":{"category":"People & Body","sheet_x":12,"sheet_y":53,"sort_order":15},"👇":{"category":"People & Body","sheet_x":13,"sheet_y":2,"sort_order":17},"👈":{"category":"People & Body","sheet_x":13,"sheet_y":8,"sort_order":13},"👉":{"category":"People & Body","sheet_x":13,"sheet_y":14,"sort_order":14},"👊":{"category":"People & Body","sheet_x":13,"sheet_y":20,"sort_order":22},"👋":{"category":"People & Body","sheet_x":13,"sheet_y":26,"sort_order":1},"👌":{"category":"People & Body","sheet_x":13,"sheet_y":32,"sort_order":6},"👍":{"category":"People & Body","sheet_x":13,"sheet_y":38,"sort_order":19},"👎":{"category":"People & Body","sheet_x":13,"sheet_y":44,"sort_order":20},"👏":{"category":"People & Body","sheet_x":13,"sheet_y":50,"sort_order":25},"👐":{"category":"People & Body","sheet_x":13,"sheet_y":56,"sort_order":27},"👑":{"category":"Objects","sheet_x":14,"sheet_y":5,"sort_order":34},"👒":{"category":"Objects","sheet_x":14,"sheet_y":6,"sort_order":35},"👓":{"category":"Objects","sheet_x":14,"sheet_y":7,"sort_order":1},"👔":{"category":"Objects","sheet_x":14,"sheet_y":8,"sort_order":6},"👕":{"category":"Objects","sheet_x":14,"sheet_y":9,"sort_order":7},"👖":{"category":"Objects","sheet_x":14,"sheet_y":10,"sort_order":8},"👗":{"category":"Objects","sheet_x":14,"sheet_y":11,"sort_order":13},"👘":{"category":"Objects","sheet_x":14,"sheet_y":12,"sort_order":14},"👙":{"category":"Objects","sheet_x":14,"sheet_y":13,"sort_order":19},"👚":{"category":"Objects","sheet_x":14,"sheet_y":14,"sort_order":20},"👛":{"category":"Objects","sheet_x":14,"sheet_y":15,"sort_order":21},"👜":{"category":"Objects","sheet_x":14,"sheet_y":16,"sort_order":22},"👝":{"category":"Objects","sheet_x":14,"sheet_y":17,"sort_order":23},"👞":{"category":"Objects","sheet_x":14,"sheet_y":18,"sort_order":26},"👟":{"category":"Objects","sheet_x":14,"sheet_y":19,"sort_order":27},"👠":{"category":"Objects","sheet_x":14,"sheet_y":20,"sort_order":30},"👡":{"category":"Objects","sheet_x":14,"sheet_y":21,"sort_order":31},"👢":{"category":"Objects","sheet_x":14,"sheet_y":22,"sort_order":33},"👣":{"category":"People & Body","sheet_x":14,"sheet_y":23,"sort_order":334},"👤":{"category":"People & Body","sheet_x":14,"sheet_y":24,"sort_order":332},"👥":{"category":"People & Body","sheet_x":14,"sheet_y":25,"sort_order":333},"👦":{"category":"People & Body","sheet_x":14,"sheet_y":26,"sort_order":51},"👧":{"category":"People & Body","sheet_x":14,"sheet_y":32,"sort_order":52},"👨‍🌾":{"category":"People & Body","sheet_x":14,"sheet_y":38,"sort_order":118},"👨‍🍳":{"category":"People & Body","sheet_x":14,"sheet_y":44,"sort_order":121},"👨‍🎓":{"category":"People & Body","sheet_x":14,"sheet_y":50,"sort_order":109},"👨‍🎤":{"category":"People & Body","sheet_x":14,"sheet_y":56,"sort_order":139},"👨‍🎨":{"category":"People & Body","sheet_x":15,"sheet_y":5,"sort_order":142},"👨‍🏫":{"category":"People & Body","sheet_x":15,"sheet_y":11,"sort_order":112},"👨‍🏭":{"category":"People & Body","sheet_x":15,"sheet_y":17,"sort_order":127},"👨‍👦‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":23,"sort_order":322},"👨‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":24,"sort_order":321},"👨‍👧‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":25,"sort_order":324},"👨‍👧‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":26,"sort_order":325},"👨‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":27,"sort_order":323},"👨‍👨‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":28,"sort_order":311},"👨‍👨‍👦‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":29,"sort_order":314},"👨‍👨‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":30,"sort_order":312},"👨‍👨‍👧‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":31,"sort_order":313},"👨‍👨‍👧‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":32,"sort_order":315},"👨‍👩‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":33,"sort_order":306},"👨‍👩‍👦‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":34,"sort_order":309},"👨‍👩‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":35,"sort_order":307},"👨‍👩‍👧‍👦":{"category":"People & Body","sheet_x":15,"sheet_y":36,"sort_order":308},"👨‍👩‍👧‍👧":{"category":"People & Body","sheet_x":15,"sheet_y":37,"sort_order":310},"👨‍💻":{"category":"People & Body","sheet_x":15,"sheet_y":38,"sort_order":136},"👨‍💼":{"category":"People & Body","sheet_x":15,"sheet_y":44,"sort_order":130},"👨‍🔧":{"category":"People & Body","sheet_x":15,"sheet_y":50,"sort_order":124},"👨‍🔬":{"category":"People & Body","sheet_x":15,"sheet_y":56,"sort_order":133},"👨‍🚀":{"category":"People & Body","sheet_x":16,"sheet_y":5,"sort_order":148},"👨‍🚒":{"category":"People & Body","sheet_x":16,"sheet_y":11,"sort_order":151},"👨‍🦯":{"category":"People & Body","sheet_x":16,"sheet_y":17,"sort_order":222},"👨‍🦰":{"category":"People & Body","sheet_x":16,"sheet_y":23,"sort_order":57},"👨‍🦱":{"category":"People & Body","sheet_x":16,"sheet_y":29,"sort_order":58},"👨‍🦲":{"category":"People & Body","sheet_x":16,"sheet_y":35,"sort_order":60},"👨‍🦳":{"category":"People & Body","sheet_x":16,"sheet_y":41,"sort_order":59},"👨‍🦼":{"category":"People & Body","sheet_x":16,"sheet_y":47,"sort_order":225},"👨‍🦽":{"category":"People & Body","sheet_x":16,"sheet_y":53,"sort_order":228},"👨‍⚕️":{"category":"People & Body","sheet_x":17,"sheet_y":2,"sort_order":106},"👨‍⚖️":{"category":"People & Body","sheet_x":17,"sheet_y":8,"sort_order":115},"👨‍✈️":{"category":"People & Body","sheet_x":17,"sheet_y":14,"sort_order":145},"👨‍❤️‍👨":{"category":"People & Body","sheet_x":17,"sheet_y":20,"sort_order":303},"👨‍❤️‍💋‍👨":{"category":"People & Body","sheet_x":17,"sheet_y":21,"sort_order":299},"👨":{"category":"People & Body","sheet_x":17,"sheet_y":22,"sort_order":55},"👩‍🌾":{"category":"People & Body","sheet_x":17,"sheet_y":28,"sort_order":119},"👩‍🍳":{"category":"People & Body","sheet_x":17,"sheet_y":34,"sort_order":122},"👩‍🎓":{"category":"People & Body","sheet_x":17,"sheet_y":40,"sort_order":110},"👩‍🎤":{"category":"People & Body","sheet_x":17,"sheet_y":46,"sort_order":140},"👩‍🎨":{"category":"People & Body","sheet_x":17,"sheet_y":52,"sort_order":143},"👩‍🏫":{"category":"People & Body","sheet_x":18,"sheet_y":1,"sort_order":113},"👩‍🏭":{"category":"People & Body","sheet_x":18,"sheet_y":7,"sort_order":128},"👩‍👦‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":13,"sort_order":327},"👩‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":14,"sort_order":326},"👩‍👧‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":15,"sort_order":329},"👩‍👧‍👧":{"category":"People & Body","sheet_x":18,"sheet_y":16,"sort_order":330},"👩‍👧":{"category":"People & Body","sheet_x":18,"sheet_y":17,"sort_order":328},"👩‍👩‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":18,"sort_order":316},"👩‍👩‍👦‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":19,"sort_order":319},"👩‍👩‍👧":{"category":"People & Body","sheet_x":18,"sheet_y":20,"sort_order":317},"👩‍👩‍👧‍👦":{"category":"People & Body","sheet_x":18,"sheet_y":21,"sort_order":318},"👩‍👩‍👧‍👧":{"category":"People & Body","sheet_x":18,"sheet_y":22,"sort_order":320},"👩‍💻":{"category":"People & Body","sheet_x":18,"sheet_y":23,"sort_order":137},"👩‍💼":{"category":"People & Body","sheet_x":18,"sheet_y":29,"sort_order":131},"👩‍🔧":{"category":"People & Body","sheet_x":18,"sheet_y":35,"sort_order":125},"👩‍🔬":{"category":"People & Body","sheet_x":18,"sheet_y":41,"sort_order":134},"👩‍🚀":{"category":"People & Body","sheet_x":18,"sheet_y":47,"sort_order":149},"👩‍🚒":{"category":"People & Body","sheet_x":18,"sheet_y":53,"sort_order":152},"👩‍🦯":{"category":"People & Body","sheet_x":19,"sheet_y":2,"sort_order":223},"👩‍🦰":{"category":"People & Body","sheet_x":19,"sheet_y":8,"sort_order":62},"👩‍🦱":{"category":"People & Body","sheet_x":19,"sheet_y":14,"sort_order":64},"👩‍🦲":{"category":"People & Body","sheet_x":19,"sheet_y":20,"sort_order":68},"👩‍🦳":{"category":"People & Body","sheet_x":19,"sheet_y":26,"sort_order":66},"👩‍🦼":{"category":"People & Body","sheet_x":19,"sheet_y":32,"sort_order":226},"👩‍🦽":{"category":"People & Body","sheet_x":19,"sheet_y":38,"sort_order":229},"👩‍⚕️":{"category":"People & Body","sheet_x":19,"sheet_y":44,"sort_order":107},"👩‍⚖️":{"category":"People & Body","sheet_x":19,"sheet_y":50,"sort_order":116},"👩‍✈️":{"category":"People & Body","sheet_x":19,"sheet_y":56,"sort_order":146},"👩‍❤️‍👨":{"category":"People & Body","sheet_x":20,"sheet_y":5,"sort_order":302},"👩‍❤️‍👩":{"category":"People & Body","sheet_x":20,"sheet_y":6,"sort_order":304},"👩‍❤️‍💋‍👨":{"category":"People & Body","sheet_x":20,"sheet_y":7,"sort_order":298},"👩‍❤️‍💋‍👩":{"category":"People & Body","sheet_x":20,"sheet_y":8,"sort_order":300},"👩":{"category":"People & Body","sheet_x":20,"sheet_y":9,"sort_order":61},"👪":{"category":"People & Body","sheet_x":20,"sheet_y":15,"sort_order":305},"👫":{"category":"People & Body","sheet_x":20,"sheet_y":16,"sort_order":295},"👬":{"category":"People & Body","sheet_x":20,"sheet_y":42,"sort_order":296},"👭":{"category":"People & Body","sheet_x":21,"sheet_y":11,"sort_order":294},"👮‍♀️":{"category":"People & Body","sheet_x":21,"sheet_y":37,"sort_order":155},"👮‍♂️":{"category":"People & Body","sheet_x":21,"sheet_y":43,"sort_order":154},"👮":{"category":"People & Body","sheet_x":21,"sheet_y":49,"sort_order":153},"👯‍♀️":{"category":"People & Body","sheet_x":21,"sheet_y":55,"sort_order":238},"👯‍♂️":{"category":"People & Body","sheet_x":21,"sheet_y":56,"sort_order":237},"👯":{"category":"People & Body","sheet_x":22,"sheet_y":0,"sort_order":236},"👰":{"category":"People & Body","sheet_x":22,"sheet_y":1,"sort_order":173},"👱‍♀️":{"category":"People & Body","sheet_x":22,"sheet_y":7,"sort_order":70},"👱‍♂️":{"category":"People & Body","sheet_x":22,"sheet_y":13,"sort_order":71},"👱":{"category":"People & Body","sheet_x":22,"sheet_y":19,"sort_order":54},"👲":{"category":"People & Body","sheet_x":22,"sheet_y":25,"sort_order":170},"👳‍♀️":{"category":"People & Body","sheet_x":22,"sheet_y":31,"sort_order":169},"👳‍♂️":{"category":"People & Body","sheet_x":22,"sheet_y":37,"sort_order":168},"👳":{"category":"People & Body","sheet_x":22,"sheet_y":43,"sort_order":167},"👴":{"category":"People & Body","sheet_x":22,"sheet_y":49,"sort_order":73},"👵":{"category":"People & Body","sheet_x":22,"sheet_y":55,"sort_order":74},"👶":{"category":"People & Body","sheet_x":23,"sheet_y":4,"sort_order":49},"👷‍♀️":{"category":"People & Body","sheet_x":23,"sheet_y":10,"sort_order":164},"👷‍♂️":{"category":"People & Body","sheet_x":23,"sheet_y":16,"sort_order":163},"👷":{"category":"People & Body","sheet_x":23,"sheet_y":22,"sort_order":162},"👸":{"category":"People & Body","sheet_x":23,"sheet_y":28,"sort_order":166},"👹":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":34,"sort_order":97},"👺":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":35,"sort_order":98},"👻":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":36,"sort_order":99},"👼":{"category":"People & Body","sheet_x":23,"sheet_y":37,"sort_order":176},"👽":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":43,"sort_order":100},"👾":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":44,"sort_order":101},"👿":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":45,"sort_order":92},"💀":{"category":"Smileys & Emotion","sheet_x":23,"sheet_y":46,"sort_order":93},"💁‍♀️":{"category":"People & Body","sheet_x":23,"sheet_y":47,"sort_order":89},"💁‍♂️":{"category":"People & Body","sheet_x":23,"sheet_y":53,"sort_order":88},"💁":{"category":"People & Body","sheet_x":24,"sheet_y":2,"sort_order":87},"💂‍♀️":{"category":"People & Body","sheet_x":24,"sheet_y":8,"sort_order":161},"💂‍♂️":{"category":"People & Body","sheet_x":24,"sheet_y":14,"sort_order":160},"💂":{"category":"People & Body","sheet_x":24,"sheet_y":20,"sort_order":159},"💃":{"category":"People & Body","sheet_x":24,"sheet_y":26,"sort_order":233},"💄":{"category":"Objects","sheet_x":24,"sheet_y":32,"sort_order":41},"💅":{"category":"People & Body","sheet_x":24,"sheet_y":33,"sort_order":32},"💆‍♀️":{"category":"People & Body","sheet_x":24,"sheet_y":39,"sort_order":208},"💆‍♂️":{"category":"People & Body","sheet_x":24,"sheet_y":45,"sort_order":207},"💆":{"category":"People & Body","sheet_x":24,"sheet_y":51,"sort_order":206},"💇‍♀️":{"category":"People & Body","sheet_x":25,"sheet_y":0,"sort_order":211},"💇‍♂️":{"category":"People & Body","sheet_x":25,"sheet_y":6,"sort_order":210},"💇":{"category":"People & Body","sheet_x":25,"sheet_y":12,"sort_order":209},"💈":{"category":"Travel & Places","sheet_x":25,"sheet_y":18,"sort_order":61},"💉":{"category":"Objects","sheet_x":25,"sheet_y":19,"sort_order":208},"💊":{"category":"Objects","sheet_x":25,"sheet_y":20,"sort_order":210},"💋":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":21,"sort_order":115},"💌":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":22,"sort_order":116},"💍":{"category":"Objects","sheet_x":25,"sheet_y":23,"sort_order":42},"💎":{"category":"Objects","sheet_x":25,"sheet_y":24,"sort_order":43},"💏":{"category":"People & Body","sheet_x":25,"sheet_y":25,"sort_order":297},"💐":{"category":"Animals & Nature","sheet_x":25,"sheet_y":26,"sort_order":106},"💑":{"category":"People & Body","sheet_x":25,"sheet_y":27,"sort_order":301},"💒":{"category":"Travel & Places","sheet_x":25,"sheet_y":28,"sort_order":38},"💓":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":29,"sort_order":121},"💔":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":30,"sort_order":126},"💕":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":31,"sort_order":123},"💖":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":32,"sort_order":119},"💗":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":33,"sort_order":120},"💘":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":34,"sort_order":117},"💙":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":35,"sort_order":131},"💚":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":36,"sort_order":130},"💛":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":37,"sort_order":129},"💜":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":38,"sort_order":132},"💝":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":39,"sort_order":118},"💞":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":40,"sort_order":122},"💟":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":41,"sort_order":124},"💠":{"category":"Symbols","sheet_x":25,"sheet_y":42,"sort_order":214},"💡":{"category":"Objects","sheet_x":25,"sheet_y":43,"sort_order":100},"💢":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":44,"sort_order":137},"💣":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":45,"sort_order":143},"💤":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":46,"sort_order":149},"💥":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":47,"sort_order":138},"💦":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":48,"sort_order":140},"💧":{"category":"Travel & Places","sheet_x":25,"sheet_y":49,"sort_order":209},"💨":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":50,"sort_order":141},"💩":{"category":"Smileys & Emotion","sheet_x":25,"sheet_y":51,"sort_order":95},"💪":{"category":"People & Body","sheet_x":25,"sheet_y":52,"sort_order":34},"💫":{"category":"Smileys & Emotion","sheet_x":26,"sheet_y":1,"sort_order":139},"💬":{"category":"Smileys & Emotion","sheet_x":26,"sheet_y":2,"sort_order":144},"💭":{"category":"Smileys & Emotion","sheet_x":26,"sheet_y":3,"sort_order":148},"💮":{"category":"Animals & Nature","sheet_x":26,"sheet_y":4,"sort_order":108},"💯":{"category":"Smileys & Emotion","sheet_x":26,"sheet_y":5,"sort_order":136},"💰":{"category":"Objects","sheet_x":26,"sheet_y":6,"sort_order":121},"💱":{"category":"Objects","sheet_x":26,"sheet_y":7,"sort_order":130},"💲":{"category":"Objects","sheet_x":26,"sheet_y":8,"sort_order":131},"💳":{"category":"Objects","sheet_x":26,"sheet_y":9,"sort_order":127},"💴":{"category":"Objects","sheet_x":26,"sheet_y":10,"sort_order":122},"💵":{"category":"Objects","sheet_x":26,"sheet_y":11,"sort_order":123},"💶":{"category":"Objects","sheet_x":26,"sheet_y":12,"sort_order":124},"💷":{"category":"Objects","sheet_x":26,"sheet_y":13,"sort_order":125},"💸":{"category":"Objects","sheet_x":26,"sheet_y":14,"sort_order":126},"💹":{"category":"Objects","sheet_x":26,"sheet_y":15,"sort_order":129},"💺":{"category":"Travel & Places","sheet_x":26,"sheet_y":16,"sort_order":123},"💻":{"category":"Objects","sheet_x":26,"sheet_y":17,"sort_order":77},"💼":{"category":"Objects","sheet_x":26,"sheet_y":18,"sort_order":152},"💽":{"category":"Objects","sheet_x":26,"sheet_y":19,"sort_order":83},"💾":{"category":"Objects","sheet_x":26,"sheet_y":20,"sort_order":84},"💿":{"category":"Objects","sheet_x":26,"sheet_y":21,"sort_order":85},"📀":{"category":"Objects","sheet_x":26,"sheet_y":22,"sort_order":86},"📁":{"category":"Objects","sheet_x":26,"sheet_y":23,"sort_order":153},"📂":{"category":"Objects","sheet_x":26,"sheet_y":24,"sort_order":154},"📃":{"category":"Objects","sheet_x":26,"sheet_y":25,"sort_order":113},"📄":{"category":"Objects","sheet_x":26,"sheet_y":26,"sort_order":115},"📅":{"category":"Objects","sheet_x":26,"sheet_y":27,"sort_order":156},"📆":{"category":"Objects","sheet_x":26,"sheet_y":28,"sort_order":157},"📇":{"category":"Objects","sheet_x":26,"sheet_y":29,"sort_order":160},"📈":{"category":"Objects","sheet_x":26,"sheet_y":30,"sort_order":161},"📉":{"category":"Objects","sheet_x":26,"sheet_y":31,"sort_order":162},"📊":{"category":"Objects","sheet_x":26,"sheet_y":32,"sort_order":163},"📋":{"category":"Objects","sheet_x":26,"sheet_y":33,"sort_order":164},"📌":{"category":"Objects","sheet_x":26,"sheet_y":34,"sort_order":165},"📍":{"category":"Objects","sheet_x":26,"sheet_y":35,"sort_order":166},"📎":{"category":"Objects","sheet_x":26,"sheet_y":36,"sort_order":167},"📏":{"category":"Objects","sheet_x":26,"sheet_y":37,"sort_order":169},"📐":{"category":"Objects","sheet_x":26,"sheet_y":38,"sort_order":170},"📑":{"category":"Objects","sheet_x":26,"sheet_y":39,"sort_order":118},"📒":{"category":"Objects","sheet_x":26,"sheet_y":40,"sort_order":112},"📓":{"category":"Objects","sheet_x":26,"sheet_y":41,"sort_order":111},"📔":{"category":"Objects","sheet_x":26,"sheet_y":42,"sort_order":104},"📕":{"category":"Objects","sheet_x":26,"sheet_y":43,"sort_order":105},"📖":{"category":"Objects","sheet_x":26,"sheet_y":44,"sort_order":106},"📗":{"category":"Objects","sheet_x":26,"sheet_y":45,"sort_order":107},"📘":{"category":"Objects","sheet_x":26,"sheet_y":46,"sort_order":108},"📙":{"category":"Objects","sheet_x":26,"sheet_y":47,"sort_order":109},"📚":{"category":"Objects","sheet_x":26,"sheet_y":48,"sort_order":110},"📛":{"category":"Symbols","sheet_x":26,"sheet_y":49,"sort_order":104},"📜":{"category":"Objects","sheet_x":26,"sheet_y":50,"sort_order":114},"📝":{"category":"Objects","sheet_x":26,"sheet_y":51,"sort_order":151},"📞":{"category":"Objects","sheet_x":26,"sheet_y":52,"sort_order":72},"📟":{"category":"Objects","sheet_x":26,"sheet_y":53,"sort_order":73},"📠":{"category":"Objects","sheet_x":26,"sheet_y":54,"sort_order":74},"📡":{"category":"Objects","sheet_x":26,"sheet_y":55,"sort_order":207},"📢":{"category":"Objects","sheet_x":26,"sheet_y":56,"sort_order":48},"📣":{"category":"Objects","sheet_x":27,"sheet_y":0,"sort_order":49},"📤":{"category":"Objects","sheet_x":27,"sheet_y":1,"sort_order":136},"📥":{"category":"Objects","sheet_x":27,"sheet_y":2,"sort_order":137},"📦":{"category":"Objects","sheet_x":27,"sheet_y":3,"sort_order":138},"📧":{"category":"Objects","sheet_x":27,"sheet_y":4,"sort_order":133},"📨":{"category":"Objects","sheet_x":27,"sheet_y":5,"sort_order":134},"📩":{"category":"Objects","sheet_x":27,"sheet_y":6,"sort_order":135},"📪":{"category":"Objects","sheet_x":27,"sheet_y":7,"sort_order":140},"📫":{"category":"Objects","sheet_x":27,"sheet_y":8,"sort_order":139},"📬":{"category":"Objects","sheet_x":27,"sheet_y":9,"sort_order":141},"📭":{"category":"Objects","sheet_x":27,"sheet_y":10,"sort_order":142},"📮":{"category":"Objects","sheet_x":27,"sheet_y":11,"sort_order":143},"📯":{"category":"Objects","sheet_x":27,"sheet_y":12,"sort_order":50},"📰":{"category":"Objects","sheet_x":27,"sheet_y":13,"sort_order":116},"📱":{"category":"Objects","sheet_x":27,"sheet_y":14,"sort_order":69},"📲":{"category":"Objects","sheet_x":27,"sheet_y":15,"sort_order":70},"📳":{"category":"Symbols","sheet_x":27,"sheet_y":16,"sort_order":95},"📴":{"category":"Symbols","sheet_x":27,"sheet_y":17,"sort_order":96},"📵":{"category":"Symbols","sheet_x":27,"sheet_y":18,"sort_order":23},"📶":{"category":"Symbols","sheet_x":27,"sheet_y":19,"sort_order":94},"📷":{"category":"Objects","sheet_x":27,"sheet_y":20,"sort_order":93},"📸":{"category":"Objects","sheet_x":27,"sheet_y":21,"sort_order":94},"📹":{"category":"Objects","sheet_x":27,"sheet_y":22,"sort_order":95},"📺":{"category":"Objects","sheet_x":27,"sheet_y":23,"sort_order":92},"📻":{"category":"Objects","sheet_x":27,"sheet_y":24,"sort_order":61},"📼":{"category":"Objects","sheet_x":27,"sheet_y":25,"sort_order":96},"📽️":{"category":"Objects","sheet_x":27,"sheet_y":26,"sort_order":90},"📿":{"category":"Objects","sheet_x":27,"sheet_y":27,"sort_order":40},"🔀":{"category":"Symbols","sheet_x":27,"sheet_y":28,"sort_order":73},"🔁":{"category":"Symbols","sheet_x":27,"sheet_y":29,"sort_order":74},"🔂":{"category":"Symbols","sheet_x":27,"sheet_y":30,"sort_order":75},"🔃":{"category":"Symbols","sheet_x":27,"sheet_y":31,"sort_order":41},"🔄":{"category":"Symbols","sheet_x":27,"sheet_y":32,"sort_order":42},"🔅":{"category":"Symbols","sheet_x":27,"sheet_y":33,"sort_order":92},"🔆":{"category":"Symbols","sheet_x":27,"sheet_y":34,"sort_order":93},"🔇":{"category":"Objects","sheet_x":27,"sheet_y":35,"sort_order":44},"🔈":{"category":"Objects","sheet_x":27,"sheet_y":36,"sort_order":45},"🔉":{"category":"Objects","sheet_x":27,"sheet_y":37,"sort_order":46},"🔊":{"category":"Objects","sheet_x":27,"sheet_y":38,"sort_order":47},"🔋":{"category":"Objects","sheet_x":27,"sheet_y":39,"sort_order":75},"🔌":{"category":"Objects","sheet_x":27,"sheet_y":40,"sort_order":76},"🔍":{"category":"Objects","sheet_x":27,"sheet_y":41,"sort_order":97},"🔎":{"category":"Objects","sheet_x":27,"sheet_y":42,"sort_order":98},"🔏":{"category":"Objects","sheet_x":27,"sheet_y":43,"sort_order":177},"🔐":{"category":"Objects","sheet_x":27,"sheet_y":44,"sort_order":178},"🔑":{"category":"Objects","sheet_x":27,"sheet_y":45,"sort_order":179},"🔒":{"category":"Objects","sheet_x":27,"sheet_y":46,"sort_order":175},"🔓":{"category":"Objects","sheet_x":27,"sheet_y":47,"sort_order":176},"🔔":{"category":"Objects","sheet_x":27,"sheet_y":48,"sort_order":51},"🔕":{"category":"Objects","sheet_x":27,"sheet_y":49,"sort_order":52},"🔖":{"category":"Objects","sheet_x":27,"sheet_y":50,"sort_order":119},"🔗":{"category":"Objects","sheet_x":27,"sheet_y":51,"sort_order":197},"🔘":{"category":"Symbols","sheet_x":27,"sheet_y":52,"sort_order":215},"🔙":{"category":"Symbols","sheet_x":27,"sheet_y":53,"sort_order":43},"🔚":{"category":"Symbols","sheet_x":27,"sheet_y":54,"sort_order":44},"🔛":{"category":"Symbols","sheet_x":27,"sheet_y":55,"sort_order":45},"🔜":{"category":"Symbols","sheet_x":27,"sheet_y":56,"sort_order":46},"🔝":{"category":"Symbols","sheet_x":28,"sheet_y":0,"sort_order":47},"🔞":{"category":"Symbols","sheet_x":28,"sheet_y":1,"sort_order":24},"🔟":{"category":"Symbols","sheet_x":28,"sheet_y":2,"sort_order":144},"🔠":{"category":"Symbols","sheet_x":28,"sheet_y":3,"sort_order":145},"🔡":{"category":"Symbols","sheet_x":28,"sheet_y":4,"sort_order":146},"🔢":{"category":"Symbols","sheet_x":28,"sheet_y":5,"sort_order":147},"🔣":{"category":"Symbols","sheet_x":28,"sheet_y":6,"sort_order":148},"🔤":{"category":"Symbols","sheet_x":28,"sheet_y":7,"sort_order":149},"🔥":{"category":"Travel & Places","sheet_x":28,"sheet_y":8,"sort_order":208},"🔦":{"category":"Objects","sheet_x":28,"sheet_y":9,"sort_order":101},"🔧":{"category":"Objects","sheet_x":28,"sheet_y":10,"sort_order":191},"🔨":{"category":"Objects","sheet_x":28,"sheet_y":11,"sort_order":181},"🔩":{"category":"Objects","sheet_x":28,"sheet_y":12,"sort_order":192},"🔪":{"category":"Food & Drink","sheet_x":28,"sheet_y":13,"sort_order":120},"🔫":{"category":"Objects","sheet_x":28,"sheet_y":14,"sort_order":188},"🔬":{"category":"Objects","sheet_x":28,"sheet_y":15,"sort_order":205},"🔭":{"category":"Objects","sheet_x":28,"sheet_y":16,"sort_order":206},"🔮":{"category":"Activities","sheet_x":28,"sheet_y":17,"sort_order":59},"🔯":{"category":"Symbols","sheet_x":28,"sheet_y":18,"sort_order":59},"🔰":{"category":"Symbols","sheet_x":28,"sheet_y":19,"sort_order":105},"🔱":{"category":"Symbols","sheet_x":28,"sheet_y":20,"sort_order":103},"🔲":{"category":"Symbols","sheet_x":28,"sheet_y":21,"sort_order":217},"🔳":{"category":"Symbols","sheet_x":28,"sheet_y":22,"sort_order":216},"🔴":{"category":"Symbols","sheet_x":28,"sheet_y":23,"sort_order":184},"🔵":{"category":"Symbols","sheet_x":28,"sheet_y":24,"sort_order":188},"🔶":{"category":"Symbols","sheet_x":28,"sheet_y":25,"sort_order":208},"🔷":{"category":"Symbols","sheet_x":28,"sheet_y":26,"sort_order":209},"🔸":{"category":"Symbols","sheet_x":28,"sheet_y":27,"sort_order":210},"🔹":{"category":"Symbols","sheet_x":28,"sheet_y":28,"sort_order":211},"🔺":{"category":"Symbols","sheet_x":28,"sheet_y":29,"sort_order":212},"🔻":{"category":"Symbols","sheet_x":28,"sheet_y":30,"sort_order":213},"🔼":{"category":"Symbols","sheet_x":28,"sheet_y":31,"sort_order":83},"🔽":{"category":"Symbols","sheet_x":28,"sheet_y":32,"sort_order":85},"🕉️":{"category":"Symbols","sheet_x":28,"sheet_y":33,"sort_order":50},"🕊️":{"category":"Animals & Nature","sheet_x":28,"sheet_y":34,"sort_order":68},"🕋":{"category":"Travel & Places","sheet_x":28,"sheet_y":35,"sort_order":46},"🕌":{"category":"Travel & Places","sheet_x":28,"sheet_y":36,"sort_order":42},"🕍":{"category":"Travel & Places","sheet_x":28,"sheet_y":37,"sort_order":44},"🕎":{"category":"Symbols","sheet_x":28,"sheet_y":38,"sort_order":58},"🕐":{"category":"Travel & Places","sheet_x":28,"sheet_y":39,"sort_order":142},"🕑":{"category":"Travel & Places","sheet_x":28,"sheet_y":40,"sort_order":144},"🕒":{"category":"Travel & Places","sheet_x":28,"sheet_y":41,"sort_order":146},"🕓":{"category":"Travel & Places","sheet_x":28,"sheet_y":42,"sort_order":148},"🕔":{"category":"Travel & Places","sheet_x":28,"sheet_y":43,"sort_order":150},"🕕":{"category":"Travel & Places","sheet_x":28,"sheet_y":44,"sort_order":152},"🕖":{"category":"Travel & Places","sheet_x":28,"sheet_y":45,"sort_order":154},"🕗":{"category":"Travel & Places","sheet_x":28,"sheet_y":46,"sort_order":156},"🕘":{"category":"Travel & Places","sheet_x":28,"sheet_y":47,"sort_order":158},"🕙":{"category":"Travel & Places","sheet_x":28,"sheet_y":48,"sort_order":160},"🕚":{"category":"Travel & Places","sheet_x":28,"sheet_y":49,"sort_order":162},"🕛":{"category":"Travel & Places","sheet_x":28,"sheet_y":50,"sort_order":140},"🕜":{"category":"Travel & Places","sheet_x":28,"sheet_y":51,"sort_order":143},"🕝":{"category":"Travel & Places","sheet_x":28,"sheet_y":52,"sort_order":145},"🕞":{"category":"Travel & Places","sheet_x":28,"sheet_y":53,"sort_order":147},"🕟":{"category":"Travel & Places","sheet_x":28,"sheet_y":54,"sort_order":149},"🕠":{"category":"Travel & Places","sheet_x":28,"sheet_y":55,"sort_order":151},"🕡":{"category":"Travel & Places","sheet_x":28,"sheet_y":56,"sort_order":153},"🕢":{"category":"Travel & Places","sheet_x":29,"sheet_y":0,"sort_order":155},"🕣":{"category":"Travel & Places","sheet_x":29,"sheet_y":1,"sort_order":157},"🕤":{"category":"Travel & Places","sheet_x":29,"sheet_y":2,"sort_order":159},"🕥":{"category":"Travel & Places","sheet_x":29,"sheet_y":3,"sort_order":161},"🕦":{"category":"Travel & Places","sheet_x":29,"sheet_y":4,"sort_order":163},"🕧":{"category":"Travel & Places","sheet_x":29,"sheet_y":5,"sort_order":141},"🕯️":{"category":"Objects","sheet_x":29,"sheet_y":6,"sort_order":99},"🕰️":{"category":"Travel & Places","sheet_x":29,"sheet_y":7,"sort_order":139},"🕳️":{"category":"Smileys & Emotion","sheet_x":29,"sheet_y":8,"sort_order":142},"🕴️":{"category":"People & Body","sheet_x":29,"sheet_y":9,"sort_order":235},"🕵️‍♀️":{"category":"People & Body","sheet_x":29,"sheet_y":15,"sort_order":158},"🕵️‍♂️":{"category":"People & Body","sheet_x":29,"sheet_y":21,"sort_order":157},"🕵️":{"category":"People & Body","sheet_x":29,"sheet_y":27,"sort_order":156},"🕶️":{"category":"Objects","sheet_x":29,"sheet_y":33,"sort_order":2},"🕷️":{"category":"Animals & Nature","sheet_x":29,"sheet_y":34,"sort_order":101},"🕸️":{"category":"Animals & Nature","sheet_x":29,"sheet_y":35,"sort_order":102},"🕹️":{"category":"Activities","sheet_x":29,"sheet_y":36,"sort_order":62},"🕺":{"category":"People & Body","sheet_x":29,"sheet_y":37,"sort_order":234},"🖇️":{"category":"Objects","sheet_x":29,"sheet_y":43,"sort_order":168},"🖊️":{"category":"Objects","sheet_x":29,"sheet_y":44,"sort_order":148},"🖋️":{"category":"Objects","sheet_x":29,"sheet_y":45,"sort_order":147},"🖌️":{"category":"Objects","sheet_x":29,"sheet_y":46,"sort_order":149},"🖍️":{"category":"Objects","sheet_x":29,"sheet_y":47,"sort_order":150},"🖐️":{"category":"People & Body","sheet_x":29,"sheet_y":48,"sort_order":3},"🖕":{"category":"People & Body","sheet_x":29,"sheet_y":54,"sort_order":16},"🖖":{"category":"People & Body","sheet_x":30,"sheet_y":3,"sort_order":5},"🖤":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":9,"sort_order":134},"🖥️":{"category":"Objects","sheet_x":30,"sheet_y":10,"sort_order":78},"🖨️":{"category":"Objects","sheet_x":30,"sheet_y":11,"sort_order":79},"🖱️":{"category":"Objects","sheet_x":30,"sheet_y":12,"sort_order":81},"🖲️":{"category":"Objects","sheet_x":30,"sheet_y":13,"sort_order":82},"🖼️":{"category":"Activities","sheet_x":30,"sheet_y":14,"sort_order":76},"🗂️":{"category":"Objects","sheet_x":30,"sheet_y":15,"sort_order":155},"🗃️":{"category":"Objects","sheet_x":30,"sheet_y":16,"sort_order":172},"🗄️":{"category":"Objects","sheet_x":30,"sheet_y":17,"sort_order":173},"🗑️":{"category":"Objects","sheet_x":30,"sheet_y":18,"sort_order":174},"🗒️":{"category":"Objects","sheet_x":30,"sheet_y":19,"sort_order":158},"🗓️":{"category":"Objects","sheet_x":30,"sheet_y":20,"sort_order":159},"🗜️":{"category":"Objects","sheet_x":30,"sheet_y":21,"sort_order":194},"🗝️":{"category":"Objects","sheet_x":30,"sheet_y":22,"sort_order":180},"🗞️":{"category":"Objects","sheet_x":30,"sheet_y":23,"sort_order":117},"🗡️":{"category":"Objects","sheet_x":30,"sheet_y":24,"sort_order":186},"🗣️":{"category":"People & Body","sheet_x":30,"sheet_y":25,"sort_order":331},"🗨️":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":26,"sort_order":146},"🗯️":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":27,"sort_order":147},"🗳️":{"category":"Objects","sheet_x":30,"sheet_y":28,"sort_order":144},"🗺️":{"category":"Travel & Places","sheet_x":30,"sheet_y":29,"sort_order":5},"🗻":{"category":"Travel & Places","sheet_x":30,"sheet_y":30,"sort_order":11},"🗼":{"category":"Travel & Places","sheet_x":30,"sheet_y":31,"sort_order":39},"🗽":{"category":"Travel & Places","sheet_x":30,"sheet_y":32,"sort_order":40},"🗾":{"category":"Travel & Places","sheet_x":30,"sheet_y":33,"sort_order":6},"🗿":{"category":"Objects","sheet_x":30,"sheet_y":34,"sort_order":233},"😀":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":35,"sort_order":1},"😁":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":36,"sort_order":4},"😂":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":37,"sort_order":8},"😃":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":38,"sort_order":2},"😄":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":39,"sort_order":3},"😅":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":40,"sort_order":6},"😆":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":41,"sort_order":5},"😇":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":42,"sort_order":13},"😈":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":43,"sort_order":91},"😉":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":44,"sort_order":11},"😊":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":45,"sort_order":12},"😋":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":46,"sort_order":22},"😌":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":47,"sort_order":42},"😍":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":48,"sort_order":15},"😎":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":49,"sort_order":60},"😏":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":50,"sort_order":37},"😐":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":51,"sort_order":34},"😑":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":52,"sort_order":35},"😒":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":53,"sort_order":38},"😓":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":54,"sort_order":83},"😔":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":55,"sort_order":43},"😕":{"category":"Smileys & Emotion","sheet_x":30,"sheet_y":56,"sort_order":63},"😖":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":0,"sort_order":80},"😗":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":1,"sort_order":18},"😘":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":2,"sort_order":17},"😙":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":3,"sort_order":21},"😚":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":4,"sort_order":20},"😛":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":5,"sort_order":23},"😜":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":6,"sort_order":24},"😝":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":7,"sort_order":26},"😞":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":8,"sort_order":82},"😟":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":9,"sort_order":64},"😠":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":10,"sort_order":89},"😡":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":11,"sort_order":88},"😢":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":12,"sort_order":77},"😣":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":13,"sort_order":81},"😤":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":14,"sort_order":87},"😥":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":15,"sort_order":76},"😦":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":16,"sort_order":72},"😧":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":17,"sort_order":73},"😨":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":18,"sort_order":74},"😩":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":19,"sort_order":84},"😪":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":20,"sort_order":44},"😫":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":21,"sort_order":85},"😬":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":22,"sort_order":40},"😭":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":23,"sort_order":78},"😮":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":24,"sort_order":67},"😯":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":25,"sort_order":68},"😰":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":26,"sort_order":75},"😱":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":27,"sort_order":79},"😲":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":28,"sort_order":69},"😳":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":29,"sort_order":70},"😴":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":30,"sort_order":46},"😵":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":31,"sort_order":56},"😶":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":32,"sort_order":36},"😷":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":33,"sort_order":47},"😸":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":34,"sort_order":104},"😹":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":35,"sort_order":105},"😺":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":36,"sort_order":103},"😻":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":37,"sort_order":106},"😼":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":38,"sort_order":107},"😽":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":39,"sort_order":108},"😾":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":40,"sort_order":111},"😿":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":41,"sort_order":110},"🙀":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":42,"sort_order":109},"🙁":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":43,"sort_order":65},"🙂":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":44,"sort_order":9},"🙃":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":45,"sort_order":10},"🙄":{"category":"Smileys & Emotion","sheet_x":31,"sheet_y":46,"sort_order":39},"🙅‍♀️":{"category":"People & Body","sheet_x":31,"sheet_y":47,"sort_order":83},"🙅‍♂️":{"category":"People & Body","sheet_x":31,"sheet_y":53,"sort_order":82},"🙅":{"category":"People & Body","sheet_x":32,"sheet_y":2,"sort_order":81},"🙆‍♀️":{"category":"People & Body","sheet_x":32,"sheet_y":8,"sort_order":86},"🙆‍♂️":{"category":"People & Body","sheet_x":32,"sheet_y":14,"sort_order":85},"🙆":{"category":"People & Body","sheet_x":32,"sheet_y":20,"sort_order":84},"🙇‍♀️":{"category":"People & Body","sheet_x":32,"sheet_y":26,"sort_order":98},"🙇‍♂️":{"category":"People & Body","sheet_x":32,"sheet_y":32,"sort_order":97},"🙇":{"category":"People & Body","sheet_x":32,"sheet_y":38,"sort_order":96},"🙈":{"category":"Smileys & Emotion","sheet_x":32,"sheet_y":44,"sort_order":112},"🙉":{"category":"Smileys & Emotion","sheet_x":32,"sheet_y":45,"sort_order":113},"🙊":{"category":"Smileys & Emotion","sheet_x":32,"sheet_y":46,"sort_order":114},"🙋‍♀️":{"category":"People & Body","sheet_x":32,"sheet_y":47,"sort_order":92},"🙋‍♂️":{"category":"People & Body","sheet_x":32,"sheet_y":53,"sort_order":91},"🙋":{"category":"People & Body","sheet_x":33,"sheet_y":2,"sort_order":90},"🙌":{"category":"People & Body","sheet_x":33,"sheet_y":8,"sort_order":26},"🙍‍♀️":{"category":"People & Body","sheet_x":33,"sheet_y":14,"sort_order":77},"🙍‍♂️":{"category":"People & Body","sheet_x":33,"sheet_y":20,"sort_order":76},"🙍":{"category":"People & Body","sheet_x":33,"sheet_y":26,"sort_order":75},"🙎‍♀️":{"category":"People & Body","sheet_x":33,"sheet_y":32,"sort_order":80},"🙎‍♂️":{"category":"People & Body","sheet_x":33,"sheet_y":38,"sort_order":79},"🙎":{"category":"People & Body","sheet_x":33,"sheet_y":44,"sort_order":78},"🙏":{"category":"People & Body","sheet_x":33,"sheet_y":50,"sort_order":30},"🚀":{"category":"Travel & Places","sheet_x":33,"sheet_y":56,"sort_order":129},"🚁":{"category":"Travel & Places","sheet_x":34,"sheet_y":0,"sort_order":124},"🚂":{"category":"Travel & Places","sheet_x":34,"sheet_y":1,"sort_order":63},"🚃":{"category":"Travel & Places","sheet_x":34,"sheet_y":2,"sort_order":64},"🚄":{"category":"Travel & Places","sheet_x":34,"sheet_y":3,"sort_order":65},"🚅":{"category":"Travel & Places","sheet_x":34,"sheet_y":4,"sort_order":66},"🚆":{"category":"Travel & Places","sheet_x":34,"sheet_y":5,"sort_order":67},"🚇":{"category":"Travel & Places","sheet_x":34,"sheet_y":6,"sort_order":68},"🚈":{"category":"Travel & Places","sheet_x":34,"sheet_y":7,"sort_order":69},"🚉":{"category":"Travel & Places","sheet_x":34,"sheet_y":8,"sort_order":70},"🚊":{"category":"Travel & Places","sheet_x":34,"sheet_y":9,"sort_order":71},"🚋":{"category":"Travel & Places","sheet_x":34,"sheet_y":10,"sort_order":74},"🚌":{"category":"Travel & Places","sheet_x":34,"sheet_y":11,"sort_order":75},"🚍":{"category":"Travel & Places","sheet_x":34,"sheet_y":12,"sort_order":76},"🚎":{"category":"Travel & Places","sheet_x":34,"sheet_y":13,"sort_order":77},"🚏":{"category":"Travel & Places","sheet_x":34,"sheet_y":14,"sort_order":100},"🚐":{"category":"Travel & Places","sheet_x":34,"sheet_y":15,"sort_order":78},"🚑":{"category":"Travel & Places","sheet_x":34,"sheet_y":16,"sort_order":79},"🚒":{"category":"Travel & Places","sheet_x":34,"sheet_y":17,"sort_order":80},"🚓":{"category":"Travel & Places","sheet_x":34,"sheet_y":18,"sort_order":81},"🚔":{"category":"Travel & Places","sheet_x":34,"sheet_y":19,"sort_order":82},"🚕":{"category":"Travel & Places","sheet_x":34,"sheet_y":20,"sort_order":83},"🚖":{"category":"Travel & Places","sheet_x":34,"sheet_y":21,"sort_order":84},"🚗":{"category":"Travel & Places","sheet_x":34,"sheet_y":22,"sort_order":85},"🚘":{"category":"Travel & Places","sheet_x":34,"sheet_y":23,"sort_order":86},"🚙":{"category":"Travel & Places","sheet_x":34,"sheet_y":24,"sort_order":87},"🚚":{"category":"Travel & Places","sheet_x":34,"sheet_y":25,"sort_order":88},"🚛":{"category":"Travel & Places","sheet_x":34,"sheet_y":26,"sort_order":89},"🚜":{"category":"Travel & Places","sheet_x":34,"sheet_y":27,"sort_order":90},"🚝":{"category":"Travel & Places","sheet_x":34,"sheet_y":28,"sort_order":72},"🚞":{"category":"Travel & Places","sheet_x":34,"sheet_y":29,"sort_order":73},"🚟":{"category":"Travel & Places","sheet_x":34,"sheet_y":30,"sort_order":125},"🚠":{"category":"Travel & Places","sheet_x":34,"sheet_y":31,"sort_order":126},"🚡":{"category":"Travel & Places","sheet_x":34,"sheet_y":32,"sort_order":127},"🚢":{"category":"Travel & Places","sheet_x":34,"sheet_y":33,"sort_order":117},"🚣‍♀️":{"category":"People & Body","sheet_x":34,"sheet_y":34,"sort_order":257},"🚣‍♂️":{"category":"People & Body","sheet_x":34,"sheet_y":40,"sort_order":256},"🚣":{"category":"People & Body","sheet_x":34,"sheet_y":46,"sort_order":255},"🚤":{"category":"Travel & Places","sheet_x":34,"sheet_y":52,"sort_order":113},"🚥":{"category":"Travel & Places","sheet_x":34,"sheet_y":53,"sort_order":106},"🚦":{"category":"Travel & Places","sheet_x":34,"sheet_y":54,"sort_order":107},"🚧":{"category":"Travel & Places","sheet_x":34,"sheet_y":55,"sort_order":109},"🚨":{"category":"Travel & Places","sheet_x":34,"sheet_y":56,"sort_order":105},"🚩":{"category":"Flags","sheet_x":35,"sheet_y":0,"sort_order":2},"🚪":{"category":"Objects","sheet_x":35,"sheet_y":1,"sort_order":213},"🚫":{"category":"Symbols","sheet_x":35,"sheet_y":2,"sort_order":17},"🚬":{"category":"Objects","sheet_x":35,"sheet_y":3,"sort_order":230},"🚭":{"category":"Symbols","sheet_x":35,"sheet_y":4,"sort_order":19},"🚮":{"category":"Symbols","sheet_x":35,"sheet_y":5,"sort_order":2},"🚯":{"category":"Symbols","sheet_x":35,"sheet_y":6,"sort_order":20},"🚰":{"category":"Symbols","sheet_x":35,"sheet_y":7,"sort_order":3},"🚱":{"category":"Symbols","sheet_x":35,"sheet_y":8,"sort_order":21},"🚲":{"category":"Travel & Places","sheet_x":35,"sheet_y":9,"sort_order":97},"🚳":{"category":"Symbols","sheet_x":35,"sheet_y":10,"sort_order":18},"🚴‍♀️":{"category":"People & Body","sheet_x":35,"sheet_y":11,"sort_order":269},"🚴‍♂️":{"category":"People & Body","sheet_x":35,"sheet_y":17,"sort_order":268},"🚴":{"category":"People & Body","sheet_x":35,"sheet_y":23,"sort_order":267},"🚵‍♀️":{"category":"People & Body","sheet_x":35,"sheet_y":29,"sort_order":272},"🚵‍♂️":{"category":"People & Body","sheet_x":35,"sheet_y":35,"sort_order":271},"🚵":{"category":"People & Body","sheet_x":35,"sheet_y":41,"sort_order":270},"🚶‍♀️":{"category":"People & Body","sheet_x":35,"sheet_y":47,"sort_order":214},"🚶‍♂️":{"category":"People & Body","sheet_x":35,"sheet_y":53,"sort_order":213},"🚶":{"category":"People & Body","sheet_x":36,"sheet_y":2,"sort_order":212},"🚷":{"category":"Symbols","sheet_x":36,"sheet_y":8,"sort_order":22},"🚸":{"category":"Symbols","sheet_x":36,"sheet_y":9,"sort_order":15},"🚹":{"category":"Symbols","sheet_x":36,"sheet_y":10,"sort_order":5},"🚺":{"category":"Symbols","sheet_x":36,"sheet_y":11,"sort_order":6},"🚻":{"category":"Symbols","sheet_x":36,"sheet_y":12,"sort_order":7},"🚼":{"category":"Symbols","sheet_x":36,"sheet_y":13,"sort_order":8},"🚽":{"category":"Objects","sheet_x":36,"sheet_y":14,"sort_order":217},"🚾":{"category":"Symbols","sheet_x":36,"sheet_y":15,"sort_order":9},"🚿":{"category":"Objects","sheet_x":36,"sheet_y":16,"sort_order":218},"🛀":{"category":"People & Body","sheet_x":36,"sheet_y":17,"sort_order":291},"🛁":{"category":"Objects","sheet_x":36,"sheet_y":23,"sort_order":219},"🛂":{"category":"Symbols","sheet_x":36,"sheet_y":24,"sort_order":10},"🛃":{"category":"Symbols","sheet_x":36,"sheet_y":25,"sort_order":11},"🛄":{"category":"Symbols","sheet_x":36,"sheet_y":26,"sort_order":12},"🛅":{"category":"Symbols","sheet_x":36,"sheet_y":27,"sort_order":13},"🛋️":{"category":"Objects","sheet_x":36,"sheet_y":28,"sort_order":215},"🛌":{"category":"People & Body","sheet_x":36,"sheet_y":29,"sort_order":292},"🛍️":{"category":"Objects","sheet_x":36,"sheet_y":35,"sort_order":24},"🛎️":{"category":"Travel & Places","sheet_x":36,"sheet_y":36,"sort_order":131},"🛏️":{"category":"Objects","sheet_x":36,"sheet_y":37,"sort_order":214},"🛐":{"category":"Symbols","sheet_x":36,"sheet_y":38,"sort_order":48},"🛑":{"category":"Travel & Places","sheet_x":36,"sheet_y":39,"sort_order":108},"🛒":{"category":"Objects","sheet_x":36,"sheet_y":40,"sort_order":229},"🛕":{"category":"Travel & Places","sheet_x":36,"sheet_y":41,"sort_order":43},"🛠️":{"category":"Objects","sheet_x":36,"sheet_y":42,"sort_order":185},"🛡️":{"category":"Objects","sheet_x":36,"sheet_y":43,"sort_order":190},"🛢️":{"category":"Travel & Places","sheet_x":36,"sheet_y":44,"sort_order":103},"🛣️":{"category":"Travel & Places","sheet_x":36,"sheet_y":45,"sort_order":101},"🛤️":{"category":"Travel & Places","sheet_x":36,"sheet_y":46,"sort_order":102},"🛥️":{"category":"Travel & Places","sheet_x":36,"sheet_y":47,"sort_order":116},"🛩️":{"category":"Travel & Places","sheet_x":36,"sheet_y":48,"sort_order":119},"🛫":{"category":"Travel & Places","sheet_x":36,"sheet_y":49,"sort_order":120},"🛬":{"category":"Travel & Places","sheet_x":36,"sheet_y":50,"sort_order":121},"🛰️":{"category":"Travel & Places","sheet_x":36,"sheet_y":51,"sort_order":128},"🛳️":{"category":"Travel & Places","sheet_x":36,"sheet_y":52,"sort_order":114},"🛴":{"category":"Travel & Places","sheet_x":36,"sheet_y":53,"sort_order":98},"🛵":{"category":"Travel & Places","sheet_x":36,"sheet_y":54,"sort_order":93},"🛶":{"category":"Travel & Places","sheet_x":36,"sheet_y":55,"sort_order":112},"🛷":{"category":"Activities","sheet_x":36,"sheet_y":56,"sort_order":53},"🛸":{"category":"Travel & Places","sheet_x":37,"sheet_y":0,"sort_order":130},"🛹":{"category":"Travel & Places","sheet_x":37,"sheet_y":1,"sort_order":99},"🛺":{"category":"Travel & Places","sheet_x":37,"sheet_y":2,"sort_order":96},"🟠":{"category":"Symbols","sheet_x":37,"sheet_y":3,"sort_order":185},"🟡":{"category":"Symbols","sheet_x":37,"sheet_y":4,"sort_order":186},"🟢":{"category":"Symbols","sheet_x":37,"sheet_y":5,"sort_order":187},"🟣":{"category":"Symbols","sheet_x":37,"sheet_y":6,"sort_order":189},"🟤":{"category":"Symbols","sheet_x":37,"sheet_y":7,"sort_order":190},"🟥":{"category":"Symbols","sheet_x":37,"sheet_y":8,"sort_order":193},"🟦":{"category":"Symbols","sheet_x":37,"sheet_y":9,"sort_order":197},"🟧":{"category":"Symbols","sheet_x":37,"sheet_y":10,"sort_order":194},"🟨":{"category":"Symbols","sheet_x":37,"sheet_y":11,"sort_order":195},"🟩":{"category":"Symbols","sheet_x":37,"sheet_y":12,"sort_order":196},"🟪":{"category":"Symbols","sheet_x":37,"sheet_y":13,"sort_order":198},"🟫":{"category":"Symbols","sheet_x":37,"sheet_y":14,"sort_order":199},"🤍":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":15,"sort_order":135},"🤎":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":16,"sort_order":133},"🤏":{"category":"People & Body","sheet_x":37,"sheet_y":17,"sort_order":7},"🤐":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":23,"sort_order":32},"🤑":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":24,"sort_order":27},"🤒":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":25,"sort_order":48},"🤓":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":26,"sort_order":61},"🤔":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":27,"sort_order":31},"🤕":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":28,"sort_order":49},"🤖":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":29,"sort_order":102},"🤗":{"category":"Smileys & Emotion","sheet_x":37,"sheet_y":30,"sort_order":28},"🤘":{"category":"People & Body","sheet_x":37,"sheet_y":31,"sort_order":11},"🤙":{"category":"People & Body","sheet_x":37,"sheet_y":37,"sort_order":12},"🤚":{"category":"People & Body","sheet_x":37,"sheet_y":43,"sort_order":2},"🤛":{"category":"People & Body","sheet_x":37,"sheet_y":49,"sort_order":23},"🤜":{"category":"People & Body","sheet_x":37,"sheet_y":55,"sort_order":24},"🤝":{"category":"People & Body","sheet_x":38,"sheet_y":4,"sort_order":29},"🤞":{"category":"People & Body","sheet_x":38,"sheet_y":5,"sort_order":9},"🤟":{"category":"People & Body","sheet_x":38,"sheet_y":11,"sort_order":10},"🤠":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":17,"sort_order":58},"🤡":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":18,"sort_order":96},"🤢":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":19,"sort_order":50},"🤣":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":20,"sort_order":7},"🤤":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":21,"sort_order":45},"🤥":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":22,"sort_order":41},"🤦‍♀️":{"category":"People & Body","sheet_x":38,"sheet_y":23,"sort_order":101},"🤦‍♂️":{"category":"People & Body","sheet_x":38,"sheet_y":29,"sort_order":100},"🤦":{"category":"People & Body","sheet_x":38,"sheet_y":35,"sort_order":99},"🤧":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":41,"sort_order":52},"🤨":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":42,"sort_order":33},"🤩":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":43,"sort_order":16},"🤪":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":44,"sort_order":25},"🤫":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":45,"sort_order":30},"🤬":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":46,"sort_order":90},"🤭":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":47,"sort_order":29},"🤮":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":48,"sort_order":51},"🤯":{"category":"Smileys & Emotion","sheet_x":38,"sheet_y":49,"sort_order":57},"🤰":{"category":"People & Body","sheet_x":38,"sheet_y":50,"sort_order":174},"🤱":{"category":"People & Body","sheet_x":38,"sheet_y":56,"sort_order":175},"🤲":{"category":"People & Body","sheet_x":39,"sheet_y":5,"sort_order":28},"🤳":{"category":"People & Body","sheet_x":39,"sheet_y":11,"sort_order":33},"🤴":{"category":"People & Body","sheet_x":39,"sheet_y":17,"sort_order":165},"🤵":{"category":"People & Body","sheet_x":39,"sheet_y":23,"sort_order":172},"🤶":{"category":"People & Body","sheet_x":39,"sheet_y":29,"sort_order":178},"🤷‍♀️":{"category":"People & Body","sheet_x":39,"sheet_y":35,"sort_order":104},"🤷‍♂️":{"category":"People & Body","sheet_x":39,"sheet_y":41,"sort_order":103},"🤷":{"category":"People & Body","sheet_x":39,"sheet_y":47,"sort_order":102},"🤸‍♀️":{"category":"People & Body","sheet_x":39,"sheet_y":53,"sort_order":275},"🤸‍♂️":{"category":"People & Body","sheet_x":40,"sheet_y":2,"sort_order":274},"🤸":{"category":"People & Body","sheet_x":40,"sheet_y":8,"sort_order":273},"🤹‍♀️":{"category":"People & Body","sheet_x":40,"sheet_y":14,"sort_order":287},"🤹‍♂️":{"category":"People & Body","sheet_x":40,"sheet_y":20,"sort_order":286},"🤹":{"category":"People & Body","sheet_x":40,"sheet_y":26,"sort_order":285},"🤺":{"category":"People & Body","sheet_x":40,"sheet_y":32,"sort_order":245},"🤼‍♀️":{"category":"People & Body","sheet_x":40,"sheet_y":33,"sort_order":278},"🤼‍♂️":{"category":"People & Body","sheet_x":40,"sheet_y":34,"sort_order":277},"🤼":{"category":"People & Body","sheet_x":40,"sheet_y":35,"sort_order":276},"🤽‍♀️":{"category":"People & Body","sheet_x":40,"sheet_y":36,"sort_order":281},"🤽‍♂️":{"category":"People & Body","sheet_x":40,"sheet_y":42,"sort_order":280},"🤽":{"category":"People & Body","sheet_x":40,"sheet_y":48,"sort_order":279},"🤾‍♀️":{"category":"People & Body","sheet_x":40,"sheet_y":54,"sort_order":284},"🤾‍♂️":{"category":"People & Body","sheet_x":41,"sheet_y":3,"sort_order":283},"🤾":{"category":"People & Body","sheet_x":41,"sheet_y":9,"sort_order":282},"🤿":{"category":"Activities","sheet_x":41,"sheet_y":15,"sort_order":50},"🥀":{"category":"Animals & Nature","sheet_x":41,"sheet_y":16,"sort_order":111},"🥁":{"category":"Objects","sheet_x":41,"sheet_y":17,"sort_order":68},"🥂":{"category":"Food & Drink","sheet_x":41,"sheet_y":18,"sort_order":110},"🥃":{"category":"Food & Drink","sheet_x":41,"sheet_y":19,"sort_order":111},"🥄":{"category":"Food & Drink","sheet_x":41,"sheet_y":20,"sort_order":119},"🥅":{"category":"Activities","sheet_x":41,"sheet_y":21,"sort_order":46},"🥇":{"category":"Activities","sheet_x":41,"sheet_y":22,"sort_order":25},"🥈":{"category":"Activities","sheet_x":41,"sheet_y":23,"sort_order":26},"🥉":{"category":"Activities","sheet_x":41,"sheet_y":24,"sort_order":27},"🥊":{"category":"Activities","sheet_x":41,"sheet_y":25,"sort_order":44},"🥋":{"category":"Activities","sheet_x":41,"sheet_y":26,"sort_order":45},"🥌":{"category":"Activities","sheet_x":41,"sheet_y":27,"sort_order":54},"🥍":{"category":"Activities","sheet_x":41,"sheet_y":28,"sort_order":41},"🥎":{"category":"Activities","sheet_x":41,"sheet_y":29,"sort_order":30},"🥏":{"category":"Activities","sheet_x":41,"sheet_y":30,"sort_order":36},"🥐":{"category":"Food & Drink","sheet_x":41,"sheet_y":31,"sort_order":33},"🥑":{"category":"Food & Drink","sheet_x":41,"sheet_y":32,"sort_order":18},"🥒":{"category":"Food & Drink","sheet_x":41,"sheet_y":33,"sort_order":24},"🥓":{"category":"Food & Drink","sheet_x":41,"sheet_y":34,"sort_order":43},"🥔":{"category":"Food & Drink","sheet_x":41,"sheet_y":35,"sort_order":20},"🥕":{"category":"Food & Drink","sheet_x":41,"sheet_y":36,"sort_order":21},"🥖":{"category":"Food & Drink","sheet_x":41,"sheet_y":37,"sort_order":34},"🥗":{"category":"Food & Drink","sheet_x":41,"sheet_y":38,"sort_order":58},"🥘":{"category":"Food & Drink","sheet_x":41,"sheet_y":39,"sort_order":55},"🥙":{"category":"Food & Drink","sheet_x":41,"sheet_y":40,"sort_order":51},"🥚":{"category":"Food & Drink","sheet_x":41,"sheet_y":41,"sort_order":53},"🥛":{"category":"Food & Drink","sheet_x":41,"sheet_y":42,"sort_order":100},"🥜":{"category":"Food & Drink","sheet_x":41,"sheet_y":43,"sort_order":30},"🥝":{"category":"Food & Drink","sheet_x":41,"sheet_y":44,"sort_order":15},"🥞":{"category":"Food & Drink","sheet_x":41,"sheet_y":45,"sort_order":37},"🥟":{"category":"Food & Drink","sheet_x":41,"sheet_y":46,"sort_order":77},"🥠":{"category":"Food & Drink","sheet_x":41,"sheet_y":47,"sort_order":78},"🥡":{"category":"Food & Drink","sheet_x":41,"sheet_y":48,"sort_order":79},"🥢":{"category":"Food & Drink","sheet_x":41,"sheet_y":49,"sort_order":116},"🥣":{"category":"Food & Drink","sheet_x":41,"sheet_y":50,"sort_order":57},"🥤":{"category":"Food & Drink","sheet_x":41,"sheet_y":51,"sort_order":112},"🥥":{"category":"Food & Drink","sheet_x":41,"sheet_y":52,"sort_order":17},"🥦":{"category":"Food & Drink","sheet_x":41,"sheet_y":53,"sort_order":26},"🥧":{"category":"Food & Drink","sheet_x":41,"sheet_y":54,"sort_order":93},"🥨":{"category":"Food & Drink","sheet_x":41,"sheet_y":55,"sort_order":35},"🥩":{"category":"Food & Drink","sheet_x":41,"sheet_y":56,"sort_order":42},"🥪":{"category":"Food & Drink","sheet_x":42,"sheet_y":0,"sort_order":48},"🥫":{"category":"Food & Drink","sheet_x":42,"sheet_y":1,"sort_order":62},"🥬":{"category":"Food & Drink","sheet_x":42,"sheet_y":2,"sort_order":25},"🥭":{"category":"Food & Drink","sheet_x":42,"sheet_y":3,"sort_order":8},"🥮":{"category":"Food & Drink","sheet_x":42,"sheet_y":4,"sort_order":75},"🥯":{"category":"Food & Drink","sheet_x":42,"sheet_y":5,"sort_order":36},"🥰":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":6,"sort_order":14},"🥱":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":7,"sort_order":86},"🥳":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":8,"sort_order":59},"🥴":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":9,"sort_order":55},"🥵":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":10,"sort_order":53},"🥶":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":11,"sort_order":54},"🥺":{"category":"Smileys & Emotion","sheet_x":42,"sheet_y":12,"sort_order":71},"🥻":{"category":"Objects","sheet_x":42,"sheet_y":13,"sort_order":15},"🥼":{"category":"Objects","sheet_x":42,"sheet_y":14,"sort_order":4},"🥽":{"category":"Objects","sheet_x":42,"sheet_y":15,"sort_order":3},"🥾":{"category":"Objects","sheet_x":42,"sheet_y":16,"sort_order":28},"🥿":{"category":"Objects","sheet_x":42,"sheet_y":17,"sort_order":29},"🦀":{"category":"Food & Drink","sheet_x":42,"sheet_y":18,"sort_order":80},"🦁":{"category":"Animals & Nature","sheet_x":42,"sheet_y":19,"sort_order":15},"🦂":{"category":"Animals & Nature","sheet_x":42,"sheet_y":20,"sort_order":103},"🦃":{"category":"Animals & Nature","sheet_x":42,"sheet_y":21,"sort_order":60},"🦄":{"category":"Animals & Nature","sheet_x":42,"sheet_y":22,"sort_order":21},"🦅":{"category":"Animals & Nature","sheet_x":42,"sheet_y":23,"sort_order":69},"🦆":{"category":"Animals & Nature","sheet_x":42,"sheet_y":24,"sort_order":70},"🦇":{"category":"Animals & Nature","sheet_x":42,"sheet_y":25,"sort_order":50},"🦈":{"category":"Animals & Nature","sheet_x":42,"sheet_y":26,"sort_order":91},"🦉":{"category":"Animals & Nature","sheet_x":42,"sheet_y":27,"sort_order":72},"🦊":{"category":"Animals & Nature","sheet_x":42,"sheet_y":28,"sort_order":11},"🦋":{"category":"Animals & Nature","sheet_x":42,"sheet_y":29,"sort_order":95},"🦌":{"category":"Animals & Nature","sheet_x":42,"sheet_y":30,"sort_order":23},"🦍":{"category":"Animals & Nature","sheet_x":42,"sheet_y":31,"sort_order":3},"🦎":{"category":"Animals & Nature","sheet_x":42,"sheet_y":32,"sort_order":79},"🦏":{"category":"Animals & Nature","sheet_x":42,"sheet_y":33,"sort_order":40},"🦐":{"category":"Food & Drink","sheet_x":42,"sheet_y":34,"sort_order":82},"🦑":{"category":"Food & Drink","sheet_x":42,"sheet_y":35,"sort_order":83},"🦒":{"category":"Animals & Nature","sheet_x":42,"sheet_y":36,"sort_order":38},"🦓":{"category":"Animals & Nature","sheet_x":42,"sheet_y":37,"sort_order":22},"🦔":{"category":"Animals & Nature","sheet_x":42,"sheet_y":38,"sort_order":49},"🦕":{"category":"Animals & Nature","sheet_x":42,"sheet_y":39,"sort_order":83},"🦖":{"category":"Animals & Nature","sheet_x":42,"sheet_y":40,"sort_order":84},"🦗":{"category":"Animals & Nature","sheet_x":42,"sheet_y":41,"sort_order":100},"🦘":{"category":"Animals & Nature","sheet_x":42,"sheet_y":42,"sort_order":57},"🦙":{"category":"Animals & Nature","sheet_x":42,"sheet_y":43,"sort_order":37},"🦚":{"category":"Animals & Nature","sheet_x":42,"sheet_y":44,"sort_order":74},"🦛":{"category":"Animals & Nature","sheet_x":42,"sheet_y":45,"sort_order":41},"🦜":{"category":"Animals & Nature","sheet_x":42,"sheet_y":46,"sort_order":75},"🦝":{"category":"Animals & Nature","sheet_x":42,"sheet_y":47,"sort_order":12},"🦞":{"category":"Food & Drink","sheet_x":42,"sheet_y":48,"sort_order":81},"🦟":{"category":"Animals & Nature","sheet_x":42,"sheet_y":49,"sort_order":104},"🦠":{"category":"Animals & Nature","sheet_x":42,"sheet_y":50,"sort_order":105},"🦡":{"category":"Animals & Nature","sheet_x":42,"sheet_y":51,"sort_order":58},"🦢":{"category":"Animals & Nature","sheet_x":42,"sheet_y":52,"sort_order":71},"🦥":{"category":"Animals & Nature","sheet_x":42,"sheet_y":53,"sort_order":54},"🦦":{"category":"Animals & Nature","sheet_x":42,"sheet_y":54,"sort_order":55},"🦧":{"category":"Animals & Nature","sheet_x":42,"sheet_y":55,"sort_order":4},"🦨":{"category":"Animals & Nature","sheet_x":42,"sheet_y":56,"sort_order":56},"🦩":{"category":"Animals & Nature","sheet_x":43,"sheet_y":0,"sort_order":73},"🦪":{"category":"Food & Drink","sheet_x":43,"sheet_y":1,"sort_order":84},"🦮":{"category":"Animals & Nature","sheet_x":43,"sheet_y":2,"sort_order":7},"🦯":{"category":"Objects","sheet_x":43,"sheet_y":3,"sort_order":196},"🦴":{"category":"People & Body","sheet_x":43,"sheet_y":4,"sort_order":44},"🦵":{"category":"People & Body","sheet_x":43,"sheet_y":5,"sort_order":37},"🦶":{"category":"People & Body","sheet_x":43,"sheet_y":11,"sort_order":38},"🦷":{"category":"People & Body","sheet_x":43,"sheet_y":17,"sort_order":43},"🦸‍♀️":{"category":"People & Body","sheet_x":43,"sheet_y":18,"sort_order":181},"🦸‍♂️":{"category":"People & Body","sheet_x":43,"sheet_y":24,"sort_order":180},"🦸":{"category":"People & Body","sheet_x":43,"sheet_y":30,"sort_order":179},"🦹‍♀️":{"category":"People & Body","sheet_x":43,"sheet_y":36,"sort_order":184},"🦹‍♂️":{"category":"People & Body","sheet_x":43,"sheet_y":42,"sort_order":183},"🦹":{"category":"People & Body","sheet_x":43,"sheet_y":48,"sort_order":182},"🦺":{"category":"Objects","sheet_x":43,"sheet_y":54,"sort_order":5},"🦻":{"category":"People & Body","sheet_x":43,"sheet_y":55,"sort_order":40},"🦼":{"category":"Travel & Places","sheet_x":44,"sheet_y":4,"sort_order":95},"🦽":{"category":"Travel & Places","sheet_x":44,"sheet_y":5,"sort_order":94},"🦾":{"category":"People & Body","sheet_x":44,"sheet_y":6,"sort_order":35},"🦿":{"category":"People & Body","sheet_x":44,"sheet_y":7,"sort_order":36},"🧀":{"category":"Food & Drink","sheet_x":44,"sheet_y":8,"sort_order":39},"🧁":{"category":"Food & Drink","sheet_x":44,"sheet_y":9,"sort_order":92},"🧂":{"category":"Food & Drink","sheet_x":44,"sheet_y":10,"sort_order":61},"🧃":{"category":"Food & Drink","sheet_x":44,"sheet_y":11,"sort_order":113},"🧄":{"category":"Food & Drink","sheet_x":44,"sheet_y":12,"sort_order":27},"🧅":{"category":"Food & Drink","sheet_x":44,"sheet_y":13,"sort_order":28},"🧆":{"category":"Food & Drink","sheet_x":44,"sheet_y":14,"sort_order":52},"🧇":{"category":"Food & Drink","sheet_x":44,"sheet_y":15,"sort_order":38},"🧈":{"category":"Food & Drink","sheet_x":44,"sheet_y":16,"sort_order":60},"🧉":{"category":"Food & Drink","sheet_x":44,"sheet_y":17,"sort_order":114},"🧊":{"category":"Food & Drink","sheet_x":44,"sheet_y":18,"sort_order":115},"🧍‍♀️":{"category":"People & Body","sheet_x":44,"sheet_y":19,"sort_order":217},"🧍‍♂️":{"category":"People & Body","sheet_x":44,"sheet_y":25,"sort_order":216},"🧍":{"category":"People & Body","sheet_x":44,"sheet_y":31,"sort_order":215},"🧎‍♀️":{"category":"People & Body","sheet_x":44,"sheet_y":37,"sort_order":220},"🧎‍♂️":{"category":"People & Body","sheet_x":44,"sheet_y":43,"sort_order":219},"🧎":{"category":"People & Body","sheet_x":44,"sheet_y":49,"sort_order":218},"🧏‍♀️":{"category":"People & Body","sheet_x":44,"sheet_y":55,"sort_order":95},"🧏‍♂️":{"category":"People & Body","sheet_x":45,"sheet_y":4,"sort_order":94},"🧏":{"category":"People & Body","sheet_x":45,"sheet_y":10,"sort_order":93},"🧐":{"category":"Smileys & Emotion","sheet_x":45,"sheet_y":16,"sort_order":62},"🧑‍🌾":{"category":"People & Body","sheet_x":45,"sheet_y":17,"sort_order":117},"🧑‍🍳":{"category":"People & Body","sheet_x":45,"sheet_y":23,"sort_order":120},"🧑‍🎓":{"category":"People & Body","sheet_x":45,"sheet_y":29,"sort_order":108},"🧑‍🎤":{"category":"People & Body","sheet_x":45,"sheet_y":35,"sort_order":138},"🧑‍🎨":{"category":"People & Body","sheet_x":45,"sheet_y":41,"sort_order":141},"🧑‍🏫":{"category":"People & Body","sheet_x":45,"sheet_y":47,"sort_order":111},"🧑‍🏭":{"category":"People & Body","sheet_x":45,"sheet_y":53,"sort_order":126},"🧑‍💻":{"category":"People & Body","sheet_x":46,"sheet_y":2,"sort_order":135},"🧑‍💼":{"category":"People & Body","sheet_x":46,"sheet_y":8,"sort_order":129},"🧑‍🔧":{"category":"People & Body","sheet_x":46,"sheet_y":14,"sort_order":123},"🧑‍🔬":{"category":"People & Body","sheet_x":46,"sheet_y":20,"sort_order":132},"🧑‍🚀":{"category":"People & Body","sheet_x":46,"sheet_y":26,"sort_order":147},"🧑‍🚒":{"category":"People & Body","sheet_x":46,"sheet_y":32,"sort_order":150},"🧑‍🤝‍🧑":{"category":"People & Body","sheet_x":46,"sheet_y":38,"sort_order":293},"🧑‍🦯":{"category":"People & Body","sheet_x":47,"sheet_y":7,"sort_order":221},"🧑‍🦰":{"category":"People & Body","sheet_x":47,"sheet_y":13,"sort_order":63},"🧑‍🦱":{"category":"People & Body","sheet_x":47,"sheet_y":19,"sort_order":65},"🧑‍🦲":{"category":"People & Body","sheet_x":47,"sheet_y":25,"sort_order":69},"🧑‍🦳":{"category":"People & Body","sheet_x":47,"sheet_y":31,"sort_order":67},"🧑‍🦼":{"category":"People & Body","sheet_x":47,"sheet_y":37,"sort_order":224},"🧑‍🦽":{"category":"People & Body","sheet_x":47,"sheet_y":43,"sort_order":227},"🧑‍⚕️":{"category":"People & Body","sheet_x":47,"sheet_y":49,"sort_order":105},"🧑‍⚖️":{"category":"People & Body","sheet_x":47,"sheet_y":55,"sort_order":114},"🧑‍✈️":{"category":"People & Body","sheet_x":48,"sheet_y":4,"sort_order":144},"🧑":{"category":"People & Body","sheet_x":48,"sheet_y":10,"sort_order":53},"🧒":{"category":"People & Body","sheet_x":48,"sheet_y":16,"sort_order":50},"🧓":{"category":"People & Body","sheet_x":48,"sheet_y":22,"sort_order":72},"🧔":{"category":"People & Body","sheet_x":48,"sheet_y":28,"sort_order":56},"🧕":{"category":"People & Body","sheet_x":48,"sheet_y":34,"sort_order":171},"🧖‍♀️":{"category":"People & Body","sheet_x":48,"sheet_y":40,"sort_order":241},"🧖‍♂️":{"category":"People & Body","sheet_x":48,"sheet_y":46,"sort_order":240},"🧖":{"category":"People & Body","sheet_x":48,"sheet_y":52,"sort_order":239},"🧗‍♀️":{"category":"People & Body","sheet_x":49,"sheet_y":1,"sort_order":244},"🧗‍♂️":{"category":"People & Body","sheet_x":49,"sheet_y":7,"sort_order":243},"🧗":{"category":"People & Body","sheet_x":49,"sheet_y":13,"sort_order":242},"🧘‍♀️":{"category":"People & Body","sheet_x":49,"sheet_y":19,"sort_order":290},"🧘‍♂️":{"category":"People & Body","sheet_x":49,"sheet_y":25,"sort_order":289},"🧘":{"category":"People & Body","sheet_x":49,"sheet_y":31,"sort_order":288},"🧙‍♀️":{"category":"People & Body","sheet_x":49,"sheet_y":37,"sort_order":187},"🧙‍♂️":{"category":"People & Body","sheet_x":49,"sheet_y":43,"sort_order":186},"🧙":{"category":"People & Body","sheet_x":49,"sheet_y":49,"sort_order":185},"🧚‍♀️":{"category":"People & Body","sheet_x":49,"sheet_y":55,"sort_order":190},"🧚‍♂️":{"category":"People & Body","sheet_x":50,"sheet_y":4,"sort_order":189},"🧚":{"category":"People & Body","sheet_x":50,"sheet_y":10,"sort_order":188},"🧛‍♀️":{"category":"People & Body","sheet_x":50,"sheet_y":16,"sort_order":193},"🧛‍♂️":{"category":"People & Body","sheet_x":50,"sheet_y":22,"sort_order":192},"🧛":{"category":"People & Body","sheet_x":50,"sheet_y":28,"sort_order":191},"🧜‍♀️":{"category":"People & Body","sheet_x":50,"sheet_y":34,"sort_order":196},"🧜‍♂️":{"category":"People & Body","sheet_x":50,"sheet_y":40,"sort_order":195},"🧜":{"category":"People & Body","sheet_x":50,"sheet_y":46,"sort_order":194},"🧝‍♀️":{"category":"People & Body","sheet_x":50,"sheet_y":52,"sort_order":199},"🧝‍♂️":{"category":"People & Body","sheet_x":51,"sheet_y":1,"sort_order":198},"🧝":{"category":"People & Body","sheet_x":51,"sheet_y":7,"sort_order":197},"🧞‍♀️":{"category":"People & Body","sheet_x":51,"sheet_y":13,"sort_order":202},"🧞‍♂️":{"category":"People & Body","sheet_x":51,"sheet_y":14,"sort_order":201},"🧞":{"category":"People & Body","sheet_x":51,"sheet_y":15,"sort_order":200},"🧟‍♀️":{"category":"People & Body","sheet_x":51,"sheet_y":16,"sort_order":205},"🧟‍♂️":{"category":"People & Body","sheet_x":51,"sheet_y":17,"sort_order":204},"🧟":{"category":"People & Body","sheet_x":51,"sheet_y":18,"sort_order":203},"🧠":{"category":"People & Body","sheet_x":51,"sheet_y":19,"sort_order":42},"🧡":{"category":"Smileys & Emotion","sheet_x":51,"sheet_y":20,"sort_order":128},"🧢":{"category":"Objects","sheet_x":51,"sheet_y":21,"sort_order":38},"🧣":{"category":"Objects","sheet_x":51,"sheet_y":22,"sort_order":9},"🧤":{"category":"Objects","sheet_x":51,"sheet_y":23,"sort_order":10},"🧥":{"category":"Objects","sheet_x":51,"sheet_y":24,"sort_order":11},"🧦":{"category":"Objects","sheet_x":51,"sheet_y":25,"sort_order":12},"🧧":{"category":"Activities","sheet_x":51,"sheet_y":26,"sort_order":16},"🧨":{"category":"Activities","sheet_x":51,"sheet_y":27,"sort_order":5},"🧩":{"category":"Activities","sheet_x":51,"sheet_y":28,"sort_order":65},"🧪":{"category":"Objects","sheet_x":51,"sheet_y":29,"sort_order":202},"🧫":{"category":"Objects","sheet_x":51,"sheet_y":30,"sort_order":203},"🧬":{"category":"Objects","sheet_x":51,"sheet_y":31,"sort_order":204},"🧭":{"category":"Travel & Places","sheet_x":51,"sheet_y":32,"sort_order":7},"🧮":{"category":"Objects","sheet_x":51,"sheet_y":33,"sort_order":87},"🧯":{"category":"Objects","sheet_x":51,"sheet_y":34,"sort_order":228},"🧰":{"category":"Objects","sheet_x":51,"sheet_y":35,"sort_order":199},"🧱":{"category":"Travel & Places","sheet_x":51,"sheet_y":36,"sort_order":20},"🧲":{"category":"Objects","sheet_x":51,"sheet_y":37,"sort_order":200},"🧳":{"category":"Travel & Places","sheet_x":51,"sheet_y":38,"sort_order":132},"🧴":{"category":"Objects","sheet_x":51,"sheet_y":39,"sort_order":221},"🧵":{"category":"Activities","sheet_x":51,"sheet_y":40,"sort_order":78},"🧶":{"category":"Activities","sheet_x":51,"sheet_y":41,"sort_order":79},"🧷":{"category":"Objects","sheet_x":51,"sheet_y":42,"sort_order":222},"🧸":{"category":"Activities","sheet_x":51,"sheet_y":43,"sort_order":66},"🧹":{"category":"Objects","sheet_x":51,"sheet_y":44,"sort_order":223},"🧺":{"category":"Objects","sheet_x":51,"sheet_y":45,"sort_order":224},"🧻":{"category":"Objects","sheet_x":51,"sheet_y":46,"sort_order":225},"🧼":{"category":"Objects","sheet_x":51,"sheet_y":47,"sort_order":226},"🧽":{"category":"Objects","sheet_x":51,"sheet_y":48,"sort_order":227},"🧾":{"category":"Objects","sheet_x":51,"sheet_y":49,"sort_order":128},"🧿":{"category":"Activities","sheet_x":51,"sheet_y":50,"sort_order":60},"🩰":{"category":"Objects","sheet_x":51,"sheet_y":51,"sort_order":32},"🩱":{"category":"Objects","sheet_x":51,"sheet_y":52,"sort_order":16},"🩲":{"category":"Objects","sheet_x":51,"sheet_y":53,"sort_order":17},"🩳":{"category":"Objects","sheet_x":51,"sheet_y":54,"sort_order":18},"🩸":{"category":"Objects","sheet_x":51,"sheet_y":55,"sort_order":209},"🩹":{"category":"Objects","sheet_x":51,"sheet_y":56,"sort_order":211},"🩺":{"category":"Objects","sheet_x":52,"sheet_y":0,"sort_order":212},"🪀":{"category":"Activities","sheet_x":52,"sheet_y":1,"sort_order":56},"🪁":{"category":"Activities","sheet_x":52,"sheet_y":2,"sort_order":57},"🪂":{"category":"Travel & Places","sheet_x":52,"sheet_y":3,"sort_order":122},"🪐":{"category":"Travel & Places","sheet_x":52,"sheet_y":4,"sort_order":180},"🪑":{"category":"Objects","sheet_x":52,"sheet_y":5,"sort_order":216},"🪒":{"category":"Objects","sheet_x":52,"sheet_y":6,"sort_order":220},"🪓":{"category":"Objects","sheet_x":52,"sheet_y":7,"sort_order":182},"🪔":{"category":"Objects","sheet_x":52,"sheet_y":8,"sort_order":103},"🪕":{"category":"Objects","sheet_x":52,"sheet_y":9,"sort_order":67},"‼️":{"category":"Symbols","sheet_x":52,"sheet_y":10,"sort_order":122},"⁉️":{"category":"Symbols","sheet_x":52,"sheet_y":11,"sort_order":123},"™️":{"category":"Symbols","sheet_x":52,"sheet_y":12,"sort_order":131},"ℹ️":{"category":"Symbols","sheet_x":52,"sheet_y":13,"sort_order":156},"↔️":{"category":"Symbols","sheet_x":52,"sheet_y":14,"sort_order":36},"↕️":{"category":"Symbols","sheet_x":52,"sheet_y":15,"sort_order":35},"↖️":{"category":"Symbols","sheet_x":52,"sheet_y":16,"sort_order":34},"↗️":{"category":"Symbols","sheet_x":52,"sheet_y":17,"sort_order":28},"↘️":{"category":"Symbols","sheet_x":52,"sheet_y":18,"sort_order":30},"↙️":{"category":"Symbols","sheet_x":52,"sheet_y":19,"sort_order":32},"↩️":{"category":"Symbols","sheet_x":52,"sheet_y":20,"sort_order":37},"↪️":{"category":"Symbols","sheet_x":52,"sheet_y":21,"sort_order":38},"⌚":{"category":"Travel & Places","sheet_x":52,"sheet_y":22,"sort_order":135},"⌛":{"category":"Travel & Places","sheet_x":52,"sheet_y":23,"sort_order":133},"⌨️":{"category":"Objects","sheet_x":52,"sheet_y":24,"sort_order":80},"⏏️":{"category":"Symbols","sheet_x":52,"sheet_y":25,"sort_order":90},"⏩":{"category":"Symbols","sheet_x":52,"sheet_y":26,"sort_order":77},"⏪":{"category":"Symbols","sheet_x":52,"sheet_y":27,"sort_order":81},"⏫":{"category":"Symbols","sheet_x":52,"sheet_y":28,"sort_order":84},"⏬":{"category":"Symbols","sheet_x":52,"sheet_y":29,"sort_order":86},"⏭️":{"category":"Symbols","sheet_x":52,"sheet_y":30,"sort_order":78},"⏮️":{"category":"Symbols","sheet_x":52,"sheet_y":31,"sort_order":82},"⏯️":{"category":"Symbols","sheet_x":52,"sheet_y":32,"sort_order":79},"⏰":{"category":"Travel & Places","sheet_x":52,"sheet_y":33,"sort_order":136},"⏱️":{"category":"Travel & Places","sheet_x":52,"sheet_y":34,"sort_order":137},"⏲️":{"category":"Travel & Places","sheet_x":52,"sheet_y":35,"sort_order":138},"⏳":{"category":"Travel & Places","sheet_x":52,"sheet_y":36,"sort_order":134},"⏸️":{"category":"Symbols","sheet_x":52,"sheet_y":37,"sort_order":87},"⏹️":{"category":"Symbols","sheet_x":52,"sheet_y":38,"sort_order":88},"⏺️":{"category":"Symbols","sheet_x":52,"sheet_y":39,"sort_order":89},"Ⓜ️":{"category":"Symbols","sheet_x":52,"sheet_y":40,"sort_order":158},"▪️":{"category":"Symbols","sheet_x":52,"sheet_y":41,"sort_order":206},"▫️":{"category":"Symbols","sheet_x":52,"sheet_y":42,"sort_order":207},"▶️":{"category":"Symbols","sheet_x":52,"sheet_y":43,"sort_order":76},"◀️":{"category":"Symbols","sheet_x":52,"sheet_y":44,"sort_order":80},"◻️":{"category":"Symbols","sheet_x":52,"sheet_y":45,"sort_order":203},"◼️":{"category":"Symbols","sheet_x":52,"sheet_y":46,"sort_order":202},"◽":{"category":"Symbols","sheet_x":52,"sheet_y":47,"sort_order":205},"◾":{"category":"Symbols","sheet_x":52,"sheet_y":48,"sort_order":204},"☀️":{"category":"Travel & Places","sheet_x":52,"sheet_y":49,"sort_order":177},"☁️":{"category":"Travel & Places","sheet_x":52,"sheet_y":50,"sort_order":185},"☂️":{"category":"Travel & Places","sheet_x":52,"sheet_y":51,"sort_order":200},"☃️":{"category":"Travel & Places","sheet_x":52,"sheet_y":52,"sort_order":205},"☄️":{"category":"Travel & Places","sheet_x":52,"sheet_y":53,"sort_order":207},"☎️":{"category":"Objects","sheet_x":52,"sheet_y":54,"sort_order":71},"☑️":{"category":"Symbols","sheet_x":52,"sheet_y":55,"sort_order":108},"☔":{"category":"Travel & Places","sheet_x":52,"sheet_y":56,"sort_order":201},"☕":{"category":"Food & Drink","sheet_x":53,"sheet_y":0,"sort_order":101},"☘️":{"category":"Animals & Nature","sheet_x":53,"sheet_y":1,"sort_order":123},"☝️":{"category":"People & Body","sheet_x":53,"sheet_y":2,"sort_order":18},"☠️":{"category":"Smileys & Emotion","sheet_x":53,"sheet_y":8,"sort_order":94},"☢️":{"category":"Symbols","sheet_x":53,"sheet_y":9,"sort_order":25},"☣️":{"category":"Symbols","sheet_x":53,"sheet_y":10,"sort_order":26},"☦️":{"category":"Symbols","sheet_x":53,"sheet_y":11,"sort_order":55},"☪️":{"category":"Symbols","sheet_x":53,"sheet_y":12,"sort_order":56},"☮️":{"category":"Symbols","sheet_x":53,"sheet_y":13,"sort_order":57},"☯️":{"category":"Symbols","sheet_x":53,"sheet_y":14,"sort_order":53},"☸️":{"category":"Symbols","sheet_x":53,"sheet_y":15,"sort_order":52},"☹️":{"category":"Smileys & Emotion","sheet_x":53,"sheet_y":16,"sort_order":66},"☺️":{"category":"Smileys & Emotion","sheet_x":53,"sheet_y":17,"sort_order":19},"♈":{"category":"Symbols","sheet_x":53,"sheet_y":20,"sort_order":60},"♉":{"category":"Symbols","sheet_x":53,"sheet_y":21,"sort_order":61},"♊":{"category":"Symbols","sheet_x":53,"sheet_y":22,"sort_order":62},"♋":{"category":"Symbols","sheet_x":53,"sheet_y":23,"sort_order":63},"♌":{"category":"Symbols","sheet_x":53,"sheet_y":24,"sort_order":64},"♍":{"category":"Symbols","sheet_x":53,"sheet_y":25,"sort_order":65},"♎":{"category":"Symbols","sheet_x":53,"sheet_y":26,"sort_order":66},"♏":{"category":"Symbols","sheet_x":53,"sheet_y":27,"sort_order":67},"♐":{"category":"Symbols","sheet_x":53,"sheet_y":28,"sort_order":68},"♑":{"category":"Symbols","sheet_x":53,"sheet_y":29,"sort_order":69},"♒":{"category":"Symbols","sheet_x":53,"sheet_y":30,"sort_order":70},"♓":{"category":"Symbols","sheet_x":53,"sheet_y":31,"sort_order":71},"♟️":{"category":"Activities","sheet_x":53,"sheet_y":32,"sort_order":71},"♠️":{"category":"Activities","sheet_x":53,"sheet_y":33,"sort_order":67},"♣️":{"category":"Activities","sheet_x":53,"sheet_y":34,"sort_order":70},"♥️":{"category":"Activities","sheet_x":53,"sheet_y":35,"sort_order":68},"♦️":{"category":"Activities","sheet_x":53,"sheet_y":36,"sort_order":69},"♨️":{"category":"Travel & Places","sheet_x":53,"sheet_y":37,"sort_order":57},"♻️":{"category":"Symbols","sheet_x":53,"sheet_y":38,"sort_order":101},"♾️":{"category":"Symbols","sheet_x":53,"sheet_y":39,"sort_order":100},"♿":{"category":"Symbols","sheet_x":53,"sheet_y":40,"sort_order":4},"⚒️":{"category":"Objects","sheet_x":53,"sheet_y":41,"sort_order":184},"⚓":{"category":"Travel & Places","sheet_x":53,"sheet_y":42,"sort_order":110},"⚔️":{"category":"Objects","sheet_x":53,"sheet_y":43,"sort_order":187},"⚖️":{"category":"Objects","sheet_x":53,"sheet_y":45,"sort_order":195},"⚗️":{"category":"Objects","sheet_x":53,"sheet_y":46,"sort_order":201},"⚙️":{"category":"Objects","sheet_x":53,"sheet_y":47,"sort_order":193},"⚛️":{"category":"Symbols","sheet_x":53,"sheet_y":48,"sort_order":49},"⚜️":{"category":"Symbols","sheet_x":53,"sheet_y":49,"sort_order":102},"⚠️":{"category":"Symbols","sheet_x":53,"sheet_y":50,"sort_order":14},"⚡":{"category":"Travel & Places","sheet_x":53,"sheet_y":51,"sort_order":203},"⚪":{"category":"Symbols","sheet_x":53,"sheet_y":52,"sort_order":192},"⚫":{"category":"Symbols","sheet_x":53,"sheet_y":53,"sort_order":191},"⚰️":{"category":"Objects","sheet_x":53,"sheet_y":54,"sort_order":231},"⚱️":{"category":"Objects","sheet_x":53,"sheet_y":55,"sort_order":232},"⚽":{"category":"Activities","sheet_x":53,"sheet_y":56,"sort_order":28},"⚾":{"category":"Activities","sheet_x":54,"sheet_y":0,"sort_order":29},"⛄":{"category":"Travel & Places","sheet_x":54,"sheet_y":1,"sort_order":206},"⛅":{"category":"Travel & Places","sheet_x":54,"sheet_y":2,"sort_order":186},"⛈️":{"category":"Travel & Places","sheet_x":54,"sheet_y":3,"sort_order":187},"⛎":{"category":"Symbols","sheet_x":54,"sheet_y":4,"sort_order":72},"⛏️":{"category":"Objects","sheet_x":54,"sheet_y":5,"sort_order":183},"⛑️":{"category":"Objects","sheet_x":54,"sheet_y":6,"sort_order":39},"⛓️":{"category":"Objects","sheet_x":54,"sheet_y":7,"sort_order":198},"⛔":{"category":"Symbols","sheet_x":54,"sheet_y":8,"sort_order":16},"⛩️":{"category":"Travel & Places","sheet_x":54,"sheet_y":9,"sort_order":45},"⛪":{"category":"Travel & Places","sheet_x":54,"sheet_y":10,"sort_order":41},"⛰️":{"category":"Travel & Places","sheet_x":54,"sheet_y":11,"sort_order":9},"⛱️":{"category":"Travel & Places","sheet_x":54,"sheet_y":12,"sort_order":202},"⛲":{"category":"Travel & Places","sheet_x":54,"sheet_y":13,"sort_order":47},"⛳":{"category":"Activities","sheet_x":54,"sheet_y":14,"sort_order":47},"⛴️":{"category":"Travel & Places","sheet_x":54,"sheet_y":15,"sort_order":115},"⛵":{"category":"Travel & Places","sheet_x":54,"sheet_y":16,"sort_order":111},"⛷️":{"category":"People & Body","sheet_x":54,"sheet_y":17,"sort_order":247},"⛸️":{"category":"Activities","sheet_x":54,"sheet_y":18,"sort_order":48},"⛹️‍♀️":{"category":"People & Body","sheet_x":54,"sheet_y":19,"sort_order":263},"⛹️‍♂️":{"category":"People & Body","sheet_x":54,"sheet_y":25,"sort_order":262},"⛹️":{"category":"People & Body","sheet_x":54,"sheet_y":31,"sort_order":261},"⛺":{"category":"Travel & Places","sheet_x":54,"sheet_y":37,"sort_order":48},"⛽":{"category":"Travel & Places","sheet_x":54,"sheet_y":38,"sort_order":104},"✂️":{"category":"Objects","sheet_x":54,"sheet_y":39,"sort_order":171},"✅":{"category":"Symbols","sheet_x":54,"sheet_y":40,"sort_order":107},"✈️":{"category":"Travel & Places","sheet_x":54,"sheet_y":41,"sort_order":118},"✉️":{"category":"Objects","sheet_x":54,"sheet_y":42,"sort_order":132},"✊":{"category":"People & Body","sheet_x":54,"sheet_y":43,"sort_order":21},"✋":{"category":"People & Body","sheet_x":54,"sheet_y":49,"sort_order":4},"✌️":{"category":"People & Body","sheet_x":54,"sheet_y":55,"sort_order":8},"✍️":{"category":"People & Body","sheet_x":55,"sheet_y":4,"sort_order":31},"✏️":{"category":"Objects","sheet_x":55,"sheet_y":10,"sort_order":145},"✒️":{"category":"Objects","sheet_x":55,"sheet_y":11,"sort_order":146},"✔️":{"category":"Symbols","sheet_x":55,"sheet_y":12,"sort_order":109},"✖️":{"category":"Symbols","sheet_x":55,"sheet_y":13,"sort_order":110},"✝️":{"category":"Symbols","sheet_x":55,"sheet_y":14,"sort_order":54},"✡️":{"category":"Symbols","sheet_x":55,"sheet_y":15,"sort_order":51},"✨":{"category":"Activities","sheet_x":55,"sheet_y":16,"sort_order":6},"✳️":{"category":"Symbols","sheet_x":55,"sheet_y":17,"sort_order":119},"✴️":{"category":"Symbols","sheet_x":55,"sheet_y":18,"sort_order":120},"❄️":{"category":"Travel & Places","sheet_x":55,"sheet_y":19,"sort_order":204},"❇️":{"category":"Symbols","sheet_x":55,"sheet_y":20,"sort_order":121},"❌":{"category":"Symbols","sheet_x":55,"sheet_y":21,"sort_order":111},"❎":{"category":"Symbols","sheet_x":55,"sheet_y":22,"sort_order":112},"❓":{"category":"Symbols","sheet_x":55,"sheet_y":23,"sort_order":124},"❔":{"category":"Symbols","sheet_x":55,"sheet_y":24,"sort_order":125},"❕":{"category":"Symbols","sheet_x":55,"sheet_y":25,"sort_order":126},"❗":{"category":"Symbols","sheet_x":55,"sheet_y":26,"sort_order":127},"❣️":{"category":"Smileys & Emotion","sheet_x":55,"sheet_y":27,"sort_order":125},"❤️":{"category":"Smileys & Emotion","sheet_x":55,"sheet_y":28,"sort_order":127},"➕":{"category":"Symbols","sheet_x":55,"sheet_y":29,"sort_order":113},"➖":{"category":"Symbols","sheet_x":55,"sheet_y":30,"sort_order":114},"➗":{"category":"Symbols","sheet_x":55,"sheet_y":31,"sort_order":115},"➡️":{"category":"Symbols","sheet_x":55,"sheet_y":32,"sort_order":29},"➰":{"category":"Symbols","sheet_x":55,"sheet_y":33,"sort_order":116},"➿":{"category":"Symbols","sheet_x":55,"sheet_y":34,"sort_order":117},"⤴️":{"category":"Symbols","sheet_x":55,"sheet_y":35,"sort_order":39},"⤵️":{"category":"Symbols","sheet_x":55,"sheet_y":36,"sort_order":40},"⬅️":{"category":"Symbols","sheet_x":55,"sheet_y":37,"sort_order":33},"⬆️":{"category":"Symbols","sheet_x":55,"sheet_y":38,"sort_order":27},"⬇️":{"category":"Symbols","sheet_x":55,"sheet_y":39,"sort_order":31},"⬛":{"category":"Symbols","sheet_x":55,"sheet_y":40,"sort_order":200},"⬜":{"category":"Symbols","sheet_x":55,"sheet_y":41,"sort_order":201},"⭐":{"category":"Travel & Places","sheet_x":55,"sheet_y":42,"sort_order":181},"⭕":{"category":"Symbols","sheet_x":55,"sheet_y":43,"sort_order":106},"〰️":{"category":"Symbols","sheet_x":55,"sheet_y":44,"sort_order":128},"〽️":{"category":"Symbols","sheet_x":55,"sheet_y":45,"sort_order":118},"㊗️":{"category":"Symbols","sheet_x":55,"sheet_y":46,"sort_order":180},"㊙️":{"category":"Symbols","sheet_x":55,"sheet_y":47,"sort_order":181}} + }; +} + +Config.Schema = Config.Schema || {}; + +Config.Schema.MTProto = {"constructors":[{"id":"481674261","predicate":"vector","params":[],"type":"Vector t"},{"id":"85337187","predicate":"resPQ","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"pq","type":"bytes"},{"name":"server_public_key_fingerprints","type":"Vector"}],"type":"ResPQ"},{"id":"-2083955988","predicate":"p_q_inner_data","params":[{"name":"pq","type":"bytes"},{"name":"p","type":"bytes"},{"name":"q","type":"bytes"},{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce","type":"int256"}],"type":"P_Q_inner_data"},{"id":"1013613780","predicate":"p_q_inner_data_temp","params":[{"name":"pq","type":"bytes"},{"name":"p","type":"bytes"},{"name":"q","type":"bytes"},{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce","type":"int256"},{"name":"expires_in","type":"int"}],"type":"P_Q_inner_data"},{"id":"2043348061","predicate":"server_DH_params_fail","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce_hash","type":"int128"}],"type":"Server_DH_Params"},{"id":"-790100132","predicate":"server_DH_params_ok","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"encrypted_answer","type":"bytes"}],"type":"Server_DH_Params"},{"id":"-1249309254","predicate":"server_DH_inner_data","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"g","type":"int"},{"name":"dh_prime","type":"bytes"},{"name":"g_a","type":"bytes"},{"name":"server_time","type":"int"}],"type":"Server_DH_inner_data"},{"id":"1715713620","predicate":"client_DH_inner_data","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"retry_id","type":"long"},{"name":"g_b","type":"bytes"}],"type":"Client_DH_Inner_Data"},{"id":"1003222836","predicate":"dh_gen_ok","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce_hash1","type":"int128"}],"type":"Set_client_DH_params_answer"},{"id":"1188831161","predicate":"dh_gen_retry","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce_hash2","type":"int128"}],"type":"Set_client_DH_params_answer"},{"id":"-1499615742","predicate":"dh_gen_fail","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce_hash3","type":"int128"}],"type":"Set_client_DH_params_answer"},{"id":"-212046591","predicate":"rpc_result","params":[{"name":"req_msg_id","type":"long"},{"name":"result","type":"Object"}],"type":"RpcResult"},{"id":"558156313","predicate":"rpc_error","params":[{"name":"error_code","type":"int"},{"name":"error_message","type":"string"}],"type":"RpcError"},{"id":"1579864942","predicate":"rpc_answer_unknown","params":[],"type":"RpcDropAnswer"},{"id":"-847714938","predicate":"rpc_answer_dropped_running","params":[],"type":"RpcDropAnswer"},{"id":"-1539647305","predicate":"rpc_answer_dropped","params":[{"name":"msg_id","type":"long"},{"name":"seq_no","type":"int"},{"name":"bytes","type":"int"}],"type":"RpcDropAnswer"},{"id":"155834844","predicate":"future_salt","params":[{"name":"valid_since","type":"int"},{"name":"valid_until","type":"int"},{"name":"salt","type":"long"}],"type":"FutureSalt"},{"id":"-1370486635","predicate":"future_salts","params":[{"name":"req_msg_id","type":"long"},{"name":"now","type":"int"},{"name":"salts","type":"vector"}],"type":"FutureSalts"},{"id":"880243653","predicate":"pong","params":[{"name":"msg_id","type":"long"},{"name":"ping_id","type":"long"}],"type":"Pong"},{"id":"-501201412","predicate":"destroy_session_ok","params":[{"name":"session_id","type":"long"}],"type":"DestroySessionRes"},{"id":"1658015945","predicate":"destroy_session_none","params":[{"name":"session_id","type":"long"}],"type":"DestroySessionRes"},{"id":"-1631450872","predicate":"new_session_created","params":[{"name":"first_msg_id","type":"long"},{"name":"unique_id","type":"long"},{"name":"server_salt","type":"long"}],"type":"NewSession"},{"id":"1945237724","predicate":"msg_container","params":[{"name":"messages","type":"vector<%Message>"}],"type":"MessageContainer"},{"id":"1538843921","predicate":"message","params":[{"name":"msg_id","type":"long"},{"name":"seqno","type":"int"},{"name":"bytes","type":"int"},{"name":"body","type":"Object"}],"type":"Message"},{"id":"-530561358","predicate":"msg_copy","params":[{"name":"orig_message","type":"Message"}],"type":"MessageCopy"},{"id":"812830625","predicate":"gzip_packed","params":[{"name":"packed_data","type":"bytes"}],"type":"Object"},{"id":"1658238041","predicate":"msgs_ack","params":[{"name":"msg_ids","type":"Vector"}],"type":"MsgsAck"},{"id":"-1477445615","predicate":"bad_msg_notification","params":[{"name":"bad_msg_id","type":"long"},{"name":"bad_msg_seqno","type":"int"},{"name":"error_code","type":"int"}],"type":"BadMsgNotification"},{"id":"-307542917","predicate":"bad_server_salt","params":[{"name":"bad_msg_id","type":"long"},{"name":"bad_msg_seqno","type":"int"},{"name":"error_code","type":"int"},{"name":"new_server_salt","type":"long"}],"type":"BadMsgNotification"},{"id":"2105940488","predicate":"msg_resend_req","params":[{"name":"msg_ids","type":"Vector"}],"type":"MsgResendReq"},{"id":"-630588590","predicate":"msgs_state_req","params":[{"name":"msg_ids","type":"Vector"}],"type":"MsgsStateReq"},{"id":"81704317","predicate":"msgs_state_info","params":[{"name":"req_msg_id","type":"long"},{"name":"info","type":"bytes"}],"type":"MsgsStateInfo"},{"id":"-1933520591","predicate":"msgs_all_info","params":[{"name":"msg_ids","type":"Vector"},{"name":"info","type":"bytes"}],"type":"MsgsAllInfo"},{"id":"661470918","predicate":"msg_detailed_info","params":[{"name":"msg_id","type":"long"},{"name":"answer_msg_id","type":"long"},{"name":"bytes","type":"int"},{"name":"status","type":"int"}],"type":"MsgDetailedInfo"},{"id":"-2137147681","predicate":"msg_new_detailed_info","params":[{"name":"answer_msg_id","type":"long"},{"name":"bytes","type":"int"},{"name":"status","type":"int"}],"type":"MsgDetailedInfo"},{"id":"1973679973","predicate":"bind_auth_key_inner","params":[{"name":"nonce","type":"long"},{"name":"temp_auth_key_id","type":"long"},{"name":"perm_auth_key_id","type":"long"},{"name":"temp_session_id","type":"long"},{"name":"expires_at","type":"int"}],"type":"BindAuthKeyInner"}],"methods":[{"id":"3195965169","method":"req_pq_multi","params":[{"name":"nonce","type":"int128"}],"type":"ResPQ"},{"id":"1615239032","method":"req_pq","params":[{"name":"nonce","type":"int128"}],"type":"ResPQ"},{"id":"-686627650","method":"req_DH_params","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"p","type":"bytes"},{"name":"q","type":"bytes"},{"name":"public_key_fingerprint","type":"long"},{"name":"encrypted_data","type":"bytes"}],"type":"Server_DH_Params"},{"id":"-184262881","method":"set_client_DH_params","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"encrypted_data","type":"bytes"}],"type":"Set_client_DH_params_answer"},{"id":"1491380032","method":"rpc_drop_answer","params":[{"name":"req_msg_id","type":"long"}],"type":"RpcDropAnswer"},{"id":"-1188971260","method":"get_future_salts","params":[{"name":"num","type":"int"}],"type":"FutureSalts"},{"id":"2059302892","method":"ping","params":[{"name":"ping_id","type":"long"}],"type":"Pong"},{"id":"-213746804","method":"ping_delay_disconnect","params":[{"name":"ping_id","type":"long"},{"name":"disconnect_delay","type":"int"}],"type":"Pong"},{"id":"-414113498","method":"destroy_session","params":[{"name":"session_id","type":"long"}],"type":"DestroySessionRes"},{"id":"-1835453025","method":"http_wait","params":[{"name":"max_delay","type":"int"},{"name":"wait_after","type":"int"},{"name":"max_wait","type":"int"}],"type":"HttpWait"}]}; + +Config.Schema.API = {"constructors":[{"id":"-1132882121","predicate":"boolFalse","params":[],"type":"Bool"},{"id":"-1720552011","predicate":"boolTrue","params":[],"type":"Bool"},{"id":"1072550713","predicate":"true","params":[],"type":"True"},{"id":"481674261","predicate":"vector","params":[],"type":"Vector t"},{"id":"-994444869","predicate":"error","params":[{"name":"code","type":"int"},{"name":"text","type":"string"}],"type":"Error"},{"id":"1450380236","predicate":"null","params":[],"type":"Null"},{"id":"2134579434","predicate":"inputPeerEmpty","params":[],"type":"InputPeer"},{"id":"2107670217","predicate":"inputPeerSelf","params":[],"type":"InputPeer"},{"id":"396093539","predicate":"inputPeerChat","params":[{"name":"chat_id","type":"int"}],"type":"InputPeer"},{"id":"-1182234929","predicate":"inputUserEmpty","params":[],"type":"InputUser"},{"id":"-138301121","predicate":"inputUserSelf","params":[],"type":"InputUser"},{"id":"-208488460","predicate":"inputPhoneContact","params":[{"name":"client_id","type":"long"},{"name":"phone","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"InputContact"},{"id":"-181407105","predicate":"inputFile","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"name","type":"string"},{"name":"md5_checksum","type":"string"}],"type":"InputFile"},{"id":"-1771768449","predicate":"inputMediaEmpty","params":[],"type":"InputMedia"},{"id":"505969924","predicate":"inputMediaUploadedPhoto","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"stickers","type":"flags.0?Vector"},{"name":"ttl_seconds","type":"flags.1?int"}],"type":"InputMedia"},{"id":"-1279654347","predicate":"inputMediaPhoto","params":[{"name":"flags","type":"#"},{"name":"id","type":"InputPhoto"},{"name":"ttl_seconds","type":"flags.0?int"}],"type":"InputMedia"},{"id":"-104578748","predicate":"inputMediaGeoPoint","params":[{"name":"geo_point","type":"InputGeoPoint"}],"type":"InputMedia"},{"id":"-122978821","predicate":"inputMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"}],"type":"InputMedia"},{"id":"480546647","predicate":"inputChatPhotoEmpty","params":[],"type":"InputChatPhoto"},{"id":"-1837345356","predicate":"inputChatUploadedPhoto","params":[{"name":"file","type":"InputFile"}],"type":"InputChatPhoto"},{"id":"-1991004873","predicate":"inputChatPhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"InputChatPhoto"},{"id":"-457104426","predicate":"inputGeoPointEmpty","params":[],"type":"InputGeoPoint"},{"id":"-206066487","predicate":"inputGeoPoint","params":[{"name":"lat","type":"double"},{"name":"long","type":"double"}],"type":"InputGeoPoint"},{"id":"483901197","predicate":"inputPhotoEmpty","params":[],"type":"InputPhoto"},{"id":"1001634122","predicate":"inputPhoto","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"}],"type":"InputPhoto"},{"id":"-539317279","predicate":"inputFileLocation","params":[{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"},{"name":"file_reference","type":"bytes"}],"type":"InputFileLocation"},{"id":"-1649296275","predicate":"peerUser","params":[{"name":"user_id","type":"int"}],"type":"Peer"},{"id":"-1160714821","predicate":"peerChat","params":[{"name":"chat_id","type":"int"}],"type":"Peer"},{"id":"-1432995067","predicate":"storage.fileUnknown","params":[],"type":"storage.FileType"},{"id":"1086091090","predicate":"storage.filePartial","params":[],"type":"storage.FileType"},{"id":"8322574","predicate":"storage.fileJpeg","params":[],"type":"storage.FileType"},{"id":"-891180321","predicate":"storage.fileGif","params":[],"type":"storage.FileType"},{"id":"172975040","predicate":"storage.filePng","params":[],"type":"storage.FileType"},{"id":"-1373745011","predicate":"storage.filePdf","params":[],"type":"storage.FileType"},{"id":"1384777335","predicate":"storage.fileMp3","params":[],"type":"storage.FileType"},{"id":"1258941372","predicate":"storage.fileMov","params":[],"type":"storage.FileType"},{"id":"-1278304028","predicate":"storage.fileMp4","params":[],"type":"storage.FileType"},{"id":"276907596","predicate":"storage.fileWebp","params":[],"type":"storage.FileType"},{"id":"537022650","predicate":"userEmpty","params":[{"name":"id","type":"int"}],"type":"User"},{"id":"1326562017","predicate":"userProfilePhotoEmpty","params":[],"type":"UserProfilePhoto"},{"id":"-321430132","predicate":"userProfilePhoto","params":[{"name":"photo_id","type":"long"},{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"},{"name":"dc_id","type":"int"}],"type":"UserProfilePhoto"},{"id":"164646985","predicate":"userStatusEmpty","params":[],"type":"UserStatus"},{"id":"-306628279","predicate":"userStatusOnline","params":[{"name":"expires","type":"int"}],"type":"UserStatus"},{"id":"9203775","predicate":"userStatusOffline","params":[{"name":"was_online","type":"int"}],"type":"UserStatus"},{"id":"-1683826688","predicate":"chatEmpty","params":[{"name":"id","type":"int"}],"type":"Chat"},{"id":"1004149726","predicate":"chat","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"kicked","type":"flags.1?true"},{"name":"left","type":"flags.2?true"},{"name":"deactivated","type":"flags.5?true"},{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"photo","type":"ChatPhoto"},{"name":"participants_count","type":"int"},{"name":"date","type":"int"},{"name":"version","type":"int"},{"name":"migrated_to","type":"flags.6?InputChannel"},{"name":"admin_rights","type":"flags.14?ChatAdminRights"},{"name":"default_banned_rights","type":"flags.18?ChatBannedRights"}],"type":"Chat"},{"id":"120753115","predicate":"chatForbidden","params":[{"name":"id","type":"int"},{"name":"title","type":"string"}],"type":"Chat"},{"id":"461151667","predicate":"chatFull","params":[{"name":"flags","type":"#"},{"name":"can_set_username","type":"flags.7?true"},{"name":"has_scheduled","type":"flags.8?true"},{"name":"id","type":"int"},{"name":"about","type":"string"},{"name":"participants","type":"ChatParticipants"},{"name":"chat_photo","type":"flags.2?Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"exported_invite","type":"ExportedChatInvite"},{"name":"bot_info","type":"flags.3?Vector"},{"name":"pinned_msg_id","type":"flags.6?int"},{"name":"folder_id","type":"flags.11?int"}],"type":"ChatFull"},{"id":"-925415106","predicate":"chatParticipant","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChatParticipant"},{"id":"-57668565","predicate":"chatParticipantsForbidden","params":[{"name":"flags","type":"#"},{"name":"chat_id","type":"int"},{"name":"self_participant","type":"flags.0?ChatParticipant"}],"type":"ChatParticipants"},{"id":"1061556205","predicate":"chatParticipants","params":[{"name":"chat_id","type":"int"},{"name":"participants","type":"Vector"},{"name":"version","type":"int"}],"type":"ChatParticipants"},{"id":"935395612","predicate":"chatPhotoEmpty","params":[],"type":"ChatPhoto"},{"id":"1197267925","predicate":"chatPhoto","params":[{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"},{"name":"dc_id","type":"int"}],"type":"ChatPhoto"},{"id":"-2082087340","predicate":"messageEmpty","params":[{"name":"id","type":"int"}],"type":"Message"},{"id":"1160515173","predicate":"message","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"from_scheduled","type":"flags.18?true"},{"name":"legacy","type":"flags.19?true"},{"name":"edit_hide","type":"flags.21?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?int"},{"name":"to_id","type":"Peer"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"date","type":"int"},{"name":"message","type":"string"},{"name":"media","type":"flags.9?MessageMedia"},{"name":"reply_markup","type":"flags.6?ReplyMarkup"},{"name":"entities","type":"flags.7?Vector"},{"name":"views","type":"flags.10?int"},{"name":"edit_date","type":"flags.15?int"},{"name":"post_author","type":"flags.16?string"},{"name":"grouped_id","type":"flags.17?long"},{"name":"restriction_reason","type":"flags.22?Vector"}],"type":"Message"},{"id":"-1642487306","predicate":"messageService","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"legacy","type":"flags.19?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?int"},{"name":"to_id","type":"Peer"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"date","type":"int"},{"name":"action","type":"MessageAction"}],"type":"Message"},{"id":"1038967584","predicate":"messageMediaEmpty","params":[],"type":"MessageMedia"},{"id":"1766936791","predicate":"messageMediaPhoto","params":[{"name":"flags","type":"#"},{"name":"photo","type":"flags.0?Photo"},{"name":"ttl_seconds","type":"flags.2?int"}],"type":"MessageMedia"},{"id":"1457575028","predicate":"messageMediaGeo","params":[{"name":"geo","type":"GeoPoint"}],"type":"MessageMedia"},{"id":"-873313984","predicate":"messageMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"},{"name":"user_id","type":"int"}],"type":"MessageMedia"},{"id":"-1618676578","predicate":"messageMediaUnsupported","params":[],"type":"MessageMedia"},{"id":"-1230047312","predicate":"messageActionEmpty","params":[],"type":"MessageAction"},{"id":"-1503425638","predicate":"messageActionChatCreate","params":[{"name":"title","type":"string"},{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":"-1247687078","predicate":"messageActionChatEditTitle","params":[{"name":"title","type":"string"}],"type":"MessageAction"},{"id":"2144015272","predicate":"messageActionChatEditPhoto","params":[{"name":"photo","type":"Photo"}],"type":"MessageAction"},{"id":"-1780220945","predicate":"messageActionChatDeletePhoto","params":[],"type":"MessageAction"},{"id":"1217033015","predicate":"messageActionChatAddUser","params":[{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":"-1297179892","predicate":"messageActionChatDeleteUser","params":[{"name":"user_id","type":"int"}],"type":"MessageAction"},{"id":"739712882","predicate":"dialog","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.2?true"},{"name":"unread_mark","type":"flags.3?true"},{"name":"peer","type":"Peer"},{"name":"top_message","type":"int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"unread_mentions_count","type":"int"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"pts","type":"flags.0?int"},{"name":"draft","type":"flags.1?DraftMessage"},{"name":"folder_id","type":"flags.4?int"}],"type":"Dialog"},{"id":"590459437","predicate":"photoEmpty","params":[{"name":"id","type":"long"}],"type":"Photo"},{"id":"-797637467","predicate":"photo","params":[{"name":"flags","type":"#"},{"name":"has_stickers","type":"flags.0?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"date","type":"int"},{"name":"sizes","type":"Vector"},{"name":"dc_id","type":"int"}],"type":"Photo"},{"id":"236446268","predicate":"photoSizeEmpty","params":[{"name":"type","type":"string"}],"type":"PhotoSize"},{"id":"2009052699","predicate":"photoSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"size","type":"int"}],"type":"PhotoSize"},{"id":"-374917894","predicate":"photoCachedSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"bytes","type":"bytes"}],"type":"PhotoSize"},{"id":"286776671","predicate":"geoPointEmpty","params":[],"type":"GeoPoint"},{"id":"43446532","predicate":"geoPoint","params":[{"name":"long","type":"double"},{"name":"lat","type":"double"},{"name":"access_hash","type":"long"}],"type":"GeoPoint"},{"id":"1577067778","predicate":"auth.sentCode","params":[{"name":"flags","type":"#"},{"name":"type","type":"auth.SentCodeType"},{"name":"phone_code_hash","type":"string"},{"name":"next_type","type":"flags.1?auth.CodeType"},{"name":"timeout","type":"flags.2?int"}],"type":"auth.SentCode"},{"id":"-855308010","predicate":"auth.authorization","params":[{"name":"flags","type":"#"},{"name":"tmp_sessions","type":"flags.0?int"},{"name":"user","type":"User"}],"type":"auth.Authorization"},{"id":"-543777747","predicate":"auth.exportedAuthorization","params":[{"name":"id","type":"int"},{"name":"bytes","type":"bytes"}],"type":"auth.ExportedAuthorization"},{"id":"-1195615476","predicate":"inputNotifyPeer","params":[{"name":"peer","type":"InputPeer"}],"type":"InputNotifyPeer"},{"id":"423314455","predicate":"inputNotifyUsers","params":[],"type":"InputNotifyPeer"},{"id":"1251338318","predicate":"inputNotifyChats","params":[],"type":"InputNotifyPeer"},{"id":"-1673717362","predicate":"inputPeerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?Bool"},{"name":"silent","type":"flags.1?Bool"},{"name":"mute_until","type":"flags.2?int"},{"name":"sound","type":"flags.3?string"}],"type":"InputPeerNotifySettings"},{"id":"-1353671392","predicate":"peerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?Bool"},{"name":"silent","type":"flags.1?Bool"},{"name":"mute_until","type":"flags.2?int"},{"name":"sound","type":"flags.3?string"}],"type":"PeerNotifySettings"},{"id":"-2122045747","predicate":"peerSettings","params":[{"name":"flags","type":"#"},{"name":"report_spam","type":"flags.0?true"},{"name":"add_contact","type":"flags.1?true"},{"name":"block_contact","type":"flags.2?true"},{"name":"share_contact","type":"flags.3?true"},{"name":"need_contacts_exception","type":"flags.4?true"},{"name":"report_geo","type":"flags.5?true"}],"type":"PeerSettings"},{"id":"-1539849235","predicate":"wallPaper","params":[{"name":"id","type":"long"},{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"default","type":"flags.1?true"},{"name":"pattern","type":"flags.3?true"},{"name":"dark","type":"flags.4?true"},{"name":"access_hash","type":"long"},{"name":"slug","type":"string"},{"name":"document","type":"Document"},{"name":"settings","type":"flags.2?WallPaperSettings"}],"type":"WallPaper"},{"id":"1490799288","predicate":"inputReportReasonSpam","params":[],"type":"ReportReason"},{"id":"505595789","predicate":"inputReportReasonViolence","params":[],"type":"ReportReason"},{"id":"777640226","predicate":"inputReportReasonPornography","params":[],"type":"ReportReason"},{"id":"-1376497949","predicate":"inputReportReasonChildAbuse","params":[],"type":"ReportReason"},{"id":"-512463606","predicate":"inputReportReasonOther","params":[{"name":"text","type":"string"}],"type":"ReportReason"},{"id":"-302941166","predicate":"userFull","params":[{"name":"flags","type":"#"},{"name":"blocked","type":"flags.0?true"},{"name":"phone_calls_available","type":"flags.4?true"},{"name":"phone_calls_private","type":"flags.5?true"},{"name":"can_pin_message","type":"flags.7?true"},{"name":"has_scheduled","type":"flags.12?true"},{"name":"user","type":"User"},{"name":"about","type":"flags.1?string"},{"name":"settings","type":"PeerSettings"},{"name":"profile_photo","type":"flags.2?Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"bot_info","type":"flags.3?BotInfo"},{"name":"pinned_msg_id","type":"flags.6?int"},{"name":"common_chats_count","type":"int"},{"name":"folder_id","type":"flags.11?int"}],"type":"UserFull"},{"id":"-116274796","predicate":"contact","params":[{"name":"user_id","type":"int"},{"name":"mutual","type":"Bool"}],"type":"Contact"},{"id":"-805141448","predicate":"importedContact","params":[{"name":"user_id","type":"int"},{"name":"client_id","type":"long"}],"type":"ImportedContact"},{"id":"1444661369","predicate":"contactBlocked","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"ContactBlocked"},{"id":"-748155807","predicate":"contactStatus","params":[{"name":"user_id","type":"int"},{"name":"status","type":"UserStatus"}],"type":"ContactStatus"},{"id":"-1219778094","predicate":"contacts.contactsNotModified","params":[],"type":"contacts.Contacts"},{"id":"-353862078","predicate":"contacts.contacts","params":[{"name":"contacts","type":"Vector"},{"name":"saved_count","type":"int"},{"name":"users","type":"Vector"}],"type":"contacts.Contacts"},{"id":"2010127419","predicate":"contacts.importedContacts","params":[{"name":"imported","type":"Vector"},{"name":"popular_invites","type":"Vector"},{"name":"retry_contacts","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.ImportedContacts"},{"id":"471043349","predicate":"contacts.blocked","params":[{"name":"blocked","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":"-1878523231","predicate":"contacts.blockedSlice","params":[{"name":"count","type":"int"},{"name":"blocked","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":"364538944","predicate":"messages.dialogs","params":[{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Dialogs"},{"id":"1910543603","predicate":"messages.dialogsSlice","params":[{"name":"count","type":"int"},{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Dialogs"},{"id":"-1938715001","predicate":"messages.messages","params":[{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"-923939298","predicate":"messages.messagesSlice","params":[{"name":"flags","type":"#"},{"name":"inexact","type":"flags.1?true"},{"name":"count","type":"int"},{"name":"next_rate","type":"flags.0?int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"1694474197","predicate":"messages.chats","params":[{"name":"chats","type":"Vector"}],"type":"messages.Chats"},{"id":"-438840932","predicate":"messages.chatFull","params":[{"name":"full_chat","type":"ChatFull"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.ChatFull"},{"id":"-1269012015","predicate":"messages.affectedHistory","params":[{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"offset","type":"int"}],"type":"messages.AffectedHistory"},{"id":"1474492012","predicate":"inputMessagesFilterEmpty","params":[],"type":"MessagesFilter"},{"id":"-1777752804","predicate":"inputMessagesFilterPhotos","params":[],"type":"MessagesFilter"},{"id":"-1614803355","predicate":"inputMessagesFilterVideo","params":[],"type":"MessagesFilter"},{"id":"1458172132","predicate":"inputMessagesFilterPhotoVideo","params":[],"type":"MessagesFilter"},{"id":"-1629621880","predicate":"inputMessagesFilterDocument","params":[],"type":"MessagesFilter"},{"id":"2129714567","predicate":"inputMessagesFilterUrl","params":[],"type":"MessagesFilter"},{"id":"-3644025","predicate":"inputMessagesFilterGif","params":[],"type":"MessagesFilter"},{"id":"522914557","predicate":"updateNewMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1318109142","predicate":"updateMessageID","params":[{"name":"id","type":"int"},{"name":"random_id","type":"long"}],"type":"Update"},{"id":"-1576161051","predicate":"updateDeleteMessages","params":[{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1548249383","predicate":"updateUserTyping","params":[{"name":"user_id","type":"int"},{"name":"action","type":"SendMessageAction"}],"type":"Update"},{"id":"-1704596961","predicate":"updateChatUserTyping","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"action","type":"SendMessageAction"}],"type":"Update"},{"id":"125178264","predicate":"updateChatParticipants","params":[{"name":"participants","type":"ChatParticipants"}],"type":"Update"},{"id":"469489699","predicate":"updateUserStatus","params":[{"name":"user_id","type":"int"},{"name":"status","type":"UserStatus"}],"type":"Update"},{"id":"-1489818765","predicate":"updateUserName","params":[{"name":"user_id","type":"int"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"username","type":"string"}],"type":"Update"},{"id":"-1791935732","predicate":"updateUserPhoto","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"},{"name":"photo","type":"UserProfilePhoto"},{"name":"previous","type":"Bool"}],"type":"Update"},{"id":"-1519637954","predicate":"updates.state","params":[{"name":"pts","type":"int"},{"name":"qts","type":"int"},{"name":"date","type":"int"},{"name":"seq","type":"int"},{"name":"unread_count","type":"int"}],"type":"updates.State"},{"id":"1567990072","predicate":"updates.differenceEmpty","params":[{"name":"date","type":"int"},{"name":"seq","type":"int"}],"type":"updates.Difference"},{"id":"16030880","predicate":"updates.difference","params":[{"name":"new_messages","type":"Vector"},{"name":"new_encrypted_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"state","type":"updates.State"}],"type":"updates.Difference"},{"id":"-1459938943","predicate":"updates.differenceSlice","params":[{"name":"new_messages","type":"Vector"},{"name":"new_encrypted_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"intermediate_state","type":"updates.State"}],"type":"updates.Difference"},{"id":"-484987010","predicate":"updatesTooLong","params":[],"type":"Updates"},{"id":"-1857044719","predicate":"updateShortMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"id","type":"int"},{"name":"user_id","type":"int"},{"name":"message","type":"string"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"377562760","predicate":"updateShortChatMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"id","type":"int"},{"name":"from_id","type":"int"},{"name":"chat_id","type":"int"},{"name":"message","type":"string"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"2027216577","predicate":"updateShort","params":[{"name":"update","type":"Update"},{"name":"date","type":"int"}],"type":"Updates"},{"id":"1918567619","predicate":"updatesCombined","params":[{"name":"updates","type":"Vector"},{"name":"users","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"date","type":"int"},{"name":"seq_start","type":"int"},{"name":"seq","type":"int"}],"type":"Updates"},{"id":"1957577280","predicate":"updates","params":[{"name":"updates","type":"Vector"},{"name":"users","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"date","type":"int"},{"name":"seq","type":"int"}],"type":"Updates"},{"id":"-1916114267","predicate":"photos.photos","params":[{"name":"photos","type":"Vector"},{"name":"users","type":"Vector"}],"type":"photos.Photos"},{"id":"352657236","predicate":"photos.photosSlice","params":[{"name":"count","type":"int"},{"name":"photos","type":"Vector"},{"name":"users","type":"Vector"}],"type":"photos.Photos"},{"id":"539045032","predicate":"photos.photo","params":[{"name":"photo","type":"Photo"},{"name":"users","type":"Vector"}],"type":"photos.Photo"},{"id":"157948117","predicate":"upload.file","params":[{"name":"type","type":"storage.FileType"},{"name":"mtime","type":"int"},{"name":"bytes","type":"bytes"}],"type":"upload.File"},{"id":"414687501","predicate":"dcOption","params":[{"name":"flags","type":"#"},{"name":"ipv6","type":"flags.0?true"},{"name":"media_only","type":"flags.1?true"},{"name":"tcpo_only","type":"flags.2?true"},{"name":"cdn","type":"flags.3?true"},{"name":"static","type":"flags.4?true"},{"name":"id","type":"int"},{"name":"ip_address","type":"string"},{"name":"port","type":"int"},{"name":"secret","type":"flags.10?bytes"}],"type":"DcOption"},{"id":"856375399","predicate":"config","params":[{"name":"flags","type":"#"},{"name":"phonecalls_enabled","type":"flags.1?true"},{"name":"default_p2p_contacts","type":"flags.3?true"},{"name":"preload_featured_stickers","type":"flags.4?true"},{"name":"ignore_phone_entities","type":"flags.5?true"},{"name":"revoke_pm_inbox","type":"flags.6?true"},{"name":"blocked_mode","type":"flags.8?true"},{"name":"pfs_enabled","type":"flags.13?true"},{"name":"date","type":"int"},{"name":"expires","type":"int"},{"name":"test_mode","type":"Bool"},{"name":"this_dc","type":"int"},{"name":"dc_options","type":"Vector"},{"name":"dc_txt_domain_name","type":"string"},{"name":"chat_size_max","type":"int"},{"name":"megagroup_size_max","type":"int"},{"name":"forwarded_count_max","type":"int"},{"name":"online_update_period_ms","type":"int"},{"name":"offline_blur_timeout_ms","type":"int"},{"name":"offline_idle_timeout_ms","type":"int"},{"name":"online_cloud_timeout_ms","type":"int"},{"name":"notify_cloud_delay_ms","type":"int"},{"name":"notify_default_delay_ms","type":"int"},{"name":"push_chat_period_ms","type":"int"},{"name":"push_chat_limit","type":"int"},{"name":"saved_gifs_limit","type":"int"},{"name":"edit_time_limit","type":"int"},{"name":"revoke_time_limit","type":"int"},{"name":"revoke_pm_time_limit","type":"int"},{"name":"rating_e_decay","type":"int"},{"name":"stickers_recent_limit","type":"int"},{"name":"stickers_faved_limit","type":"int"},{"name":"channels_read_media_period","type":"int"},{"name":"tmp_sessions","type":"flags.0?int"},{"name":"pinned_dialogs_count_max","type":"int"},{"name":"pinned_infolder_count_max","type":"int"},{"name":"call_receive_timeout_ms","type":"int"},{"name":"call_ring_timeout_ms","type":"int"},{"name":"call_connect_timeout_ms","type":"int"},{"name":"call_packet_timeout_ms","type":"int"},{"name":"me_url_prefix","type":"string"},{"name":"autoupdate_url_prefix","type":"flags.7?string"},{"name":"gif_search_username","type":"flags.9?string"},{"name":"venue_search_username","type":"flags.10?string"},{"name":"img_search_username","type":"flags.11?string"},{"name":"static_maps_provider","type":"flags.12?string"},{"name":"caption_length_max","type":"int"},{"name":"message_length_max","type":"int"},{"name":"webfile_dc_id","type":"int"},{"name":"suggested_lang_code","type":"flags.2?string"},{"name":"lang_pack_version","type":"flags.2?int"},{"name":"base_lang_pack_version","type":"flags.2?int"}],"type":"Config"},{"id":"-1910892683","predicate":"nearestDc","params":[{"name":"country","type":"string"},{"name":"this_dc","type":"int"},{"name":"nearest_dc","type":"int"}],"type":"NearestDc"},{"id":"497489295","predicate":"help.appUpdate","params":[{"name":"flags","type":"#"},{"name":"can_not_skip","type":"flags.0?true"},{"name":"id","type":"int"},{"name":"version","type":"string"},{"name":"text","type":"string"},{"name":"entities","type":"Vector"},{"name":"document","type":"flags.1?Document"},{"name":"url","type":"flags.2?string"}],"type":"help.AppUpdate"},{"id":"-1000708810","predicate":"help.noAppUpdate","params":[],"type":"help.AppUpdate"},{"id":"415997816","predicate":"help.inviteText","params":[{"name":"message","type":"string"}],"type":"help.InviteText"},{"id":"314359194","predicate":"updateNewEncryptedMessage","params":[{"name":"message","type":"EncryptedMessage"},{"name":"qts","type":"int"}],"type":"Update"},{"id":"386986326","predicate":"updateEncryptedChatTyping","params":[{"name":"chat_id","type":"int"}],"type":"Update"},{"id":"-1264392051","predicate":"updateEncryption","params":[{"name":"chat","type":"EncryptedChat"},{"name":"date","type":"int"}],"type":"Update"},{"id":"956179895","predicate":"updateEncryptedMessagesRead","params":[{"name":"chat_id","type":"int"},{"name":"max_date","type":"int"},{"name":"date","type":"int"}],"type":"Update"},{"id":"-1417756512","predicate":"encryptedChatEmpty","params":[{"name":"id","type":"int"}],"type":"EncryptedChat"},{"id":"1006044124","predicate":"encryptedChatWaiting","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"}],"type":"EncryptedChat"},{"id":"-931638658","predicate":"encryptedChatRequested","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a","type":"bytes"}],"type":"EncryptedChat"},{"id":"-94974410","predicate":"encryptedChat","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_or_b","type":"bytes"},{"name":"key_fingerprint","type":"long"}],"type":"EncryptedChat"},{"id":"332848423","predicate":"encryptedChatDiscarded","params":[{"name":"id","type":"int"}],"type":"EncryptedChat"},{"id":"-247351839","predicate":"inputEncryptedChat","params":[{"name":"chat_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputEncryptedChat"},{"id":"-1038136962","predicate":"encryptedFileEmpty","params":[],"type":"EncryptedFile"},{"id":"1248893260","predicate":"encryptedFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"size","type":"int"},{"name":"dc_id","type":"int"},{"name":"key_fingerprint","type":"int"}],"type":"EncryptedFile"},{"id":"406307684","predicate":"inputEncryptedFileEmpty","params":[],"type":"InputEncryptedFile"},{"id":"1690108678","predicate":"inputEncryptedFileUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"md5_checksum","type":"string"},{"name":"key_fingerprint","type":"int"}],"type":"InputEncryptedFile"},{"id":"1511503333","predicate":"inputEncryptedFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputEncryptedFile"},{"id":"-182231723","predicate":"inputEncryptedFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputFileLocation"},{"id":"-317144808","predicate":"encryptedMessage","params":[{"name":"random_id","type":"long"},{"name":"chat_id","type":"int"},{"name":"date","type":"int"},{"name":"bytes","type":"bytes"},{"name":"file","type":"EncryptedFile"}],"type":"EncryptedMessage"},{"id":"594758406","predicate":"encryptedMessageService","params":[{"name":"random_id","type":"long"},{"name":"chat_id","type":"int"},{"name":"date","type":"int"},{"name":"bytes","type":"bytes"}],"type":"EncryptedMessage"},{"id":"-1058912715","predicate":"messages.dhConfigNotModified","params":[{"name":"random","type":"bytes"}],"type":"messages.DhConfig"},{"id":"740433629","predicate":"messages.dhConfig","params":[{"name":"g","type":"int"},{"name":"p","type":"bytes"},{"name":"version","type":"int"},{"name":"random","type":"bytes"}],"type":"messages.DhConfig"},{"id":"1443858741","predicate":"messages.sentEncryptedMessage","params":[{"name":"date","type":"int"}],"type":"messages.SentEncryptedMessage"},{"id":"-1802240206","predicate":"messages.sentEncryptedFile","params":[{"name":"date","type":"int"},{"name":"file","type":"EncryptedFile"}],"type":"messages.SentEncryptedMessage"},{"id":"-95482955","predicate":"inputFileBig","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"name","type":"string"}],"type":"InputFile"},{"id":"767652808","predicate":"inputEncryptedFileBigUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"key_fingerprint","type":"int"}],"type":"InputEncryptedFile"},{"id":"-364179876","predicate":"updateChatParticipantAdd","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"1851755554","predicate":"updateChatParticipantDelete","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-1906403213","predicate":"updateDcOptions","params":[{"name":"dc_options","type":"Vector"}],"type":"Update"},{"id":"1530447553","predicate":"inputMediaUploadedDocument","params":[{"name":"flags","type":"#"},{"name":"nosound_video","type":"flags.3?true"},{"name":"file","type":"InputFile"},{"name":"thumb","type":"flags.2?InputFile"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"},{"name":"stickers","type":"flags.0?Vector"},{"name":"ttl_seconds","type":"flags.1?int"}],"type":"InputMedia"},{"id":"598418386","predicate":"inputMediaDocument","params":[{"name":"flags","type":"#"},{"name":"id","type":"InputDocument"},{"name":"ttl_seconds","type":"flags.0?int"}],"type":"InputMedia"},{"id":"-1666158377","predicate":"messageMediaDocument","params":[{"name":"flags","type":"#"},{"name":"document","type":"flags.0?Document"},{"name":"ttl_seconds","type":"flags.2?int"}],"type":"MessageMedia"},{"id":"1928391342","predicate":"inputDocumentEmpty","params":[],"type":"InputDocument"},{"id":"448771445","predicate":"inputDocument","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"}],"type":"InputDocument"},{"id":"-1160743548","predicate":"inputDocumentFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"thumb_size","type":"string"}],"type":"InputFileLocation"},{"id":"922273905","predicate":"documentEmpty","params":[{"name":"id","type":"long"}],"type":"Document"},{"id":"-1683841855","predicate":"document","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"date","type":"int"},{"name":"mime_type","type":"string"},{"name":"size","type":"int"},{"name":"thumbs","type":"flags.0?Vector"},{"name":"dc_id","type":"int"},{"name":"attributes","type":"Vector"}],"type":"Document"},{"id":"398898678","predicate":"help.support","params":[{"name":"phone_number","type":"string"},{"name":"user","type":"User"}],"type":"help.Support"},{"id":"-1613493288","predicate":"notifyPeer","params":[{"name":"peer","type":"Peer"}],"type":"NotifyPeer"},{"id":"-1261946036","predicate":"notifyUsers","params":[],"type":"NotifyPeer"},{"id":"-1073230141","predicate":"notifyChats","params":[],"type":"NotifyPeer"},{"id":"-2131957734","predicate":"updateUserBlocked","params":[{"name":"user_id","type":"int"},{"name":"blocked","type":"Bool"}],"type":"Update"},{"id":"-1094555409","predicate":"updateNotifySettings","params":[{"name":"peer","type":"NotifyPeer"},{"name":"notify_settings","type":"PeerNotifySettings"}],"type":"Update"},{"id":"381645902","predicate":"sendMessageTypingAction","params":[],"type":"SendMessageAction"},{"id":"-44119819","predicate":"sendMessageCancelAction","params":[],"type":"SendMessageAction"},{"id":"-1584933265","predicate":"sendMessageRecordVideoAction","params":[],"type":"SendMessageAction"},{"id":"-378127636","predicate":"sendMessageUploadVideoAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-718310409","predicate":"sendMessageRecordAudioAction","params":[],"type":"SendMessageAction"},{"id":"-212740181","predicate":"sendMessageUploadAudioAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-774682074","predicate":"sendMessageUploadPhotoAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-1441998364","predicate":"sendMessageUploadDocumentAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"393186209","predicate":"sendMessageGeoLocationAction","params":[],"type":"SendMessageAction"},{"id":"1653390447","predicate":"sendMessageChooseContactAction","params":[],"type":"SendMessageAction"},{"id":"-1290580579","predicate":"contacts.found","params":[{"name":"my_results","type":"Vector"},{"name":"results","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Found"},{"id":"-337352679","predicate":"updateServiceNotification","params":[{"name":"flags","type":"#"},{"name":"popup","type":"flags.0?true"},{"name":"inbox_date","type":"flags.1?int"},{"name":"type","type":"string"},{"name":"message","type":"string"},{"name":"media","type":"MessageMedia"},{"name":"entities","type":"Vector"}],"type":"Update"},{"id":"-496024847","predicate":"userStatusRecently","params":[],"type":"UserStatus"},{"id":"129960444","predicate":"userStatusLastWeek","params":[],"type":"UserStatus"},{"id":"2011940674","predicate":"userStatusLastMonth","params":[],"type":"UserStatus"},{"id":"-298113238","predicate":"updatePrivacy","params":[{"name":"key","type":"PrivacyKey"},{"name":"rules","type":"Vector"}],"type":"Update"},{"id":"1335282456","predicate":"inputPrivacyKeyStatusTimestamp","params":[],"type":"InputPrivacyKey"},{"id":"-1137792208","predicate":"privacyKeyStatusTimestamp","params":[],"type":"PrivacyKey"},{"id":"218751099","predicate":"inputPrivacyValueAllowContacts","params":[],"type":"InputPrivacyRule"},{"id":"407582158","predicate":"inputPrivacyValueAllowAll","params":[],"type":"InputPrivacyRule"},{"id":"320652927","predicate":"inputPrivacyValueAllowUsers","params":[{"name":"users","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"195371015","predicate":"inputPrivacyValueDisallowContacts","params":[],"type":"InputPrivacyRule"},{"id":"-697604407","predicate":"inputPrivacyValueDisallowAll","params":[],"type":"InputPrivacyRule"},{"id":"-1877932953","predicate":"inputPrivacyValueDisallowUsers","params":[{"name":"users","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"-123988","predicate":"privacyValueAllowContacts","params":[],"type":"PrivacyRule"},{"id":"1698855810","predicate":"privacyValueAllowAll","params":[],"type":"PrivacyRule"},{"id":"1297858060","predicate":"privacyValueAllowUsers","params":[{"name":"users","type":"Vector"}],"type":"PrivacyRule"},{"id":"-125240806","predicate":"privacyValueDisallowContacts","params":[],"type":"PrivacyRule"},{"id":"-1955338397","predicate":"privacyValueDisallowAll","params":[],"type":"PrivacyRule"},{"id":"209668535","predicate":"privacyValueDisallowUsers","params":[{"name":"users","type":"Vector"}],"type":"PrivacyRule"},{"id":"1352683077","predicate":"account.privacyRules","params":[{"name":"rules","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"account.PrivacyRules"},{"id":"-1194283041","predicate":"accountDaysTTL","params":[{"name":"days","type":"int"}],"type":"AccountDaysTTL"},{"id":"314130811","predicate":"updateUserPhone","params":[{"name":"user_id","type":"int"},{"name":"phone","type":"string"}],"type":"Update"},{"id":"1815593308","predicate":"documentAttributeImageSize","params":[{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"DocumentAttribute"},{"id":"297109817","predicate":"documentAttributeAnimated","params":[],"type":"DocumentAttribute"},{"id":"1662637586","predicate":"documentAttributeSticker","params":[{"name":"flags","type":"#"},{"name":"mask","type":"flags.1?true"},{"name":"alt","type":"string"},{"name":"stickerset","type":"InputStickerSet"},{"name":"mask_coords","type":"flags.0?MaskCoords"}],"type":"DocumentAttribute"},{"id":"250621158","predicate":"documentAttributeVideo","params":[{"name":"flags","type":"#"},{"name":"round_message","type":"flags.0?true"},{"name":"supports_streaming","type":"flags.1?true"},{"name":"duration","type":"int"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"DocumentAttribute"},{"id":"-1739392570","predicate":"documentAttributeAudio","params":[{"name":"flags","type":"#"},{"name":"voice","type":"flags.10?true"},{"name":"duration","type":"int"},{"name":"title","type":"flags.0?string"},{"name":"performer","type":"flags.1?string"},{"name":"waveform","type":"flags.2?bytes"}],"type":"DocumentAttribute"},{"id":"358154344","predicate":"documentAttributeFilename","params":[{"name":"file_name","type":"string"}],"type":"DocumentAttribute"},{"id":"-244016606","predicate":"messages.stickersNotModified","params":[],"type":"messages.Stickers"},{"id":"-463889475","predicate":"messages.stickers","params":[{"name":"hash","type":"int"},{"name":"stickers","type":"Vector"}],"type":"messages.Stickers"},{"id":"313694676","predicate":"stickerPack","params":[{"name":"emoticon","type":"string"},{"name":"documents","type":"Vector"}],"type":"StickerPack"},{"id":"-395967805","predicate":"messages.allStickersNotModified","params":[],"type":"messages.AllStickers"},{"id":"-302170017","predicate":"messages.allStickers","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.AllStickers"},{"id":"-1667805217","predicate":"updateReadHistoryInbox","params":[{"name":"flags","type":"#"},{"name":"folder_id","type":"flags.0?int"},{"name":"peer","type":"Peer"},{"name":"max_id","type":"int"},{"name":"still_unread_count","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"791617983","predicate":"updateReadHistoryOutbox","params":[{"name":"peer","type":"Peer"},{"name":"max_id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-2066640507","predicate":"messages.affectedMessages","params":[{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"messages.AffectedMessages"},{"id":"2139689491","predicate":"updateWebPage","params":[{"name":"webpage","type":"WebPage"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-350980120","predicate":"webPageEmpty","params":[{"name":"id","type":"long"}],"type":"WebPage"},{"id":"-981018084","predicate":"webPagePending","params":[{"name":"id","type":"long"},{"name":"date","type":"int"}],"type":"WebPage"},{"id":"-94051982","predicate":"webPage","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"url","type":"string"},{"name":"display_url","type":"string"},{"name":"hash","type":"int"},{"name":"type","type":"flags.0?string"},{"name":"site_name","type":"flags.1?string"},{"name":"title","type":"flags.2?string"},{"name":"description","type":"flags.3?string"},{"name":"photo","type":"flags.4?Photo"},{"name":"embed_url","type":"flags.5?string"},{"name":"embed_type","type":"flags.5?string"},{"name":"embed_width","type":"flags.6?int"},{"name":"embed_height","type":"flags.6?int"},{"name":"duration","type":"flags.7?int"},{"name":"author","type":"flags.8?string"},{"name":"document","type":"flags.9?Document"},{"name":"documents","type":"flags.11?Vector"},{"name":"cached_page","type":"flags.10?Page"}],"type":"WebPage"},{"id":"-1557277184","predicate":"messageMediaWebPage","params":[{"name":"webpage","type":"WebPage"}],"type":"MessageMedia"},{"id":"-1392388579","predicate":"authorization","params":[{"name":"flags","type":"#"},{"name":"current","type":"flags.0?true"},{"name":"official_app","type":"flags.1?true"},{"name":"password_pending","type":"flags.2?true"},{"name":"hash","type":"long"},{"name":"device_model","type":"string"},{"name":"platform","type":"string"},{"name":"system_version","type":"string"},{"name":"api_id","type":"int"},{"name":"app_name","type":"string"},{"name":"app_version","type":"string"},{"name":"date_created","type":"int"},{"name":"date_active","type":"int"},{"name":"ip","type":"string"},{"name":"country","type":"string"},{"name":"region","type":"string"}],"type":"Authorization"},{"id":"307276766","predicate":"account.authorizations","params":[{"name":"authorizations","type":"Vector"}],"type":"account.Authorizations"},{"id":"-1390001672","predicate":"account.password","params":[{"name":"flags","type":"#"},{"name":"has_recovery","type":"flags.0?true"},{"name":"has_secure_values","type":"flags.1?true"},{"name":"has_password","type":"flags.2?true"},{"name":"current_algo","type":"flags.2?PasswordKdfAlgo"},{"name":"srp_B","type":"flags.2?bytes"},{"name":"srp_id","type":"flags.2?long"},{"name":"hint","type":"flags.3?string"},{"name":"email_unconfirmed_pattern","type":"flags.4?string"},{"name":"new_algo","type":"PasswordKdfAlgo"},{"name":"new_secure_algo","type":"SecurePasswordKdfAlgo"},{"name":"secure_random","type":"bytes"}],"type":"account.Password"},{"id":"-1705233435","predicate":"account.passwordSettings","params":[{"name":"flags","type":"#"},{"name":"email","type":"flags.0?string"},{"name":"secure_settings","type":"flags.1?SecureSecretSettings"}],"type":"account.PasswordSettings"},{"id":"-1036572727","predicate":"account.passwordInputSettings","params":[{"name":"flags","type":"#"},{"name":"new_algo","type":"flags.0?PasswordKdfAlgo"},{"name":"new_password_hash","type":"flags.0?bytes"},{"name":"hint","type":"flags.0?string"},{"name":"email","type":"flags.1?string"},{"name":"new_secure_settings","type":"flags.2?SecureSecretSettings"}],"type":"account.PasswordInputSettings"},{"id":"326715557","predicate":"auth.passwordRecovery","params":[{"name":"email_pattern","type":"string"}],"type":"auth.PasswordRecovery"},{"id":"-1052959727","predicate":"inputMediaVenue","params":[{"name":"geo_point","type":"InputGeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"venue_type","type":"string"}],"type":"InputMedia"},{"id":"784356159","predicate":"messageMediaVenue","params":[{"name":"geo","type":"GeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"venue_type","type":"string"}],"type":"MessageMedia"},{"id":"-1551583367","predicate":"receivedNotifyMessage","params":[{"name":"id","type":"int"},{"name":"flags","type":"int"}],"type":"ReceivedNotifyMessage"},{"id":"1776236393","predicate":"chatInviteEmpty","params":[],"type":"ExportedChatInvite"},{"id":"-64092740","predicate":"chatInviteExported","params":[{"name":"link","type":"string"}],"type":"ExportedChatInvite"},{"id":"1516793212","predicate":"chatInviteAlready","params":[{"name":"chat","type":"Chat"}],"type":"ChatInvite"},{"id":"-540871282","predicate":"chatInvite","params":[{"name":"flags","type":"#"},{"name":"channel","type":"flags.0?true"},{"name":"broadcast","type":"flags.1?true"},{"name":"public","type":"flags.2?true"},{"name":"megagroup","type":"flags.3?true"},{"name":"title","type":"string"},{"name":"photo","type":"Photo"},{"name":"participants_count","type":"int"},{"name":"participants","type":"flags.4?Vector"}],"type":"ChatInvite"},{"id":"-123931160","predicate":"messageActionChatJoinedByLink","params":[{"name":"inviter_id","type":"int"}],"type":"MessageAction"},{"id":"1757493555","predicate":"updateReadMessagesContents","params":[{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-4838507","predicate":"inputStickerSetEmpty","params":[],"type":"InputStickerSet"},{"id":"-1645763991","predicate":"inputStickerSetID","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputStickerSet"},{"id":"-2044933984","predicate":"inputStickerSetShortName","params":[{"name":"short_name","type":"string"}],"type":"InputStickerSet"},{"id":"-290164953","predicate":"stickerSet","params":[{"name":"flags","type":"#"},{"name":"archived","type":"flags.1?true"},{"name":"official","type":"flags.2?true"},{"name":"masks","type":"flags.3?true"},{"name":"animated","type":"flags.5?true"},{"name":"installed_date","type":"flags.0?int"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"title","type":"string"},{"name":"short_name","type":"string"},{"name":"thumb","type":"flags.4?PhotoSize"},{"name":"thumb_dc_id","type":"flags.4?int"},{"name":"count","type":"int"},{"name":"hash","type":"int"}],"type":"StickerSet"},{"id":"-1240849242","predicate":"messages.stickerSet","params":[{"name":"set","type":"StickerSet"},{"name":"packs","type":"Vector"},{"name":"documents","type":"Vector"}],"type":"messages.StickerSet"},{"id":"-1820043071","predicate":"user","params":[{"name":"flags","type":"#"},{"name":"self","type":"flags.10?true"},{"name":"contact","type":"flags.11?true"},{"name":"mutual_contact","type":"flags.12?true"},{"name":"deleted","type":"flags.13?true"},{"name":"bot","type":"flags.14?true"},{"name":"bot_chat_history","type":"flags.15?true"},{"name":"bot_nochats","type":"flags.16?true"},{"name":"verified","type":"flags.17?true"},{"name":"restricted","type":"flags.18?true"},{"name":"min","type":"flags.20?true"},{"name":"bot_inline_geo","type":"flags.21?true"},{"name":"support","type":"flags.23?true"},{"name":"scam","type":"flags.24?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"flags.0?long"},{"name":"first_name","type":"flags.1?string"},{"name":"last_name","type":"flags.2?string"},{"name":"username","type":"flags.3?string"},{"name":"phone","type":"flags.4?string"},{"name":"photo","type":"flags.5?UserProfilePhoto"},{"name":"status","type":"flags.6?UserStatus"},{"name":"bot_info_version","type":"flags.14?int"},{"name":"restriction_reason","type":"flags.18?Vector"},{"name":"bot_inline_placeholder","type":"flags.19?string"},{"name":"lang_code","type":"flags.22?string"}],"type":"User"},{"id":"-1032140601","predicate":"botCommand","params":[{"name":"command","type":"string"},{"name":"description","type":"string"}],"type":"BotCommand"},{"id":"-1729618630","predicate":"botInfo","params":[{"name":"user_id","type":"int"},{"name":"description","type":"string"},{"name":"commands","type":"Vector"}],"type":"BotInfo"},{"id":"-1560655744","predicate":"keyboardButton","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"2002815875","predicate":"keyboardButtonRow","params":[{"name":"buttons","type":"Vector"}],"type":"KeyboardButtonRow"},{"id":"-1606526075","predicate":"replyKeyboardHide","params":[{"name":"flags","type":"#"},{"name":"selective","type":"flags.2?true"}],"type":"ReplyMarkup"},{"id":"-200242528","predicate":"replyKeyboardForceReply","params":[{"name":"flags","type":"#"},{"name":"single_use","type":"flags.1?true"},{"name":"selective","type":"flags.2?true"}],"type":"ReplyMarkup"},{"id":"889353612","predicate":"replyKeyboardMarkup","params":[{"name":"flags","type":"#"},{"name":"resize","type":"flags.0?true"},{"name":"single_use","type":"flags.1?true"},{"name":"selective","type":"flags.2?true"},{"name":"rows","type":"Vector"}],"type":"ReplyMarkup"},{"id":"2072935910","predicate":"inputPeerUser","params":[{"name":"user_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputPeer"},{"id":"-668391402","predicate":"inputUser","params":[{"name":"user_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputUser"},{"id":"-1148011883","predicate":"messageEntityUnknown","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-100378723","predicate":"messageEntityMention","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1868782349","predicate":"messageEntityHashtag","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1827637959","predicate":"messageEntityBotCommand","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1859134776","predicate":"messageEntityUrl","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1692693954","predicate":"messageEntityEmail","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-1117713463","predicate":"messageEntityBold","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-2106619040","predicate":"messageEntityItalic","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"681706865","predicate":"messageEntityCode","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1938967520","predicate":"messageEntityPre","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"language","type":"string"}],"type":"MessageEntity"},{"id":"1990644519","predicate":"messageEntityTextUrl","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"url","type":"string"}],"type":"MessageEntity"},{"id":"301019932","predicate":"updateShortSentMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"media","type":"flags.9?MessageMedia"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"-292807034","predicate":"inputChannelEmpty","params":[],"type":"InputChannel"},{"id":"-1343524562","predicate":"inputChannel","params":[{"name":"channel_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputChannel"},{"id":"-1109531342","predicate":"peerChannel","params":[{"name":"channel_id","type":"int"}],"type":"Peer"},{"id":"548253432","predicate":"inputPeerChannel","params":[{"name":"channel_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputPeer"},{"id":"-753232354","predicate":"channel","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"left","type":"flags.2?true"},{"name":"broadcast","type":"flags.5?true"},{"name":"verified","type":"flags.7?true"},{"name":"megagroup","type":"flags.8?true"},{"name":"restricted","type":"flags.9?true"},{"name":"signatures","type":"flags.11?true"},{"name":"min","type":"flags.12?true"},{"name":"scam","type":"flags.19?true"},{"name":"has_link","type":"flags.20?true"},{"name":"has_geo","type":"flags.21?true"},{"name":"slowmode_enabled","type":"flags.22?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"flags.13?long"},{"name":"title","type":"string"},{"name":"username","type":"flags.6?string"},{"name":"photo","type":"ChatPhoto"},{"name":"date","type":"int"},{"name":"version","type":"int"},{"name":"restriction_reason","type":"flags.9?Vector"},{"name":"admin_rights","type":"flags.14?ChatAdminRights"},{"name":"banned_rights","type":"flags.15?ChatBannedRights"},{"name":"default_banned_rights","type":"flags.18?ChatBannedRights"},{"name":"participants_count","type":"flags.17?int"}],"type":"Chat"},{"id":"681420594","predicate":"channelForbidden","params":[{"name":"flags","type":"#"},{"name":"broadcast","type":"flags.5?true"},{"name":"megagroup","type":"flags.8?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"title","type":"string"},{"name":"until_date","type":"flags.16?int"}],"type":"Chat"},{"id":"2131196633","predicate":"contacts.resolvedPeer","params":[{"name":"peer","type":"Peer"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.ResolvedPeer"},{"id":"763976820","predicate":"channelFull","params":[{"name":"flags","type":"#"},{"name":"can_view_participants","type":"flags.3?true"},{"name":"can_set_username","type":"flags.6?true"},{"name":"can_set_stickers","type":"flags.7?true"},{"name":"hidden_prehistory","type":"flags.10?true"},{"name":"can_view_stats","type":"flags.12?true"},{"name":"can_set_location","type":"flags.16?true"},{"name":"has_scheduled","type":"flags.19?true"},{"name":"id","type":"int"},{"name":"about","type":"string"},{"name":"participants_count","type":"flags.0?int"},{"name":"admins_count","type":"flags.1?int"},{"name":"kicked_count","type":"flags.2?int"},{"name":"banned_count","type":"flags.2?int"},{"name":"online_count","type":"flags.13?int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"chat_photo","type":"Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"exported_invite","type":"ExportedChatInvite"},{"name":"bot_info","type":"Vector"},{"name":"migrated_from_chat_id","type":"flags.4?int"},{"name":"migrated_from_max_id","type":"flags.4?int"},{"name":"pinned_msg_id","type":"flags.5?int"},{"name":"stickerset","type":"flags.8?StickerSet"},{"name":"available_min_id","type":"flags.9?int"},{"name":"folder_id","type":"flags.11?int"},{"name":"linked_chat_id","type":"flags.14?int"},{"name":"location","type":"flags.15?ChannelLocation"},{"name":"slowmode_seconds","type":"flags.17?int"},{"name":"slowmode_next_send_date","type":"flags.18?int"},{"name":"pts","type":"int"}],"type":"ChatFull"},{"id":"182649427","predicate":"messageRange","params":[{"name":"min_id","type":"int"},{"name":"max_id","type":"int"}],"type":"MessageRange"},{"id":"-1725551049","predicate":"messages.channelMessages","params":[{"name":"flags","type":"#"},{"name":"inexact","type":"flags.1?true"},{"name":"pts","type":"int"},{"name":"count","type":"int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"-1781355374","predicate":"messageActionChannelCreate","params":[{"name":"title","type":"string"}],"type":"MessageAction"},{"id":"-352032773","predicate":"updateChannelTooLong","params":[{"name":"flags","type":"#"},{"name":"channel_id","type":"int"},{"name":"pts","type":"flags.0?int"}],"type":"Update"},{"id":"-1227598250","predicate":"updateChannel","params":[{"name":"channel_id","type":"int"}],"type":"Update"},{"id":"1656358105","predicate":"updateNewChannelMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"856380452","predicate":"updateReadChannelInbox","params":[{"name":"flags","type":"#"},{"name":"folder_id","type":"flags.0?int"},{"name":"channel_id","type":"int"},{"name":"max_id","type":"int"},{"name":"still_unread_count","type":"int"},{"name":"pts","type":"int"}],"type":"Update"},{"id":"-1015733815","predicate":"updateDeleteChannelMessages","params":[{"name":"channel_id","type":"int"},{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1734268085","predicate":"updateChannelMessageViews","params":[{"name":"channel_id","type":"int"},{"name":"id","type":"int"},{"name":"views","type":"int"}],"type":"Update"},{"id":"1041346555","predicate":"updates.channelDifferenceEmpty","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"}],"type":"updates.ChannelDifference"},{"id":"-1531132162","predicate":"updates.channelDifferenceTooLong","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"timeout","type":"flags.1?int"},{"name":"dialog","type":"Dialog"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"updates.ChannelDifference"},{"id":"543450958","predicate":"updates.channelDifference","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"},{"name":"new_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"updates.ChannelDifference"},{"id":"-1798033689","predicate":"channelMessagesFilterEmpty","params":[],"type":"ChannelMessagesFilter"},{"id":"-847783593","predicate":"channelMessagesFilter","params":[{"name":"flags","type":"#"},{"name":"exclude_new_messages","type":"flags.1?true"},{"name":"ranges","type":"Vector"}],"type":"ChannelMessagesFilter"},{"id":"367766557","predicate":"channelParticipant","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1557620115","predicate":"channelParticipantSelf","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-2138237532","predicate":"channelParticipantCreator","params":[{"name":"flags","type":"#"},{"name":"user_id","type":"int"},{"name":"rank","type":"flags.0?string"}],"type":"ChannelParticipant"},{"id":"-566281095","predicate":"channelParticipantsRecent","params":[],"type":"ChannelParticipantsFilter"},{"id":"-1268741783","predicate":"channelParticipantsAdmins","params":[],"type":"ChannelParticipantsFilter"},{"id":"-1548400251","predicate":"channelParticipantsKicked","params":[{"name":"q","type":"string"}],"type":"ChannelParticipantsFilter"},{"id":"-177282392","predicate":"channels.channelParticipants","params":[{"name":"count","type":"int"},{"name":"participants","type":"Vector"},{"name":"users","type":"Vector"}],"type":"channels.ChannelParticipants"},{"id":"-791039645","predicate":"channels.channelParticipant","params":[{"name":"participant","type":"ChannelParticipant"},{"name":"users","type":"Vector"}],"type":"channels.ChannelParticipant"},{"id":"-636267638","predicate":"chatParticipantCreator","params":[{"name":"user_id","type":"int"}],"type":"ChatParticipant"},{"id":"-489233354","predicate":"chatParticipantAdmin","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChatParticipant"},{"id":"-1232070311","predicate":"updateChatParticipantAdmin","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"is_admin","type":"Bool"},{"name":"version","type":"int"}],"type":"Update"},{"id":"1371385889","predicate":"messageActionChatMigrateTo","params":[{"name":"channel_id","type":"int"}],"type":"MessageAction"},{"id":"-1336546578","predicate":"messageActionChannelMigrateFrom","params":[{"name":"title","type":"string"},{"name":"chat_id","type":"int"}],"type":"MessageAction"},{"id":"-1328445861","predicate":"channelParticipantsBots","params":[],"type":"ChannelParticipantsFilter"},{"id":"2013922064","predicate":"help.termsOfService","params":[{"name":"flags","type":"#"},{"name":"popup","type":"flags.0?true"},{"name":"id","type":"DataJSON"},{"name":"text","type":"string"},{"name":"entities","type":"Vector"},{"name":"min_age_confirm","type":"flags.1?int"}],"type":"help.TermsOfService"},{"id":"1753886890","predicate":"updateNewStickerSet","params":[{"name":"stickerset","type":"messages.StickerSet"}],"type":"Update"},{"id":"196268545","predicate":"updateStickerSetsOrder","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Update"},{"id":"1135492588","predicate":"updateStickerSets","params":[],"type":"Update"},{"id":"372165663","predicate":"foundGif","params":[{"name":"url","type":"string"},{"name":"thumb_url","type":"string"},{"name":"content_url","type":"string"},{"name":"content_type","type":"string"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"FoundGif"},{"id":"-1670052855","predicate":"foundGifCached","params":[{"name":"url","type":"string"},{"name":"photo","type":"Photo"},{"name":"document","type":"Document"}],"type":"FoundGif"},{"id":"1212395773","predicate":"inputMediaGifExternal","params":[{"name":"url","type":"string"},{"name":"q","type":"string"}],"type":"InputMedia"},{"id":"1158290442","predicate":"messages.foundGifs","params":[{"name":"next_offset","type":"int"},{"name":"results","type":"Vector"}],"type":"messages.FoundGifs"},{"id":"-402498398","predicate":"messages.savedGifsNotModified","params":[],"type":"messages.SavedGifs"},{"id":"772213157","predicate":"messages.savedGifs","params":[{"name":"hash","type":"int"},{"name":"gifs","type":"Vector"}],"type":"messages.SavedGifs"},{"id":"-1821035490","predicate":"updateSavedGifs","params":[],"type":"Update"},{"id":"864077702","predicate":"inputBotInlineMessageMediaAuto","params":[{"name":"flags","type":"#"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"1036876423","predicate":"inputBotInlineMessageText","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-2000710887","predicate":"inputBotInlineResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"url","type":"flags.3?string"},{"name":"thumb","type":"flags.4?InputWebDocument"},{"name":"content","type":"flags.5?InputWebDocument"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"1984755728","predicate":"botInlineMessageMediaAuto","params":[{"name":"flags","type":"#"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1937807902","predicate":"botInlineMessageText","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"295067450","predicate":"botInlineResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"url","type":"flags.3?string"},{"name":"thumb","type":"flags.4?WebDocument"},{"name":"content","type":"flags.5?WebDocument"},{"name":"send_message","type":"BotInlineMessage"}],"type":"BotInlineResult"},{"id":"-1803769784","predicate":"messages.botResults","params":[{"name":"flags","type":"#"},{"name":"gallery","type":"flags.0?true"},{"name":"query_id","type":"long"},{"name":"next_offset","type":"flags.1?string"},{"name":"switch_pm","type":"flags.2?InlineBotSwitchPM"},{"name":"results","type":"Vector"},{"name":"cache_time","type":"int"},{"name":"users","type":"Vector"}],"type":"messages.BotResults"},{"id":"1417832080","predicate":"updateBotInlineQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"query","type":"string"},{"name":"geo","type":"flags.0?GeoPoint"},{"name":"offset","type":"string"}],"type":"Update"},{"id":"239663460","predicate":"updateBotInlineSend","params":[{"name":"flags","type":"#"},{"name":"user_id","type":"int"},{"name":"query","type":"string"},{"name":"geo","type":"flags.0?GeoPoint"},{"name":"id","type":"string"},{"name":"msg_id","type":"flags.1?InputBotInlineMessageID"}],"type":"Update"},{"id":"1358283666","predicate":"inputMessagesFilterVoice","params":[],"type":"MessagesFilter"},{"id":"928101534","predicate":"inputMessagesFilterMusic","params":[],"type":"MessagesFilter"},{"id":"-1107622874","predicate":"inputPrivacyKeyChatInvite","params":[],"type":"InputPrivacyKey"},{"id":"1343122938","predicate":"privacyKeyChatInvite","params":[],"type":"PrivacyKey"},{"id":"1571494644","predicate":"exportedMessageLink","params":[{"name":"link","type":"string"},{"name":"html","type":"string"}],"type":"ExportedMessageLink"},{"id":"-332168592","predicate":"messageFwdHeader","params":[{"name":"flags","type":"#"},{"name":"from_id","type":"flags.0?int"},{"name":"from_name","type":"flags.5?string"},{"name":"date","type":"int"},{"name":"channel_id","type":"flags.1?int"},{"name":"channel_post","type":"flags.2?int"},{"name":"post_author","type":"flags.3?string"},{"name":"saved_from_peer","type":"flags.4?Peer"},{"name":"saved_from_msg_id","type":"flags.4?int"}],"type":"MessageFwdHeader"},{"id":"457133559","predicate":"updateEditChannelMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1738988427","predicate":"updateChannelPinnedMessage","params":[{"name":"channel_id","type":"int"},{"name":"id","type":"int"}],"type":"Update"},{"id":"-1799538451","predicate":"messageActionPinMessage","params":[],"type":"MessageAction"},{"id":"1923290508","predicate":"auth.codeTypeSms","params":[],"type":"auth.CodeType"},{"id":"1948046307","predicate":"auth.codeTypeCall","params":[],"type":"auth.CodeType"},{"id":"577556219","predicate":"auth.codeTypeFlashCall","params":[],"type":"auth.CodeType"},{"id":"1035688326","predicate":"auth.sentCodeTypeApp","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"-1073693790","predicate":"auth.sentCodeTypeSms","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"1398007207","predicate":"auth.sentCodeTypeCall","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"-1425815847","predicate":"auth.sentCodeTypeFlashCall","params":[{"name":"pattern","type":"string"}],"type":"auth.SentCodeType"},{"id":"629866245","predicate":"keyboardButtonUrl","params":[{"name":"text","type":"string"},{"name":"url","type":"string"}],"type":"KeyboardButton"},{"id":"1748655686","predicate":"keyboardButtonCallback","params":[{"name":"text","type":"string"},{"name":"data","type":"bytes"}],"type":"KeyboardButton"},{"id":"-1318425559","predicate":"keyboardButtonRequestPhone","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"-59151553","predicate":"keyboardButtonRequestGeoLocation","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"90744648","predicate":"keyboardButtonSwitchInline","params":[{"name":"flags","type":"#"},{"name":"same_peer","type":"flags.0?true"},{"name":"text","type":"string"},{"name":"query","type":"string"}],"type":"KeyboardButton"},{"id":"1218642516","predicate":"replyInlineMarkup","params":[{"name":"rows","type":"Vector"}],"type":"ReplyMarkup"},{"id":"911761060","predicate":"messages.botCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"alert","type":"flags.1?true"},{"name":"has_url","type":"flags.3?true"},{"name":"native_ui","type":"flags.4?true"},{"name":"message","type":"flags.0?string"},{"name":"url","type":"flags.2?string"},{"name":"cache_time","type":"int"}],"type":"messages.BotCallbackAnswer"},{"id":"-415938591","predicate":"updateBotCallbackQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"peer","type":"Peer"},{"name":"msg_id","type":"int"},{"name":"chat_instance","type":"long"},{"name":"data","type":"flags.0?bytes"},{"name":"game_short_name","type":"flags.1?string"}],"type":"Update"},{"id":"649453030","predicate":"messages.messageEditData","params":[{"name":"flags","type":"#"},{"name":"caption","type":"flags.0?true"}],"type":"messages.MessageEditData"},{"id":"-469536605","predicate":"updateEditMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1045340827","predicate":"inputBotInlineMessageMediaGeo","params":[{"name":"flags","type":"#"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"period","type":"int"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"1098628881","predicate":"inputBotInlineMessageMediaVenue","params":[{"name":"flags","type":"#"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"venue_type","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-1494368259","predicate":"inputBotInlineMessageMediaContact","params":[{"name":"flags","type":"#"},{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-1222451611","predicate":"botInlineMessageMediaGeo","params":[{"name":"flags","type":"#"},{"name":"geo","type":"GeoPoint"},{"name":"period","type":"int"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1970903652","predicate":"botInlineMessageMediaVenue","params":[{"name":"flags","type":"#"},{"name":"geo","type":"GeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"venue_type","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"416402882","predicate":"botInlineMessageMediaContact","params":[{"name":"flags","type":"#"},{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1462213465","predicate":"inputBotInlineResultPhoto","params":[{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"photo","type":"InputPhoto"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"-459324","predicate":"inputBotInlineResultDocument","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"document","type":"InputDocument"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"400266251","predicate":"botInlineMediaResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"photo","type":"flags.0?Photo"},{"name":"document","type":"flags.1?Document"},{"name":"title","type":"flags.2?string"},{"name":"description","type":"flags.3?string"},{"name":"send_message","type":"BotInlineMessage"}],"type":"BotInlineResult"},{"id":"-1995686519","predicate":"inputBotInlineMessageID","params":[{"name":"dc_id","type":"int"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputBotInlineMessageID"},{"id":"-103646630","predicate":"updateInlineBotCallbackQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"msg_id","type":"InputBotInlineMessageID"},{"name":"chat_instance","type":"long"},{"name":"data","type":"flags.0?bytes"},{"name":"game_short_name","type":"flags.1?string"}],"type":"Update"},{"id":"1008755359","predicate":"inlineBotSwitchPM","params":[{"name":"text","type":"string"},{"name":"start_param","type":"string"}],"type":"InlineBotSwitchPM"},{"id":"863093588","predicate":"messages.peerDialogs","params":[{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"state","type":"updates.State"}],"type":"messages.PeerDialogs"},{"id":"-305282981","predicate":"topPeer","params":[{"name":"peer","type":"Peer"},{"name":"rating","type":"double"}],"type":"TopPeer"},{"id":"-1419371685","predicate":"topPeerCategoryBotsPM","params":[],"type":"TopPeerCategory"},{"id":"344356834","predicate":"topPeerCategoryBotsInline","params":[],"type":"TopPeerCategory"},{"id":"104314861","predicate":"topPeerCategoryCorrespondents","params":[],"type":"TopPeerCategory"},{"id":"-1122524854","predicate":"topPeerCategoryGroups","params":[],"type":"TopPeerCategory"},{"id":"371037736","predicate":"topPeerCategoryChannels","params":[],"type":"TopPeerCategory"},{"id":"-75283823","predicate":"topPeerCategoryPeers","params":[{"name":"category","type":"TopPeerCategory"},{"name":"count","type":"int"},{"name":"peers","type":"Vector"}],"type":"TopPeerCategoryPeers"},{"id":"-567906571","predicate":"contacts.topPeersNotModified","params":[],"type":"contacts.TopPeers"},{"id":"1891070632","predicate":"contacts.topPeers","params":[{"name":"categories","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.TopPeers"},{"id":"892193368","predicate":"messageEntityMentionName","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"user_id","type":"int"}],"type":"MessageEntity"},{"id":"546203849","predicate":"inputMessageEntityMentionName","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"MessageEntity"},{"id":"975236280","predicate":"inputMessagesFilterChatPhotos","params":[],"type":"MessagesFilter"},{"id":"634833351","predicate":"updateReadChannelOutbox","params":[{"name":"channel_id","type":"int"},{"name":"max_id","type":"int"}],"type":"Update"},{"id":"-299124375","predicate":"updateDraftMessage","params":[{"name":"peer","type":"Peer"},{"name":"draft","type":"DraftMessage"}],"type":"Update"},{"id":"453805082","predicate":"draftMessageEmpty","params":[{"name":"flags","type":"#"},{"name":"date","type":"flags.0?int"}],"type":"DraftMessage"},{"id":"-40996577","predicate":"draftMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"},{"name":"date","type":"int"}],"type":"DraftMessage"},{"id":"-1615153660","predicate":"messageActionHistoryClear","params":[],"type":"MessageAction"},{"id":"82699215","predicate":"messages.featuredStickersNotModified","params":[],"type":"messages.FeaturedStickers"},{"id":"-123893531","predicate":"messages.featuredStickers","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"},{"name":"unread","type":"Vector"}],"type":"messages.FeaturedStickers"},{"id":"1461528386","predicate":"updateReadFeaturedStickers","params":[],"type":"Update"},{"id":"186120336","predicate":"messages.recentStickersNotModified","params":[],"type":"messages.RecentStickers"},{"id":"586395571","predicate":"messages.recentStickers","params":[{"name":"hash","type":"int"},{"name":"packs","type":"Vector"},{"name":"stickers","type":"Vector"},{"name":"dates","type":"Vector"}],"type":"messages.RecentStickers"},{"id":"-1706939360","predicate":"updateRecentStickers","params":[],"type":"Update"},{"id":"1338747336","predicate":"messages.archivedStickers","params":[{"name":"count","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.ArchivedStickers"},{"id":"946083368","predicate":"messages.stickerSetInstallResultSuccess","params":[],"type":"messages.StickerSetInstallResult"},{"id":"904138920","predicate":"messages.stickerSetInstallResultArchive","params":[{"name":"sets","type":"Vector"}],"type":"messages.StickerSetInstallResult"},{"id":"1678812626","predicate":"stickerSetCovered","params":[{"name":"set","type":"StickerSet"},{"name":"cover","type":"Document"}],"type":"StickerSetCovered"},{"id":"-1574314746","predicate":"updateConfig","params":[],"type":"Update"},{"id":"861169551","predicate":"updatePtsChanged","params":[],"type":"Update"},{"id":"-440664550","predicate":"inputMediaPhotoExternal","params":[{"name":"flags","type":"#"},{"name":"url","type":"string"},{"name":"ttl_seconds","type":"flags.0?int"}],"type":"InputMedia"},{"id":"-78455655","predicate":"inputMediaDocumentExternal","params":[{"name":"flags","type":"#"},{"name":"url","type":"string"},{"name":"ttl_seconds","type":"flags.0?int"}],"type":"InputMedia"},{"id":"872932635","predicate":"stickerSetMultiCovered","params":[{"name":"set","type":"StickerSet"},{"name":"covers","type":"Vector"}],"type":"StickerSetCovered"},{"id":"-1361650766","predicate":"maskCoords","params":[{"name":"n","type":"int"},{"name":"x","type":"double"},{"name":"y","type":"double"},{"name":"zoom","type":"double"}],"type":"MaskCoords"},{"id":"-1744710921","predicate":"documentAttributeHasStickers","params":[],"type":"DocumentAttribute"},{"id":"1251549527","predicate":"inputStickeredMediaPhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"InputStickeredMedia"},{"id":"70813275","predicate":"inputStickeredMediaDocument","params":[{"name":"id","type":"InputDocument"}],"type":"InputStickeredMedia"},{"id":"-1107729093","predicate":"game","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"short_name","type":"string"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"Photo"},{"name":"document","type":"flags.0?Document"}],"type":"Game"},{"id":"1336154098","predicate":"inputBotInlineResultGame","params":[{"name":"id","type":"string"},{"name":"short_name","type":"string"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"1262639204","predicate":"inputBotInlineMessageGame","params":[{"name":"flags","type":"#"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-38694904","predicate":"messageMediaGame","params":[{"name":"game","type":"Game"}],"type":"MessageMedia"},{"id":"-750828557","predicate":"inputMediaGame","params":[{"name":"id","type":"InputGame"}],"type":"InputMedia"},{"id":"53231223","predicate":"inputGameID","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputGame"},{"id":"-1020139510","predicate":"inputGameShortName","params":[{"name":"bot_id","type":"InputUser"},{"name":"short_name","type":"string"}],"type":"InputGame"},{"id":"1358175439","predicate":"keyboardButtonGame","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"-1834538890","predicate":"messageActionGameScore","params":[{"name":"game_id","type":"long"},{"name":"score","type":"int"}],"type":"MessageAction"},{"id":"1493171408","predicate":"highScore","params":[{"name":"pos","type":"int"},{"name":"user_id","type":"int"},{"name":"score","type":"int"}],"type":"HighScore"},{"id":"-1707344487","predicate":"messages.highScores","params":[{"name":"scores","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.HighScores"},{"id":"1258196845","predicate":"updates.differenceTooLong","params":[{"name":"pts","type":"int"}],"type":"updates.Difference"},{"id":"1081547008","predicate":"updateChannelWebPage","params":[{"name":"channel_id","type":"int"},{"name":"webpage","type":"WebPage"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1663561404","predicate":"messages.chatsSlice","params":[{"name":"count","type":"int"},{"name":"chats","type":"Vector"}],"type":"messages.Chats"},{"id":"-599948721","predicate":"textEmpty","params":[],"type":"RichText"},{"id":"1950782688","predicate":"textPlain","params":[{"name":"text","type":"string"}],"type":"RichText"},{"id":"1730456516","predicate":"textBold","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-653089380","predicate":"textItalic","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-1054465340","predicate":"textUnderline","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-1678197867","predicate":"textStrike","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"1816074681","predicate":"textFixed","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"1009288385","predicate":"textUrl","params":[{"name":"text","type":"RichText"},{"name":"url","type":"string"},{"name":"webpage_id","type":"long"}],"type":"RichText"},{"id":"-564523562","predicate":"textEmail","params":[{"name":"text","type":"RichText"},{"name":"email","type":"string"}],"type":"RichText"},{"id":"2120376535","predicate":"textConcat","params":[{"name":"texts","type":"Vector"}],"type":"RichText"},{"id":"324435594","predicate":"pageBlockUnsupported","params":[],"type":"PageBlock"},{"id":"1890305021","predicate":"pageBlockTitle","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1879401953","predicate":"pageBlockSubtitle","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1162877472","predicate":"pageBlockAuthorDate","params":[{"name":"author","type":"RichText"},{"name":"published_date","type":"int"}],"type":"PageBlock"},{"id":"-1076861716","predicate":"pageBlockHeader","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-248793375","predicate":"pageBlockSubheader","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"1182402406","predicate":"pageBlockParagraph","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1066346178","predicate":"pageBlockPreformatted","params":[{"name":"text","type":"RichText"},{"name":"language","type":"string"}],"type":"PageBlock"},{"id":"1216809369","predicate":"pageBlockFooter","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-618614392","predicate":"pageBlockDivider","params":[],"type":"PageBlock"},{"id":"-837994576","predicate":"pageBlockAnchor","params":[{"name":"name","type":"string"}],"type":"PageBlock"},{"id":"-454524911","predicate":"pageBlockList","params":[{"name":"items","type":"Vector"}],"type":"PageBlock"},{"id":"641563686","predicate":"pageBlockBlockquote","params":[{"name":"text","type":"RichText"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"1329878739","predicate":"pageBlockPullquote","params":[{"name":"text","type":"RichText"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"391759200","predicate":"pageBlockPhoto","params":[{"name":"flags","type":"#"},{"name":"photo_id","type":"long"},{"name":"caption","type":"PageCaption"},{"name":"url","type":"flags.0?string"},{"name":"webpage_id","type":"flags.0?long"}],"type":"PageBlock"},{"id":"2089805750","predicate":"pageBlockVideo","params":[{"name":"flags","type":"#"},{"name":"autoplay","type":"flags.0?true"},{"name":"loop","type":"flags.1?true"},{"name":"video_id","type":"long"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"972174080","predicate":"pageBlockCover","params":[{"name":"cover","type":"PageBlock"}],"type":"PageBlock"},{"id":"-1468953147","predicate":"pageBlockEmbed","params":[{"name":"flags","type":"#"},{"name":"full_width","type":"flags.0?true"},{"name":"allow_scrolling","type":"flags.3?true"},{"name":"url","type":"flags.1?string"},{"name":"html","type":"flags.2?string"},{"name":"poster_photo_id","type":"flags.4?long"},{"name":"w","type":"flags.5?int"},{"name":"h","type":"flags.5?int"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"-229005301","predicate":"pageBlockEmbedPost","params":[{"name":"url","type":"string"},{"name":"webpage_id","type":"long"},{"name":"author_photo_id","type":"long"},{"name":"author","type":"string"},{"name":"date","type":"int"},{"name":"blocks","type":"Vector"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"1705048653","predicate":"pageBlockCollage","params":[{"name":"items","type":"Vector"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"52401552","predicate":"pageBlockSlideshow","params":[{"name":"items","type":"Vector"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"-2054908813","predicate":"webPageNotModified","params":[],"type":"WebPage"},{"id":"-88417185","predicate":"inputPrivacyKeyPhoneCall","params":[],"type":"InputPrivacyKey"},{"id":"1030105979","predicate":"privacyKeyPhoneCall","params":[],"type":"PrivacyKey"},{"id":"-580219064","predicate":"sendMessageGamePlayAction","params":[],"type":"SendMessageAction"},{"id":"-2048646399","predicate":"phoneCallDiscardReasonMissed","params":[],"type":"PhoneCallDiscardReason"},{"id":"-527056480","predicate":"phoneCallDiscardReasonDisconnect","params":[],"type":"PhoneCallDiscardReason"},{"id":"1471006352","predicate":"phoneCallDiscardReasonHangup","params":[],"type":"PhoneCallDiscardReason"},{"id":"-84416311","predicate":"phoneCallDiscardReasonBusy","params":[],"type":"PhoneCallDiscardReason"},{"id":"1852826908","predicate":"updateDialogPinned","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.0?true"},{"name":"folder_id","type":"flags.1?int"},{"name":"peer","type":"DialogPeer"}],"type":"Update"},{"id":"-99664734","predicate":"updatePinnedDialogs","params":[{"name":"flags","type":"#"},{"name":"folder_id","type":"flags.1?int"},{"name":"order","type":"flags.0?Vector"}],"type":"Update"},{"id":"2104790276","predicate":"dataJSON","params":[{"name":"data","type":"string"}],"type":"DataJSON"},{"id":"-2095595325","predicate":"updateBotWebhookJSON","params":[{"name":"data","type":"DataJSON"}],"type":"Update"},{"id":"-1684914010","predicate":"updateBotWebhookJSONQuery","params":[{"name":"query_id","type":"long"},{"name":"data","type":"DataJSON"},{"name":"timeout","type":"int"}],"type":"Update"},{"id":"-886477832","predicate":"labeledPrice","params":[{"name":"label","type":"string"},{"name":"amount","type":"long"}],"type":"LabeledPrice"},{"id":"-1022713000","predicate":"invoice","params":[{"name":"flags","type":"#"},{"name":"test","type":"flags.0?true"},{"name":"name_requested","type":"flags.1?true"},{"name":"phone_requested","type":"flags.2?true"},{"name":"email_requested","type":"flags.3?true"},{"name":"shipping_address_requested","type":"flags.4?true"},{"name":"flexible","type":"flags.5?true"},{"name":"phone_to_provider","type":"flags.6?true"},{"name":"email_to_provider","type":"flags.7?true"},{"name":"currency","type":"string"},{"name":"prices","type":"Vector"}],"type":"Invoice"},{"id":"-186607933","predicate":"inputMediaInvoice","params":[{"name":"flags","type":"#"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"flags.0?InputWebDocument"},{"name":"invoice","type":"Invoice"},{"name":"payload","type":"bytes"},{"name":"provider","type":"string"},{"name":"provider_data","type":"DataJSON"},{"name":"start_param","type":"string"}],"type":"InputMedia"},{"id":"-368917890","predicate":"paymentCharge","params":[{"name":"id","type":"string"},{"name":"provider_charge_id","type":"string"}],"type":"PaymentCharge"},{"id":"-1892568281","predicate":"messageActionPaymentSentMe","params":[{"name":"flags","type":"#"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"},{"name":"payload","type":"bytes"},{"name":"info","type":"flags.0?PaymentRequestedInfo"},{"name":"shipping_option_id","type":"flags.1?string"},{"name":"charge","type":"PaymentCharge"}],"type":"MessageAction"},{"id":"-2074799289","predicate":"messageMediaInvoice","params":[{"name":"flags","type":"#"},{"name":"shipping_address_requested","type":"flags.1?true"},{"name":"test","type":"flags.3?true"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"flags.0?WebDocument"},{"name":"receipt_msg_id","type":"flags.2?int"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"},{"name":"start_param","type":"string"}],"type":"MessageMedia"},{"id":"512535275","predicate":"postAddress","params":[{"name":"street_line1","type":"string"},{"name":"street_line2","type":"string"},{"name":"city","type":"string"},{"name":"state","type":"string"},{"name":"country_iso2","type":"string"},{"name":"post_code","type":"string"}],"type":"PostAddress"},{"id":"-1868808300","predicate":"paymentRequestedInfo","params":[{"name":"flags","type":"#"},{"name":"name","type":"flags.0?string"},{"name":"phone","type":"flags.1?string"},{"name":"email","type":"flags.2?string"},{"name":"shipping_address","type":"flags.3?PostAddress"}],"type":"PaymentRequestedInfo"},{"id":"-1344716869","predicate":"keyboardButtonBuy","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"1080663248","predicate":"messageActionPaymentSent","params":[{"name":"currency","type":"string"},{"name":"total_amount","type":"long"}],"type":"MessageAction"},{"id":"-842892769","predicate":"paymentSavedCredentialsCard","params":[{"name":"id","type":"string"},{"name":"title","type":"string"}],"type":"PaymentSavedCredentials"},{"id":"475467473","predicate":"webDocument","params":[{"name":"url","type":"string"},{"name":"access_hash","type":"long"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"}],"type":"WebDocument"},{"id":"-1678949555","predicate":"inputWebDocument","params":[{"name":"url","type":"string"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"}],"type":"InputWebDocument"},{"id":"-1036396922","predicate":"inputWebFileLocation","params":[{"name":"url","type":"string"},{"name":"access_hash","type":"long"}],"type":"InputWebFileLocation"},{"id":"568808380","predicate":"upload.webFile","params":[{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"file_type","type":"storage.FileType"},{"name":"mtime","type":"int"},{"name":"bytes","type":"bytes"}],"type":"upload.WebFile"},{"id":"1062645411","predicate":"payments.paymentForm","params":[{"name":"flags","type":"#"},{"name":"can_save_credentials","type":"flags.2?true"},{"name":"password_missing","type":"flags.3?true"},{"name":"bot_id","type":"int"},{"name":"invoice","type":"Invoice"},{"name":"provider_id","type":"int"},{"name":"url","type":"string"},{"name":"native_provider","type":"flags.4?string"},{"name":"native_params","type":"flags.4?DataJSON"},{"name":"saved_info","type":"flags.0?PaymentRequestedInfo"},{"name":"saved_credentials","type":"flags.1?PaymentSavedCredentials"},{"name":"users","type":"Vector"}],"type":"payments.PaymentForm"},{"id":"-784000893","predicate":"payments.validatedRequestedInfo","params":[{"name":"flags","type":"#"},{"name":"id","type":"flags.0?string"},{"name":"shipping_options","type":"flags.1?Vector"}],"type":"payments.ValidatedRequestedInfo"},{"id":"1314881805","predicate":"payments.paymentResult","params":[{"name":"updates","type":"Updates"}],"type":"payments.PaymentResult"},{"id":"1342771681","predicate":"payments.paymentReceipt","params":[{"name":"flags","type":"#"},{"name":"date","type":"int"},{"name":"bot_id","type":"int"},{"name":"invoice","type":"Invoice"},{"name":"provider_id","type":"int"},{"name":"info","type":"flags.0?PaymentRequestedInfo"},{"name":"shipping","type":"flags.1?ShippingOption"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"},{"name":"credentials_title","type":"string"},{"name":"users","type":"Vector"}],"type":"payments.PaymentReceipt"},{"id":"-74456004","predicate":"payments.savedInfo","params":[{"name":"flags","type":"#"},{"name":"has_saved_credentials","type":"flags.1?true"},{"name":"saved_info","type":"flags.0?PaymentRequestedInfo"}],"type":"payments.SavedInfo"},{"id":"-1056001329","predicate":"inputPaymentCredentialsSaved","params":[{"name":"id","type":"string"},{"name":"tmp_password","type":"bytes"}],"type":"InputPaymentCredentials"},{"id":"873977640","predicate":"inputPaymentCredentials","params":[{"name":"flags","type":"#"},{"name":"save","type":"flags.0?true"},{"name":"data","type":"DataJSON"}],"type":"InputPaymentCredentials"},{"id":"-614138572","predicate":"account.tmpPassword","params":[{"name":"tmp_password","type":"bytes"},{"name":"valid_until","type":"int"}],"type":"account.TmpPassword"},{"id":"-1239335713","predicate":"shippingOption","params":[{"name":"id","type":"string"},{"name":"title","type":"string"},{"name":"prices","type":"Vector"}],"type":"ShippingOption"},{"id":"-523384512","predicate":"updateBotShippingQuery","params":[{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"payload","type":"bytes"},{"name":"shipping_address","type":"PostAddress"}],"type":"Update"},{"id":"1563376297","predicate":"updateBotPrecheckoutQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"payload","type":"bytes"},{"name":"info","type":"flags.0?PaymentRequestedInfo"},{"name":"shipping_option_id","type":"flags.1?string"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"}],"type":"Update"},{"id":"-6249322","predicate":"inputStickerSetItem","params":[{"name":"flags","type":"#"},{"name":"document","type":"InputDocument"},{"name":"emoji","type":"string"},{"name":"mask_coords","type":"flags.0?MaskCoords"}],"type":"InputStickerSetItem"},{"id":"-1425052898","predicate":"updatePhoneCall","params":[{"name":"phone_call","type":"PhoneCall"}],"type":"Update"},{"id":"506920429","predicate":"inputPhoneCall","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputPhoneCall"},{"id":"1399245077","predicate":"phoneCallEmpty","params":[{"name":"id","type":"long"}],"type":"PhoneCall"},{"id":"462375633","predicate":"phoneCallWaiting","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"protocol","type":"PhoneCallProtocol"},{"name":"receive_date","type":"flags.0?int"}],"type":"PhoneCall"},{"id":"-2014659757","predicate":"phoneCallRequested","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_hash","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"PhoneCall"},{"id":"-1719909046","predicate":"phoneCallAccepted","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_b","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"PhoneCall"},{"id":"-2025673089","predicate":"phoneCall","params":[{"name":"flags","type":"#"},{"name":"p2p_allowed","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_or_b","type":"bytes"},{"name":"key_fingerprint","type":"long"},{"name":"protocol","type":"PhoneCallProtocol"},{"name":"connections","type":"Vector"},{"name":"start_date","type":"int"}],"type":"PhoneCall"},{"id":"1355435489","predicate":"phoneCallDiscarded","params":[{"name":"flags","type":"#"},{"name":"need_rating","type":"flags.2?true"},{"name":"need_debug","type":"flags.3?true"},{"name":"video","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"reason","type":"flags.0?PhoneCallDiscardReason"},{"name":"duration","type":"flags.1?int"}],"type":"PhoneCall"},{"id":"-1655957568","predicate":"phoneConnection","params":[{"name":"id","type":"long"},{"name":"ip","type":"string"},{"name":"ipv6","type":"string"},{"name":"port","type":"int"},{"name":"peer_tag","type":"bytes"}],"type":"PhoneConnection"},{"id":"-1564789301","predicate":"phoneCallProtocol","params":[{"name":"flags","type":"#"},{"name":"udp_p2p","type":"flags.0?true"},{"name":"udp_reflector","type":"flags.1?true"},{"name":"min_layer","type":"int"},{"name":"max_layer","type":"int"}],"type":"PhoneCallProtocol"},{"id":"-326966976","predicate":"phone.phoneCall","params":[{"name":"phone_call","type":"PhoneCall"},{"name":"users","type":"Vector"}],"type":"phone.PhoneCall"},{"id":"-2134272152","predicate":"inputMessagesFilterPhoneCalls","params":[{"name":"flags","type":"#"},{"name":"missed","type":"flags.0?true"}],"type":"MessagesFilter"},{"id":"-2132731265","predicate":"messageActionPhoneCall","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.2?true"},{"name":"call_id","type":"long"},{"name":"reason","type":"flags.0?PhoneCallDiscardReason"},{"name":"duration","type":"flags.1?int"}],"type":"MessageAction"},{"id":"2054952868","predicate":"inputMessagesFilterRoundVoice","params":[],"type":"MessagesFilter"},{"id":"-1253451181","predicate":"inputMessagesFilterRoundVideo","params":[],"type":"MessagesFilter"},{"id":"-1997373508","predicate":"sendMessageRecordRoundAction","params":[],"type":"SendMessageAction"},{"id":"608050278","predicate":"sendMessageUploadRoundAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-242427324","predicate":"upload.fileCdnRedirect","params":[{"name":"dc_id","type":"int"},{"name":"file_token","type":"bytes"},{"name":"encryption_key","type":"bytes"},{"name":"encryption_iv","type":"bytes"},{"name":"file_hashes","type":"Vector"}],"type":"upload.File"},{"id":"-290921362","predicate":"upload.cdnFileReuploadNeeded","params":[{"name":"request_token","type":"bytes"}],"type":"upload.CdnFile"},{"id":"-1449145777","predicate":"upload.cdnFile","params":[{"name":"bytes","type":"bytes"}],"type":"upload.CdnFile"},{"id":"-914167110","predicate":"cdnPublicKey","params":[{"name":"dc_id","type":"int"},{"name":"public_key","type":"string"}],"type":"CdnPublicKey"},{"id":"1462101002","predicate":"cdnConfig","params":[{"name":"public_keys","type":"Vector"}],"type":"CdnConfig"},{"id":"-283684427","predicate":"pageBlockChannel","params":[{"name":"channel","type":"Chat"}],"type":"PageBlock"},{"id":"-892239370","predicate":"langPackString","params":[{"name":"key","type":"string"},{"name":"value","type":"string"}],"type":"LangPackString"},{"id":"1816636575","predicate":"langPackStringPluralized","params":[{"name":"flags","type":"#"},{"name":"key","type":"string"},{"name":"zero_value","type":"flags.0?string"},{"name":"one_value","type":"flags.1?string"},{"name":"two_value","type":"flags.2?string"},{"name":"few_value","type":"flags.3?string"},{"name":"many_value","type":"flags.4?string"},{"name":"other_value","type":"string"}],"type":"LangPackString"},{"id":"695856818","predicate":"langPackStringDeleted","params":[{"name":"key","type":"string"}],"type":"LangPackString"},{"id":"-209337866","predicate":"langPackDifference","params":[{"name":"lang_code","type":"string"},{"name":"from_version","type":"int"},{"name":"version","type":"int"},{"name":"strings","type":"Vector"}],"type":"LangPackDifference"},{"id":"-288727837","predicate":"langPackLanguage","params":[{"name":"flags","type":"#"},{"name":"official","type":"flags.0?true"},{"name":"rtl","type":"flags.2?true"},{"name":"beta","type":"flags.3?true"},{"name":"name","type":"string"},{"name":"native_name","type":"string"},{"name":"lang_code","type":"string"},{"name":"base_lang_code","type":"flags.1?string"},{"name":"plural_code","type":"string"},{"name":"strings_count","type":"int"},{"name":"translated_count","type":"int"},{"name":"translations_url","type":"string"}],"type":"LangPackLanguage"},{"id":"1180041828","predicate":"updateLangPackTooLong","params":[{"name":"lang_code","type":"string"}],"type":"Update"},{"id":"1442983757","predicate":"updateLangPack","params":[{"name":"difference","type":"LangPackDifference"}],"type":"Update"},{"id":"-859915345","predicate":"channelParticipantAdmin","params":[{"name":"flags","type":"#"},{"name":"can_edit","type":"flags.0?true"},{"name":"self","type":"flags.1?true"},{"name":"user_id","type":"int"},{"name":"inviter_id","type":"flags.1?int"},{"name":"promoted_by","type":"int"},{"name":"date","type":"int"},{"name":"admin_rights","type":"ChatAdminRights"},{"name":"rank","type":"flags.2?string"}],"type":"ChannelParticipant"},{"id":"470789295","predicate":"channelParticipantBanned","params":[{"name":"flags","type":"#"},{"name":"left","type":"flags.0?true"},{"name":"user_id","type":"int"},{"name":"kicked_by","type":"int"},{"name":"date","type":"int"},{"name":"banned_rights","type":"ChatBannedRights"}],"type":"ChannelParticipant"},{"id":"338142689","predicate":"channelParticipantsBanned","params":[{"name":"q","type":"string"}],"type":"ChannelParticipantsFilter"},{"id":"106343499","predicate":"channelParticipantsSearch","params":[{"name":"q","type":"string"}],"type":"ChannelParticipantsFilter"},{"id":"-421545947","predicate":"channelAdminLogEventActionChangeTitle","params":[{"name":"prev_value","type":"string"},{"name":"new_value","type":"string"}],"type":"ChannelAdminLogEventAction"},{"id":"1427671598","predicate":"channelAdminLogEventActionChangeAbout","params":[{"name":"prev_value","type":"string"},{"name":"new_value","type":"string"}],"type":"ChannelAdminLogEventAction"},{"id":"1783299128","predicate":"channelAdminLogEventActionChangeUsername","params":[{"name":"prev_value","type":"string"},{"name":"new_value","type":"string"}],"type":"ChannelAdminLogEventAction"},{"id":"1129042607","predicate":"channelAdminLogEventActionChangePhoto","params":[{"name":"prev_photo","type":"Photo"},{"name":"new_photo","type":"Photo"}],"type":"ChannelAdminLogEventAction"},{"id":"460916654","predicate":"channelAdminLogEventActionToggleInvites","params":[{"name":"new_value","type":"Bool"}],"type":"ChannelAdminLogEventAction"},{"id":"648939889","predicate":"channelAdminLogEventActionToggleSignatures","params":[{"name":"new_value","type":"Bool"}],"type":"ChannelAdminLogEventAction"},{"id":"-370660328","predicate":"channelAdminLogEventActionUpdatePinned","params":[{"name":"message","type":"Message"}],"type":"ChannelAdminLogEventAction"},{"id":"1889215493","predicate":"channelAdminLogEventActionEditMessage","params":[{"name":"prev_message","type":"Message"},{"name":"new_message","type":"Message"}],"type":"ChannelAdminLogEventAction"},{"id":"1121994683","predicate":"channelAdminLogEventActionDeleteMessage","params":[{"name":"message","type":"Message"}],"type":"ChannelAdminLogEventAction"},{"id":"405815507","predicate":"channelAdminLogEventActionParticipantJoin","params":[],"type":"ChannelAdminLogEventAction"},{"id":"-124291086","predicate":"channelAdminLogEventActionParticipantLeave","params":[],"type":"ChannelAdminLogEventAction"},{"id":"-484690728","predicate":"channelAdminLogEventActionParticipantInvite","params":[{"name":"participant","type":"ChannelParticipant"}],"type":"ChannelAdminLogEventAction"},{"id":"-422036098","predicate":"channelAdminLogEventActionParticipantToggleBan","params":[{"name":"prev_participant","type":"ChannelParticipant"},{"name":"new_participant","type":"ChannelParticipant"}],"type":"ChannelAdminLogEventAction"},{"id":"-714643696","predicate":"channelAdminLogEventActionParticipantToggleAdmin","params":[{"name":"prev_participant","type":"ChannelParticipant"},{"name":"new_participant","type":"ChannelParticipant"}],"type":"ChannelAdminLogEventAction"},{"id":"995769920","predicate":"channelAdminLogEvent","params":[{"name":"id","type":"long"},{"name":"date","type":"int"},{"name":"user_id","type":"int"},{"name":"action","type":"ChannelAdminLogEventAction"}],"type":"ChannelAdminLogEvent"},{"id":"-309659827","predicate":"channels.adminLogResults","params":[{"name":"events","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"channels.AdminLogResults"},{"id":"-368018716","predicate":"channelAdminLogEventsFilter","params":[{"name":"flags","type":"#"},{"name":"join","type":"flags.0?true"},{"name":"leave","type":"flags.1?true"},{"name":"invite","type":"flags.2?true"},{"name":"ban","type":"flags.3?true"},{"name":"unban","type":"flags.4?true"},{"name":"kick","type":"flags.5?true"},{"name":"unkick","type":"flags.6?true"},{"name":"promote","type":"flags.7?true"},{"name":"demote","type":"flags.8?true"},{"name":"info","type":"flags.9?true"},{"name":"settings","type":"flags.10?true"},{"name":"pinned","type":"flags.11?true"},{"name":"edit","type":"flags.12?true"},{"name":"delete","type":"flags.13?true"}],"type":"ChannelAdminLogEventsFilter"},{"id":"511092620","predicate":"topPeerCategoryPhoneCalls","params":[],"type":"TopPeerCategory"},{"id":"-2143067670","predicate":"pageBlockAudio","params":[{"name":"audio_id","type":"long"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"1558266229","predicate":"popularContact","params":[{"name":"client_id","type":"long"},{"name":"importers","type":"int"}],"type":"PopularContact"},{"id":"1200788123","predicate":"messageActionScreenshotTaken","params":[],"type":"MessageAction"},{"id":"-1634752813","predicate":"messages.favedStickersNotModified","params":[],"type":"messages.FavedStickers"},{"id":"-209768682","predicate":"messages.favedStickers","params":[{"name":"hash","type":"int"},{"name":"packs","type":"Vector"},{"name":"stickers","type":"Vector"}],"type":"messages.FavedStickers"},{"id":"-451831443","predicate":"updateFavedStickers","params":[],"type":"Update"},{"id":"-1987495099","predicate":"updateChannelReadMessagesContents","params":[{"name":"channel_id","type":"int"},{"name":"messages","type":"Vector"}],"type":"Update"},{"id":"-1040652646","predicate":"inputMessagesFilterMyMentions","params":[],"type":"MessagesFilter"},{"id":"1887741886","predicate":"updateContactsReset","params":[],"type":"Update"},{"id":"-1312568665","predicate":"channelAdminLogEventActionChangeStickerSet","params":[{"name":"prev_stickerset","type":"InputStickerSet"},{"name":"new_stickerset","type":"InputStickerSet"}],"type":"ChannelAdminLogEventAction"},{"id":"-85549226","predicate":"messageActionCustomAction","params":[{"name":"message","type":"string"}],"type":"MessageAction"},{"id":"178373535","predicate":"inputPaymentCredentialsApplePay","params":[{"name":"payment_data","type":"DataJSON"}],"type":"InputPaymentCredentials"},{"id":"-905587442","predicate":"inputPaymentCredentialsAndroidPay","params":[{"name":"payment_token","type":"DataJSON"},{"name":"google_transaction_id","type":"string"}],"type":"InputPaymentCredentials"},{"id":"-419271411","predicate":"inputMessagesFilterGeo","params":[],"type":"MessagesFilter"},{"id":"-530392189","predicate":"inputMessagesFilterContacts","params":[],"type":"MessagesFilter"},{"id":"1893427255","predicate":"updateChannelAvailableMessages","params":[{"name":"channel_id","type":"int"},{"name":"available_min_id","type":"int"}],"type":"Update"},{"id":"1599903217","predicate":"channelAdminLogEventActionTogglePreHistoryHidden","params":[{"name":"new_value","type":"Bool"}],"type":"ChannelAdminLogEventAction"},{"id":"-833715459","predicate":"inputMediaGeoLive","params":[{"name":"flags","type":"#"},{"name":"stopped","type":"flags.0?true"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"period","type":"flags.1?int"}],"type":"InputMedia"},{"id":"2084316681","predicate":"messageMediaGeoLive","params":[{"name":"geo","type":"GeoPoint"},{"name":"period","type":"int"}],"type":"MessageMedia"},{"id":"1189204285","predicate":"recentMeUrlUnknown","params":[{"name":"url","type":"string"}],"type":"RecentMeUrl"},{"id":"-1917045962","predicate":"recentMeUrlUser","params":[{"name":"url","type":"string"},{"name":"user_id","type":"int"}],"type":"RecentMeUrl"},{"id":"-1608834311","predicate":"recentMeUrlChat","params":[{"name":"url","type":"string"},{"name":"chat_id","type":"int"}],"type":"RecentMeUrl"},{"id":"-347535331","predicate":"recentMeUrlChatInvite","params":[{"name":"url","type":"string"},{"name":"chat_invite","type":"ChatInvite"}],"type":"RecentMeUrl"},{"id":"-1140172836","predicate":"recentMeUrlStickerSet","params":[{"name":"url","type":"string"},{"name":"set","type":"StickerSetCovered"}],"type":"RecentMeUrl"},{"id":"235081943","predicate":"help.recentMeUrls","params":[{"name":"urls","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"help.RecentMeUrls"},{"id":"-266911767","predicate":"channels.channelParticipantsNotModified","params":[],"type":"channels.ChannelParticipants"},{"id":"1951620897","predicate":"messages.messagesNotModified","params":[{"name":"count","type":"int"}],"type":"messages.Messages"},{"id":"482797855","predicate":"inputSingleMedia","params":[{"name":"flags","type":"#"},{"name":"media","type":"InputMedia"},{"name":"random_id","type":"long"},{"name":"message","type":"string"},{"name":"entities","type":"flags.0?Vector"}],"type":"InputSingleMedia"},{"id":"-892779534","predicate":"webAuthorization","params":[{"name":"hash","type":"long"},{"name":"bot_id","type":"int"},{"name":"domain","type":"string"},{"name":"browser","type":"string"},{"name":"platform","type":"string"},{"name":"date_created","type":"int"},{"name":"date_active","type":"int"},{"name":"ip","type":"string"},{"name":"region","type":"string"}],"type":"WebAuthorization"},{"id":"-313079300","predicate":"account.webAuthorizations","params":[{"name":"authorizations","type":"Vector"},{"name":"users","type":"Vector"}],"type":"account.WebAuthorizations"},{"id":"-1502174430","predicate":"inputMessageID","params":[{"name":"id","type":"int"}],"type":"InputMessage"},{"id":"-1160215659","predicate":"inputMessageReplyTo","params":[{"name":"id","type":"int"}],"type":"InputMessage"},{"id":"-2037963464","predicate":"inputMessagePinned","params":[],"type":"InputMessage"},{"id":"-1687559349","predicate":"messageEntityPhone","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1280209983","predicate":"messageEntityCashtag","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-1410748418","predicate":"messageActionBotAllowed","params":[{"name":"domain","type":"string"}],"type":"MessageAction"},{"id":"-55902537","predicate":"inputDialogPeer","params":[{"name":"peer","type":"InputPeer"}],"type":"InputDialogPeer"},{"id":"-445792507","predicate":"dialogPeer","params":[{"name":"peer","type":"Peer"}],"type":"DialogPeer"},{"id":"223655517","predicate":"messages.foundStickerSetsNotModified","params":[],"type":"messages.FoundStickerSets"},{"id":"1359533640","predicate":"messages.foundStickerSets","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.FoundStickerSets"},{"id":"1648543603","predicate":"fileHash","params":[{"name":"offset","type":"int"},{"name":"limit","type":"int"},{"name":"hash","type":"bytes"}],"type":"FileHash"},{"id":"-104284986","predicate":"webDocumentNoProxy","params":[{"name":"url","type":"string"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"}],"type":"WebDocument"},{"id":"1968737087","predicate":"inputClientProxy","params":[{"name":"address","type":"string"},{"name":"port","type":"int"}],"type":"InputClientProxy"},{"id":"-526508104","predicate":"help.proxyDataEmpty","params":[{"name":"expires","type":"int"}],"type":"help.ProxyData"},{"id":"737668643","predicate":"help.proxyDataPromo","params":[{"name":"expires","type":"int"},{"name":"peer","type":"Peer"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"help.ProxyData"},{"id":"-483352705","predicate":"help.termsOfServiceUpdateEmpty","params":[{"name":"expires","type":"int"}],"type":"help.TermsOfServiceUpdate"},{"id":"686618977","predicate":"help.termsOfServiceUpdate","params":[{"name":"expires","type":"int"},{"name":"terms_of_service","type":"help.TermsOfService"}],"type":"help.TermsOfServiceUpdate"},{"id":"859091184","predicate":"inputSecureFileUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"md5_checksum","type":"string"},{"name":"file_hash","type":"bytes"},{"name":"secret","type":"bytes"}],"type":"InputSecureFile"},{"id":"1399317950","predicate":"inputSecureFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputSecureFile"},{"id":"-876089816","predicate":"inputSecureFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputFileLocation"},{"id":"1679398724","predicate":"secureFileEmpty","params":[],"type":"SecureFile"},{"id":"-534283678","predicate":"secureFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"size","type":"int"},{"name":"dc_id","type":"int"},{"name":"date","type":"int"},{"name":"file_hash","type":"bytes"},{"name":"secret","type":"bytes"}],"type":"SecureFile"},{"id":"-1964327229","predicate":"secureData","params":[{"name":"data","type":"bytes"},{"name":"data_hash","type":"bytes"},{"name":"secret","type":"bytes"}],"type":"SecureData"},{"id":"2103482845","predicate":"securePlainPhone","params":[{"name":"phone","type":"string"}],"type":"SecurePlainData"},{"id":"569137759","predicate":"securePlainEmail","params":[{"name":"email","type":"string"}],"type":"SecurePlainData"},{"id":"-1658158621","predicate":"secureValueTypePersonalDetails","params":[],"type":"SecureValueType"},{"id":"1034709504","predicate":"secureValueTypePassport","params":[],"type":"SecureValueType"},{"id":"115615172","predicate":"secureValueTypeDriverLicense","params":[],"type":"SecureValueType"},{"id":"-1596951477","predicate":"secureValueTypeIdentityCard","params":[],"type":"SecureValueType"},{"id":"-1717268701","predicate":"secureValueTypeInternalPassport","params":[],"type":"SecureValueType"},{"id":"-874308058","predicate":"secureValueTypeAddress","params":[],"type":"SecureValueType"},{"id":"-63531698","predicate":"secureValueTypeUtilityBill","params":[],"type":"SecureValueType"},{"id":"-1995211763","predicate":"secureValueTypeBankStatement","params":[],"type":"SecureValueType"},{"id":"-1954007928","predicate":"secureValueTypeRentalAgreement","params":[],"type":"SecureValueType"},{"id":"-1713143702","predicate":"secureValueTypePassportRegistration","params":[],"type":"SecureValueType"},{"id":"-368907213","predicate":"secureValueTypeTemporaryRegistration","params":[],"type":"SecureValueType"},{"id":"-1289704741","predicate":"secureValueTypePhone","params":[],"type":"SecureValueType"},{"id":"-1908627474","predicate":"secureValueTypeEmail","params":[],"type":"SecureValueType"},{"id":"411017418","predicate":"secureValue","params":[{"name":"flags","type":"#"},{"name":"type","type":"SecureValueType"},{"name":"data","type":"flags.0?SecureData"},{"name":"front_side","type":"flags.1?SecureFile"},{"name":"reverse_side","type":"flags.2?SecureFile"},{"name":"selfie","type":"flags.3?SecureFile"},{"name":"translation","type":"flags.6?Vector"},{"name":"files","type":"flags.4?Vector"},{"name":"plain_data","type":"flags.5?SecurePlainData"},{"name":"hash","type":"bytes"}],"type":"SecureValue"},{"id":"-618540889","predicate":"inputSecureValue","params":[{"name":"flags","type":"#"},{"name":"type","type":"SecureValueType"},{"name":"data","type":"flags.0?SecureData"},{"name":"front_side","type":"flags.1?InputSecureFile"},{"name":"reverse_side","type":"flags.2?InputSecureFile"},{"name":"selfie","type":"flags.3?InputSecureFile"},{"name":"translation","type":"flags.6?Vector"},{"name":"files","type":"flags.4?Vector"},{"name":"plain_data","type":"flags.5?SecurePlainData"}],"type":"InputSecureValue"},{"id":"-316748368","predicate":"secureValueHash","params":[{"name":"type","type":"SecureValueType"},{"name":"hash","type":"bytes"}],"type":"SecureValueHash"},{"id":"-391902247","predicate":"secureValueErrorData","params":[{"name":"type","type":"SecureValueType"},{"name":"data_hash","type":"bytes"},{"name":"field","type":"string"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"12467706","predicate":"secureValueErrorFrontSide","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"-2037765467","predicate":"secureValueErrorReverseSide","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"-449327402","predicate":"secureValueErrorSelfie","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"2054162547","predicate":"secureValueErrorFile","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"1717706985","predicate":"secureValueErrorFiles","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"Vector"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"871426631","predicate":"secureCredentialsEncrypted","params":[{"name":"data","type":"bytes"},{"name":"hash","type":"bytes"},{"name":"secret","type":"bytes"}],"type":"SecureCredentialsEncrypted"},{"id":"-1389486888","predicate":"account.authorizationForm","params":[{"name":"flags","type":"#"},{"name":"required_types","type":"Vector"},{"name":"values","type":"Vector"},{"name":"errors","type":"Vector"},{"name":"users","type":"Vector"},{"name":"privacy_policy_url","type":"flags.0?string"}],"type":"account.AuthorizationForm"},{"id":"-2128640689","predicate":"account.sentEmailCode","params":[{"name":"email_pattern","type":"string"},{"name":"length","type":"int"}],"type":"account.SentEmailCode"},{"id":"455635795","predicate":"messageActionSecureValuesSentMe","params":[{"name":"values","type":"Vector"},{"name":"credentials","type":"SecureCredentialsEncrypted"}],"type":"MessageAction"},{"id":"-648257196","predicate":"messageActionSecureValuesSent","params":[{"name":"types","type":"Vector"}],"type":"MessageAction"},{"id":"1722786150","predicate":"help.deepLinkInfoEmpty","params":[],"type":"help.DeepLinkInfo"},{"id":"1783556146","predicate":"help.deepLinkInfo","params":[{"name":"flags","type":"#"},{"name":"update_app","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"}],"type":"help.DeepLinkInfo"},{"id":"289586518","predicate":"savedPhoneContact","params":[{"name":"phone","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"date","type":"int"}],"type":"SavedContact"},{"id":"1304052993","predicate":"account.takeout","params":[{"name":"id","type":"long"}],"type":"account.Takeout"},{"id":"700340377","predicate":"inputTakeoutFileLocation","params":[],"type":"InputFileLocation"},{"id":"-513517117","predicate":"updateDialogUnreadMark","params":[{"name":"flags","type":"#"},{"name":"unread","type":"flags.0?true"},{"name":"peer","type":"DialogPeer"}],"type":"Update"},{"id":"-253500010","predicate":"messages.dialogsNotModified","params":[{"name":"count","type":"int"}],"type":"messages.Dialogs"},{"id":"-1625153079","predicate":"inputWebFileGeoPointLocation","params":[{"name":"geo_point","type":"InputGeoPoint"},{"name":"access_hash","type":"long"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"zoom","type":"int"},{"name":"scale","type":"int"}],"type":"InputWebFileLocation"},{"id":"-1255369827","predicate":"contacts.topPeersDisabled","params":[],"type":"contacts.TopPeers"},{"id":"-1685456582","predicate":"inputReportReasonCopyright","params":[],"type":"ReportReason"},{"id":"-732254058","predicate":"passwordKdfAlgoUnknown","params":[],"type":"PasswordKdfAlgo"},{"id":"4883767","predicate":"securePasswordKdfAlgoUnknown","params":[],"type":"SecurePasswordKdfAlgo"},{"id":"-1141711456","predicate":"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000","params":[{"name":"salt","type":"bytes"}],"type":"SecurePasswordKdfAlgo"},{"id":"-2042159726","predicate":"securePasswordKdfAlgoSHA512","params":[{"name":"salt","type":"bytes"}],"type":"SecurePasswordKdfAlgo"},{"id":"354925740","predicate":"secureSecretSettings","params":[{"name":"secure_algo","type":"SecurePasswordKdfAlgo"},{"name":"secure_secret","type":"bytes"},{"name":"secure_secret_id","type":"long"}],"type":"SecureSecretSettings"},{"id":"982592842","predicate":"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow","params":[{"name":"salt1","type":"bytes"},{"name":"salt2","type":"bytes"},{"name":"g","type":"int"},{"name":"p","type":"bytes"}],"type":"PasswordKdfAlgo"},{"id":"-1736378792","predicate":"inputCheckPasswordEmpty","params":[],"type":"InputCheckPasswordSRP"},{"id":"-763367294","predicate":"inputCheckPasswordSRP","params":[{"name":"srp_id","type":"long"},{"name":"A","type":"bytes"},{"name":"M1","type":"bytes"}],"type":"InputCheckPasswordSRP"},{"id":"-2036501105","predicate":"secureValueError","params":[{"name":"type","type":"SecureValueType"},{"name":"hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"-1592506512","predicate":"secureValueErrorTranslationFile","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"878931416","predicate":"secureValueErrorTranslationFiles","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"Vector"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"-2103600678","predicate":"secureRequiredType","params":[{"name":"flags","type":"#"},{"name":"native_names","type":"flags.0?true"},{"name":"selfie_required","type":"flags.1?true"},{"name":"translation_required","type":"flags.2?true"},{"name":"type","type":"SecureValueType"}],"type":"SecureRequiredType"},{"id":"41187252","predicate":"secureRequiredTypeOneOf","params":[{"name":"types","type":"Vector"}],"type":"SecureRequiredType"},{"id":"-1078332329","predicate":"help.passportConfigNotModified","params":[],"type":"help.PassportConfig"},{"id":"-1600596305","predicate":"help.passportConfig","params":[{"name":"hash","type":"int"},{"name":"countries_langs","type":"DataJSON"}],"type":"help.PassportConfig"},{"id":"488313413","predicate":"inputAppEvent","params":[{"name":"time","type":"double"},{"name":"type","type":"string"},{"name":"peer","type":"long"},{"name":"data","type":"JSONValue"}],"type":"InputAppEvent"},{"id":"-1059185703","predicate":"jsonObjectValue","params":[{"name":"key","type":"string"},{"name":"value","type":"JSONValue"}],"type":"JSONObjectValue"},{"id":"1064139624","predicate":"jsonNull","params":[],"type":"JSONValue"},{"id":"-952869270","predicate":"jsonBool","params":[{"name":"value","type":"Bool"}],"type":"JSONValue"},{"id":"736157604","predicate":"jsonNumber","params":[{"name":"value","type":"double"}],"type":"JSONValue"},{"id":"-1222740358","predicate":"jsonString","params":[{"name":"value","type":"string"}],"type":"JSONValue"},{"id":"-146520221","predicate":"jsonArray","params":[{"name":"value","type":"Vector"}],"type":"JSONValue"},{"id":"-1715350371","predicate":"jsonObject","params":[{"name":"value","type":"Vector"}],"type":"JSONValue"},{"id":"1279515160","predicate":"updateUserPinnedMessage","params":[{"name":"user_id","type":"int"},{"name":"id","type":"int"}],"type":"Update"},{"id":"-519195831","predicate":"updateChatPinnedMessage","params":[{"name":"chat_id","type":"int"},{"name":"id","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-1311015810","predicate":"inputNotifyBroadcasts","params":[],"type":"InputNotifyPeer"},{"id":"-703403793","predicate":"notifyBroadcasts","params":[],"type":"NotifyPeer"},{"id":"-311786236","predicate":"textSubscript","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-939827711","predicate":"textSuperscript","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"55281185","predicate":"textMarked","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"483104362","predicate":"textPhone","params":[{"name":"text","type":"RichText"},{"name":"phone","type":"string"}],"type":"RichText"},{"id":"136105807","predicate":"textImage","params":[{"name":"document_id","type":"long"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"RichText"},{"id":"504660880","predicate":"pageBlockKicker","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"878078826","predicate":"pageTableCell","params":[{"name":"flags","type":"#"},{"name":"header","type":"flags.0?true"},{"name":"align_center","type":"flags.3?true"},{"name":"align_right","type":"flags.4?true"},{"name":"valign_middle","type":"flags.5?true"},{"name":"valign_bottom","type":"flags.6?true"},{"name":"text","type":"flags.7?RichText"},{"name":"colspan","type":"flags.1?int"},{"name":"rowspan","type":"flags.2?int"}],"type":"PageTableCell"},{"id":"-524237339","predicate":"pageTableRow","params":[{"name":"cells","type":"Vector"}],"type":"PageTableRow"},{"id":"-1085412734","predicate":"pageBlockTable","params":[{"name":"flags","type":"#"},{"name":"bordered","type":"flags.0?true"},{"name":"striped","type":"flags.1?true"},{"name":"title","type":"RichText"},{"name":"rows","type":"Vector"}],"type":"PageBlock"},{"id":"1869903447","predicate":"pageCaption","params":[{"name":"text","type":"RichText"},{"name":"credit","type":"RichText"}],"type":"PageCaption"},{"id":"-1188055347","predicate":"pageListItemText","params":[{"name":"text","type":"RichText"}],"type":"PageListItem"},{"id":"635466748","predicate":"pageListItemBlocks","params":[{"name":"blocks","type":"Vector"}],"type":"PageListItem"},{"id":"1577484359","predicate":"pageListOrderedItemText","params":[{"name":"num","type":"string"},{"name":"text","type":"RichText"}],"type":"PageListOrderedItem"},{"id":"-1730311882","predicate":"pageListOrderedItemBlocks","params":[{"name":"num","type":"string"},{"name":"blocks","type":"Vector"}],"type":"PageListOrderedItem"},{"id":"-1702174239","predicate":"pageBlockOrderedList","params":[{"name":"items","type":"Vector"}],"type":"PageBlock"},{"id":"1987480557","predicate":"pageBlockDetails","params":[{"name":"flags","type":"#"},{"name":"open","type":"flags.0?true"},{"name":"blocks","type":"Vector"},{"name":"title","type":"RichText"}],"type":"PageBlock"},{"id":"-1282352120","predicate":"pageRelatedArticle","params":[{"name":"flags","type":"#"},{"name":"url","type":"string"},{"name":"webpage_id","type":"long"},{"name":"title","type":"flags.0?string"},{"name":"description","type":"flags.1?string"},{"name":"photo_id","type":"flags.2?long"},{"name":"author","type":"flags.3?string"},{"name":"published_date","type":"flags.4?int"}],"type":"PageRelatedArticle"},{"id":"370236054","predicate":"pageBlockRelatedArticles","params":[{"name":"title","type":"RichText"},{"name":"articles","type":"Vector"}],"type":"PageBlock"},{"id":"-1538310410","predicate":"pageBlockMap","params":[{"name":"geo","type":"GeoPoint"},{"name":"zoom","type":"int"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"-1366746132","predicate":"page","params":[{"name":"flags","type":"#"},{"name":"part","type":"flags.0?true"},{"name":"rtl","type":"flags.1?true"},{"name":"v2","type":"flags.2?true"},{"name":"url","type":"string"},{"name":"blocks","type":"Vector"},{"name":"photos","type":"Vector"},{"name":"documents","type":"Vector"}],"type":"Page"},{"id":"-610373422","predicate":"inputPrivacyKeyPhoneP2P","params":[],"type":"InputPrivacyKey"},{"id":"961092808","predicate":"privacyKeyPhoneP2P","params":[],"type":"PrivacyKey"},{"id":"894777186","predicate":"textAnchor","params":[{"name":"text","type":"RichText"},{"name":"name","type":"string"}],"type":"RichText"},{"id":"-1945767479","predicate":"help.supportName","params":[{"name":"name","type":"string"}],"type":"help.SupportName"},{"id":"-206688531","predicate":"help.userInfoEmpty","params":[],"type":"help.UserInfo"},{"id":"32192344","predicate":"help.userInfo","params":[{"name":"message","type":"string"},{"name":"entities","type":"Vector"},{"name":"author","type":"string"},{"name":"date","type":"int"}],"type":"help.UserInfo"},{"id":"-202219658","predicate":"messageActionContactSignUp","params":[],"type":"MessageAction"},{"id":"-1398708869","predicate":"updateMessagePoll","params":[{"name":"flags","type":"#"},{"name":"poll_id","type":"long"},{"name":"poll","type":"flags.0?Poll"},{"name":"results","type":"PollResults"}],"type":"Update"},{"id":"1823064809","predicate":"pollAnswer","params":[{"name":"text","type":"string"},{"name":"option","type":"bytes"}],"type":"PollAnswer"},{"id":"-716006138","predicate":"poll","params":[{"name":"id","type":"long"},{"name":"flags","type":"#"},{"name":"closed","type":"flags.0?true"},{"name":"question","type":"string"},{"name":"answers","type":"Vector"}],"type":"Poll"},{"id":"997055186","predicate":"pollAnswerVoters","params":[{"name":"flags","type":"#"},{"name":"chosen","type":"flags.0?true"},{"name":"option","type":"bytes"},{"name":"voters","type":"int"}],"type":"PollAnswerVoters"},{"id":"1465219162","predicate":"pollResults","params":[{"name":"flags","type":"#"},{"name":"min","type":"flags.0?true"},{"name":"results","type":"flags.1?Vector"},{"name":"total_voters","type":"flags.2?int"}],"type":"PollResults"},{"id":"112424539","predicate":"inputMediaPoll","params":[{"name":"poll","type":"Poll"}],"type":"InputMedia"},{"id":"1272375192","predicate":"messageMediaPoll","params":[{"name":"poll","type":"Poll"},{"name":"results","type":"PollResults"}],"type":"MessageMedia"},{"id":"-264117680","predicate":"chatOnlines","params":[{"name":"onlines","type":"int"}],"type":"ChatOnlines"},{"id":"1202287072","predicate":"statsURL","params":[{"name":"url","type":"string"}],"type":"StatsURL"},{"id":"-525288402","predicate":"photoStrippedSize","params":[{"name":"type","type":"string"},{"name":"bytes","type":"bytes"}],"type":"PhotoSize"},{"id":"1605510357","predicate":"chatAdminRights","params":[{"name":"flags","type":"#"},{"name":"change_info","type":"flags.0?true"},{"name":"post_messages","type":"flags.1?true"},{"name":"edit_messages","type":"flags.2?true"},{"name":"delete_messages","type":"flags.3?true"},{"name":"ban_users","type":"flags.4?true"},{"name":"invite_users","type":"flags.5?true"},{"name":"pin_messages","type":"flags.7?true"},{"name":"add_admins","type":"flags.9?true"}],"type":"ChatAdminRights"},{"id":"-1626209256","predicate":"chatBannedRights","params":[{"name":"flags","type":"#"},{"name":"view_messages","type":"flags.0?true"},{"name":"send_messages","type":"flags.1?true"},{"name":"send_media","type":"flags.2?true"},{"name":"send_stickers","type":"flags.3?true"},{"name":"send_gifs","type":"flags.4?true"},{"name":"send_games","type":"flags.5?true"},{"name":"send_inline","type":"flags.6?true"},{"name":"embed_links","type":"flags.7?true"},{"name":"send_polls","type":"flags.8?true"},{"name":"change_info","type":"flags.10?true"},{"name":"invite_users","type":"flags.15?true"},{"name":"pin_messages","type":"flags.17?true"},{"name":"until_date","type":"int"}],"type":"ChatBannedRights"},{"id":"1421875280","predicate":"updateChatDefaultBannedRights","params":[{"name":"peer","type":"Peer"},{"name":"default_banned_rights","type":"ChatBannedRights"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-433014407","predicate":"inputWallPaper","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputWallPaper"},{"id":"1913199744","predicate":"inputWallPaperSlug","params":[{"name":"slug","type":"string"}],"type":"InputWallPaper"},{"id":"-1150621555","predicate":"channelParticipantsContacts","params":[{"name":"q","type":"string"}],"type":"ChannelParticipantsFilter"},{"id":"771095562","predicate":"channelAdminLogEventActionDefaultBannedRights","params":[{"name":"prev_banned_rights","type":"ChatBannedRights"},{"name":"new_banned_rights","type":"ChatBannedRights"}],"type":"ChannelAdminLogEventAction"},{"id":"-1895328189","predicate":"channelAdminLogEventActionStopPoll","params":[{"name":"message","type":"Message"}],"type":"ChannelAdminLogEventAction"},{"id":"471437699","predicate":"account.wallPapersNotModified","params":[],"type":"account.WallPapers"},{"id":"1881892265","predicate":"account.wallPapers","params":[{"name":"hash","type":"int"},{"name":"wallpapers","type":"Vector"}],"type":"account.WallPapers"},{"id":"-557924733","predicate":"codeSettings","params":[{"name":"flags","type":"#"},{"name":"allow_flashcall","type":"flags.0?true"},{"name":"current_number","type":"flags.1?true"},{"name":"allow_app_hash","type":"flags.4?true"}],"type":"CodeSettings"},{"id":"-1590738760","predicate":"wallPaperSettings","params":[{"name":"flags","type":"#"},{"name":"blur","type":"flags.1?true"},{"name":"motion","type":"flags.2?true"},{"name":"background_color","type":"flags.0?int"},{"name":"intensity","type":"flags.3?int"}],"type":"WallPaperSettings"},{"id":"-767099577","predicate":"autoDownloadSettings","params":[{"name":"flags","type":"#"},{"name":"disabled","type":"flags.0?true"},{"name":"video_preload_large","type":"flags.1?true"},{"name":"audio_preload_next","type":"flags.2?true"},{"name":"phonecalls_less_data","type":"flags.3?true"},{"name":"photo_size_max","type":"int"},{"name":"video_size_max","type":"int"},{"name":"file_size_max","type":"int"}],"type":"AutoDownloadSettings"},{"id":"1674235686","predicate":"account.autoDownloadSettings","params":[{"name":"low","type":"AutoDownloadSettings"},{"name":"medium","type":"AutoDownloadSettings"},{"name":"high","type":"AutoDownloadSettings"}],"type":"account.AutoDownloadSettings"},{"id":"-709641735","predicate":"emojiKeyword","params":[{"name":"keyword","type":"string"},{"name":"emoticons","type":"Vector"}],"type":"EmojiKeyword"},{"id":"594408994","predicate":"emojiKeywordDeleted","params":[{"name":"keyword","type":"string"},{"name":"emoticons","type":"Vector"}],"type":"EmojiKeyword"},{"id":"1556570557","predicate":"emojiKeywordsDifference","params":[{"name":"lang_code","type":"string"},{"name":"from_version","type":"int"},{"name":"version","type":"int"},{"name":"keywords","type":"Vector"}],"type":"EmojiKeywordsDifference"},{"id":"-1519029347","predicate":"emojiURL","params":[{"name":"url","type":"string"}],"type":"EmojiURL"},{"id":"-1275374751","predicate":"emojiLanguage","params":[{"name":"lang_code","type":"string"}],"type":"EmojiLanguage"},{"id":"-1529000952","predicate":"inputPrivacyKeyForwards","params":[],"type":"InputPrivacyKey"},{"id":"1777096355","predicate":"privacyKeyForwards","params":[],"type":"PrivacyKey"},{"id":"1461304012","predicate":"inputPrivacyKeyProfilePhoto","params":[],"type":"InputPrivacyKey"},{"id":"-1777000467","predicate":"privacyKeyProfilePhoto","params":[],"type":"PrivacyKey"},{"id":"-1132476723","predicate":"fileLocationToBeDeprecated","params":[{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"}],"type":"FileLocation"},{"id":"1075322878","predicate":"inputPhotoFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"thumb_size","type":"string"}],"type":"InputFileLocation"},{"id":"-667654413","predicate":"inputPhotoLegacyFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"}],"type":"InputFileLocation"},{"id":"668375447","predicate":"inputPeerPhotoFileLocation","params":[{"name":"flags","type":"#"},{"name":"big","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"}],"type":"InputFileLocation"},{"id":"230353641","predicate":"inputStickerSetThumb","params":[{"name":"stickerset","type":"InputStickerSet"},{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"}],"type":"InputFileLocation"},{"id":"-11252123","predicate":"folder","params":[{"name":"flags","type":"#"},{"name":"autofill_new_broadcasts","type":"flags.0?true"},{"name":"autofill_public_groups","type":"flags.1?true"},{"name":"autofill_new_correspondents","type":"flags.2?true"},{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"photo","type":"flags.3?ChatPhoto"}],"type":"Folder"},{"id":"1908216652","predicate":"dialogFolder","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.2?true"},{"name":"folder","type":"Folder"},{"name":"peer","type":"Peer"},{"name":"top_message","type":"int"},{"name":"unread_muted_peers_count","type":"int"},{"name":"unread_unmuted_peers_count","type":"int"},{"name":"unread_muted_messages_count","type":"int"},{"name":"unread_unmuted_messages_count","type":"int"}],"type":"Dialog"},{"id":"1684014375","predicate":"inputDialogPeerFolder","params":[{"name":"folder_id","type":"int"}],"type":"InputDialogPeer"},{"id":"1363483106","predicate":"dialogPeerFolder","params":[{"name":"folder_id","type":"int"}],"type":"DialogPeer"},{"id":"-70073706","predicate":"inputFolderPeer","params":[{"name":"peer","type":"InputPeer"},{"name":"folder_id","type":"int"}],"type":"InputFolderPeer"},{"id":"-373643672","predicate":"folderPeer","params":[{"name":"peer","type":"Peer"},{"name":"folder_id","type":"int"}],"type":"FolderPeer"},{"id":"422972864","predicate":"updateFolderPeers","params":[{"name":"folder_peers","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"756118935","predicate":"inputUserFromMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"user_id","type":"int"}],"type":"InputUser"},{"id":"707290417","predicate":"inputChannelFromMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"channel_id","type":"int"}],"type":"InputChannel"},{"id":"398123750","predicate":"inputPeerUserFromMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"user_id","type":"int"}],"type":"InputPeer"},{"id":"-1667893317","predicate":"inputPeerChannelFromMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"channel_id","type":"int"}],"type":"InputPeer"},{"id":"55761658","predicate":"inputPrivacyKeyPhoneNumber","params":[],"type":"InputPrivacyKey"},{"id":"-778378131","predicate":"privacyKeyPhoneNumber","params":[],"type":"PrivacyKey"},{"id":"-1472172887","predicate":"topPeerCategoryForwardUsers","params":[],"type":"TopPeerCategory"},{"id":"-68239120","predicate":"topPeerCategoryForwardChats","params":[],"type":"TopPeerCategory"},{"id":"-1569748965","predicate":"channelAdminLogEventActionChangeLinkedChat","params":[{"name":"prev_value","type":"int"},{"name":"new_value","type":"int"}],"type":"ChannelAdminLogEventAction"},{"id":"-398136321","predicate":"messages.searchCounter","params":[{"name":"flags","type":"#"},{"name":"inexact","type":"flags.1?true"},{"name":"filter","type":"MessagesFilter"},{"name":"count","type":"int"}],"type":"messages.SearchCounter"},{"id":"280464681","predicate":"keyboardButtonUrlAuth","params":[{"name":"flags","type":"#"},{"name":"text","type":"string"},{"name":"fwd_text","type":"flags.0?string"},{"name":"url","type":"string"},{"name":"button_id","type":"int"}],"type":"KeyboardButton"},{"id":"-802258988","predicate":"inputKeyboardButtonUrlAuth","params":[{"name":"flags","type":"#"},{"name":"request_write_access","type":"flags.0?true"},{"name":"text","type":"string"},{"name":"fwd_text","type":"flags.1?string"},{"name":"url","type":"string"},{"name":"bot","type":"InputUser"}],"type":"KeyboardButton"},{"id":"-1831650802","predicate":"urlAuthResultRequest","params":[{"name":"flags","type":"#"},{"name":"request_write_access","type":"flags.0?true"},{"name":"bot","type":"User"},{"name":"domain","type":"string"}],"type":"UrlAuthResult"},{"id":"-1886646706","predicate":"urlAuthResultAccepted","params":[{"name":"url","type":"string"}],"type":"UrlAuthResult"},{"id":"-1445536993","predicate":"urlAuthResultDefault","params":[],"type":"UrlAuthResult"},{"id":"1283572154","predicate":"inputPrivacyValueAllowChatParticipants","params":[{"name":"chats","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"-668769361","predicate":"inputPrivacyValueDisallowChatParticipants","params":[{"name":"chats","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"415136107","predicate":"privacyValueAllowChatParticipants","params":[{"name":"chats","type":"Vector"}],"type":"PrivacyRule"},{"id":"-1397881200","predicate":"privacyValueDisallowChatParticipants","params":[{"name":"chats","type":"Vector"}],"type":"PrivacyRule"},{"id":"-1672577397","predicate":"messageEntityUnderline","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-1090087980","predicate":"messageEntityStrike","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"34469328","predicate":"messageEntityBlockquote","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1786671974","predicate":"updatePeerSettings","params":[{"name":"peer","type":"Peer"},{"name":"settings","type":"PeerSettings"}],"type":"Update"},{"id":"-1078612597","predicate":"channelLocationEmpty","params":[],"type":"ChannelLocation"},{"id":"547062491","predicate":"channelLocation","params":[{"name":"geo_point","type":"GeoPoint"},{"name":"address","type":"string"}],"type":"ChannelLocation"},{"id":"-901375139","predicate":"peerLocated","params":[{"name":"peer","type":"Peer"},{"name":"expires","type":"int"},{"name":"distance","type":"int"}],"type":"PeerLocated"},{"id":"-1263546448","predicate":"updatePeerLocated","params":[{"name":"peers","type":"Vector"}],"type":"Update"},{"id":"241923758","predicate":"channelAdminLogEventActionChangeLocation","params":[{"name":"prev_value","type":"ChannelLocation"},{"name":"new_value","type":"ChannelLocation"}],"type":"ChannelAdminLogEventAction"},{"id":"-606798099","predicate":"inputReportReasonGeoIrrelevant","params":[],"type":"ReportReason"},{"id":"1401984889","predicate":"channelAdminLogEventActionToggleSlowMode","params":[{"name":"prev_value","type":"int"},{"name":"new_value","type":"int"}],"type":"ChannelAdminLogEventAction"},{"id":"1148485274","predicate":"auth.authorizationSignUpRequired","params":[{"name":"flags","type":"#"},{"name":"terms_of_service","type":"flags.0?help.TermsOfService"}],"type":"auth.Authorization"},{"id":"-666824391","predicate":"payments.paymentVerificationNeeded","params":[{"name":"url","type":"string"}],"type":"payments.PaymentResult"},{"id":"42402760","predicate":"inputStickerSetAnimatedEmoji","params":[],"type":"InputStickerSet"},{"id":"967122427","predicate":"updateNewScheduledMessage","params":[{"name":"message","type":"Message"}],"type":"Update"},{"id":"-1870238482","predicate":"updateDeleteScheduledMessages","params":[{"name":"peer","type":"Peer"},{"name":"messages","type":"Vector"}],"type":"Update"},{"id":"-797791052","predicate":"restrictionReason","params":[{"name":"platform","type":"string"},{"name":"reason","type":"string"},{"name":"text","type":"string"}],"type":"RestrictionReason"},{"id":"1012306921","predicate":"inputTheme","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputTheme"},{"id":"-175567375","predicate":"inputThemeSlug","params":[{"name":"slug","type":"string"}],"type":"InputTheme"},{"id":"1211967244","predicate":"themeDocumentNotModified","params":[],"type":"Theme"},{"id":"-136770336","predicate":"theme","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"default","type":"flags.1?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"slug","type":"string"},{"name":"title","type":"string"},{"name":"document","type":"flags.2?Document"},{"name":"installs_count","type":"int"}],"type":"Theme"},{"id":"-199313886","predicate":"account.themesNotModified","params":[],"type":"account.Themes"},{"id":"2137482273","predicate":"account.themes","params":[{"name":"hash","type":"int"},{"name":"themes","type":"Vector"}],"type":"account.Themes"},{"id":"-2112423005","predicate":"updateTheme","params":[{"name":"theme","type":"Theme"}],"type":"Update"},{"id":"-786326563","predicate":"inputPrivacyKeyAddedByPhone","params":[],"type":"InputPrivacyKey"},{"id":"1124062251","predicate":"privacyKeyAddedByPhone","params":[],"type":"PrivacyKey"}],"methods":[{"id":"-878758099","method":"invokeAfterMsg","params":[{"name":"msg_id","type":"long"},{"name":"query","type":"!X"}],"type":"X"},{"id":"1036301552","method":"invokeAfterMsgs","params":[{"name":"msg_ids","type":"Vector"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1502141361","method":"auth.sendCode","params":[{"name":"phone_number","type":"string"},{"name":"api_id","type":"int"},{"name":"api_hash","type":"string"},{"name":"settings","type":"CodeSettings"}],"type":"auth.SentCode"},{"id":"-2131827673","method":"auth.signUp","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"auth.Authorization"},{"id":"-1126886015","method":"auth.signIn","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"auth.Authorization"},{"id":"1461180992","method":"auth.logOut","params":[],"type":"Bool"},{"id":"-1616179942","method":"auth.resetAuthorizations","params":[],"type":"Bool"},{"id":"-440401971","method":"auth.exportAuthorization","params":[{"name":"dc_id","type":"int"}],"type":"auth.ExportedAuthorization"},{"id":"-470837741","method":"auth.importAuthorization","params":[{"name":"id","type":"int"},{"name":"bytes","type":"bytes"}],"type":"auth.Authorization"},{"id":"-841733627","method":"auth.bindTempAuthKey","params":[{"name":"perm_auth_key_id","type":"long"},{"name":"nonce","type":"long"},{"name":"expires_at","type":"int"},{"name":"encrypted_message","type":"bytes"}],"type":"Bool"},{"id":"1754754159","method":"account.registerDevice","params":[{"name":"flags","type":"#"},{"name":"no_muted","type":"flags.0?true"},{"name":"token_type","type":"int"},{"name":"token","type":"string"},{"name":"app_sandbox","type":"Bool"},{"name":"secret","type":"bytes"},{"name":"other_uids","type":"Vector"}],"type":"Bool"},{"id":"813089983","method":"account.unregisterDevice","params":[{"name":"token_type","type":"int"},{"name":"token","type":"string"},{"name":"other_uids","type":"Vector"}],"type":"Bool"},{"id":"-2067899501","method":"account.updateNotifySettings","params":[{"name":"peer","type":"InputNotifyPeer"},{"name":"settings","type":"InputPeerNotifySettings"}],"type":"Bool"},{"id":"313765169","method":"account.getNotifySettings","params":[{"name":"peer","type":"InputNotifyPeer"}],"type":"PeerNotifySettings"},{"id":"-612493497","method":"account.resetNotifySettings","params":[],"type":"Bool"},{"id":"2018596725","method":"account.updateProfile","params":[{"name":"flags","type":"#"},{"name":"first_name","type":"flags.0?string"},{"name":"last_name","type":"flags.1?string"},{"name":"about","type":"flags.2?string"}],"type":"User"},{"id":"1713919532","method":"account.updateStatus","params":[{"name":"offline","type":"Bool"}],"type":"Bool"},{"id":"-1430579357","method":"account.getWallPapers","params":[{"name":"hash","type":"int"}],"type":"account.WallPapers"},{"id":"-1374118561","method":"account.reportPeer","params":[{"name":"peer","type":"InputPeer"},{"name":"reason","type":"ReportReason"}],"type":"Bool"},{"id":"227648840","method":"users.getUsers","params":[{"name":"id","type":"Vector"}],"type":"Vector"},{"id":"-902781519","method":"users.getFullUser","params":[{"name":"id","type":"InputUser"}],"type":"UserFull"},{"id":"749357634","method":"contacts.getContactIDs","params":[{"name":"hash","type":"int"}],"type":"Vector"},{"id":"-995929106","method":"contacts.getStatuses","params":[],"type":"Vector"},{"id":"-1071414113","method":"contacts.getContacts","params":[{"name":"hash","type":"int"}],"type":"contacts.Contacts"},{"id":"746589157","method":"contacts.importContacts","params":[{"name":"contacts","type":"Vector"}],"type":"contacts.ImportedContacts"},{"id":"157945344","method":"contacts.deleteContacts","params":[{"name":"id","type":"Vector"}],"type":"Updates"},{"id":"269745566","method":"contacts.deleteByPhones","params":[{"name":"phones","type":"Vector"}],"type":"Bool"},{"id":"858475004","method":"contacts.block","params":[{"name":"id","type":"InputUser"}],"type":"Bool"},{"id":"-448724803","method":"contacts.unblock","params":[{"name":"id","type":"InputUser"}],"type":"Bool"},{"id":"-176409329","method":"contacts.getBlocked","params":[{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"contacts.Blocked"},{"id":"1673946374","method":"messages.getMessages","params":[{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"-1594999949","method":"messages.getDialogs","params":[{"name":"flags","type":"#"},{"name":"exclude_pinned","type":"flags.0?true"},{"name":"folder_id","type":"flags.1?int"},{"name":"offset_date","type":"int"},{"name":"offset_id","type":"int"},{"name":"offset_peer","type":"InputPeer"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"messages.Dialogs"},{"id":"-591691168","method":"messages.getHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"offset_date","type":"int"},{"name":"add_offset","type":"int"},{"name":"limit","type":"int"},{"name":"max_id","type":"int"},{"name":"min_id","type":"int"},{"name":"hash","type":"int"}],"type":"messages.Messages"},{"id":"-2045448344","method":"messages.search","params":[{"name":"flags","type":"#"},{"name":"peer","type":"InputPeer"},{"name":"q","type":"string"},{"name":"from_id","type":"flags.0?InputUser"},{"name":"filter","type":"MessagesFilter"},{"name":"min_date","type":"int"},{"name":"max_date","type":"int"},{"name":"offset_id","type":"int"},{"name":"add_offset","type":"int"},{"name":"limit","type":"int"},{"name":"max_id","type":"int"},{"name":"min_id","type":"int"},{"name":"hash","type":"int"}],"type":"messages.Messages"},{"id":"238054714","method":"messages.readHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"max_id","type":"int"}],"type":"messages.AffectedMessages"},{"id":"469850889","method":"messages.deleteHistory","params":[{"name":"flags","type":"#"},{"name":"just_clear","type":"flags.0?true"},{"name":"revoke","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"max_id","type":"int"}],"type":"messages.AffectedHistory"},{"id":"-443640366","method":"messages.deleteMessages","params":[{"name":"flags","type":"#"},{"name":"revoke","type":"flags.0?true"},{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"94983360","method":"messages.receivedMessages","params":[{"name":"max_id","type":"int"}],"type":"Vector"},{"id":"-1551737264","method":"messages.setTyping","params":[{"name":"peer","type":"InputPeer"},{"name":"action","type":"SendMessageAction"}],"type":"Bool"},{"id":"1376532592","method":"messages.sendMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"message","type":"string"},{"name":"random_id","type":"long"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"881978281","method":"messages.sendMedia","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"media","type":"InputMedia"},{"name":"message","type":"string"},{"name":"random_id","type":"long"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"-637606386","method":"messages.forwardMessages","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"with_my_score","type":"flags.8?true"},{"name":"grouped","type":"flags.9?true"},{"name":"from_peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"random_id","type":"Vector"},{"name":"to_peer","type":"InputPeer"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"-820669733","method":"messages.reportSpam","params":[{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"913498268","method":"messages.getPeerSettings","params":[{"name":"peer","type":"InputPeer"}],"type":"PeerSettings"},{"id":"-1115507112","method":"messages.report","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"reason","type":"ReportReason"}],"type":"Bool"},{"id":"1013621127","method":"messages.getChats","params":[{"name":"id","type":"Vector"}],"type":"messages.Chats"},{"id":"998448230","method":"messages.getFullChat","params":[{"name":"chat_id","type":"int"}],"type":"messages.ChatFull"},{"id":"-599447467","method":"messages.editChatTitle","params":[{"name":"chat_id","type":"int"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-900957736","method":"messages.editChatPhoto","params":[{"name":"chat_id","type":"int"},{"name":"photo","type":"InputChatPhoto"}],"type":"Updates"},{"id":"-106911223","method":"messages.addChatUser","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"fwd_limit","type":"int"}],"type":"Updates"},{"id":"-530505962","method":"messages.deleteChatUser","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"Updates"},{"id":"164303470","method":"messages.createChat","params":[{"name":"users","type":"Vector"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-304838614","method":"updates.getState","params":[],"type":"updates.State"},{"id":"630429265","method":"updates.getDifference","params":[{"name":"flags","type":"#"},{"name":"pts","type":"int"},{"name":"pts_total_limit","type":"flags.0?int"},{"name":"date","type":"int"},{"name":"qts","type":"int"}],"type":"updates.Difference"},{"id":"-256159406","method":"photos.updateProfilePhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"UserProfilePhoto"},{"id":"1328726168","method":"photos.uploadProfilePhoto","params":[{"name":"file","type":"InputFile"}],"type":"photos.Photo"},{"id":"-2016444625","method":"photos.deletePhotos","params":[{"name":"id","type":"Vector"}],"type":"Vector"},{"id":"-1291540959","method":"upload.saveFilePart","params":[{"name":"file_id","type":"long"},{"name":"file_part","type":"int"},{"name":"bytes","type":"bytes"}],"type":"Bool"},{"id":"-1319462148","method":"upload.getFile","params":[{"name":"flags","type":"#"},{"name":"precise","type":"flags.0?true"},{"name":"location","type":"InputFileLocation"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.File"},{"id":"-990308245","method":"help.getConfig","params":[],"type":"Config"},{"id":"531836966","method":"help.getNearestDc","params":[],"type":"NearestDc"},{"id":"1378703997","method":"help.getAppUpdate","params":[{"name":"source","type":"string"}],"type":"help.AppUpdate"},{"id":"1295590211","method":"help.getInviteText","params":[],"type":"help.InviteText"},{"id":"-1848823128","method":"photos.getUserPhotos","params":[{"name":"user_id","type":"InputUser"},{"name":"offset","type":"int"},{"name":"max_id","type":"long"},{"name":"limit","type":"int"}],"type":"photos.Photos"},{"id":"651135312","method":"messages.getDhConfig","params":[{"name":"version","type":"int"},{"name":"random_length","type":"int"}],"type":"messages.DhConfig"},{"id":"-162681021","method":"messages.requestEncryption","params":[{"name":"user_id","type":"InputUser"},{"name":"random_id","type":"int"},{"name":"g_a","type":"bytes"}],"type":"EncryptedChat"},{"id":"1035731989","method":"messages.acceptEncryption","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"g_b","type":"bytes"},{"name":"key_fingerprint","type":"long"}],"type":"EncryptedChat"},{"id":"-304536635","method":"messages.discardEncryption","params":[{"name":"chat_id","type":"int"}],"type":"Bool"},{"id":"2031374829","method":"messages.setEncryptedTyping","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"typing","type":"Bool"}],"type":"Bool"},{"id":"2135648522","method":"messages.readEncryptedHistory","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"max_date","type":"int"}],"type":"Bool"},{"id":"-1451792525","method":"messages.sendEncrypted","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"}],"type":"messages.SentEncryptedMessage"},{"id":"-1701831834","method":"messages.sendEncryptedFile","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"},{"name":"file","type":"InputEncryptedFile"}],"type":"messages.SentEncryptedMessage"},{"id":"852769188","method":"messages.sendEncryptedService","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"}],"type":"messages.SentEncryptedMessage"},{"id":"1436924774","method":"messages.receivedQueue","params":[{"name":"max_qts","type":"int"}],"type":"Vector"},{"id":"1259113487","method":"messages.reportEncryptedSpam","params":[{"name":"peer","type":"InputEncryptedChat"}],"type":"Bool"},{"id":"-562337987","method":"upload.saveBigFilePart","params":[{"name":"file_id","type":"long"},{"name":"file_part","type":"int"},{"name":"file_total_parts","type":"int"},{"name":"bytes","type":"bytes"}],"type":"Bool"},{"id":"2018609336","method":"initConnection","params":[{"name":"flags","type":"#"},{"name":"api_id","type":"int"},{"name":"device_model","type":"string"},{"name":"system_version","type":"string"},{"name":"app_version","type":"string"},{"name":"system_lang_code","type":"string"},{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"},{"name":"proxy","type":"flags.0?InputClientProxy"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1663104819","method":"help.getSupport","params":[],"type":"help.Support"},{"id":"916930423","method":"messages.readMessageContents","params":[{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"655677548","method":"account.checkUsername","params":[{"name":"username","type":"string"}],"type":"Bool"},{"id":"1040964988","method":"account.updateUsername","params":[{"name":"username","type":"string"}],"type":"User"},{"id":"301470424","method":"contacts.search","params":[{"name":"q","type":"string"},{"name":"limit","type":"int"}],"type":"contacts.Found"},{"id":"-623130288","method":"account.getPrivacy","params":[{"name":"key","type":"InputPrivacyKey"}],"type":"account.PrivacyRules"},{"id":"-906486552","method":"account.setPrivacy","params":[{"name":"key","type":"InputPrivacyKey"},{"name":"rules","type":"Vector"}],"type":"account.PrivacyRules"},{"id":"1099779595","method":"account.deleteAccount","params":[{"name":"reason","type":"string"}],"type":"Bool"},{"id":"150761757","method":"account.getAccountTTL","params":[],"type":"AccountDaysTTL"},{"id":"608323678","method":"account.setAccountTTL","params":[{"name":"ttl","type":"AccountDaysTTL"}],"type":"Bool"},{"id":"-627372787","method":"invokeWithLayer","params":[{"name":"layer","type":"int"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-113456221","method":"contacts.resolveUsername","params":[{"name":"username","type":"string"}],"type":"contacts.ResolvedPeer"},{"id":"-2108208411","method":"account.sendChangePhoneCode","params":[{"name":"phone_number","type":"string"},{"name":"settings","type":"CodeSettings"}],"type":"auth.SentCode"},{"id":"1891839707","method":"account.changePhone","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"User"},{"id":"71126828","method":"messages.getStickers","params":[{"name":"emoticon","type":"string"},{"name":"hash","type":"int"}],"type":"messages.Stickers"},{"id":"479598769","method":"messages.getAllStickers","params":[{"name":"hash","type":"int"}],"type":"messages.AllStickers"},{"id":"954152242","method":"account.updateDeviceLocked","params":[{"name":"period","type":"int"}],"type":"Bool"},{"id":"1738800940","method":"auth.importBotAuthorization","params":[{"name":"flags","type":"int"},{"name":"api_id","type":"int"},{"name":"api_hash","type":"string"},{"name":"bot_auth_token","type":"string"}],"type":"auth.Authorization"},{"id":"-1956073268","method":"messages.getWebPagePreview","params":[{"name":"flags","type":"#"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"}],"type":"MessageMedia"},{"id":"-484392616","method":"account.getAuthorizations","params":[],"type":"account.Authorizations"},{"id":"-545786948","method":"account.resetAuthorization","params":[{"name":"hash","type":"long"}],"type":"Bool"},{"id":"1418342645","method":"account.getPassword","params":[],"type":"account.Password"},{"id":"-1663767815","method":"account.getPasswordSettings","params":[{"name":"password","type":"InputCheckPasswordSRP"}],"type":"account.PasswordSettings"},{"id":"-1516564433","method":"account.updatePasswordSettings","params":[{"name":"password","type":"InputCheckPasswordSRP"},{"name":"new_settings","type":"account.PasswordInputSettings"}],"type":"Bool"},{"id":"-779399914","method":"auth.checkPassword","params":[{"name":"password","type":"InputCheckPasswordSRP"}],"type":"auth.Authorization"},{"id":"-661144474","method":"auth.requestPasswordRecovery","params":[],"type":"auth.PasswordRecovery"},{"id":"1319464594","method":"auth.recoverPassword","params":[{"name":"code","type":"string"}],"type":"auth.Authorization"},{"id":"-1080796745","method":"invokeWithoutUpdates","params":[{"name":"query","type":"!X"}],"type":"X"},{"id":"234312524","method":"messages.exportChatInvite","params":[{"name":"peer","type":"InputPeer"}],"type":"ExportedChatInvite"},{"id":"1051570619","method":"messages.checkChatInvite","params":[{"name":"hash","type":"string"}],"type":"ChatInvite"},{"id":"1817183516","method":"messages.importChatInvite","params":[{"name":"hash","type":"string"}],"type":"Updates"},{"id":"639215886","method":"messages.getStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"}],"type":"messages.StickerSet"},{"id":"-946871200","method":"messages.installStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"},{"name":"archived","type":"Bool"}],"type":"messages.StickerSetInstallResult"},{"id":"-110209570","method":"messages.uninstallStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"}],"type":"Bool"},{"id":"-421563528","method":"messages.startBot","params":[{"name":"bot","type":"InputUser"},{"name":"peer","type":"InputPeer"},{"name":"random_id","type":"long"},{"name":"start_param","type":"string"}],"type":"Updates"},{"id":"-1877938321","method":"help.getAppChangelog","params":[{"name":"prev_app_version","type":"string"}],"type":"Updates"},{"id":"-993483427","method":"messages.getMessagesViews","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"increment","type":"Bool"}],"type":"Vector"},{"id":"-871347913","method":"channels.readHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"max_id","type":"int"}],"type":"Bool"},{"id":"-2067661490","method":"channels.deleteMessages","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"-787622117","method":"channels.deleteUserHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"}],"type":"messages.AffectedHistory"},{"id":"-32999408","method":"channels.reportSpam","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"-1383294429","method":"channels.getMessages","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"306054633","method":"channels.getParticipants","params":[{"name":"channel","type":"InputChannel"},{"name":"filter","type":"ChannelParticipantsFilter"},{"name":"offset","type":"int"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"channels.ChannelParticipants"},{"id":"1416484774","method":"channels.getParticipant","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"}],"type":"channels.ChannelParticipant"},{"id":"176122811","method":"channels.getChannels","params":[{"name":"id","type":"Vector"}],"type":"messages.Chats"},{"id":"141781513","method":"channels.getFullChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"messages.ChatFull"},{"id":"1029681423","method":"channels.createChannel","params":[{"name":"flags","type":"#"},{"name":"broadcast","type":"flags.0?true"},{"name":"megagroup","type":"flags.1?true"},{"name":"title","type":"string"},{"name":"about","type":"string"},{"name":"geo_point","type":"flags.2?InputGeoPoint"},{"name":"address","type":"flags.2?string"}],"type":"Updates"},{"id":"-751007486","method":"channels.editAdmin","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"admin_rights","type":"ChatAdminRights"},{"name":"rank","type":"string"}],"type":"Updates"},{"id":"1450044624","method":"channels.editTitle","params":[{"name":"channel","type":"InputChannel"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-248621111","method":"channels.editPhoto","params":[{"name":"channel","type":"InputChannel"},{"name":"photo","type":"InputChatPhoto"}],"type":"Updates"},{"id":"283557164","method":"channels.checkUsername","params":[{"name":"channel","type":"InputChannel"},{"name":"username","type":"string"}],"type":"Bool"},{"id":"890549214","method":"channels.updateUsername","params":[{"name":"channel","type":"InputChannel"},{"name":"username","type":"string"}],"type":"Bool"},{"id":"615851205","method":"channels.joinChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"-130635115","method":"channels.leaveChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"429865580","method":"channels.inviteToChannel","params":[{"name":"channel","type":"InputChannel"},{"name":"users","type":"Vector"}],"type":"Updates"},{"id":"-1072619549","method":"channels.deleteChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"51854712","method":"updates.getChannelDifference","params":[{"name":"flags","type":"#"},{"name":"force","type":"flags.0?true"},{"name":"channel","type":"InputChannel"},{"name":"filter","type":"ChannelMessagesFilter"},{"name":"pts","type":"int"},{"name":"limit","type":"int"}],"type":"updates.ChannelDifference"},{"id":"-1444503762","method":"messages.editChatAdmin","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"is_admin","type":"Bool"}],"type":"Bool"},{"id":"363051235","method":"messages.migrateChat","params":[{"name":"chat_id","type":"int"}],"type":"Updates"},{"id":"-1083038300","method":"messages.searchGlobal","params":[{"name":"flags","type":"#"},{"name":"folder_id","type":"flags.0?int"},{"name":"q","type":"string"},{"name":"offset_rate","type":"int"},{"name":"offset_peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Messages"},{"id":"2016638777","method":"messages.reorderStickerSets","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Bool"},{"id":"864953444","method":"messages.getDocumentByHash","params":[{"name":"sha256","type":"bytes"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"}],"type":"Document"},{"id":"-1080395925","method":"messages.searchGifs","params":[{"name":"q","type":"string"},{"name":"offset","type":"int"}],"type":"messages.FoundGifs"},{"id":"-2084618926","method":"messages.getSavedGifs","params":[{"name":"hash","type":"int"}],"type":"messages.SavedGifs"},{"id":"846868683","method":"messages.saveGif","params":[{"name":"id","type":"InputDocument"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"1364105629","method":"messages.getInlineBotResults","params":[{"name":"flags","type":"#"},{"name":"bot","type":"InputUser"},{"name":"peer","type":"InputPeer"},{"name":"geo_point","type":"flags.0?InputGeoPoint"},{"name":"query","type":"string"},{"name":"offset","type":"string"}],"type":"messages.BotResults"},{"id":"-346119674","method":"messages.setInlineBotResults","params":[{"name":"flags","type":"#"},{"name":"gallery","type":"flags.0?true"},{"name":"private","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"results","type":"Vector"},{"name":"cache_time","type":"int"},{"name":"next_offset","type":"flags.2?string"},{"name":"switch_pm","type":"flags.3?InlineBotSwitchPM"}],"type":"Bool"},{"id":"570955184","method":"messages.sendInlineBotResult","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"hide_via","type":"flags.11?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"random_id","type":"long"},{"name":"query_id","type":"long"},{"name":"id","type":"string"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"-826838685","method":"channels.exportMessageLink","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"int"},{"name":"grouped","type":"Bool"}],"type":"ExportedMessageLink"},{"id":"527021574","method":"channels.toggleSignatures","params":[{"name":"channel","type":"InputChannel"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"1056025023","method":"auth.resendCode","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"}],"type":"auth.SentCode"},{"id":"520357240","method":"auth.cancelCode","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"}],"type":"Bool"},{"id":"-39416522","method":"messages.getMessageEditData","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"}],"type":"messages.MessageEditData"},{"id":"1224152952","method":"messages.editMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"message","type":"flags.11?string"},{"name":"media","type":"flags.14?InputMedia"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"},{"name":"schedule_date","type":"flags.15?int"}],"type":"Updates"},{"id":"-2091549254","method":"messages.editInlineBotMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"id","type":"InputBotInlineMessageID"},{"name":"message","type":"flags.11?string"},{"name":"media","type":"flags.14?InputMedia"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"}],"type":"Bool"},{"id":"-2130010132","method":"messages.getBotCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"game","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"data","type":"flags.0?bytes"}],"type":"messages.BotCallbackAnswer"},{"id":"-712043766","method":"messages.setBotCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"alert","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"message","type":"flags.0?string"},{"name":"url","type":"flags.2?string"},{"name":"cache_time","type":"int"}],"type":"Bool"},{"id":"-728224331","method":"contacts.getTopPeers","params":[{"name":"flags","type":"#"},{"name":"correspondents","type":"flags.0?true"},{"name":"bots_pm","type":"flags.1?true"},{"name":"bots_inline","type":"flags.2?true"},{"name":"phone_calls","type":"flags.3?true"},{"name":"forward_users","type":"flags.4?true"},{"name":"forward_chats","type":"flags.5?true"},{"name":"groups","type":"flags.10?true"},{"name":"channels","type":"flags.15?true"},{"name":"offset","type":"int"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"contacts.TopPeers"},{"id":"451113900","method":"contacts.resetTopPeerRating","params":[{"name":"category","type":"TopPeerCategory"},{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"-462373635","method":"messages.getPeerDialogs","params":[{"name":"peers","type":"Vector"}],"type":"messages.PeerDialogs"},{"id":"-1137057461","method":"messages.saveDraft","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"peer","type":"InputPeer"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"}],"type":"Bool"},{"id":"1782549861","method":"messages.getAllDrafts","params":[],"type":"Updates"},{"id":"766298703","method":"messages.getFeaturedStickers","params":[{"name":"hash","type":"int"}],"type":"messages.FeaturedStickers"},{"id":"1527873830","method":"messages.readFeaturedStickers","params":[{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"1587647177","method":"messages.getRecentStickers","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"},{"name":"hash","type":"int"}],"type":"messages.RecentStickers"},{"id":"958863608","method":"messages.saveRecentSticker","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"},{"name":"id","type":"InputDocument"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"-1986437075","method":"messages.clearRecentStickers","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"}],"type":"Bool"},{"id":"1475442322","method":"messages.getArchivedStickers","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"offset_id","type":"long"},{"name":"limit","type":"int"}],"type":"messages.ArchivedStickers"},{"id":"457157256","method":"account.sendConfirmPhoneCode","params":[{"name":"hash","type":"string"},{"name":"settings","type":"CodeSettings"}],"type":"auth.SentCode"},{"id":"1596029123","method":"account.confirmPhone","params":[{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"Bool"},{"id":"-122669393","method":"channels.getAdminedPublicChannels","params":[{"name":"flags","type":"#"},{"name":"by_location","type":"flags.0?true"},{"name":"check_limit","type":"flags.1?true"}],"type":"messages.Chats"},{"id":"1706608543","method":"messages.getMaskStickers","params":[{"name":"hash","type":"int"}],"type":"messages.AllStickers"},{"id":"-866424884","method":"messages.getAttachedStickers","params":[{"name":"media","type":"InputStickeredMedia"}],"type":"Vector"},{"id":"-1907842680","method":"auth.dropTempAuthKeys","params":[{"name":"except_auth_keys","type":"Vector"}],"type":"Bool"},{"id":"-1896289088","method":"messages.setGameScore","params":[{"name":"flags","type":"#"},{"name":"edit_message","type":"flags.0?true"},{"name":"force","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"score","type":"int"}],"type":"Updates"},{"id":"363700068","method":"messages.setInlineGameScore","params":[{"name":"flags","type":"#"},{"name":"edit_message","type":"flags.0?true"},{"name":"force","type":"flags.1?true"},{"name":"id","type":"InputBotInlineMessageID"},{"name":"user_id","type":"InputUser"},{"name":"score","type":"int"}],"type":"Bool"},{"id":"-400399203","method":"messages.getGameHighScores","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"messages.HighScores"},{"id":"258170395","method":"messages.getInlineGameHighScores","params":[{"name":"id","type":"InputBotInlineMessageID"},{"name":"user_id","type":"InputUser"}],"type":"messages.HighScores"},{"id":"218777796","method":"messages.getCommonChats","params":[{"name":"user_id","type":"InputUser"},{"name":"max_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Chats"},{"id":"-341307408","method":"messages.getAllChats","params":[{"name":"except_ids","type":"Vector"}],"type":"messages.Chats"},{"id":"-333262899","method":"help.setBotUpdatesStatus","params":[{"name":"pending_updates_count","type":"int"},{"name":"message","type":"string"}],"type":"Bool"},{"id":"852135825","method":"messages.getWebPage","params":[{"name":"url","type":"string"},{"name":"hash","type":"int"}],"type":"WebPage"},{"id":"-1489903017","method":"messages.toggleDialogPin","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.0?true"},{"name":"peer","type":"InputDialogPeer"}],"type":"Bool"},{"id":"991616823","method":"messages.reorderPinnedDialogs","params":[{"name":"flags","type":"#"},{"name":"force","type":"flags.0?true"},{"name":"folder_id","type":"int"},{"name":"order","type":"Vector"}],"type":"Bool"},{"id":"-692498958","method":"messages.getPinnedDialogs","params":[{"name":"folder_id","type":"int"}],"type":"messages.PeerDialogs"},{"id":"-1440257555","method":"bots.sendCustomRequest","params":[{"name":"custom_method","type":"string"},{"name":"params","type":"DataJSON"}],"type":"DataJSON"},{"id":"-434028723","method":"bots.answerWebhookJSONQuery","params":[{"name":"query_id","type":"long"},{"name":"data","type":"DataJSON"}],"type":"Bool"},{"id":"619086221","method":"upload.getWebFile","params":[{"name":"location","type":"InputWebFileLocation"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.WebFile"},{"id":"-1712285883","method":"payments.getPaymentForm","params":[{"name":"msg_id","type":"int"}],"type":"payments.PaymentForm"},{"id":"-1601001088","method":"payments.getPaymentReceipt","params":[{"name":"msg_id","type":"int"}],"type":"payments.PaymentReceipt"},{"id":"1997180532","method":"payments.validateRequestedInfo","params":[{"name":"flags","type":"#"},{"name":"save","type":"flags.0?true"},{"name":"msg_id","type":"int"},{"name":"info","type":"PaymentRequestedInfo"}],"type":"payments.ValidatedRequestedInfo"},{"id":"730364339","method":"payments.sendPaymentForm","params":[{"name":"flags","type":"#"},{"name":"msg_id","type":"int"},{"name":"requested_info_id","type":"flags.0?string"},{"name":"shipping_option_id","type":"flags.1?string"},{"name":"credentials","type":"InputPaymentCredentials"}],"type":"payments.PaymentResult"},{"id":"1151208273","method":"account.getTmpPassword","params":[{"name":"password","type":"InputCheckPasswordSRP"},{"name":"period","type":"int"}],"type":"account.TmpPassword"},{"id":"578650699","method":"payments.getSavedInfo","params":[],"type":"payments.SavedInfo"},{"id":"-667062079","method":"payments.clearSavedInfo","params":[{"name":"flags","type":"#"},{"name":"credentials","type":"flags.0?true"},{"name":"info","type":"flags.1?true"}],"type":"Bool"},{"id":"-436833542","method":"messages.setBotShippingResults","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"error","type":"flags.0?string"},{"name":"shipping_options","type":"flags.1?Vector"}],"type":"Bool"},{"id":"163765653","method":"messages.setBotPrecheckoutResults","params":[{"name":"flags","type":"#"},{"name":"success","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"error","type":"flags.0?string"}],"type":"Bool"},{"id":"-1680314774","method":"stickers.createStickerSet","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"user_id","type":"InputUser"},{"name":"title","type":"string"},{"name":"short_name","type":"string"},{"name":"stickers","type":"Vector"}],"type":"messages.StickerSet"},{"id":"-143257775","method":"stickers.removeStickerFromSet","params":[{"name":"sticker","type":"InputDocument"}],"type":"messages.StickerSet"},{"id":"-4795190","method":"stickers.changeStickerPosition","params":[{"name":"sticker","type":"InputDocument"},{"name":"position","type":"int"}],"type":"messages.StickerSet"},{"id":"-2041315650","method":"stickers.addStickerToSet","params":[{"name":"stickerset","type":"InputStickerSet"},{"name":"sticker","type":"InputStickerSetItem"}],"type":"messages.StickerSet"},{"id":"1369162417","method":"messages.uploadMedia","params":[{"name":"peer","type":"InputPeer"},{"name":"media","type":"InputMedia"}],"type":"MessageMedia"},{"id":"1430593449","method":"phone.getCallConfig","params":[],"type":"DataJSON"},{"id":"1124046573","method":"phone.requestCall","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.0?true"},{"name":"user_id","type":"InputUser"},{"name":"random_id","type":"int"},{"name":"g_a_hash","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"1003664544","method":"phone.acceptCall","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"g_b","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"788404002","method":"phone.confirmCall","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"g_a","type":"bytes"},{"name":"key_fingerprint","type":"long"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"399855457","method":"phone.receivedCall","params":[{"name":"peer","type":"InputPhoneCall"}],"type":"Bool"},{"id":"-1295269440","method":"phone.discardCall","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.0?true"},{"name":"peer","type":"InputPhoneCall"},{"name":"duration","type":"int"},{"name":"reason","type":"PhoneCallDiscardReason"},{"name":"connection_id","type":"long"}],"type":"Updates"},{"id":"1508562471","method":"phone.setCallRating","params":[{"name":"flags","type":"#"},{"name":"user_initiative","type":"flags.0?true"},{"name":"peer","type":"InputPhoneCall"},{"name":"rating","type":"int"},{"name":"comment","type":"string"}],"type":"Updates"},{"id":"662363518","method":"phone.saveCallDebug","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"debug","type":"DataJSON"}],"type":"Bool"},{"id":"536919235","method":"upload.getCdnFile","params":[{"name":"file_token","type":"bytes"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.CdnFile"},{"id":"-1691921240","method":"upload.reuploadCdnFile","params":[{"name":"file_token","type":"bytes"},{"name":"request_token","type":"bytes"}],"type":"Vector"},{"id":"1375900482","method":"help.getCdnConfig","params":[],"type":"CdnConfig"},{"id":"-219008246","method":"langpack.getLangPack","params":[{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"}],"type":"LangPackDifference"},{"id":"-269862909","method":"langpack.getStrings","params":[{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"},{"name":"keys","type":"Vector"}],"type":"Vector"},{"id":"-845657435","method":"langpack.getDifference","params":[{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"},{"name":"from_version","type":"int"}],"type":"LangPackDifference"},{"id":"1120311183","method":"langpack.getLanguages","params":[{"name":"lang_pack","type":"string"}],"type":"Vector"},{"id":"1920559378","method":"channels.editBanned","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"banned_rights","type":"ChatBannedRights"}],"type":"Updates"},{"id":"870184064","method":"channels.getAdminLog","params":[{"name":"flags","type":"#"},{"name":"channel","type":"InputChannel"},{"name":"q","type":"string"},{"name":"events_filter","type":"flags.0?ChannelAdminLogEventsFilter"},{"name":"admins","type":"flags.1?Vector"},{"name":"max_id","type":"long"},{"name":"min_id","type":"long"},{"name":"limit","type":"int"}],"type":"channels.AdminLogResults"},{"id":"1302676017","method":"upload.getCdnFileHashes","params":[{"name":"file_token","type":"bytes"},{"name":"offset","type":"int"}],"type":"Vector"},{"id":"-914493408","method":"messages.sendScreenshotNotification","params":[{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"int"},{"name":"random_id","type":"long"}],"type":"Updates"},{"id":"-359881479","method":"channels.setStickers","params":[{"name":"channel","type":"InputChannel"},{"name":"stickerset","type":"InputStickerSet"}],"type":"Bool"},{"id":"567151374","method":"messages.getFavedStickers","params":[{"name":"hash","type":"int"}],"type":"messages.FavedStickers"},{"id":"-1174420133","method":"messages.faveSticker","params":[{"name":"id","type":"InputDocument"},{"name":"unfave","type":"Bool"}],"type":"Bool"},{"id":"-357180360","method":"channels.readMessageContents","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"-2020263951","method":"contacts.resetSaved","params":[],"type":"Bool"},{"id":"1180140658","method":"messages.getUnreadMentions","params":[{"name":"peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"add_offset","type":"int"},{"name":"limit","type":"int"},{"name":"max_id","type":"int"},{"name":"min_id","type":"int"}],"type":"messages.Messages"},{"id":"-1355375294","method":"channels.deleteHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"max_id","type":"int"}],"type":"Bool"},{"id":"1036054804","method":"help.getRecentMeUrls","params":[{"name":"referer","type":"string"}],"type":"help.RecentMeUrls"},{"id":"-356796084","method":"channels.togglePreHistoryHidden","params":[{"name":"channel","type":"InputChannel"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"251759059","method":"messages.readMentions","params":[{"name":"peer","type":"InputPeer"}],"type":"messages.AffectedHistory"},{"id":"-1144759543","method":"messages.getRecentLocations","params":[{"name":"peer","type":"InputPeer"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"messages.Messages"},{"id":"-872345397","method":"messages.sendMultiMedia","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"multi_media","type":"Vector"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"1347929239","method":"messages.uploadEncryptedFile","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"file","type":"InputEncryptedFile"}],"type":"EncryptedFile"},{"id":"405695855","method":"account.getWebAuthorizations","params":[],"type":"account.WebAuthorizations"},{"id":"755087855","method":"account.resetWebAuthorization","params":[{"name":"hash","type":"long"}],"type":"Bool"},{"id":"1747789204","method":"account.resetWebAuthorizations","params":[],"type":"Bool"},{"id":"-1028140917","method":"messages.searchStickerSets","params":[{"name":"flags","type":"#"},{"name":"exclude_featured","type":"flags.0?true"},{"name":"q","type":"string"},{"name":"hash","type":"int"}],"type":"messages.FoundStickerSets"},{"id":"-956147407","method":"upload.getFileHashes","params":[{"name":"location","type":"InputFileLocation"},{"name":"offset","type":"int"}],"type":"Vector"},{"id":"1031231713","method":"help.getProxyData","params":[],"type":"help.ProxyData"},{"id":"749019089","method":"help.getTermsOfServiceUpdate","params":[],"type":"help.TermsOfServiceUpdate"},{"id":"-294455398","method":"help.acceptTermsOfService","params":[{"name":"id","type":"DataJSON"}],"type":"Bool"},{"id":"-1299661699","method":"account.getAllSecureValues","params":[],"type":"Vector"},{"id":"1936088002","method":"account.getSecureValue","params":[{"name":"types","type":"Vector"}],"type":"Vector"},{"id":"-1986010339","method":"account.saveSecureValue","params":[{"name":"value","type":"InputSecureValue"},{"name":"secure_secret_id","type":"long"}],"type":"SecureValue"},{"id":"-1199522741","method":"account.deleteSecureValue","params":[{"name":"types","type":"Vector"}],"type":"Bool"},{"id":"-1865902923","method":"users.setSecureValueErrors","params":[{"name":"id","type":"InputUser"},{"name":"errors","type":"Vector"}],"type":"Bool"},{"id":"-1200903967","method":"account.getAuthorizationForm","params":[{"name":"bot_id","type":"int"},{"name":"scope","type":"string"},{"name":"public_key","type":"string"}],"type":"account.AuthorizationForm"},{"id":"-419267436","method":"account.acceptAuthorization","params":[{"name":"bot_id","type":"int"},{"name":"scope","type":"string"},{"name":"public_key","type":"string"},{"name":"value_hashes","type":"Vector"},{"name":"credentials","type":"SecureCredentialsEncrypted"}],"type":"Bool"},{"id":"-1516022023","method":"account.sendVerifyPhoneCode","params":[{"name":"phone_number","type":"string"},{"name":"settings","type":"CodeSettings"}],"type":"auth.SentCode"},{"id":"1305716726","method":"account.verifyPhone","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"Bool"},{"id":"1880182943","method":"account.sendVerifyEmailCode","params":[{"name":"email","type":"string"}],"type":"account.SentEmailCode"},{"id":"-323339813","method":"account.verifyEmail","params":[{"name":"email","type":"string"},{"name":"code","type":"string"}],"type":"Bool"},{"id":"1072547679","method":"help.getDeepLinkInfo","params":[{"name":"path","type":"string"}],"type":"help.DeepLinkInfo"},{"id":"-2098076769","method":"contacts.getSaved","params":[],"type":"Vector"},{"id":"-2092831552","method":"channels.getLeftChannels","params":[{"name":"offset","type":"int"}],"type":"messages.Chats"},{"id":"-262453244","method":"account.initTakeoutSession","params":[{"name":"flags","type":"#"},{"name":"contacts","type":"flags.0?true"},{"name":"message_users","type":"flags.1?true"},{"name":"message_chats","type":"flags.2?true"},{"name":"message_megagroups","type":"flags.3?true"},{"name":"message_channels","type":"flags.4?true"},{"name":"files","type":"flags.5?true"},{"name":"file_max_size","type":"flags.5?int"}],"type":"account.Takeout"},{"id":"489050862","method":"account.finishTakeoutSession","params":[{"name":"flags","type":"#"},{"name":"success","type":"flags.0?true"}],"type":"Bool"},{"id":"486505992","method":"messages.getSplitRanges","params":[],"type":"Vector"},{"id":"911373810","method":"invokeWithMessagesRange","params":[{"name":"range","type":"MessageRange"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1398145746","method":"invokeWithTakeout","params":[{"name":"takeout_id","type":"long"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1031349873","method":"messages.markDialogUnread","params":[{"name":"flags","type":"#"},{"name":"unread","type":"flags.0?true"},{"name":"peer","type":"InputDialogPeer"}],"type":"Bool"},{"id":"585256482","method":"messages.getDialogUnreadMarks","params":[],"type":"Vector"},{"id":"-2062238246","method":"contacts.toggleTopPeers","params":[{"name":"enabled","type":"Bool"}],"type":"Bool"},{"id":"2119757468","method":"messages.clearAllDrafts","params":[],"type":"Bool"},{"id":"-1735311088","method":"help.getAppConfig","params":[],"type":"JSONValue"},{"id":"1862465352","method":"help.saveAppLog","params":[{"name":"events","type":"Vector"}],"type":"Bool"},{"id":"-966677240","method":"help.getPassportConfig","params":[{"name":"hash","type":"int"}],"type":"help.PassportConfig"},{"id":"1784243458","method":"langpack.getLanguage","params":[{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"}],"type":"LangPackLanguage"},{"id":"-760547348","method":"messages.updatePinnedMessage","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"}],"type":"Updates"},{"id":"-1881204448","method":"account.confirmPasswordEmail","params":[{"name":"code","type":"string"}],"type":"Bool"},{"id":"2055154197","method":"account.resendPasswordEmail","params":[],"type":"Bool"},{"id":"-1043606090","method":"account.cancelPasswordEmail","params":[],"type":"Bool"},{"id":"-748624084","method":"help.getSupportName","params":[],"type":"help.SupportName"},{"id":"59377875","method":"help.getUserInfo","params":[{"name":"user_id","type":"InputUser"}],"type":"help.UserInfo"},{"id":"1723407216","method":"help.editUserInfo","params":[{"name":"user_id","type":"InputUser"},{"name":"message","type":"string"},{"name":"entities","type":"Vector"}],"type":"help.UserInfo"},{"id":"-1626880216","method":"account.getContactSignUpNotification","params":[],"type":"Bool"},{"id":"-806076575","method":"account.setContactSignUpNotification","params":[{"name":"silent","type":"Bool"}],"type":"Bool"},{"id":"1398240377","method":"account.getNotifyExceptions","params":[{"name":"flags","type":"#"},{"name":"compare_sound","type":"flags.1?true"},{"name":"peer","type":"flags.0?InputNotifyPeer"}],"type":"Updates"},{"id":"283795844","method":"messages.sendVote","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"options","type":"Vector"}],"type":"Updates"},{"id":"1941660731","method":"messages.getPollResults","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"}],"type":"Updates"},{"id":"1848369232","method":"messages.getOnlines","params":[{"name":"peer","type":"InputPeer"}],"type":"ChatOnlines"},{"id":"-2127811866","method":"messages.getStatsURL","params":[{"name":"flags","type":"#"},{"name":"dark","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"params","type":"string"}],"type":"StatsURL"},{"id":"-554301545","method":"messages.editChatAbout","params":[{"name":"peer","type":"InputPeer"},{"name":"about","type":"string"}],"type":"Bool"},{"id":"-1517917375","method":"messages.editChatDefaultBannedRights","params":[{"name":"peer","type":"InputPeer"},{"name":"banned_rights","type":"ChatBannedRights"}],"type":"Updates"},{"id":"-57811990","method":"account.getWallPaper","params":[{"name":"wallpaper","type":"InputWallPaper"}],"type":"WallPaper"},{"id":"-578472351","method":"account.uploadWallPaper","params":[{"name":"file","type":"InputFile"},{"name":"mime_type","type":"string"},{"name":"settings","type":"WallPaperSettings"}],"type":"WallPaper"},{"id":"1817860919","method":"account.saveWallPaper","params":[{"name":"wallpaper","type":"InputWallPaper"},{"name":"unsave","type":"Bool"},{"name":"settings","type":"WallPaperSettings"}],"type":"Bool"},{"id":"-18000023","method":"account.installWallPaper","params":[{"name":"wallpaper","type":"InputWallPaper"},{"name":"settings","type":"WallPaperSettings"}],"type":"Bool"},{"id":"-1153722364","method":"account.resetWallPapers","params":[],"type":"Bool"},{"id":"1457130303","method":"account.getAutoDownloadSettings","params":[],"type":"account.AutoDownloadSettings"},{"id":"1995661875","method":"account.saveAutoDownloadSettings","params":[{"name":"flags","type":"#"},{"name":"low","type":"flags.0?true"},{"name":"high","type":"flags.1?true"},{"name":"settings","type":"AutoDownloadSettings"}],"type":"Bool"},{"id":"899735650","method":"messages.getEmojiKeywords","params":[{"name":"lang_code","type":"string"}],"type":"EmojiKeywordsDifference"},{"id":"352892591","method":"messages.getEmojiKeywordsDifference","params":[{"name":"lang_code","type":"string"},{"name":"from_version","type":"int"}],"type":"EmojiKeywordsDifference"},{"id":"1318675378","method":"messages.getEmojiKeywordsLanguages","params":[{"name":"lang_codes","type":"Vector"}],"type":"Vector"},{"id":"-709817306","method":"messages.getEmojiURL","params":[{"name":"lang_code","type":"string"}],"type":"EmojiURL"},{"id":"1749536939","method":"folders.editPeerFolders","params":[{"name":"folder_peers","type":"Vector"}],"type":"Updates"},{"id":"472471681","method":"folders.deleteFolder","params":[{"name":"folder_id","type":"int"}],"type":"Updates"},{"id":"1932455680","method":"messages.getSearchCounters","params":[{"name":"peer","type":"InputPeer"},{"name":"filters","type":"Vector"}],"type":"Vector"},{"id":"-170208392","method":"channels.getGroupsForDiscussion","params":[],"type":"messages.Chats"},{"id":"1079520178","method":"channels.setDiscussionGroup","params":[{"name":"broadcast","type":"InputChannel"},{"name":"group","type":"InputChannel"}],"type":"Bool"},{"id":"-482388461","method":"messages.requestUrlAuth","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"button_id","type":"int"}],"type":"UrlAuthResult"},{"id":"-148247912","method":"messages.acceptUrlAuth","params":[{"name":"flags","type":"#"},{"name":"write_allowed","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"button_id","type":"int"}],"type":"UrlAuthResult"},{"id":"1336717624","method":"messages.hidePeerSettingsBar","params":[{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"-386636848","method":"contacts.addContact","params":[{"name":"flags","type":"#"},{"name":"add_phone_privacy_exception","type":"flags.0?true"},{"name":"id","type":"InputUser"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"phone","type":"string"}],"type":"Updates"},{"id":"-130964977","method":"contacts.acceptContact","params":[{"name":"id","type":"InputUser"}],"type":"Updates"},{"id":"-1892102881","method":"channels.editCreator","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"password","type":"InputCheckPasswordSRP"}],"type":"Updates"},{"id":"171270230","method":"contacts.getLocated","params":[{"name":"geo_point","type":"InputGeoPoint"}],"type":"Updates"},{"id":"1491484525","method":"channels.editLocation","params":[{"name":"channel","type":"InputChannel"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"address","type":"string"}],"type":"Bool"},{"id":"-304832784","method":"channels.toggleSlowMode","params":[{"name":"channel","type":"InputChannel"},{"name":"seconds","type":"int"}],"type":"Updates"},{"id":"-490575781","method":"messages.getScheduledHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"hash","type":"int"}],"type":"messages.Messages"},{"id":"-1111817116","method":"messages.getScheduledMessages","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"-1120369398","method":"messages.sendScheduledMessages","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"}],"type":"Updates"},{"id":"1504586518","method":"messages.deleteScheduledMessages","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"}],"type":"Updates"},{"id":"473805619","method":"account.uploadTheme","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"thumb","type":"flags.0?InputFile"},{"name":"file_name","type":"string"},{"name":"mime_type","type":"string"}],"type":"Document"},{"id":"729808255","method":"account.createTheme","params":[{"name":"slug","type":"string"},{"name":"title","type":"string"},{"name":"document","type":"InputDocument"}],"type":"Theme"},{"id":"999203330","method":"account.updateTheme","params":[{"name":"flags","type":"#"},{"name":"format","type":"string"},{"name":"theme","type":"InputTheme"},{"name":"slug","type":"flags.0?string"},{"name":"title","type":"flags.1?string"},{"name":"document","type":"flags.2?InputDocument"}],"type":"Theme"},{"id":"-229175188","method":"account.saveTheme","params":[{"name":"theme","type":"InputTheme"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"2061776695","method":"account.installTheme","params":[{"name":"flags","type":"#"},{"name":"dark","type":"flags.0?true"},{"name":"format","type":"flags.1?string"},{"name":"theme","type":"flags.1?InputTheme"}],"type":"Bool"},{"id":"-1919060949","method":"account.getTheme","params":[{"name":"format","type":"string"},{"name":"theme","type":"InputTheme"},{"name":"document_id","type":"long"}],"type":"Theme"},{"id":"676939512","method":"account.getThemes","params":[{"name":"format","type":"string"},{"name":"hash","type":"int"}],"type":"account.Themes"}]}; + +Config.Schema.API.layer = 105; + +// From https://github.com/stephenmathieson/node-tlds/blob/master/index.js +Config.TLD = ['abogado', 'ac', 'academy', 'accountants', 'active', 'actor', 'ad', 'adult', 'ae', 'aero', 'af', 'ag', 'agency', 'ai', 'airforce', 'al', 'allfinanz', 'alsace', 'am', 'amsterdam', 'an', 'android', 'ao', 'apartments', 'aq', 'aquarelle', 'ar', 'archi', 'army', 'arpa', 'as', 'asia', 'associates', 'at', 'attorney', 'au', 'auction', 'audio', 'autos', 'aw', 'ax', 'axa', 'az', 'ba', 'band', 'bank', 'bar', 'barclaycard', 'barclays', 'bargains', 'bayern', 'bb', 'bd', 'be', 'beer', 'berlin', 'best', 'bf', 'bg', 'bh', 'bi', 'bid', 'bike', 'bingo', 'bio', 'biz', 'bj', 'black', 'blackfriday', 'bloomberg', 'blue', 'bm', 'bmw', 'bn', 'bnpparibas', 'bo', 'boo', 'boutique', 'br', 'brussels', 'bs', 'bt', 'budapest', 'build', 'builders', 'business', 'buzz', 'bv', 'bw', 'by', 'bz', 'bzh', 'ca', 'cab', 'cal', 'camera', 'camp', 'cancerresearch', 'canon', 'capetown', 'capital', 'caravan', 'cards', 'care', 'career', 'careers', 'cartier', 'casa', 'cash', 'cat', 'catering', 'cc', 'cd', 'center', 'ceo', 'cern', 'cf', 'cg', 'ch', 'channel', 'chat', 'cheap', 'christmas', 'chrome', 'church', 'ci', 'citic', 'city', 'ck', 'cl', 'claims', 'cleaning', 'click', 'clinic', 'clothing', 'club', 'cm', 'cn', 'co', 'coach', 'codes', 'coffee', 'college', 'cologne', 'com', 'community', 'company', 'computer', 'condos', 'construction', 'consulting', 'contractors', 'cooking', 'cool', 'coop', 'country', 'cr', 'credit', 'creditcard', 'cricket', 'crs', 'cruises', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', 'cz', 'dabur', 'dad', 'dance', 'dating', 'day', 'dclk', 'de', 'deals', 'degree', 'delivery', 'democrat', 'dental', 'dentist', 'desi', 'design', 'dev', 'diamonds', 'diet', 'digital', 'direct', 'directory', 'discount', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs', 'domains', 'doosan', 'durban', 'dvag', 'dz', 'eat', 'ec', 'edu', 'education', 'ee', 'eg', 'email', 'emerck', 'energy', 'engineer', 'engineering', 'enterprises', 'equipment', 'er', 'es', 'esq', 'estate', 'et', 'eu', 'eurovision', 'eus', 'events', 'everbank', 'exchange', 'expert', 'exposed', 'fail', 'farm', 'fashion', 'feedback', 'fi', 'finance', 'financial', 'firmdale', 'fish', 'fishing', 'fit', 'fitness', 'fj', 'fk', 'flights', 'florist', 'flowers', 'flsmidth', 'fly', 'fm', 'fo', 'foo', 'forsale', 'foundation', 'fr', 'frl', 'frogans', 'fund', 'furniture', 'futbol', 'ga', 'gal', 'gallery', 'garden', 'gb', 'gbiz', 'gd', 'ge', 'gent', 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', 'gifts', 'gives', 'gl', 'glass', 'gle', 'global', 'globo', 'gm', 'gmail', 'gmo', 'gmx', 'gn', 'goog', 'google', 'gop', 'gov', 'gp', 'gq', 'gr', 'graphics', 'gratis', 'green', 'gripe', 'gs', 'gt', 'gu', 'guide', 'guitars', 'guru', 'gw', 'gy', 'hamburg', 'hangout', 'haus', 'healthcare', 'help', 'here', 'hermes', 'hiphop', 'hiv', 'hk', 'hm', 'hn', 'holdings', 'holiday', 'homes', 'horse', 'host', 'hosting', 'house', 'how', 'hr', 'ht', 'hu', 'ibm', 'id', 'ie', 'ifm', 'il', 'im', 'immo', 'immobilien', 'in', 'industries', 'info', 'ing', 'ink', 'institute', 'insure', 'int', 'international', 'investments', 'io', 'iq', 'ir', 'irish', 'is', 'it', 'iwc', 'jcb', 'je', 'jetzt', 'jm', 'jo', 'jobs', 'joburg', 'jp', 'juegos', 'kaufen', 'kddi', 'ke', 'kg', 'kh', 'ki', 'kim', 'kitchen', 'kiwi', 'km', 'kn', 'koeln', 'kp', 'kr', 'krd', 'kred', 'kw', 'ky', 'kyoto', 'kz', 'la', 'lacaixa', 'land', 'lat', 'latrobe', 'lawyer', 'lb', 'lc', 'lds', 'lease', 'legal', 'lgbt', 'li', 'lidl', 'life', 'lighting', 'limited', 'limo', 'link', 'lk', 'loans', 'london', 'lotte', 'lotto', 'lr', 'ls', 'lt', 'ltda', 'lu', 'luxe', 'luxury', 'lv', 'ly', 'ma', 'madrid', 'maison', 'management', 'mango', 'market', 'marketing', 'marriott', 'mc', 'md', 'me', 'media', 'meet', 'melbourne', 'meme', 'memorial', 'menu', 'mg', 'mh', 'miami', 'mil', 'mini', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'moda', 'moe', 'monash', 'money', 'mormon', 'mortgage', 'moscow', 'motorcycles', 'mov', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nagoya', 'name', 'navy', 'nc', 'ne', 'net', 'network', 'neustar', 'new', 'nexus', 'nf', 'ng', 'ngo', 'nhk', 'ni', 'nico', 'ninja', 'nl', 'no', 'np', 'nr', 'nra', 'nrw', 'ntt', 'nu', 'nyc', 'nz', 'okinawa', 'om', 'one', 'ong', 'onl', 'ooo', 'org', 'organic', 'osaka', 'otsuka', 'ovh', 'pa', 'paris', 'partners', 'parts', 'party', 'pe', 'pf', 'pg', 'ph', 'pharmacy', 'photo', 'photography', 'photos', 'physio', 'pics', 'pictures', 'pink', 'pizza', 'pk', 'pl', 'place', 'plumbing', 'pm', 'pn', 'pohl', 'poker', 'porn', 'post', 'pr', 'praxi', 'press', 'pro', 'prod', 'productions', 'prof', 'properties', 'property', 'ps', 'pt', 'pub', 'pw', 'py', 'qa', 'qpon', 'quebec', 're', 'realtor', 'recipes', 'red', 'rehab', 'reise', 'reisen', 'reit', 'ren', 'rentals', 'repair', 'report', 'republican', 'rest', 'restaurant', 'reviews', 'rich', 'rio', 'rip', 'ro', 'rocks', 'rodeo', 'rs', 'rsvp', 'ru', 'ruhr', 'rw', 'ryukyu', 'sa', 'saarland', 'sale', 'samsung', 'sarl', 'saxo', 'sb', 'sc', 'sca', 'scb', 'schmidt', 'schule', 'schwarz', 'science', 'scot', 'sd', 'se', 'services', 'sew', 'sexy', 'sg', 'sh', 'shiksha', 'shoes', 'shriram', 'si', 'singles', 'sj', 'sk', 'sky', 'sl', 'sm', 'sn', 'so', 'social', 'software', 'sohu', 'solar', 'solutions', 'soy', 'space', 'spiegel', 'sr', 'st', 'style', 'su', 'supplies', 'supply', 'support', 'surf', 'surgery', 'suzuki', 'sv', 'sx', 'sy', 'sydney', 'systems', 'sz', 'taipei', 'tatar', 'tattoo', 'tax', 'tc', 'td', 'technology', 'tel', 'temasek', 'tennis', 'tf', 'tg', 'th', 'tienda', 'tips', 'tires', 'tirol', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'today', 'tokyo', 'tools', 'top', 'toshiba', 'town', 'toys', 'tp', 'tr', 'trade', 'training', 'travel', 'trust', 'tt', 'tui', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'university', 'uno', 'uol', 'us', 'uy', 'uz', 'va', 'vacations', 'vc', 've', 'vegas', 'ventures', 'versicherung', 'vet', 'vg', 'vi', 'viajes', 'video', 'villas', 'vision', 'vlaanderen', 'vn', 'vodka', 'vote', 'voting', 'voto', 'voyage', 'vu', 'wales', 'wang', 'watch', 'webcam', 'website', 'wed', 'wedding', 'wf', 'whoswho', 'wien', 'wiki', 'williamhill', 'wme', 'work', 'works', 'world', 'ws', 'wtc', 'wtf', '佛山', '集团', '在线', '한국', 'ভারত', '八卦', 'موقع', '公益', '公司', '移动', '我爱你', 'москва', 'қаз', 'онлайн', 'сайт', 'срб', '淡马锡', 'орг', '삼성', 'சிங்கப்பூர்', '商标', '商店', '商城', 'дети', 'мкд', '中文网', '中信', '中国', '中國', '谷歌', 'భారత్', 'ලංකා', 'ભારત', 'भारत', '网店', 'संगठन', '网络', 'укр', '香港', '台湾', '台灣', '手机', 'мон', 'الجزائر', 'عمان', 'ایران', 'امارات', 'بازار', 'الاردن', 'بھارت', 'المغرب', 'السعودية', 'مليسيا', 'شبكة', 'გე', '机构', '组织机构', 'ไทย', 'سورية', 'рус', 'рф', 'تونس', 'みんな', 'グーグル', '世界', 'ਭਾਰਤ', '网址', '游戏', 'vermögensberater', 'vermögensberatung', '企业', 'مصر', 'قطر', '广东', 'இலங்கை', 'இந்தியா', '新加坡', 'فلسطين', '政务', 'xxx', 'xyz', 'yachts', 'yandex', 'ye', 'yoga', 'yokohama', 'youtube', 'yt', 'za', 'zip', 'zm', 'zone', 'zuerich', 'zw']; + +// From https://raw.githubusercontent.com/FGRibreau/latenize/master/latinize_map.js +Config.LatinizeMap = {'Á': 'A','Ă': 'A','Ắ': 'A','Ặ': 'A','Ằ': 'A','Ẳ': 'A','Ẵ': 'A','Ǎ': 'A','Â': 'A','Ấ': 'A','Ậ': 'A','Ầ': 'A','Ẩ': 'A','Ẫ': 'A','Ä': 'A','Ǟ': 'A','Ȧ': 'A','Ǡ': 'A','Ạ': 'A','Ȁ': 'A','À': 'A','Ả': 'A','Ȃ': 'A','Ā': 'A','Ą': 'A','Å': 'A','Ǻ': 'A','Ḁ': 'A','Ⱥ': 'A','Ã': 'A','Ꜳ': 'AA','Æ': 'AE','Ǽ': 'AE','Ǣ': 'AE','Ꜵ': 'AO','Ꜷ': 'AU','Ꜹ': 'AV','Ꜻ': 'AV','Ꜽ': 'AY','Ḃ': 'B','Ḅ': 'B','Ɓ': 'B','Ḇ': 'B','Ƀ': 'B','Ƃ': 'B','Ć': 'C','Č': 'C','Ç': 'C','Ḉ': 'C','Ĉ': 'C','Ċ': 'C','Ƈ': 'C','Ȼ': 'C','Ď': 'D','Ḑ': 'D','Ḓ': 'D','Ḋ': 'D','Ḍ': 'D','Ɗ': 'D','Ḏ': 'D','Dz': 'D','Dž': 'D','Đ': 'D','Ƌ': 'D','DZ': 'DZ','DŽ': 'DZ','É': 'E','Ĕ': 'E','Ě': 'E','Ȩ': 'E','Ḝ': 'E','Ê': 'E','Ế': 'E','Ệ': 'E','Ề': 'E','Ể': 'E','Ễ': 'E','Ḙ': 'E','Ë': 'E','Ė': 'E','Ẹ': 'E','Ȅ': 'E','È': 'E','Ẻ': 'E','Ȇ': 'E','Ē': 'E','Ḗ': 'E','Ḕ': 'E','Ę': 'E','Ɇ': 'E','Ẽ': 'E','Ḛ': 'E','Ꝫ': 'ET','Ḟ': 'F','Ƒ': 'F','Ǵ': 'G','Ğ': 'G','Ǧ': 'G','Ģ': 'G','Ĝ': 'G','Ġ': 'G','Ɠ': 'G','Ḡ': 'G','Ǥ': 'G','Ḫ': 'H','Ȟ': 'H','Ḩ': 'H','Ĥ': 'H','Ⱨ': 'H','Ḧ': 'H','Ḣ': 'H','Ḥ': 'H','Ħ': 'H','Í': 'I','Ĭ': 'I','Ǐ': 'I','Î': 'I','Ï': 'I','Ḯ': 'I','İ': 'I','Ị': 'I','Ȉ': 'I','Ì': 'I','Ỉ': 'I','Ȋ': 'I','Ī': 'I','Į': 'I','Ɨ': 'I','Ĩ': 'I','Ḭ': 'I','Ꝺ': 'D','Ꝼ': 'F','Ᵹ': 'G','Ꞃ': 'R','Ꞅ': 'S','Ꞇ': 'T','Ꝭ': 'IS','Ĵ': 'J','Ɉ': 'J','Ḱ': 'K','Ǩ': 'K','Ķ': 'K','Ⱪ': 'K','Ꝃ': 'K','Ḳ': 'K','Ƙ': 'K','Ḵ': 'K','Ꝁ': 'K','Ꝅ': 'K','Ĺ': 'L','Ƚ': 'L','Ľ': 'L','Ļ': 'L','Ḽ': 'L','Ḷ': 'L','Ḹ': 'L','Ⱡ': 'L','Ꝉ': 'L','Ḻ': 'L','Ŀ': 'L','Ɫ': 'L','Lj': 'L','Ł': 'L','LJ': 'LJ','Ḿ': 'M','Ṁ': 'M','Ṃ': 'M','Ɱ': 'M','Ń': 'N','Ň': 'N','Ņ': 'N','Ṋ': 'N','Ṅ': 'N','Ṇ': 'N','Ǹ': 'N','Ɲ': 'N','Ṉ': 'N','Ƞ': 'N','Nj': 'N','Ñ': 'N','NJ': 'NJ','Ó': 'O','Ŏ': 'O','Ǒ': 'O','Ô': 'O','Ố': 'O','Ộ': 'O','Ồ': 'O','Ổ': 'O','Ỗ': 'O','Ö': 'O','Ȫ': 'O','Ȯ': 'O','Ȱ': 'O','Ọ': 'O','Ő': 'O','Ȍ': 'O','Ò': 'O','Ỏ': 'O','Ơ': 'O','Ớ': 'O','Ợ': 'O','Ờ': 'O','Ở': 'O','Ỡ': 'O','Ȏ': 'O','Ꝋ': 'O','Ꝍ': 'O','Ō': 'O','Ṓ': 'O','Ṑ': 'O','Ɵ': 'O','Ǫ': 'O','Ǭ': 'O','Ø': 'O','Ǿ': 'O','Õ': 'O','Ṍ': 'O','Ṏ': 'O','Ȭ': 'O','Ƣ': 'OI','Ꝏ': 'OO','Ɛ': 'E','Ɔ': 'O','Ȣ': 'OU','Ṕ': 'P','Ṗ': 'P','Ꝓ': 'P','Ƥ': 'P','Ꝕ': 'P','Ᵽ': 'P','Ꝑ': 'P','Ꝙ': 'Q','Ꝗ': 'Q','Ŕ': 'R','Ř': 'R','Ŗ': 'R','Ṙ': 'R','Ṛ': 'R','Ṝ': 'R','Ȑ': 'R','Ȓ': 'R','Ṟ': 'R','Ɍ': 'R','Ɽ': 'R','Ꜿ': 'C','Ǝ': 'E','Ś': 'S','Ṥ': 'S','Š': 'S','Ṧ': 'S','Ş': 'S','Ŝ': 'S','Ș': 'S','Ṡ': 'S','Ṣ': 'S','Ṩ': 'S','ẞ': 'SS','Ť': 'T','Ţ': 'T','Ṱ': 'T','Ț': 'T','Ⱦ': 'T','Ṫ': 'T','Ṭ': 'T','Ƭ': 'T','Ṯ': 'T','Ʈ': 'T','Ŧ': 'T','Ɐ': 'A','Ꞁ': 'L','Ɯ': 'M','Ʌ': 'V','Ꜩ': 'TZ','Ú': 'U','Ŭ': 'U','Ǔ': 'U','Û': 'U','Ṷ': 'U','Ü': 'U','Ǘ': 'U','Ǚ': 'U','Ǜ': 'U','Ǖ': 'U','Ṳ': 'U','Ụ': 'U','Ű': 'U','Ȕ': 'U','Ù': 'U','Ủ': 'U','Ư': 'U','Ứ': 'U','Ự': 'U','Ừ': 'U','Ử': 'U','Ữ': 'U','Ȗ': 'U','Ū': 'U','Ṻ': 'U','Ų': 'U','Ů': 'U','Ũ': 'U','Ṹ': 'U','Ṵ': 'U','Ꝟ': 'V','Ṿ': 'V','Ʋ': 'V','Ṽ': 'V','Ꝡ': 'VY','Ẃ': 'W','Ŵ': 'W','Ẅ': 'W','Ẇ': 'W','Ẉ': 'W','Ẁ': 'W','Ⱳ': 'W','Ẍ': 'X','Ẋ': 'X','Ý': 'Y','Ŷ': 'Y','Ÿ': 'Y','Ẏ': 'Y','Ỵ': 'Y','Ỳ': 'Y','Ƴ': 'Y','Ỷ': 'Y','Ỿ': 'Y','Ȳ': 'Y','Ɏ': 'Y','Ỹ': 'Y','Ź': 'Z','Ž': 'Z','Ẑ': 'Z','Ⱬ': 'Z','Ż': 'Z','Ẓ': 'Z','Ȥ': 'Z','Ẕ': 'Z','Ƶ': 'Z','IJ': 'IJ','Œ': 'OE','ᴀ': 'A','ᴁ': 'AE','ʙ': 'B','ᴃ': 'B','ᴄ': 'C','ᴅ': 'D','ᴇ': 'E','ꜰ': 'F','ɢ': 'G','ʛ': 'G','ʜ': 'H','ɪ': 'I','ʁ': 'R','ᴊ': 'J','ᴋ': 'K','ʟ': 'L','ᴌ': 'L','ᴍ': 'M','ɴ': 'N','ᴏ': 'O','ɶ': 'OE','ᴐ': 'O','ᴕ': 'OU','ᴘ': 'P','ʀ': 'R','ᴎ': 'N','ᴙ': 'R','ꜱ': 'S','ᴛ': 'T','ⱻ': 'E','ᴚ': 'R','ᴜ': 'U','ᴠ': 'V','ᴡ': 'W','ʏ': 'Y','ᴢ': 'Z','á': 'a','ă': 'a','ắ': 'a','ặ': 'a','ằ': 'a','ẳ': 'a','ẵ': 'a','ǎ': 'a','â': 'a','ấ': 'a','ậ': 'a','ầ': 'a','ẩ': 'a','ẫ': 'a','ä': 'a','ǟ': 'a','ȧ': 'a','ǡ': 'a','ạ': 'a','ȁ': 'a','à': 'a','ả': 'a','ȃ': 'a','ā': 'a','ą': 'a','ᶏ': 'a','ẚ': 'a','å': 'a','ǻ': 'a','ḁ': 'a','ⱥ': 'a','ã': 'a','ꜳ': 'aa','æ': 'ae','ǽ': 'ae','ǣ': 'ae','ꜵ': 'ao','ꜷ': 'au','ꜹ': 'av','ꜻ': 'av','ꜽ': 'ay','ḃ': 'b','ḅ': 'b','ɓ': 'b','ḇ': 'b','ᵬ': 'b','ᶀ': 'b','ƀ': 'b','ƃ': 'b','ɵ': 'o','ć': 'c','č': 'c','ç': 'c','ḉ': 'c','ĉ': 'c','ɕ': 'c','ċ': 'c','ƈ': 'c','ȼ': 'c','ď': 'd','ḑ': 'd','ḓ': 'd','ȡ': 'd','ḋ': 'd','ḍ': 'd','ɗ': 'd','ᶑ': 'd','ḏ': 'd','ᵭ': 'd','ᶁ': 'd','đ': 'd','ɖ': 'd','ƌ': 'd','ı': 'i','ȷ': 'j','ɟ': 'j','ʄ': 'j','dz': 'dz','dž': 'dz','é': 'e','ĕ': 'e','ě': 'e','ȩ': 'e','ḝ': 'e','ê': 'e','ế': 'e','ệ': 'e','ề': 'e','ể': 'e','ễ': 'e','ḙ': 'e','ë': 'e','ė': 'e','ẹ': 'e','ȅ': 'e','è': 'e','ẻ': 'e','ȇ': 'e','ē': 'e','ḗ': 'e','ḕ': 'e','ⱸ': 'e','ę': 'e','ᶒ': 'e','ɇ': 'e','ẽ': 'e','ḛ': 'e','ꝫ': 'et','ḟ': 'f','ƒ': 'f','ᵮ': 'f','ᶂ': 'f','ǵ': 'g','ğ': 'g','ǧ': 'g','ģ': 'g','ĝ': 'g','ġ': 'g','ɠ': 'g','ḡ': 'g','ᶃ': 'g','ǥ': 'g','ḫ': 'h','ȟ': 'h','ḩ': 'h','ĥ': 'h','ⱨ': 'h','ḧ': 'h','ḣ': 'h','ḥ': 'h','ɦ': 'h','ẖ': 'h','ħ': 'h','ƕ': 'hv','í': 'i','ĭ': 'i','ǐ': 'i','î': 'i','ï': 'i','ḯ': 'i','ị': 'i','ȉ': 'i','ì': 'i','ỉ': 'i','ȋ': 'i','ī': 'i','į': 'i','ᶖ': 'i','ɨ': 'i','ĩ': 'i','ḭ': 'i','ꝺ': 'd','ꝼ': 'f','ᵹ': 'g','ꞃ': 'r','ꞅ': 's','ꞇ': 't','ꝭ': 'is','ǰ': 'j','ĵ': 'j','ʝ': 'j','ɉ': 'j','ḱ': 'k','ǩ': 'k','ķ': 'k','ⱪ': 'k','ꝃ': 'k','ḳ': 'k','ƙ': 'k','ḵ': 'k','ᶄ': 'k','ꝁ': 'k','ꝅ': 'k','ĺ': 'l','ƚ': 'l','ɬ': 'l','ľ': 'l','ļ': 'l','ḽ': 'l','ȴ': 'l','ḷ': 'l','ḹ': 'l','ⱡ': 'l','ꝉ': 'l','ḻ': 'l','ŀ': 'l','ɫ': 'l','ᶅ': 'l','ɭ': 'l','ł': 'l','lj': 'lj','ſ': 's','ẜ': 's','ẛ': 's','ẝ': 's','ḿ': 'm','ṁ': 'm','ṃ': 'm','ɱ': 'm','ᵯ': 'm','ᶆ': 'm','ń': 'n','ň': 'n','ņ': 'n','ṋ': 'n','ȵ': 'n','ṅ': 'n','ṇ': 'n','ǹ': 'n','ɲ': 'n','ṉ': 'n','ƞ': 'n','ᵰ': 'n','ᶇ': 'n','ɳ': 'n','ñ': 'n','nj': 'nj','ó': 'o','ŏ': 'o','ǒ': 'o','ô': 'o','ố': 'o','ộ': 'o','ồ': 'o','ổ': 'o','ỗ': 'o','ö': 'o','ȫ': 'o','ȯ': 'o','ȱ': 'o','ọ': 'o','ő': 'o','ȍ': 'o','ò': 'o','ỏ': 'o','ơ': 'o','ớ': 'o','ợ': 'o','ờ': 'o','ở': 'o','ỡ': 'o','ȏ': 'o','ꝋ': 'o','ꝍ': 'o','ⱺ': 'o','ō': 'o','ṓ': 'o','ṑ': 'o','ǫ': 'o','ǭ': 'o','ø': 'o','ǿ': 'o','õ': 'o','ṍ': 'o','ṏ': 'o','ȭ': 'o','ƣ': 'oi','ꝏ': 'oo','ɛ': 'e','ᶓ': 'e','ɔ': 'o','ᶗ': 'o','ȣ': 'ou','ṕ': 'p','ṗ': 'p','ꝓ': 'p','ƥ': 'p','ᵱ': 'p','ᶈ': 'p','ꝕ': 'p','ᵽ': 'p','ꝑ': 'p','ꝙ': 'q','ʠ': 'q','ɋ': 'q','ꝗ': 'q','ŕ': 'r','ř': 'r','ŗ': 'r','ṙ': 'r','ṛ': 'r','ṝ': 'r','ȑ': 'r','ɾ': 'r','ᵳ': 'r','ȓ': 'r','ṟ': 'r','ɼ': 'r','ᵲ': 'r','ᶉ': 'r','ɍ': 'r','ɽ': 'r','ↄ': 'c','ꜿ': 'c','ɘ': 'e','ɿ': 'r','ś': 's','ṥ': 's','š': 's','ṧ': 's','ş': 's','ŝ': 's','ș': 's','ṡ': 's','ṣ': 's','ṩ': 's','ʂ': 's','ᵴ': 's','ᶊ': 's','ȿ': 's','ɡ': 'g','ß': 'ss','ᴑ': 'o','ᴓ': 'o','ᴝ': 'u','ť': 't','ţ': 't','ṱ': 't','ț': 't','ȶ': 't','ẗ': 't','ⱦ': 't','ṫ': 't','ṭ': 't','ƭ': 't','ṯ': 't','ᵵ': 't','ƫ': 't','ʈ': 't','ŧ': 't','ᵺ': 'th','ɐ': 'a','ᴂ': 'ae','ǝ': 'e','ᵷ': 'g','ɥ': 'h','ʮ': 'h','ʯ': 'h','ᴉ': 'i','ʞ': 'k','ꞁ': 'l','ɯ': 'm','ɰ': 'm','ᴔ': 'oe','ɹ': 'r','ɻ': 'r','ɺ': 'r','ⱹ': 'r','ʇ': 't','ʌ': 'v','ʍ': 'w','ʎ': 'y','ꜩ': 'tz','ú': 'u','ŭ': 'u','ǔ': 'u','û': 'u','ṷ': 'u','ü': 'u','ǘ': 'u','ǚ': 'u','ǜ': 'u','ǖ': 'u','ṳ': 'u','ụ': 'u','ű': 'u','ȕ': 'u','ù': 'u','ủ': 'u','ư': 'u','ứ': 'u','ự': 'u','ừ': 'u','ử': 'u','ữ': 'u','ȗ': 'u','ū': 'u','ṻ': 'u','ų': 'u','ᶙ': 'u','ů': 'u','ũ': 'u','ṹ': 'u','ṵ': 'u','ᵫ': 'ue','ꝸ': 'um','ⱴ': 'v','ꝟ': 'v','ṿ': 'v','ʋ': 'v','ᶌ': 'v','ⱱ': 'v','ṽ': 'v','ꝡ': 'vy','ẃ': 'w','ŵ': 'w','ẅ': 'w','ẇ': 'w','ẉ': 'w','ẁ': 'w','ⱳ': 'w','ẘ': 'w','ẍ': 'x','ẋ': 'x','ᶍ': 'x','ý': 'y','ŷ': 'y','ÿ': 'y','ẏ': 'y','ỵ': 'y','ỳ': 'y','ƴ': 'y','ỷ': 'y','ỿ': 'y','ȳ': 'y','ẙ': 'y','ɏ': 'y','ỹ': 'y','ź': 'z','ž': 'z','ẑ': 'z','ʑ': 'z','ⱬ': 'z','ż': 'z','ẓ': 'z','ȥ': 'z','ẕ': 'z','ᵶ': 'z','ᶎ': 'z','ʐ': 'z','ƶ': 'z','ɀ': 'z','ff': 'ff','ffi': 'ffi','ffl': 'ffl','fi': 'fi','fl': 'fl','ij': 'ij','œ': 'oe','st': 'st','ₐ': 'a','ₑ': 'e','ᵢ': 'i','ⱼ': 'j','ₒ': 'o','ᵣ': 'r','ᵤ': 'u','ᵥ': 'v','ₓ': 'x','Ё': 'YO', 'Й': 'I', 'Ц': 'TS', 'У': 'U', 'К': 'K', 'Е': 'E', 'Н': 'N', 'Г': 'G', 'Ш': 'SH', 'Щ': 'SCH', 'З': 'Z', 'Х': 'H', 'Ъ': '', 'ё': 'yo', 'й': 'i', 'ц': 'ts', 'у': 'u', 'к': 'k', 'е': 'e', 'н': 'n', 'г': 'g', 'ш': 'sh', 'щ': 'sch', 'з': 'z', 'х': 'h', 'ъ': '', 'Ф': 'F', 'Ы': 'I', 'В': 'V', 'А': 'A', 'П': 'P', 'Р': 'R', 'О': 'O', 'Л': 'L', 'Д': 'D', 'Ж': 'ZH', 'Э': 'E', 'ф': 'f', 'ы': 'i', 'в': 'v', 'а': 'a', 'п': 'p', 'р': 'r', 'о': 'o', 'л': 'l', 'д': 'd', 'ж': 'zh', 'э': 'e', 'Я': 'Ya', 'Ч': 'CH', 'С': 'S', 'М': 'M', 'И': 'I', 'Т': 'T', 'Ь': '', 'Б': 'B', 'Ю': 'YU', 'я': 'ya', 'ч': 'ch', 'с': 's', 'м': 'm', 'и': 'i', 'т': 't', 'ь': '', 'б': 'b', 'ю': 'yu'} + +// ConfigStorage +//;(function (window) { + var keyPrefix = ''; + var noPrefix = false; + var cache = {}; + var useCs = !!(window.chrome && chrome.storage && chrome.storage.local); + var useLs = !useCs && !!window.localStorage; + + function storageSetPrefix(newPrefix) { + keyPrefix = newPrefix; + } + + function storageSetNoPrefix() { + noPrefix = true; + } + + function storageGetPrefix() { + if(noPrefix) { + noPrefix = false; + return ''; + } + + return keyPrefix; + } + + function storageGetValue(keys, callback) { + var single = false; + if(!Array.isArray(keys)) { + keys = Array.prototype.slice.call(arguments); + callback = keys.pop(); + single = keys.length == 1; + } + var result = [], + value; + var allFound = true; + var prefix = storageGetPrefix(), + i, key; + + for(i = 0; i < keys.length; i++) { + key = keys[i] = prefix + keys[i]; + if(key.substr(0, 3) != 'xt_' && cache[key] !== undefined) { + result.push(cache[key]); + } else if(useLs) { + try { + value = localStorage.getItem(key); + } catch(e) { + useLs = false; + } + + try { + value = (value === undefined || value === null) ? false : JSON.parse(value); + } catch(e) { + value = false; + } + result.push(cache[key] = value); + } else if(!useCs) { + result.push(cache[key] = false); + } else { + allFound = false; + } + } + + if(allFound) { + return callback(single ? result[0] : result); + } + + chrome.storage.local.get(keys, function(resultObj) { + var value; + result = []; + for(i = 0; i < keys.length; i++) { + key = keys[i]; + value = resultObj[key]; + value = value === undefined || value === null ? false : JSON.parse(value); + result.push(cache[key] = value); + } + + callback(single ? result[0] : result); + }); + } + + function storageSetValue(obj, callback) { + var keyValues = {}; + var prefix = storageGetPrefix(), + key, value; + + //console.log('storageSetValue', obj, callback, arguments); + + for(key in obj) { + if(obj.hasOwnProperty(key)) { + value = obj[key]; + key = prefix + key; + cache[key] = value; + //value = value instanceof Uint8Array ? Array.from(value) : JSON.stringify(value); + value = JSON.stringify(value); + if(useLs) { + try { + //console.log('setItem', key, value); + localStorage.setItem(key, value); + } catch (e) { + useLs = false; + } + } else { + keyValues[key] = value; + } + } + } + + if(useLs || !useCs) { + if(callback) { + callback(); + } + + return; + } + + chrome.storage.local.set(keyValues, callback); + } + + function storageRemoveValue(keys, callback) { + if(!Array.isArray(keys)) { + keys = Array.prototype.slice.call(arguments) + if(typeof keys[keys.length - 1] === 'function') { + callback = keys.pop(); + } + } + + var prefix = storageGetPrefix(), + i, key; + + for(i = 0; i < keys.length; i++) { + key = keys[i] = prefix + keys[i]; + delete cache[key]; + if(useLs) { + try { + localStorage.removeItem(key); + } catch(e) { + useLs = false; + } + } + } + + if(useCs) { + chrome.storage.local.remove(keys, callback); + } else if(callback) { + callback(); + } + } + + function storageClear(callback) { + if(useLs) { + try { + localStorage.clear(); + } catch (e) { + useLs = false; + } + } + + if(useCs) { + chrome.storage.local.clear(function() { + cache = {}; + callback(); + }) + } else { + cache = {}; + callback(); + } + } + + + + window.ConfigStorage = { + prefix: storageSetPrefix, + noPrefix: storageSetNoPrefix, + get: storageGetValue, + set: storageSetValue, + remove: storageRemoveValue, + clear: storageClear + }; + + //window.Config = Config; + + Config.Storage = window.ConfigStorage; + + module.exports = Config; +//})(this) diff --git a/src/lib/cropper.ts b/src/lib/cropper.ts new file mode 100644 index 00000000..71195584 --- /dev/null +++ b/src/lib/cropper.ts @@ -0,0 +1,282 @@ + +function resizeableImage(image_target: HTMLImageElement, resize_canvas?: HTMLCanvasElement) { + var cropComponent: HTMLDivElement + , container: HTMLDivElement + , crop_img: HTMLImageElement + , event_state: { + mouse_x?: number, + mouse_y?: number, + container_width?: number, + container_height?: number, + container_left?: number, + container_top?: number + } = {} + , ratio = 1.0 + , keyZoomValue = 4.0 + , MINWIDTH = 50 + //, MINHEIGHT = 50 + , CROPWIDTH = 200 + , CROPHEIGHT = 200 + , cropLeft = 0 + , cropTop = 0 + , cropWidth = 0 + , cropHeight = 0; + + if(image_target.complete) { + init(); + } else { + image_target.onload = init; + } + + function removeHandlers() { + container.removeEventListener('mousedown', startMoving); + container.removeEventListener('touchstart', startMoving); + container.removeEventListener('wheel', resizing); + + document.removeEventListener('mouseup', endMoving); + document.removeEventListener('touchend', endMoving); + document.removeEventListener('mousemove', moving); + document.removeEventListener('touchmove', moving); + document.removeEventListener('keypress', keyHandler); + + cropComponent.remove(); + container.remove(); + crop_img.remove(); + } + + function addHandlers() { + container.addEventListener('mousedown', startMoving, false); + container.addEventListener('touchstart', startMoving, false); + container.addEventListener('wheel', resizing, false); + + document.addEventListener('keypress', keyHandler, false); + //document.querySelector('.btn-crop').addEventListener('click', openCropCanvasImg); + } + + function init() { + var wraper, left, top; + + if (image_target.dataset.isCrop) { + throw 'image is already crop' + } + + image_target.dataset.isCrop = 'true'; + image_target.classList.add('crop-blur'); + image_target.draggable = false; + + crop_img = new Image(); + crop_img.crossOrigin = image_target.crossOrigin; + crop_img.src = image_target.src; + crop_img.draggable = false; + + if(!resize_canvas) { + resize_canvas = document.createElement('canvas'); + } + + cropComponent = document.createElement('div'); + cropComponent.classList.add('crop-component'); + + container = document.createElement('div'); + container.classList.add('overlay'); + + let overlayColor = document.createElement('div'); + overlayColor.classList.add('crop-overlay-color'); + + cropComponent.appendChild(container); + wraper = image_target.parentNode; + wraper.appendChild(cropComponent); + cropComponent.appendChild(crop_img); + cropComponent.appendChild(image_target); + cropComponent.appendChild(overlayColor); + container.appendChild(crop_img); + + crop_img.style.maxWidth = image_target.width + 'px'; + + left = image_target.offsetWidth / 2 - CROPWIDTH / 2; + top = image_target.offsetHeight / 2 - CROPHEIGHT / 2; + + updateCropImage(left, top); + addHandlers(); + } + + function updateCropSize(width: number, height: number) { + container.style.width = width + 'px'; + container.style.height = height + 'px'; + } + + function updateCropImage(left: number, top: number) { + cropLeft = -left * ratio; + cropTop = -top * ratio; + + crop_img.style.top = -top + 'px'; + crop_img.style.left = -left + 'px'; + } + + function updateContainer(left: number, top: number) { + let _top = top + (CROPWIDTH / 2) + 'px'; + let _left = left + (CROPHEIGHT / 2) + 'px'; + + container.style.top = _top; + container.style.left = _left; + } + + // Save the initial event details and container state + function saveEventState(e: any) { + event_state.container_width = container.offsetWidth; + event_state.container_height = container.offsetHeight; + + event_state.container_left = container.offsetLeft; + event_state.container_top = container.offsetTop; + + event_state.mouse_x = (e.clientX || e.pageX || e.touches && e.touches[0].clientX) + window.scrollX; + event_state.mouse_y = (e.clientY || e.pageY || e.touches && e.touches[0].clientY) + window.scrollY; + } + + function imgZoom(zoom: number) { + zoom = zoom * Math.PI * 2 + var newWidth = Math.floor(container.clientWidth + zoom) + , newHeight = Math.floor(container.clientHeight + zoom) + , w = crop_img.clientWidth + , h = crop_img.clientHeight + , left + , top + , right + , bottom; + + if(newWidth < MINWIDTH) { + return; + } else if (newWidth > w) { + return; + } + + left = container.offsetLeft - (zoom / 2); + top = container.offsetTop - (zoom / 2); + right = left + newWidth; + bottom = top + newHeight; + + if(left < 0) { + left = 0; + } + if(top < 0) { + top = 0; + } + if(right > w) { + return; + } + if(bottom > h) { + return; + } + + ratio = CROPWIDTH / newWidth; + + updateCropSize(newWidth, newWidth); + updateCropImage(left, top); + updateContainer(left, top); + //crop(); + } + + function keyHandler(e: KeyboardEvent) { + e.preventDefault(); + + switch (String.fromCharCode(e.charCode)) { + case '+' : + imgZoom(keyZoomValue); + break; + case '-' : + imgZoom(-keyZoomValue); + break; + } + } + + function resizing(e: any) { + e.preventDefault(); + imgZoom(e.deltaY > 0 ? 1 : -1); + } + + function startMoving(e: MouseEvent | TouchEvent) { + e.preventDefault(); + e.stopPropagation(); + + saveEventState(e); + + document.addEventListener('mousemove', moving); + document.addEventListener('touchmove', moving); + document.addEventListener('mouseup', endMoving); + document.addEventListener('touchend', endMoving); + } + + function endMoving(e: MouseEvent | TouchEvent) { + e.preventDefault(); + + document.removeEventListener('mouseup', endMoving); + document.removeEventListener('touchend', endMoving); + document.removeEventListener('mousemove', moving); + document.removeEventListener('touchmove', moving); + } + + function moving(e: any) { + var curuntTouch = {x: 0, y: 0} + , left + , top + , w + , h; + + e.preventDefault(); + e.stopPropagation(); + + curuntTouch.x = e.pageX || e.touches && e.touches[0].pageX; + curuntTouch.y = e.pageY || e.touches && e.touches[0].pageY; + + left = curuntTouch.x - (event_state.mouse_x - event_state.container_left); + top = curuntTouch.y - (event_state.mouse_y - event_state.container_top); + w = container.offsetWidth; + h = container.offsetHeight; + + if(left < 0) { + left = 0; + } else if (left > crop_img.offsetWidth - w) { + left = crop_img.offsetWidth - w; + } + if(top < 0) { + top = 0; + } else if (top > crop_img.offsetHeight - h) { + top = crop_img.offsetHeight - h; + } + + updateCropImage(left, top); + updateContainer(left, top); + } + + function crop() { + cropWidth = crop_img.width * ratio; + cropHeight = crop_img.height * ratio; + + resize_canvas.width = CROPWIDTH; + resize_canvas.height = CROPHEIGHT; + + var ctx = resize_canvas.getContext('2d'); + ctx.drawImage(crop_img, + cropLeft, cropTop, + cropWidth, cropHeight + ); + } + + return {crop, removeHandlers}; + + /* function openCropCanvasImg() { + crop(); + + try { + var base64Img = resize_canvas.toDataURL('image/png', 1.0); + window.open(base64Img); + } catch(e) { + alert(e); + } finally { + // removeHandlers(); + } + + } */ +} + +//resizeableImage(document.querySelector('.crop-image')); +export default resizeableImage; diff --git a/src/lib/crypto/crypto.js b/src/lib/crypto/crypto.js new file mode 100644 index 00000000..d4567fd9 --- /dev/null +++ b/src/lib/crypto/crypto.js @@ -0,0 +1,2387 @@ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +/** + * CryptoJS core components. + */ + +console.log('CryptoJS included!'); + +var CryptoJS /* = this.CryptoJS = globalThis.CryptoJS */ = CryptoJS || (function (Math, undefined) { + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + function F() {} + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + F.prototype = this; + var subtype = new F(); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init')) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else if (thatWords.length > 0xffff) { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } else { + // Copy all words at once + // thisWords.push.apply(thisWords, thatWords); + + // HOTFIX from: https://code.google.com/p/crypto-js/issues/detail?id=90 + for (var i = 0; i < thatWords.length; i++) { + thisWords.push(thatWords[i]); + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + for (var i = 0; i < nBytes; i += 4) { + words.push((Math.random() * 0x100000000) | 0); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + var processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; +}(Math)); + +module.exports = CryptoJS; + +(function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var X32WordArray = C_lib.WordArray; + + /** + * x64 namespace. + */ + var C_x64 = C.x64 = {}; + + /** + * A 64-bit word. + */ + var X64Word = C_x64.Word = Base.extend({ + /** + * Initializes a newly created 64-bit word. + * + * @param {number} high The high 32 bits. + * @param {number} low The low 32 bits. + * + * @example + * + * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); + */ + init: function (high, low) { + this.high = high; + this.low = low; + } + + /** + * Bitwise NOTs this word. + * + * @return {X64Word} A new x64-Word object after negating. + * + * @example + * + * var negated = x64Word.not(); + */ + // not: function () { + // var high = ~this.high; + // var low = ~this.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ANDs this word with the passed word. + * + * @param {X64Word} word The x64-Word to AND with this word. + * + * @return {X64Word} A new x64-Word object after ANDing. + * + * @example + * + * var anded = x64Word.and(anotherX64Word); + */ + // and: function (word) { + // var high = this.high & word.high; + // var low = this.low & word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to OR with this word. + * + * @return {X64Word} A new x64-Word object after ORing. + * + * @example + * + * var ored = x64Word.or(anotherX64Word); + */ + // or: function (word) { + // var high = this.high | word.high; + // var low = this.low | word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise XORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to XOR with this word. + * + * @return {X64Word} A new x64-Word object after XORing. + * + * @example + * + * var xored = x64Word.xor(anotherX64Word); + */ + // xor: function (word) { + // var high = this.high ^ word.high; + // var low = this.low ^ word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the left. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftL(25); + */ + // shiftL: function (n) { + // if (n < 32) { + // var high = (this.high << n) | (this.low >>> (32 - n)); + // var low = this.low << n; + // } else { + // var high = this.low << (n - 32); + // var low = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the right. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftR(7); + */ + // shiftR: function (n) { + // if (n < 32) { + // var low = (this.low >>> n) | (this.high << (32 - n)); + // var high = this.high >>> n; + // } else { + // var low = this.high >>> (n - 32); + // var high = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Rotates this word n bits to the left. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotL(25); + */ + // rotL: function (n) { + // return this.shiftL(n).or(this.shiftR(64 - n)); + // }, + + /** + * Rotates this word n bits to the right. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotR(7); + */ + // rotR: function (n) { + // return this.shiftR(n).or(this.shiftL(64 - n)); + // }, + + /** + * Adds this word with the passed word. + * + * @param {X64Word} word The x64-Word to add with this word. + * + * @return {X64Word} A new x64-Word object after adding. + * + * @example + * + * var added = x64Word.add(anotherX64Word); + */ + // add: function (word) { + // var low = (this.low + word.low) | 0; + // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; + // var high = (this.high + word.high + carry) | 0; + + // return X64Word.create(high, low); + // } + }); + + /** + * An array of 64-bit words. + * + * @property {Array} words The array of CryptoJS.x64.Word objects. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var X64WordArray = C_x64.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.x64.WordArray.create(); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ]); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ], 10); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 8; + } + }, + + /** + * Converts this 64-bit word array to a 32-bit word array. + * + * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. + * + * @example + * + * var x32WordArray = x64WordArray.toX32(); + */ + toX32: function () { + // Shortcuts + var x64Words = this.words; + var x64WordsLength = x64Words.length; + + // Convert + var x32Words = []; + for (var i = 0; i < x64WordsLength; i++) { + var x64Word = x64Words[i]; + x32Words.push(x64Word.high); + x32Words.push(x64Word.low); + } + + return X32WordArray.create(x32Words, this.sigBytes); + }, + + /** + * Creates a copy of this word array. + * + * @return {X64WordArray} The clone. + * + * @example + * + * var clone = x64WordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + + // Clone "words" array + var words = clone.words = this.words.slice(0); + + // Clone each X64Word object + var wordsLength = words.length; + for (var i = 0; i < wordsLength; i++) { + words[i] = words[i].clone(); + } + + return clone; + } + }); +}()); + +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +/** + * Cipher core components. + */ +CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; + + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), + + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, + + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, + + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; + + // Set initial values + this.reset(); + }, + + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-cipher logic + this._doReset(); + }, + + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); + + // Process available blocks + return this._process(); + }, + + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } + + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); + + return finalProcessedData; + }, + + keySize: 128/32, + + ivSize: 128/32, + + _ENC_XFORM_MODE: 1, + + _DEC_XFORM_MODE: 2, + + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } + + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, + + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); + + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); + + return finalProcessedBlocks; + }, + + blockSize: 1 + }); + + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; + + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, + + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, + + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); + + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); + + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function xorBlock(words, offset, blockSize) { + // Shortcut + var iv = this._iv; + + // Choose mixing block + if (iv) { + var block = iv; + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var block = this._prevBlock; + } + + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return CBC; + }()); + + + /** + * Infinite Garble Extension mode. + */ + var IGE = C_mode.IGE = (function () { + /** + * Abstract base IGE mode. + */ + var IGE = BlockCipherMode.extend(); + + /** + * IGE encryptor. + */ + IGE.Encryptor = IGE.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + if (this._ivp === undefined) { + this._ivp = this._iv.slice(0, blockSize); + this._iv2p = this._iv.slice(blockSize, blockSize + blockSize); + } + + + // Remember this block to use with next block + var nextIv2p = words.slice(offset, offset + blockSize); + + // XOR with previous ciphertext + xorBlock(words, this._ivp, offset, blockSize); + + // Block cipher + cipher.encryptBlock(words, offset); + + // XOR with previous plaintext + xorBlock(words, this._iv2p, offset, blockSize); + + this._ivp = words.slice(offset, offset + blockSize); + this._iv2p = nextIv2p; + } + }); + + /** + * IGE decryptor. + */ + IGE.Decryptor = IGE.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + if (this._ivp === undefined) { + this._ivp = this._iv.slice(0, blockSize); + this._iv2p = this._iv.slice(blockSize, 2 * blockSize); + } + + // Remember this block to use with next block + var nextIvp = words.slice(offset, offset + blockSize); + + // XOR with previous ciphertext + xorBlock(words, this._iv2p, offset, blockSize); + + // Block cipher + cipher.decryptBlock(words, offset); + + // XOR with previous plaintext + xorBlock(words, this._ivp, offset, blockSize); + + this._ivp = nextIvp; + this._iv2p = words.slice(offset, offset + blockSize); + } + }); + + function xorBlock(words, block, offset, blockSize) { + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return IGE; + }()); + + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; + + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; + + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); + + // Add padding + data.concat(padding); + }, + + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + var NoPadding = C_pad.NoPadding = { + pad: function () { + }, + + unpad: function () { + } + }; + + + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), + + reset: function () { + // Reset cipher + Cipher.reset.call(this); + + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; + + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + var modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + var modeCreator = mode.createDecryptor; + + // Keep at least one block in the buffer for unpadding + this._minBufferSize = 1; + } + this._mode = modeCreator.call(mode, this, iv && iv.words); + }, + + _doProcessBlock: function (words, offset) { + this._mode.processBlock(words, offset); + }, + + _doFinalize: function () { + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } + + return finalProcessedBlocks; + }, + + blockSize: 128/32 + }); + + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, + + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); + + /** + * Format namespace. + */ + var C_format = C.format = {}; + + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; + + // Format + if (salt) { + var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + var wordArray = ciphertext; + } + + return wordArray.toString(Base64); + }, + + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); + + // Shortcut + var ciphertextWords = ciphertext.words; + + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + var salt = WordArray.create(ciphertextWords.slice(2, 4)); + + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } + + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; + + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), + + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); + + // Shortcut + var cipherCfg = encryptor.cfg; + + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, + + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + + return plaintext; + }, + + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); + + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; + + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } + + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; + + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; + + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), + + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + + // Mix in derived params + ciphertext.mixIn(derivedParams); + + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + + return plaintext; + } + }); +}()); + + + + +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; + + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); + + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6 + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + var t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); + }, + + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + }, + + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; + + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; + + // Key schedule row counter + var ksRow = 4; + + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); +}()); + + + +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (function () { + function isPrime(n) { + var sqrtN = Math.sqrt(n); + for (var factor = 2; factor <= sqrtN; factor++) { + if (!(n % factor)) { + return false; + } + } + + return true; + } + + function getFractionalBits(n) { + return ((n - (n | 0)) * 0x100000000) | 0; + } + + var n = 2; + var nPrime = 0; + while (nPrime < 64) { + if (isPrime(n)) { + if (nPrime < 8) { + H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); + } + K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + + nPrime++; + } + + n++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + var f = H[5]; + var g = H[6]; + var h = H[7]; + + // Computation + for (var i = 0; i < 64; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var gamma0x = W[i - 15]; + var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3); + + var gamma1x = W[i - 2]; + var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; + } + + var ch = (e & f) ^ (~e & g); + var maj = (a & b) ^ (a & c) ^ (b & c); + + var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); + var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + + var t1 = h + sigma1 + ch + K[i] + W[i]; + var t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + H[5] = (H[5] + f) | 0; + H[6] = (H[6] + g) | 0; + H[7] = (H[7] + h) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); +}(Math)); diff --git a/src/lib/crypto/crypto.worker.js b/src/lib/crypto/crypto.worker.js new file mode 100644 index 00000000..a1c2ec39 --- /dev/null +++ b/src/lib/crypto/crypto.worker.js @@ -0,0 +1,59 @@ +//const ctx: Worker = self as any; +const ctx = self; + +import {pqPrimeFactorization, bytesModPow, sha1HashSync, + aesEncryptSync, aesDecryptSync, hash_pbkdf2, sha256HashSync, rsaEncrypt} from './crypto_utils'; + +import {gzipUncompress} from '../bin_utils'; + +ctx.onmessage = function(e) { + var taskID = e.data.taskID, + result = null; + + switch(e.data.task) { + case 'unzip': + result = gzipUncompress.apply(null, e.data.args); + break; + + case 'factorize': + result = pqPrimeFactorization.apply(null, e.data.args); + break; + + case 'mod-pow': + result = bytesModPow.apply(null, e.data.args); + break; + + case 'sha1-hash': + result = sha1HashSync.apply(null, e.data.args); + break; + + case 'sha256-hash': + result = sha256HashSync.apply(null, e.data.args); + break; + + case 'rsa-encrypt': + result = rsaEncrypt.apply(null, e.data.args); + break; + + case 'aes-encrypt': + result = aesEncryptSync.apply(null, e.data.args); + break; + + case 'aes-decrypt': + result = aesDecryptSync.apply(null, e.data.args); + break; + + case 'pbkdf2': + return hash_pbkdf2.apply(null, e.data.args).then(result => { + ctx.postMessage({taskID: taskID, result: result}); + }); + break; + + default: + throw new Error('Unknown task: ' + e.data.task); + } + + ctx.postMessage({taskID: taskID, result: result}); +} + +ctx.postMessage('ready'); diff --git a/src/lib/crypto/crypto_utils.ts b/src/lib/crypto/crypto_utils.ts new file mode 100644 index 00000000..92f5c354 --- /dev/null +++ b/src/lib/crypto/crypto_utils.ts @@ -0,0 +1,422 @@ +import sha1 from '@cryptography/sha1'; + +import {str2bigInt, bpe, equalsInt, greater, + copy_, eGCD_, add_, rightShift_, sub_, copyInt_, isZero, + // @ts-ignore + divide_, one, bigInt2str, powMod} from 'leemon'; + +// @ts-ignore +import {BigInteger, SecureRandom} from 'jsbn'; + +import CryptoJS from './crypto.js'; +import { addPadding, bytesToHex, bytesFromHex, nextRandomInt, bytesFromBigInt, dT, bytesFromWords } from '../bin_utils'; + +export function bytesFromLeemonBigInt(bigInt: BigInteger) { + var str = bigInt2str(bigInt, 16); + return bytesFromHex(str); +} + +export function bytesToWords(bytes: any) { + if(bytes instanceof ArrayBuffer) { + bytes = new Uint8Array(bytes); + } + var len = bytes.length; + var words: any = []; + var i; + for(i = 0; i < len; i++) { + words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8); + } + + return new CryptoJS.lib.WordArray.init(words, len); +} + +export function sha1HashSync(bytes: number[] | ArrayBuffer | Uint8Array) { + //console.trace(dT(), 'SHA-1 hash start', bytes); + + const hashBytes: number[] = []; + + let hash = sha1(String.fromCharCode.apply(null, + bytes instanceof Uint8Array ? [...bytes] : [...new Uint8Array(bytes)])); + for(let i = 0; i < hash.length; ++i) { + hashBytes.push(hash.charCodeAt(i)); + } + + //console.log(dT(), 'SHA-1 hash finish', hashBytes, bytesToHex(hashBytes)); + + return new Uint8Array(hashBytes); +} + +export function sha256HashSync(bytes: any) { + // console.log(dT(), 'SHA-2 hash start', bytes.byteLength || bytes.length) + var hashWords = CryptoJS.SHA256(bytesToWords(bytes)); + // console.log(dT(), 'SHA-2 hash finish') + + var hashBytes = bytesFromWords(hashWords); + + return hashBytes; +} + +export function aesEncryptSync(bytes: any, keyBytes: any, ivBytes: any, _mode = 'IGE') { + // console.log(dT(), 'AES encrypt start', len/*, bytesToHex(keyBytes), bytesToHex(ivBytes)*/) + // console.log('aes before padding bytes:', bytesToHex(bytes)); + bytes = addPadding(bytes); + // console.log('aes after padding bytes:', bytesToHex(bytes)); + + let mode = CryptoJS.mode[_mode]; + + let encryptedWords = CryptoJS.AES.encrypt(bytesToWords(bytes), bytesToWords(keyBytes), { + iv: bytesToWords(ivBytes), + padding: CryptoJS.pad.NoPadding, + mode//: CryptoJS.mode.IGE + }).ciphertext; + + let encryptedBytes = bytesFromWords(encryptedWords); + // console.log(dT(), 'AES encrypt finish') + + return encryptedBytes; +} + +export function aesDecryptSync(encryptedBytes: any, keyBytes: any, ivBytes: any, _mode = 'IGE') { + + let mode = CryptoJS.mode[_mode]; + // console.log(dT(), 'AES decrypt start', encryptedBytes.length) + var decryptedWords = CryptoJS.AES.decrypt({ciphertext: bytesToWords(encryptedBytes)}, bytesToWords(keyBytes), { + iv: bytesToWords(ivBytes), + padding: CryptoJS.pad.NoPadding, + mode//: CryptoJS.mode.IGE + }); + + var bytes = bytesFromWords(decryptedWords); + // console.log(dT(), 'AES decrypt finish') + + return bytes; +} + + +export function rsaEncrypt(publicKey: {modulus: string, exponent: string}, bytes: any): number[] { + console.log(dT(), 'RSA encrypt start', publicKey, bytes); + + bytes = addPadding(bytes, 255); + + /* var N = new BigInteger(publicKey.modulus, 16); + var E = new BigInteger(publicKey.exponent, 16); + var X = new BigInteger(bytes); + var encryptedBigInt = X.modPowInt(E, N), + encryptedBytes = bytesFromBigInt(encryptedBigInt, 256); */ + var N = str2bigInt(publicKey.modulus, 16); + var E = str2bigInt(publicKey.exponent, 16); + var X = str2bigInt(bytesToHex(bytes), 16); + + var encryptedBigInt = powMod(X, E, N); + var encryptedBytes = bytesFromHex(bigInt2str(encryptedBigInt, 16)); + + console.log(dT(), 'RSA encrypt finish'/* , encryptedBytes *//* , bigInt2str(encryptedBigInt, 16) */); + + return encryptedBytes; +} + +export async function hash_pbkdf2(/* hasher: 'string', */buffer: any, salt: any, iterations: number) { + let subtle = typeof(window) !== 'undefined' && 'crypto' in window ? window.crypto.subtle : self.crypto.subtle; + // @ts-ignore + let importKey = await subtle.importKey( + "raw", //only "raw" is allowed + buffer, //your password + { + name: "PBKDF2", + }, + false, //whether the key is extractable (i.e. can be used in exportKey) + ["deriveKey", "deriveBits"] //can be any combination of "deriveKey" and "deriveBits" + ); + + /* let deriveKey = */await subtle.deriveKey( + { + "name": "PBKDF2", + salt: salt, + iterations: iterations, + hash: {name: "SHA-512"}, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512" + }, + importKey, //your key from generateKey or importKey + { //the key type you want to create based on the derived bits + name: "AES-CTR", //can be any AES algorithm ("AES-CTR", "AES-CBC", "AES-CMAC", "AES-GCM", "AES-CFB", "AES-KW", "ECDH", "DH", or "HMAC") + //the generateKey parameters for that type of algorithm + length: 256, //can be 128, 192, or 256 + }, + false, //whether the derived key is extractable (i.e. can be used in exportKey) + ["encrypt", "decrypt"] //limited to the options in that algorithm's importKey + ); + + let bits = subtle.deriveBits({ + "name": "PBKDF2", + salt: salt, + iterations: iterations, + hash: {name: "SHA-512"}, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512" + }, + importKey, //your key from generateKey or importKey + 512 //the number of bits you want to derive + ); + + return bits; +} + +export function pqPrimeFactorization(pqBytes: any) { + var what = new BigInteger(pqBytes); + var result: any = false; + + console.log(dT(), 'PQ start', pqBytes, what.toString(16), what.bitLength()) + + try { + console.time('PQ leemon'); + result = pqPrimeLeemon(str2bigInt(what.toString(16), 16, Math.ceil(64 / bpe) + 1)); + console.timeEnd('PQ leemon'); + } catch (e) { + console.error('Pq leemon Exception', e); + } + + /* if(result === false && what.bitLength() <= 64) { + console.time('PQ long'); + try { + result = pqPrimeLong(goog.math.Long.fromString(what.toString(16), 16)); + } catch (e) { + console.error('Pq long Exception', e); + } + console.timeEnd('PQ long'); + } + // console.log(result) + + if(result === false) { + console.time('pq BigInt'); + result = pqPrimeBigInteger(what); + console.timeEnd('pq BigInt'); + } */ + + console.log(dT(), 'PQ finish'); + + return result; +} + +/* export function pqPrimeBigInteger(what: any) { + var it = 0, + g; + for(var i = 0; i < 3; i++) { + var q = (nextRandomInt(128) & 15) + 17; + var x = bigint(nextRandomInt(1000000000) + 1); + var y = x.clone(); + var lim = 1 << (i + 18); + + for(var j = 1; j < lim; j++) { + ++it; + var a = x.clone(); + var b = x.clone(); + var c = bigint(q); + + while(!b.equals(BigInteger.ZERO)) { + if(!b.and(BigInteger.ONE).equals(BigInteger.ZERO)) { + c = c.add(a); + if(c.compareTo(what) > 0) { + c = c.subtract(what); + } + } + a = a.add(a); + if(a.compareTo(what) > 0) { + a = a.subtract(what); + } + b = b.shiftRight(1); + } + + x = c.clone(); + var z = x.compareTo(y) < 0 ? y.subtract(x) : x.subtract(y); + g = z.gcd(what); + if(!g.equals(BigInteger.ONE)) { + break; + } + if((j & (j - 1)) == 0) { + y = x.clone(); + } + } + if(g.compareTo(BigInteger.ONE) > 0) { + break; + } + } + + var f = what.divide(g), P, Q; + + if(g.compareTo(f) > 0) { + P = f; + Q = g; + } else { + P = g; + Q = f; + } + + return [bytesFromBigInt(P), bytesFromBigInt(Q), it]; +} */ + +/* export function gcdLong(a: any, b: any) { + while(a.notEquals(goog.math.Long.ZERO) && b.notEquals(goog.math.Long.ZERO)) { + while(b.and(goog.math.Long.ONE).equals(goog.math.Long.ZERO)) { + b = b.shiftRight(1); + } + + while(a.and(goog.math.Long.ONE).equals(goog.math.Long.ZERO)) { + a = a.shiftRight(1); + } + + if(a.compare(b) > 0) { + a = a.subtract(b); + } else { + b = b.subtract(a); + } + } + + return b.equals(goog.math.Long.ZERO) ? a : b; +} */ + +/* export function pqPrimeLong(what: any) { + var it = 0, + g; + for (var i = 0; i < 3; i++) { + var q = goog.math.Long.fromInt((nextRandomInt(128) & 15) + 17); + var x = goog.math.Long.fromInt(nextRandomInt(1000000000) + 1); + var y = x; + var lim = 1 << (i + 18); + + for(var j = 1; j < lim; j++) { + ++it; + var a = x; + var b = x; + var c = q; + + while(b.notEquals(goog.math.Long.ZERO)) { + if(b.and(goog.math.Long.ONE).notEquals(goog.math.Long.ZERO)) { + c = c.add(a); + if (c.compare(what) > 0) { + c = c.subtract(what); + } + } + a = a.add(a); + if(a.compare(what) > 0) { + a = a.subtract(what); + } + b = b.shiftRight(1); + } + + x = c; + var z = x.compare(y) < 0 ? y.subtract(x) : x.subtract(y); + g = gcdLong(z, what); + if(g.notEquals(goog.math.Long.ONE)) { + break; + } + if((j & (j - 1)) == 0) { + y = x; + } + } + if(g.compare(goog.math.Long.ONE) > 0) { + break; + } + } + + var f = what.div(g), P, Q; + + if(g.compare(f) > 0) { + P = f; + Q = g; + } else { + P = g; + Q = f; + } + + return [bytesFromHex(P.toString(16)), bytesFromHex(Q.toString(16)), it]; +} */ + +export function pqPrimeLeemon(what: any) { + var minBits = 64; + var minLen = Math.ceil(minBits / bpe) + 1; + var it = 0; + var i, q; + var j, lim; + var P; + var Q; + var a = new Array(minLen); + var b = new Array(minLen); + var c = new Array(minLen); + var g = new Array(minLen); + var z = new Array(minLen); + var x = new Array(minLen); + var y = new Array(minLen); + + for(i = 0; i < 3; i++) { + q = (nextRandomInt(128) & 15) + 17; + copyInt_(x, nextRandomInt(1000000000) + 1); + copy_(y, x); + lim = 1 << (i + 18); + + for (j = 1; j < lim; j++) { + ++it; + copy_(a, x); + copy_(b, x); + copyInt_(c, q); + + while(!isZero(b)) { + if(b[0] & 1) { + add_(c, a); + if(greater(c, what)) { + sub_(c, what); + } + } + add_(a, a); + if(greater(a, what)) { + sub_(a, what); + } + rightShift_(b, 1); + } + + copy_(x, c); + if(greater(x, y)) { + copy_(z, x); + sub_(z, y); + } else { + copy_(z, y); + sub_(z, x); + } + eGCD_(z, what, g, a, b); + if(!equalsInt(g, 1)) { + break; + } + if((j & (j - 1)) == 0) { + copy_(y, x); + } + } + if(greater(g, one)) { + break; + } + } + + divide_(what, g, x, y); + + if(greater(g, x)) { + P = x; + Q = g; + } else { + P = g; + Q = x; + } + + // console.log(dT(), 'done', bigInt2str(what, 10), bigInt2str(P, 10), bigInt2str(Q, 10)) + + return [bytesFromLeemonBigInt(P), bytesFromLeemonBigInt(Q), it]; +} + +export function bytesModPow(x: any, y: any, m: any) { + try { + var xBigInt = str2bigInt(bytesToHex(x), 16); + var yBigInt = str2bigInt(bytesToHex(y), 16); + var mBigInt = str2bigInt(bytesToHex(m), 16); + var resBigInt = powMod(xBigInt, yBigInt, mBigInt); + + return bytesFromHex(bigInt2str(resBigInt, 16)); + } catch (e) { + console.error('mod pow error', e); + } + + return bytesFromBigInt(new BigInteger(x).modPow(new BigInteger(y), new BigInteger(m)), 256); +} diff --git a/src/lib/crypto/cryptoworker.ts b/src/lib/crypto/cryptoworker.ts new file mode 100644 index 00000000..84222940 --- /dev/null +++ b/src/lib/crypto/cryptoworker.ts @@ -0,0 +1,206 @@ +import {convertToArrayBuffer, convertToByteArray, dT} from '../bin_utils'; + +// @ts-ignore +//import Worker from './crypto.worker.js'; + +type Task = { + taskID: number, + task: string, + args: any[] +}; + +class CryptoWorker { + private webWorker: Worker | boolean = false; + private taskID = 0; + private awaiting: { + [id: number]: { + resolve: any, + reject: any, + taskName: string + } + } = {} as any; + private pending: Array = []; + private debug = false; + + // @ts-ignore + // private webCrypto = Config.Modes.webcrypto && window.crypto && (window.crypto.subtle || window.crypto.webkitSubtle); /* || window.msCrypto && window.msCrypto.subtle*/ + // private useSha1Crypto = this.webCrypto && this.webCrypto.digest !== undefined; + // private useSha256Crypto = this.webCrypto && this.webCrypto.digest !== undefined; + + constructor() { + console.log(dT(), 'CW constructor'); + + if(window.Worker/* && 1 == 2 */) { + import('./crypto.worker.js').then((CryptoWebWorker: any) => { + console.log(CryptoWebWorker); + var tmpWorker = new CryptoWebWorker.default(); + //var tmpWorker = new Worker(); + tmpWorker.onmessage = (e: any) => { + if(!this.webWorker) { + this.webWorker = tmpWorker; + console.info(dT(), 'CW set webWorker'); + this.releasePending(); + } else { + this.finalizeTask(e.data.taskID, e.data.result); + } + }; + + tmpWorker.onerror = (error: any) => { + console.error('CW error', error/* , error.stack */); + this.webWorker = false; + }; + }); + } + } + + private finalizeTask(taskID: number, result: any) { + let deferred = this.awaiting[taskID]; + if(deferred !== undefined) { + this.debug && console.log(dT(), 'CW done', deferred.taskName, result); + deferred.resolve(result); + delete this.awaiting[taskID]; + } + } + + public performTaskWorker(task: string, ...args: any[]) { + this.debug && console.log(dT(), 'CW start', task, args); + + return new Promise((resolve, reject) => { + this.awaiting[this.taskID] = {resolve, reject, taskName: task}; + + let params = { + task, + taskID: this.taskID, + args + }; + + //(this.webWorker as Worker).postMessage(params); + this.pending.push(params); + this.releasePending(); + + this.taskID++; + }); + } + + private releasePending() { + if(this.webWorker) { + this.pending.forEach(pending => { + (this.webWorker as Worker).postMessage(pending); + }); + + this.pending.length = 0; + } + } + + public sha1Hash(bytes: number[] | ArrayBuffer | Uint8Array): Promise { + //if(this.webWorker) { + return this.performTaskWorker('sha1-hash', bytes); + //} + + /* if(this.useSha1Crypto) { + console.error('usesha1crypto'); + // We don't use buffer since typedArray.subarray(...).buffer gives the whole buffer and not sliced one. webCrypto.digest supports typed array + return new Promise((resolve, reject) => { + var bytesTyped = Array.isArray(bytes) ? convertToUint8Array(bytes) : bytes; + // console.log(dT(), 'Native sha1 start') + + this.webCrypto.digest({name: 'SHA-1'}, bytesTyped).then((digest: ArrayBuffer) => { + // console.log(dT(), 'Native sha1 done') + resolve(digest); + }, (e: ErrorEvent) => { + console.error('Crypto digest error', e); + this.useSha1Crypto = false; + resolve(sha1HashSync(bytes)); + }) + }); + } + + return Promise.resolve(sha1HashSync(bytes)); */ + } + + public sha256Hash(bytes: any) { + //if(this.webWorker) { + return this.performTaskWorker('sha256-hash', bytes); + //} + + /* if(this.useSha256Crypto) { + return new Promise((resolve, reject) => { + var bytesTyped = Array.isArray(bytes) ? convertToUint8Array(bytes) : bytes; + // console.log(dT(), 'Native sha1 start') + this.webCrypto.digest({name: 'SHA-256'}, bytesTyped).then((digest: ArrayBuffer) => { + // console.log(dT(), 'Native sha1 done') + resolve(digest); + }, (e: ErrorEvent) => { + console.error('Crypto digest error', e); + this.useSha256Crypto = false; + resolve(sha256HashSync(bytes)); + }) + }); + } + + return Promise.resolve(sha256HashSync(bytes)); */ + } + + public pbkdf2(buffer: Uint8Array, salt: Uint8Array, iterations: number) { + //if(this.webWorker) { + return this.performTaskWorker('pbkdf2', buffer, salt, iterations); + //} + + //return hash_pbkdf2(buffer, salt, iterations); + } + + public aesEncrypt(bytes: any, keyBytes: any, ivBytes: any) { + //if(this.webWorker) { + return this.performTaskWorker('aes-encrypt', convertToArrayBuffer(bytes), + convertToArrayBuffer(keyBytes), convertToArrayBuffer(ivBytes)); + //} + + //return Promise.resolve(convertToArrayBuffer(aesEncryptSync(bytes, keyBytes, ivBytes))); + } + + public aesDecrypt(encryptedBytes: any, keyBytes: any, ivBytes: any): Promise { + //if(this.webWorker) { + return this.performTaskWorker('aes-decrypt', + encryptedBytes, keyBytes, ivBytes) + .then(bytes => convertToArrayBuffer(bytes)); + //} + + //return Promise.resolve(convertToArrayBuffer(aesDecryptSync(encryptedBytes, keyBytes, ivBytes))); + } + + public rsaEncrypt(publicKey: {modulus: string, exponent: string}, bytes: any): Promise { + return this.performTaskWorker('rsa-encrypt', publicKey, bytes); + } + + public factorize(bytes: any) { + bytes = convertToByteArray(bytes); + + //if(this.webWorker) { + return this.performTaskWorker<[number[], number[], number]>('factorize', bytes); + //} + + //return Promise.resolve(pqPrimeFactorization(bytes)); + } + + public modPow(x: any, y: any, m: any) { + //if(this.webWorker) { + return this.performTaskWorker('mod-pow', x, y, m); + //} + + //return Promise.resolve(bytesModPow(x, y, m)); + } + + public gzipUncompress(bytes: ArrayBuffer, toString?: boolean) { + //if(this.webWorker) { + return this.performTaskWorker('unzip', bytes, toString); + //} + + //return Promise.resolve(gzipUncompress(bytes, toString) as T); + } +} + +const cryptoWorker = new CryptoWorker(); + +(window as any).CryptoWorker = cryptoWorker; + +export default cryptoWorker; diff --git a/src/lib/filemanager.ts b/src/lib/filemanager.ts new file mode 100644 index 00000000..456fdc9b --- /dev/null +++ b/src/lib/filemanager.ts @@ -0,0 +1,282 @@ +import {bytesToArrayBuffer, blobSafeMimeType, blobConstruct, bytesToBase64} from './bin_utils'; + +class FileManager { + /* $window.URL = $window.URL || $window.webkitURL + $window.BlobBuilder = $window.BlobBuilder || $window.WebKitBlobBuilder || $window.MozBlobBuilder */ + + public isSafari = 'safari' in window; + public safariVersion = parseFloat(this.isSafari && (navigator.userAgent.match(/Version\/(\d+\.\d+).* Safari/) || [])[1]); + public safariWithDownload = this.isSafari && this.safariVersion >= 11.0; + public buggyUnknownBlob = this.isSafari && !this.safariWithDownload; + + public blobSupported = true; + + constructor() { + try { + blobConstruct([], ''); + } catch(e) { + this.blobSupported = false; + } + } + + public isAvailable() { + return this.blobSupported; + } + + public copy(fromFileEntry: any, toFileEntry: any) { + return this.getFileWriter(toFileEntry).then((fileWriter) => { + return this.write(fileWriter, fromFileEntry).then(() => { + return fileWriter; + }, (error: any) => { + try { + // @ts-ignore + fileWriter.truncate(0); + } catch (e) {} + + return Promise.reject(error); + }); + }); + } + + public write(fileWriter: any, bytes: any) { + return new Promise((resolve, reject) => { + fileWriter.onwriteend = function(e: any) { + resolve(); + }; + fileWriter.onerror = function(e: any) { + reject(e); + }; + + if(bytes.file) { + bytes.file((file: any) => { + fileWriter.write(file); + }, reject); + } else if(bytes instanceof Blob) { // is file bytes + fileWriter.write(bytes); + } else { + try { + var blob = blobConstruct([bytesToArrayBuffer(bytes)]); + fileWriter.write(blob); + } catch(e) { + reject(e); + } + } + }); + } + + public chooseSaveFile(fileName: string, ext: string, mimeType: string) { + return Promise.reject(); + /* if(!window.chrome || !chrome.fileSystem || !chrome.fileSystem.chooseEntry) { + //return qSync.reject() + return Promise.reject(); + } + var deferred = $q.defer() + + chrome.fileSystem.chooseEntry({ + type: 'saveFile', + suggestedName: fileName, + accepts: [{ + mimeTypes: [mimeType], + extensions: [ext] + }] + }, function (writableFileEntry) { + deferred.resolve(writableFileEntry) + }) + + return deferred.promise */ + } + + public getFileWriter(fileEntry: any) { + return new Promise((resolve, reject) => { + fileEntry.createWriter(resolve, reject); + }); + } + + public getFakeFileWriter(mimeType: string, saveFileCallback: any) { + var blobParts: Array = []; + var fakeFileWriter: any = { + write: (blob: Blob) => { + if(!this.blobSupported) { + if(fakeFileWriter.onerror) { + fakeFileWriter.onerror(new Error('Blob not supported by browser')); + } + + return false; + } + + blobParts.push(blob); + setTimeout(() => { + if(fakeFileWriter.onwriteend) { + fakeFileWriter.onwriteend(); + } + }, 0); + }, + truncate: () => { + blobParts = []; + }, + finalize: () => { + var blob = blobConstruct(blobParts, mimeType); + if(saveFileCallback) { + saveFileCallback(blob); + } + + return blob; + } + }; + + return fakeFileWriter; + } + + public getUrl(fileData: any, mimeType: string) { + var safeMimeType = blobSafeMimeType(mimeType); + // console.log(dT(), 'get url', fileData, mimeType, fileData.toURL !== undefined, fileData instanceof Blob) + if(fileData.toURL !== undefined) { + return fileData.toURL(safeMimeType); + } + if(fileData instanceof Blob) { + return URL.createObjectURL(fileData); + } + return 'data:' + safeMimeType + ';base64,' + bytesToBase64(fileData); + } + + public getByteArray(fileData: any) { + if(fileData instanceof Blob) { + return new Promise((resolve, reject) => { + try { + var reader = new FileReader(); + reader.onloadend = (e) => { + // @ts-ignore + resolve(new Uint8Array(e.target.result)); + }; + reader.onerror = (e) => { + reject(e); + }; + reader.readAsArrayBuffer(fileData); + } catch(e) { + reject(e); + } + }); + } else if(fileData.file) { + return new Promise((resolve, reject) => { + fileData.file((blob: any) => { + this.getByteArray(blob).then(resolve, reject); + }, reject); + }); + } + + return Promise.resolve(fileData); + //return $q.when(fileData); + } + + public getDataUrl(blob: any) { + return new Promise((resolve, reject) => { + try { + var reader = new FileReader(); + reader.onloadend = () => { + resolve(reader.result); + }; + reader.readAsDataURL(blob); + } catch (e) { + reject(e); + } + }); + } + + public getFileCorrectUrl(blob: any, mimeType: string) { + if(this.buggyUnknownBlob && blob instanceof Blob) { + // @ts-ignore + mimeType = blob.type || blob.mimeType || mimeType || '' + if(!mimeType.match(/image\/(jpeg|gif|png|bmp)|video\/quicktime/)) { + return this.getDataUrl(blob); + } + } + + return Promise.resolve(this.getUrl(blob, mimeType)); + } + + // downloadFile + public download(blob: any, mimeType: string, fileName: string) { + if(window.navigator && navigator.msSaveBlob !== undefined) { + window.navigator.msSaveBlob(blob, fileName); + return false; + } + + if(window.navigator && 'getDeviceStorage' in navigator) { + var storageName = 'sdcard'; + var subdir = 'telegram/'; + switch(mimeType.split('/')[0]) { + case 'video': + storageName = 'videos'; + break; + case 'audio': + storageName = 'music'; + break; + case 'image': + storageName = 'pictures'; + break; + } + + // @ts-ignore + var deviceStorage = navigator.getDeviceStorage(storageName); + var request = deviceStorage.addNamed(blob, subdir + fileName); + + request.onsuccess = function () { + console.log('Device storage save result', this.result); + }; + request.onerror = () => {}; + return; + } + + var popup: Window; + if(this.isSafari && !this.safariWithDownload) { + popup = window.open(); + } + + this.getFileCorrectUrl(blob, mimeType).then((url) => { + if(popup) { + try { + // @ts-ignore + popup.location.href = url; + return; + } catch (e) {} + } + + var anchor = document.createElementNS('http://www.w3.org/1999/xhtml', 'a') as HTMLAnchorElement; + anchor.href = url as string; + if(!this.safariWithDownload) { + anchor.target = '_blank'; + } + anchor.download = fileName; + if(anchor.dataset) { + anchor.dataset.downloadurl = ['video/quicktime', fileName, url].join(':'); + } + + anchor.style.position = 'absolute'; + anchor.style.top = '1px'; + anchor.style.left = '1px'; + + document.body.append(anchor); + + try { + var clickEvent = document.createEvent('MouseEvents'); + clickEvent.initMouseEvent( + 'click', true, false, window, 0, 0, 0, 0, 0 + , false, false, false, false, 0, null + ) + anchor.dispatchEvent(clickEvent); + } catch (e) { + console.error('Download click error', e); + try { + anchor.click(); + } catch (e) { + window.open(url as string, '_blank'); + } + } + setTimeout(() => { + anchor.remove(); + }, 100); + }) + } +} + +export default new FileManager(); diff --git a/src/lib/idb.ts b/src/lib/idb.ts new file mode 100644 index 00000000..43f87d26 --- /dev/null +++ b/src/lib/idb.ts @@ -0,0 +1,270 @@ +import {blobConstruct, bytesToBase64, blobSafeMimeType, dataUrlToBlob} from './bin_utils'; +import FileManager from './filemanager'; + +class IdbFileStorage { + public dbName = 'cachedFiles'; + public dbStoreName = 'files'; + public dbVersion = 2; + public openDbPromise: Promise; + public storageIsAvailable: boolean; + public storeBlobsAvailable: boolean; + public name = 'IndexedDB'; + + constructor() { + // @ts-ignore + //window.indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB; + // @ts-ignore + window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.OIDBTransaction || window.msIDBTransaction; + + this.storageIsAvailable = window.indexedDB !== undefined && window.IDBTransaction !== undefined; + + // IndexedDB is REALLY slow without blob support in Safari 8, no point in it + if(this.storageIsAvailable && + navigator.userAgent.indexOf('Safari') != -1 && + navigator.userAgent.indexOf('Chrome') == -1 && + navigator.userAgent.match(/Version\/[678]/) + ) { + this.storageIsAvailable = false; + } + + this.storeBlobsAvailable = this.storageIsAvailable || false; + this.openDatabase(); + } + + public isAvailable() { + return this.storageIsAvailable; + } + + public openDatabase(): Promise { + if(this.openDbPromise) { + return this.openDbPromise; + } + + var createObjectStore: any; + try { + var request = indexedDB.open(this.dbName, this.dbVersion); + + createObjectStore = (db: any) => { + db.createObjectStore(this.dbStoreName); + }; + + if(!request) { + throw new Error(); + } + } catch(error) { + console.error('error opening db', error.message) + this.storageIsAvailable = false; + return Promise.reject(error); + } + + var finished = false; + setTimeout(() => { + if(!finished) { + request.onerror({type: 'IDB_CREATE_TIMEOUT'} as Event); + } + }, 3000); + + return this.openDbPromise = new Promise((resolve, reject) => { + request.onsuccess = (event) => { + finished = true; + var db = request.result; + + db.onerror = (error) => { + this.storageIsAvailable = false; + console.error('Error creating/accessing IndexedDB database', error); + reject(error); + } + + resolve(db); + }; + + request.onerror = (event) => { + finished = true; + this.storageIsAvailable = false; + console.error('Error creating/accessing IndexedDB database', event); + reject(event); + }; + + request.onupgradeneeded = (event) => { + finished = true; + console.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion); + + // @ts-ignore + var db = event.target.result; + if(event.oldVersion == 1) { + db.deleteObjectStore(this.dbStoreName); + } + + createObjectStore(db); + }; + }); + } + + public deleteFile(fileName: string): Promise { + return this.openDatabase().then((db) => { + try { + // @ts-ignore + var objectStore = db.transaction([this.dbStoreName], IDBTransaction.READ_WRITE || 'readwrite') + .objectStore(this.dbStoreName); + + console.log('Delete file: `' + fileName + '`'); + var request = objectStore.delete(fileName); + } catch(error) { + return Promise.reject(error); + } + + return new Promise((resolve, reject) => { + request.onsuccess = function(event) { + console.log('deleted file', event); + resolve(); + }; + + request.onerror = function(error) { + reject(error); + }; + }); + }); + } + + public saveFile(fileName: string, blob: any): Promise { + return this.openDatabase().then((db) => { + if(!this.storeBlobsAvailable) { + return this.saveFileBase64(db, fileName, blob); + } + + if(!(blob instanceof Blob)) { + blob = blobConstruct([blob]); + } + + try { + // @ts-ignore + var objectStore = db.transaction([this.dbStoreName], IDBTransaction.READ_WRITE || 'readwrite') + .objectStore(this.dbStoreName); + var request = objectStore.put(blob, fileName); + } catch(error) { + if(this.storeBlobsAvailable) { + this.storeBlobsAvailable = false; + return this.saveFileBase64(db, fileName, blob); + } + + this.storageIsAvailable = false; + return Promise.reject(error); + } + + return new Promise((resolve, reject) => { + request.onsuccess = function(event) { + resolve(blob); + }; + + request.onerror = function(error) { + reject(error); + }; + }); + }); + } + + public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise { + if(this.getBlobSize(blob) > 10 * 1024 * 1024) { + return Promise.reject(); + } + + if(!(blob instanceof Blob)) { + var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg'); + var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob); + return this.storagePutB64String(db, fileName, address).then(() => { + return blob; + }); + } + + try { + var reader = new FileReader(); + } catch (e) { + this.storageIsAvailable = false; + return Promise.reject(); + } + + let promise = new Promise((resolve, reject) => { + reader.onloadend = () => { + this.storagePutB64String(db, fileName, reader.result as string).then(() => { + resolve(blob); + }, reject); + } + + reader.onerror = reject; + }); + + + try { + reader.readAsDataURL(blob); + } catch (e) { + this.storageIsAvailable = false; + return Promise.reject(); + } + + return promise; + } + + public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) { + try { + // @ts-ignore + var objectStore = db.transaction([this.dbStoreName], IDBTransaction.READ_WRITE || 'readwrite') + .objectStore(this.dbStoreName); + var request = objectStore.put(b64string, fileName); + } catch(error) { + this.storageIsAvailable = false; + return Promise.reject(error); + } + + return new Promise((resolve, reject) => { + request.onsuccess = function(event) { + resolve(); + }; + + request.onerror = reject; + }); + } + + public getBlobSize(blob: any) { + return blob.size || blob.byteLength || blob.length; + } + + public getFile(fileName: string, size?: any): Promise { + return this.openDatabase().then((db) => { + // @ts-ignore + var objectStore = db.transaction([this.dbStoreName], IDBTransaction.READ || 'readonly') + .objectStore(this.dbStoreName); + var request = objectStore.get(fileName); + + return new Promise((resolve, reject) => { + request.onsuccess = function(event) { + // @ts-ignore + var result = event.target.result; + if(result === undefined) { + reject(); + } else if(typeof result === 'string' && + result.substr(0, 5) === 'data:') { + resolve(dataUrlToBlob(result)); + } else { + resolve(result); + } + } + + request.onerror = reject; + }); + }); + } + + public getFileWriter(fileName: string, mimeType: string) { + var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob: any) => { + this.saveFile(fileName, blob); + }); + + return Promise.resolve(fakeWriter); + } +} + +const idbFileStorage = new IdbFileStorage(); + +(window as any).IdbFileStorage = idbFileStorage; + +export default idbFileStorage; diff --git a/src/lib/lottieLoader.ts b/src/lib/lottieLoader.ts new file mode 100644 index 00000000..8971cdc6 --- /dev/null +++ b/src/lib/lottieLoader.ts @@ -0,0 +1,112 @@ +import LottiePlayer, { AnimationConfigWithPath, AnimationConfigWithData, AnimationItem } from "lottie-web"; +import { isElementInViewport, isInDOM } from "./utils"; + +class LottieLoader { + private lottie: /* any */ typeof LottiePlayer = null; + private animations: { + [group: string]: { + animation: AnimationItem, + container: HTMLDivElement, + paused: boolean, + autoplay: boolean + }[] + } = {}; + private debug = false; + + public checkAnimations(blurred?: boolean, group?: string) { + let groups = group ? [group] : Object.keys(this.animations); + + if(group && !this.animations[group]) { + console.warn('no animation group:', group); + this.animations[group] = []; + //return; + } + + for(let group of groups) { + let animations = this.animations[group]; + + let length = animations.length; + for(let i = length - 1; i >= 0; --i) { + let {animation, container, paused, autoplay} = animations[i]; + + if(!isInDOM(container)) { + this.debug && console.log('destroy animation'); + animation.destroy(); + animations.splice(i, 1); + continue; + } + + if(!autoplay) continue; + + if(!isElementInViewport(container) || blurred) { + if(!paused) { + this.debug && console.log('pause animation', isElementInViewport(container), container); + animation.pause(); + animations[i].paused = true; + } + } else if(paused) { + this.debug && console.log('play animation', container); + animation.play(); + animations[i].paused = false; + } + } + } + } + + public async loadAnimation(params: /* any */AnimationConfigWithPath | AnimationConfigWithData, group = '') { + /* if(!this.lottie) { + this.lottie = (await import( + 'lottie-web')).default; + this.lottie.setQuality('low'); + } */ + + //params.autoplay = false; + //params.renderer = 'canvas'; + params.rendererSettings = { + //context: canvasContext, // the canvas context + //preserveAspectRatio: 'xMinYMin slice', // Supports the same options as the svg element's preserveAspectRatio property + clearCanvas: true, + progressiveLoad: true, // Boolean, only svg renderer, loads dom elements when needed. Might speed up initialization for large number of elements. + hideOnTransparent: true, //Boolean, only svg renderer, hides elements when opacity reaches 0 (defaults to true) + }; + + if(!this.lottie) { + this.lottie = LottiePlayer; + //this.lottie.setQuality('low'); + this.lottie.setQuality(10); + } + + let animation = this.lottie.loadAnimation(params); + if(!this.animations[group]) this.animations[group] = []; + this.animations[group].push({ + animation, + container: params.container as HTMLDivElement, + paused: !params.autoplay, + autoplay: params.autoplay + }); + + if(params.autoplay) { + this.checkAnimations(); + } + + return animation; + } + + public getAnimation(el: HTMLElement, group = '') { + let groups = group ? [group] : Object.keys(this.animations); + for(let group of groups) { + let animations = this.animations[group]; + + let animation = animations.find(a => a.container === el); + if(animation) return animation.animation; + } + + return null; + } +} + +const lottieLoader = new LottieLoader(); + +(window as any).LottieLoader = lottieLoader; + +export default lottieLoader; diff --git a/src/lib/mtproto/apiFileManager.ts b/src/lib/mtproto/apiFileManager.ts new file mode 100644 index 00000000..eabd958d --- /dev/null +++ b/src/lib/mtproto/apiFileManager.ts @@ -0,0 +1,600 @@ +import { nextRandomInt } from "../bin_utils"; + +import IdbFileStorage from "../idb"; +import FileManager from "../filemanager"; +import apiManager from "./apiManager"; +import { logger } from "../polyfill"; + +export interface CancellablePromise extends Promise { + resolve?: (...args: any[]) => void, + reject?: (...args: any[]) => void, + cancel?: () => void, + notify?: (...args: any[]) => void +} + +export class ApiFileManager { + public cachedFs = false; + public cachedFsPromise = false; + public cachedSavePromises: { + [fileName: string]: Promise + } = {}; + public cachedDownloadPromises: { + [fileName: string]: any + } = {}; + public cachedDownloads: { + [fileName: string]: any + } = {}; + + public downloadPulls: { + [x: string]: Array<{ + cb: () => Promise, + deferred: { + resolve: (...args: any[]) => void, + reject: (...args: any[]) => void + }, + activeDelta?: number + }> + } = {}; + public downloadActives: any = {}; + + public index = 0; + + private log: ReturnType = logger('AFM'); + + public downloadRequest(dcID: string | number, cb: () => Promise, activeDelta?: number) { + if(this.downloadPulls[dcID] === undefined) { + this.downloadPulls[dcID] = []; + this.downloadActives[dcID] = 0; + } + + var downloadPull = this.downloadPulls[dcID]; + + let promise = new Promise((resolve, reject) => { + // WARNING deferred! + downloadPull.push({cb: cb, deferred: {resolve, reject}, activeDelta: activeDelta}); + }); + + setTimeout(() => { + this.downloadCheck(dcID); + }, 0); + + return promise; + } + + public downloadCheck(dcID: string | number) { + var downloadPull = this.downloadPulls[dcID]; + var downloadLimit = dcID == 'upload' ? 11 : 5; + + if(this.downloadActives[dcID] >= downloadLimit || !downloadPull || !downloadPull.length) { + return false; + } + + var data = downloadPull.shift(); + var activeDelta = data.activeDelta || 1; + + this.downloadActives[dcID] += activeDelta; + + this.index++; + + data.cb() + .then((result: any) => { + this.downloadActives[dcID] -= activeDelta; + this.downloadCheck(dcID); + + data.deferred.resolve(result); + }, (error: any) => { + this.log.error('downloadCheck error:', error); + + this.downloadActives[dcID] -= activeDelta; + this.downloadCheck(dcID); + + data.deferred.reject(error); + }); + } + + public getFileName(location: any) { + switch(location._) { + case 'inputDocumentFileLocation': + var fileName = (location.file_name as string || '').split('.'); + var ext: string = fileName[fileName.length - 1] || ''; + + if(location.stickerType == 1 /* && !WebpManager.isWebpSupported() */) { // warning + ext += 'webp'; /* 'png'; */ + } else if(location.stickerType == 2) { + ext += 'tgs'; + } + + var versionPart = location.version ? ('v' + location.version) : ''; + return (fileName[0] ? fileName[0] + '_' : '') + location.id + versionPart + (ext ? '.' + ext : ext); + + default: + if(!location.volume_id && !location.file_reference) { + this.log.trace('Empty location', location); + } + + var ext: string = 'jpg'; + if(location.stickerType == 1) { + ext = 'webp'/* WebpManager.isWebpSupported() ? 'webp' : 'png'*/; + } else if(location.stickerType == 2) { + ext += 'tgs'; + } + + if(location.volume_id) { + return location.volume_id + '_' + location.local_id /* + '_' + location.secret */ + '.' + ext; + } else { + return location.id + '_' + location.access_hash + '.' + ext; + } + } + } + + public getTempFileName(file: any) { + var size = file.size || -1; + var random = nextRandomInt(0xFFFFFFFF); + return '_temp' + random + '_' + size; + } + + public getCachedFile(location: any) { + if(!location) { + return false; + } + var fileName = this.getFileName(location); + + return this.cachedDownloads[fileName] || false; + } + + public getFileStorage(): typeof IdbFileStorage { + if(!Config.Modes.memory_only) { + /* if(TmpfsFileStorage.isAvailable()) { + return TmpfsFileStorage; + } */ + + if(IdbFileStorage.isAvailable()) { + return IdbFileStorage; + } + } + + return IdbFileStorage/* MemoryFileStorage */; + } + + public saveSmallFile(location: any, bytes: Uint8Array) { + var fileName = this.getFileName(location); + + if(!this.cachedSavePromises[fileName]) { + this.cachedSavePromises[fileName] = this.getFileStorage().saveFile(fileName, bytes).then((blob: any) => { + return this.cachedDownloads[fileName] = blob; + }, (error: any) => { + delete this.cachedSavePromises[fileName]; + }); + } + return this.cachedSavePromises[fileName]; + } + + public downloadSmallFile(location: any, options: { + mimeType?: string, + dcID?: number, + } = {}): Promise { + if(!FileManager.isAvailable()) { + return Promise.reject({type: 'BROWSER_BLOB_NOT_SUPPORTED'}); + } + + let dcID = options.dcID || location.dc_id; + let mimeType = options.mimeType || 'image/jpeg'; + var fileName = this.getFileName(location); + var cachedPromise = this.cachedSavePromises[fileName] || this.cachedDownloadPromises[fileName]; + + //this.log('downloadSmallFile!', location, options, fileName, cachedPromise); + + if(cachedPromise) { + return cachedPromise; + } + + var fileStorage = this.getFileStorage(); + + return this.cachedDownloadPromises[fileName] = fileStorage.getFile(fileName).then((blob: any) => { + return this.cachedDownloads[fileName] = blob; + }, () => { + var downloadPromise = this.downloadRequest(dcID, () => { + var inputLocation = location; + if(!inputLocation._ || inputLocation._ == 'fileLocation') { + inputLocation = Object.assign({}, location, {_: 'inputFileLocation'}); + } + + let params = { + flags: 0, + location: inputLocation, + offset: 0, + limit: 1024 * 1024 + }; + + this.log('next small promise', params); + return apiManager.invokeApi('upload.getFile', params, { + dcID: dcID, + fileDownload: true, + noErrorBox: true + }); + }, dcID); + + var processDownloaded = function(bytes: any) { + return Promise.resolve(bytes); + /* if(!location.sticker || WebpManager.isWebpSupported()) { + return qSync.when(bytes); + } + + return WebpManager.getPngBlobFromWebp(bytes); */ + }; + + return fileStorage.getFileWriter(fileName, mimeType).then((fileWriter: any) => { + return downloadPromise.then((result: any) => { + return processDownloaded(result.bytes).then((proccessedResult) => { + return FileManager.write(fileWriter, proccessedResult).then(() => { + return this.cachedDownloads[fileName] = fileWriter.finalize(); + }); + }); + }); + }); + }); + } + + public getDownloadedFile(location: any, size: any) { + var fileStorage = this.getFileStorage(); + var fileName = this.getFileName(location); + + return fileStorage.getFile(fileName, size); + } + + public async downloadFile(dcID: number, location: any, size: number, options: { + mimeType?: string, + dcID?: number, + toFileEntry?: any, + limitPart?: number + } = {}): Promise { + if(!FileManager.isAvailable()) { + return Promise.reject({type: 'BROWSER_BLOB_NOT_SUPPORTED'}); + } + + /* var processSticker = false; + if(location.sticker && !WebpManager.isWebpSupported()) { + if(options.toFileEntry || size > 524288) { + delete location.sticker; + } else { + processSticker = true; + options.mime = 'image/png'; + } + } */ + + // this.log('Dload file', dcID, location, size) + var fileName = this.getFileName(location); + var toFileEntry = options.toFileEntry || null; + var cachedPromise = this.cachedSavePromises[fileName] || this.cachedDownloadPromises[fileName]; + var fileStorage = this.getFileStorage(); + + this.log('downloadFile', fileStorage.name, fileName, fileName.length, location, arguments); + + if(cachedPromise) { + if(toFileEntry) { + /* let blob = await cachedPromise; + return FileManager.copy(blob, toFileEntry) as Promise; */ + return cachedPromise.then((blob: any) => { + return FileManager.copy(blob, toFileEntry); + }); + } + + this.log('downloadFile cachedPromise'); + + if(size) { + let blob = await cachedPromise; + if(blob.size < size) { + this.log('downloadFile need to deleteFile, wrong size:', blob.size, size); + await this.deleteFile(location); + } else { + return cachedPromise; + } + } else { + return cachedPromise; + } + } + + this.log('arriba'); + + //var deferred = $q.defer() + let deferredHelper: any = {notify: () => {}}; + let deferred: CancellablePromise = new Promise((resolve, reject) => { + deferredHelper.resolve = resolve; + deferredHelper.reject = reject; + }); + Object.assign(deferred, deferredHelper); + + var canceled = false; + var resolved = false; + var mimeType = options.mimeType || 'image/jpeg', + cacheFileWriter: any; + var errorHandler = (error: any) => { + deferred.reject(error) + errorHandler = () => {}; + + if(cacheFileWriter && + (!error || error.type != 'DOWNLOAD_CANCELED')) { + cacheFileWriter.truncate(0); + } + }; + + fileStorage.getFile(fileName, size).then(async(blob: Blob) => { + this.log('is that i wanted'); + + if(blob.size < size) { + this.log('downloadFile need to deleteFile 2, wrong size:', blob.size, size); + await this.deleteFile(location); + throw false; + } + + if(toFileEntry) { + FileManager.copy(blob, toFileEntry).then(() => { + deferred.resolve(); + }, errorHandler) + } else { + deferred.resolve(this.cachedDownloads[fileName] = blob); + } + //}, () => { + }).catch(() => { + this.log('not i wanted'); + var fileWriterPromise = toFileEntry ? FileManager.getFileWriter(toFileEntry) : fileStorage.getFileWriter(fileName, mimeType); + + var processDownloaded = (bytes: any) => { + return Promise.resolve(bytes); + /* if(!processSticker) { + return Promise.resolve(bytes); + } + + return WebpManager.getPngBlobFromWebp(bytes); */ + }; + + fileWriterPromise.then((fileWriter: any) => { + cacheFileWriter = fileWriter; + var limit = options.limitPart || 524288, + offset; + var startOffset = 0; + var writeFilePromise: CancellablePromise = Promise.resolve(), + writeFileDeferred: CancellablePromise; + + if(fileWriter.length) { + startOffset = fileWriter.length; + + if(startOffset >= size) { + if(toFileEntry) { + deferred.resolve(); + } else { + deferred.resolve(this.cachedDownloads[fileName] = fileWriter.finalize()); + } + + return; + } + + fileWriter.seek(startOffset); + deferred.notify({done: startOffset, total: size}); + + this.log('deferred notify 1:', {done: startOffset, total: size}); + } + + for(offset = startOffset; offset < size; offset += limit) { + //writeFileDeferred = $q.defer(); + let writeFileDeferredHelper: any = {}; + writeFileDeferred = new Promise((resolve, reject) => { + writeFileDeferredHelper.resolve = resolve; + writeFileDeferredHelper.reject = reject; + }); + Object.assign(writeFileDeferred, writeFileDeferredHelper); + + this.log('offset:', startOffset); + + ;((isFinal, offset, writeFileDeferred, writeFilePromise) => { + return this.downloadRequest(dcID, () => { + if(canceled) { + return Promise.resolve(); + } + + return apiManager.invokeApi('upload.getFile', { + flags: 0, + location: location, + offset: offset, + limit: limit + }, { + dcID: dcID, + fileDownload: true, + singleInRequest: 'safari' in window + }); + }, dcID).then((result: any) => { + writeFilePromise.then(() => { + if(canceled) { + return Promise.resolve(); + } + + return processDownloaded(result.bytes).then((processedResult) => { + return FileManager.write(fileWriter, processedResult).then(() => { + writeFileDeferred.resolve(); + }, errorHandler).then(() => { + if(isFinal) { + resolved = true; + + if(toFileEntry) { + deferred.resolve(); + } else { + deferred.resolve(this.cachedDownloads[fileName] = fileWriter.finalize()); + } + } else { + this.log('deferred notify 2:', {done: offset + limit, total: size}); + deferred.notify({done: offset + limit, total: size}); + } + }); + }); + }); + }); + })(offset + limit >= size, offset, writeFileDeferred, writeFilePromise); + + writeFilePromise = writeFileDeferred; + } + }); + }); + + deferred.cancel = () => { + if(!canceled && !resolved) { + canceled = true; + delete this.cachedDownloadPromises[fileName]; + errorHandler({type: 'DOWNLOAD_CANCELED'}); + } + }; + + if(!toFileEntry) { + this.cachedDownloadPromises[fileName] = deferred; + } + + return deferred; + } + + public deleteFile(fileName: any) { + fileName = typeof(fileName) == 'string' ? fileName : this.getFileName(fileName); + this.log('will delete file:', fileName); + delete this.cachedDownloadPromises[fileName]; + delete this.cachedDownloads[fileName]; + delete this.cachedSavePromises[fileName]; + return this.getFileStorage().deleteFile(fileName); + } + + public uploadFile(file: Blob | File) { + var fileSize = file.size, + isBigFile = fileSize >= 10485760, + canceled = false, + resolved = false, + doneParts = 0, + partSize = 262144, // 256 Kb + activeDelta = 2; + + if(fileSize > 67108864) { + partSize = 524288; + activeDelta = 4; + } else if(fileSize < 102400) { + partSize = 32768; + activeDelta = 1; + } + + var totalParts = Math.ceil(fileSize / partSize); + + var fileID = [nextRandomInt(0xFFFFFFFF), nextRandomInt(0xFFFFFFFF)]; + //var deferred = $q.defer(); + + var _part = 0, + resultInputFile = { + _: isBigFile ? 'inputFileBig' : 'inputFile', + id: fileID, + parts: totalParts, + name: file instanceof File ? file.name : '', + md5_checksum: '' + }; + + /* let deferred: { + then?: any, + resolve?: (input: typeof resultInputFile) => void, + reject?: (error: any) => void, + promise?: any, + + cancel?: () => void, + notify?: (details: {done: number, total: number}) => void + } = { + + }; + + deferred.promise = new Promise((resolve, reject) => { + deferred.resolve = resolve; + deferred.reject = reject; + }); */ + + let deferredHelper: { + resolve?: (input: typeof resultInputFile) => void, + reject?: (error: any) => void, + notify?: (details: {done: number, total: number}) => void + } = { + notify: (details: {done: number, total: number}) => {} + }; + let deferred: CancellablePromise = new Promise((resolve, reject) => { + if(totalParts > 3000) { + return reject({type: 'FILE_TOO_BIG'}); + } + + deferredHelper.resolve = resolve; + deferredHelper.reject = reject; + //return Promise.resolve(); + }); + Object.assign(deferred, deferredHelper); + + if(totalParts > 3000) { + return deferred; + } + + let errorHandler = (error: any) => { + this.log.error('Up Error', error); + deferred.reject(error); + canceled = true; + errorHandler = () => {}; + }; + + let method = isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart'; + for(let offset = 0; offset < fileSize; offset += partSize) { + let part = _part++; // 0, 1 + this.downloadRequest('upload', () => { + return new Promise((uploadResolve, uploadReject) => { + var reader = new FileReader(); + var blob = file.slice(offset, offset + partSize); + + reader.onloadend = (e) => { + if(canceled) { + uploadReject(); + return; + } + + if(e.target.readyState != FileReader.DONE) { + this.log.error('wrong readyState!'); + return; + } + + this.log('Starting to upload file, isBig:', isBigFile, fileID, part, e.target.result); + + apiManager.invokeApi(method, { + file_id: fileID, + file_part: part, + file_total_parts: totalParts, + bytes: e.target.result + }, { + startMaxLength: partSize + 256, + fileUpload: true, + singleInRequest: true + }).then((result) => { + doneParts++; + uploadResolve(); + + this.log('Progress', doneParts * partSize / fileSize); + if(doneParts >= totalParts) { + deferred.resolve(resultInputFile); + resolved = true; + } else { + deferred.notify({done: doneParts * partSize, total: fileSize}); + } + }, errorHandler); + }; + + reader.readAsArrayBuffer(blob); + }); + }, activeDelta); + } + + deferred.cancel = () => { + this.log('cancel upload', canceled, resolved); + if(!canceled && !resolved) { + canceled = true; + errorHandler({type: 'UPLOAD_CANCELED'}); + } + }; + + return deferred; + } +} + +export default new ApiFileManager(); diff --git a/src/lib/mtproto/apiManager.ts b/src/lib/mtproto/apiManager.ts new file mode 100644 index 00000000..7de46e45 --- /dev/null +++ b/src/lib/mtproto/apiManager.ts @@ -0,0 +1,341 @@ +import AppStorage from '../storage'; + +import { MTPNetworker } from './networker'; +import { bytesFromHex, bytesToHex } from '../bin_utils'; +import networkerFactory from './networkerFactory'; +import { telegramMeWebService } from './mtproto'; +import authorizer from './authorizer'; +import { isObject, tsNow, $rootScope } from '../utils'; +import * as Config from '../config'; +import dcConfigurator from './dcConfigurator'; +import HTTP from './transports/http'; +import { logger } from '../polyfill'; + +export class ApiManager { + public cachedNetworkers: {[x: number]: MTPNetworker} = {}; + public cachedUploadNetworkers: {[x: number]: MTPNetworker} = {}; + public cachedExportPromise: {[x: number]: Promise} = {}; + private gettingNetworkers: {[dcIDAndType: string]: Promise} = {}; + public baseDcID = 0; + + public telegramMeNotified = false; + + private log: ReturnType = logger('API'); + + constructor() { + //MtpSingleInstanceService.start(); + + /* AppStorage.get('dc').then((dcID) => { + if(dcID) { + this.baseDcID = dcID; + } + }); */ + } + + public telegramMeNotify(newValue: boolean) { + if(this.telegramMeNotified !== newValue) { + this.telegramMeNotified = newValue; + telegramMeWebService.setAuthorized(this.telegramMeNotified); + } + } + + // mtpSetUserAuth + public setUserAuth(userAuth: {id: number}) { + var fullUserAuth = Object.assign({dcID: this.baseDcID}, userAuth); + AppStorage.set({ + dc: this.baseDcID, + user_auth: fullUserAuth + }); + + this.telegramMeNotify(true); + $rootScope.$broadcast('user_auth', fullUserAuth); + } + + // mtpLogOut + public async logOut() { + let storageKeys: Array = []; + + let prefix = Config.Modes.test ? 't_dc' : 'dc'; + + for(let dcID = 1; dcID <= 5; dcID++) { + storageKeys.push(prefix + dcID + '_auth_key'); + //storageKeys.push('dc' + dcID + '_auth_keyID'); + //storageKeys.push('t_dc' + dcID + '_auth_key'); + //storageKeys.push('t_dc' + dcID + '_auth_keyID'); + } + + // WebPushApiManager.forceUnsubscribe(); // WARNING + let storageResult = await AppStorage.get(storageKeys); + + let logoutPromises = []; + for(let i = 0; i < storageResult.length; i++) { + if(storageResult[i]) { + logoutPromises.push(this.invokeApi('auth.logOut', {}, {dcID: i + 1, ignoreErrors: true})); + } + } + + return Promise.all(logoutPromises).then(() => { + AppStorage.remove('dc', 'user_auth'); + this.baseDcID = 0; + this.telegramMeNotify(false); + return this.mtpClearStorage(); + }, (error) => { + storageKeys.push('dc', 'user_auth'); + AppStorage.remove(storageKeys); + this.baseDcID = 0; + error.handled = true; + this.telegramMeNotify(false); + return this.mtpClearStorage(); + }); + } + + public mtpClearStorage() { + var saveKeys = ['user_auth', 't_user_auth', 'dc', 't_dc']; + + for(var dcID = 1; dcID <= 5; dcID++) { + saveKeys.push('dc' + dcID + '_auth_key'); + saveKeys.push('dc' + dcID + '_auth_keyID'); + saveKeys.push('dc' + dcID + '_server_salt'); // new + saveKeys.push('t_dc' + dcID + '_auth_key'); + saveKeys.push('t_dc' + dcID + '_auth_keyID'); + saveKeys.push('t_dc' + dcID + '_server_salt'); // new + } + + AppStorage.noPrefix(); + AppStorage.get(saveKeys).then((values) => { + AppStorage.clear().then(() => { + var restoreObj: any = {}; + + saveKeys.forEach((key, i) => { + var value = values[i]; + if(value !== false && value !== undefined) { + restoreObj[key] = value; + } + }); + + AppStorage.noPrefix(); + return AppStorage.set(restoreObj); + }); + }); + } + + // mtpGetNetworker + public async getNetworker(dcID: number, options: any = {}): Promise { + let upload = (options.fileUpload || options.fileDownload) + && (dcConfigurator.chooseServer(dcID, true) instanceof HTTP || Config.Modes.multipleConnections); + let cache = upload ? this.cachedUploadNetworkers : this.cachedNetworkers; + + if(!dcID) { + throw new Error('get Networker without dcID'); + } + + if(cache[dcID] !== undefined) { + return cache[dcID]; + } + + let getKey = dcID + '-' + +upload; + if(this.gettingNetworkers[getKey]) { + return this.gettingNetworkers[getKey]; + } + + return this.gettingNetworkers[getKey] = new Promise(async(resolve, reject) => { + var ak = 'dc' + dcID + '_auth_key'; + var akID = 'dc' + dcID + '_auth_keyID'; + var ss = 'dc' + dcID + '_server_salt'; + + let result = await AppStorage.get([ak, akID, ss]); + + let [authKeyHex, authKeyIDHex, serverSaltHex] = result; + if(authKeyHex && !authKeyIDHex && serverSaltHex) { + this.log.warn('Updating to new version (+akID)'); + await AppStorage.remove(ak, akID, ss); + authKeyHex = serverSaltHex = ''; + } + + if(authKeyHex && authKeyHex.length == 512) { + if(!serverSaltHex || serverSaltHex.length != 16) { + serverSaltHex = 'AAAAAAAAAAAAAAAA'; + } + + var authKey = bytesFromHex(authKeyHex); + var authKeyID = new Uint8Array(bytesFromHex(authKeyIDHex)); + var serverSalt = bytesFromHex(serverSaltHex); + + resolve(cache[dcID] = networkerFactory.getNetworker(dcID, authKey, authKeyID, serverSalt, options)); + } else try { + let auth = await authorizer.auth(dcID); + + let storeObj = { + [ak]: bytesToHex(auth.authKey), + [akID]: auth.authKeyID.hex, + [ss]: bytesToHex(auth.serverSalt) + }; + + AppStorage.set(storeObj); + + resolve(cache[dcID] = networkerFactory.getNetworker(dcID, auth.authKey, auth.authKeyID, auth.serverSalt, options)); + } catch(error) { + this.log('Get networker error', error, error.stack); + reject(error); + } + + delete this.gettingNetworkers[getKey]; + }); + } + + // mtpInvokeApi + public invokeApi(method: string, params: any = {}, options: { + dcID?: number, + timeout?: number, + noErrorBox?: boolean, + fileUpload?: boolean, + ignoreErrors?: boolean, + fileDownload?: boolean, + createNetworker?: boolean, + singleInRequest?: boolean, + startMaxLength?: number, + + waitTime?: number, + stopTime?: number, + rawError?: any + } = {}) { + this.log('Invoke api', method, params, options); + + return new Promise((resolve, reject) => { + let rejectPromise = (error: any) => { + if(!error) { + error = {type: 'ERROR_EMPTY'}; + } else if (!isObject(error)) { + error = {message: error}; + } + + reject(error); + if(options.ignoreErrors) { + return; + } + + if(error.code == 406) { + error.handled = true; + } + + if(!options.noErrorBox) { + error.input = method; + error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack; + setTimeout(() => { + if(!error.handled) { + if(error.code == 401) { + // @ts-ignore WARNING! + this.logOut().finally(() => { + if(location.protocol == 'http:' && + !Config.Modes.http && + Config.App.domains.indexOf(location.hostname) != -1) { + location.href = location.href.replace(/^http:/, 'https:'); + } else { + location.hash = '/login'; + // AppRuntimeManager.reload(); // WARNING + } + }) + } else { + // ErrorService.show({error: error}); // WARNING + } + + error.handled = true; + } + }, 100); + } + }; + + var dcID: number; + + var cachedNetworker: MTPNetworker; + var stack = (new Error()).stack || 'empty stack'; + var performRequest = (networker: MTPNetworker) => { + return (cachedNetworker = networker) + .wrapApiCall(method, params, options) + .then(resolve, (error: any) => { + this.log.error('Error', error.code, error.type, this.baseDcID, dcID); + + if(error.code == 401 && this.baseDcID == dcID) { + AppStorage.remove('dc', 'user_auth'); + this.telegramMeNotify(false); + rejectPromise(error); + } else if(error.code == 401 && this.baseDcID && dcID != this.baseDcID) { + if(this.cachedExportPromise[dcID] === undefined) { + let promise = new Promise((exportResolve, exportReject) => { + this.invokeApi('auth.exportAuthorization', {dc_id: dcID}, {noErrorBox: true}).then((exportedAuth: any) => { + this.invokeApi('auth.importAuthorization', { + id: exportedAuth.id, + bytes: exportedAuth.bytes + }, {dcID: dcID, noErrorBox: true}).then(exportResolve, exportReject); + }, exportReject); + }); + + this.cachedExportPromise[dcID] = promise; + } + + this.cachedExportPromise[dcID].then(() => { + (cachedNetworker = networker).wrapApiCall(method, params, options).then(resolve, rejectPromise); + }, rejectPromise); + } else if(error.code == 303) { + var newDcID = error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2]; + if(newDcID != dcID) { + if(options.dcID) { + options.dcID = newDcID; + } else { + AppStorage.set({dc: this.baseDcID = newDcID}); + } + + this.getNetworker(newDcID, options).then((networker) => { + networker.wrapApiCall(method, params, options).then(resolve, rejectPromise); + }, rejectPromise); + } + } else if(!options.rawError && error.code == 420) { + var waitTime = error.type.match(/^FLOOD_WAIT_(\d+)/)[1] || 10; + + if(waitTime > (options.timeout || 60)) { + return rejectPromise(error); + } + + setTimeout(() => { + performRequest(cachedNetworker); + }, (waitTime + 5) * 1000); // 03.02.2020 + } else if(!options.rawError && (error.code == 500 || error.type == 'MSG_WAIT_FAILED')) { + var now = tsNow(); + if(options.stopTime) { + if(now >= options.stopTime) { + return rejectPromise(error); + } + } else { + options.stopTime = now + (options.timeout !== undefined ? options.timeout : 10) * 1000; + } + + options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1; + setTimeout(() => { + performRequest(cachedNetworker); + }, options.waitTime * 1000); + } else { + rejectPromise(error); + } + }); + } + + if(dcID = (options.dcID || this.baseDcID)) { + this.getNetworker(dcID, options).then(performRequest, rejectPromise); + } else { + AppStorage.get('dc').then((baseDcID) => { + this.getNetworker(this.baseDcID = dcID = baseDcID || Config.App.baseDcID, options).then(performRequest, rejectPromise); + }); + } + }); + } + + // mtpGetUserID + public getUserID(): Promise { + return AppStorage.get('user_auth').then((auth) => { + this.telegramMeNotify(auth && auth.id > 0 || false); + return auth.id || 0; + }); + } +} + +export default new ApiManager(); diff --git a/src/lib/mtproto/authorizer.ts b/src/lib/mtproto/authorizer.ts new file mode 100644 index 00000000..cb69b733 --- /dev/null +++ b/src/lib/mtproto/authorizer.ts @@ -0,0 +1,539 @@ +import { TLSerialization, TLDeserialization } from "../tl_utils"; +import dcConfigurator from "./dcConfigurator"; +import { dT, bytesToHex, bytesCmp, bytesFromHex, bytesXor } from "../bin_utils"; +import rsaKeysManager from "./rsaKeysManager"; +import { tsNow } from "../utils"; +import timeManager from "./timeManager"; + +// @ts-ignore +import { BigInteger } from "jsbn"; + +import CryptoWorker from "../crypto/cryptoworker"; +import {MTProto} from './mtproto'; + +/* const chromeMatches = navigator.userAgent.match(/Chrome\/(\d+(\.\d+)?)/); +const chromeVersion = (chromeMatches && parseFloat(chromeMatches[1])) || false; +const xhrSendBuffer = !('ArrayBufferView' in window) && (chromeVersion > 0 && chromeVersion < 30); */ + +/* let fNewNonce: any = bytesFromHex('8761970c24cb2329b5b2459752c502f3057cb7e8dbab200e526e8767fdc73b3c').reverse(); +let fNonce: any = bytesFromHex('b597720d11faa5914ef485c529cde414').reverse(); +let fResult: any = new Uint8Array(bytesFromHex('000000000000000001b473a0661b285e480000006324160514e4cd29c585f44e91a5fa110d7297b5c0c4134c84893db5715ecd56af5ed618082182053cc5de91cd00000015c4b51c02000000a5b7f709355fc30b216be86c022bb4c3')); + +fNewNonce = false; +fNonce = false; +fResult = false; */ + +type AuthOptions = { + dcID: number, + nonce: Uint8Array, + + serverNonce?: Uint8Array, + pq?: any, + fingerprints?: string[], + publicKey?: { + modulus: string, + exponent: string, + fingerprint: string + }, + + // good + p?: number[], + q?: number[], + + newNonce?: Uint8Array, + + retry?: number, + + b?: number[], + g?: number, + gA?: number, + dhPrime?: number, + + tmpAesKey?: Uint8Array, + tmpAesIv?: Uint8Array, + + authKeyID?: Uint8Array, + authKey?: number[], + serverSalt?: number[], + + localTime?: number, + serverTime?: any +}; + +export class Authorizer { + private cached: { + [dcID: number]: Promise + } = {}; + + constructor() { + } + + public mtpSendPlainRequest(dcID: number, requestArray: Uint8Array) { + var requestLength = requestArray.byteLength; + //requestArray = new /* Int32Array */Uint8Array(requestBuffer); + + var header = new TLSerialization(); + header.storeLongP(0, 0, 'auth_key_id'); // Auth key + header.storeLong(timeManager.generateID(), 'msg_id'); // Msg_id + header.storeInt(requestLength, 'request_length'); + + let headerArray = header.getBytes(true) as Uint8Array; + let resultArray = new Uint8Array(headerArray.byteLength + requestLength); + resultArray.set(headerArray); + resultArray.set(requestArray, headerArray.length); + + /* var headerBuffer = header.getBuffer(), + headerArray = new Int32Array(headerBuffer); + var headerLength = headerBuffer.byteLength; + + var resultBuffer = new ArrayBuffer(headerLength + requestLength), + resultArray = new Int32Array(resultBuffer); + + resultArray.set(headerArray); + resultArray.set(requestArray, headerArray.length); + + let requestData = xhrSendBuffer ? resultBuffer : resultArray; */ + let transport = dcConfigurator.chooseServer(dcID); + let baseError = { + code: 406, + type: 'NETWORK_BAD_RESPONSE', + transport: transport + }; + + console.log(dT(), 'mtpSendPlainRequest: creating requestPromise'); + + return transport.send(resultArray).then(result => { + console.log(dT(), 'mtpSendPlainRequest: in good sector', result); + + if(!result || !result.byteLength) { + return Promise.reject(baseError); + } + + try { + /* result = fResult ? fResult : result; + fResult = new Uint8Array(0); */ + + let deserializer = new TLDeserialization(result, {mtproto: true}); + let auth_key_id = deserializer.fetchLong('auth_key_id'); + if(auth_key_id != 0) console.error('auth_key_id != 0', auth_key_id); + + let msg_id = deserializer.fetchLong('msg_id'); + if(msg_id == 0) console.error('msg_id == 0', msg_id); + + let msg_len = deserializer.fetchInt('msg_len'); + if(!msg_len) console.error('no msg_len', msg_len); + + return deserializer; + } catch(e) { + console.error('mtpSendPlainRequest: deserialization went bad', e); + let error = Object.assign(baseError, {originalError: e}); + throw error; + } + }, error => { + if(!error.message && !error.type) { + error = Object.assign(baseError, { + originalError: error + }); + } + + return Promise.reject(error); + }); + } + + public async mtpSendReqPQ(auth: AuthOptions) { + var request = new TLSerialization({mtproto: true}); + + request.storeMethod('req_pq_multi', {nonce: auth.nonce}); + + // need + rsaKeysManager.prepare().then(() => {}); + + console.log(dT(), 'Send req_pq', auth.nonce.hex); + try { + var deserializer = await this.mtpSendPlainRequest(auth.dcID, request.getBytes(true)); + } catch(error) { + console.error(dT(), 'req_pq error', error.message); + throw error; + } + + + var response = deserializer.fetchObject('ResPQ'); + + if(response._ != 'resPQ') { + throw new Error('[MT] resPQ response invalid: ' + response._); + } + + if(!bytesCmp(auth.nonce, response.nonce)) { + console.log(auth.nonce, response.nonce); + throw new Error('[MT] resPQ nonce mismatch'); + } + + //auth.serverNonce = response.server_nonce; + auth.serverNonce = new Uint8Array(response.server_nonce); // need + auth.pq = response.pq; + auth.fingerprints = response.server_public_key_fingerprints; + + console.log(dT(), 'Got ResPQ', bytesToHex(auth.serverNonce), bytesToHex(auth.pq), auth.fingerprints); + + let publicKey = await rsaKeysManager.select(auth.fingerprints); + if(!publicKey) { + throw new Error('[MT] No public key found'); + } + + auth.publicKey = publicKey; + + console.log(dT(), 'PQ factorization start', auth.pq); + + try { + var pAndQ = await CryptoWorker.factorize(auth.pq); + } catch(error) { + console.error('worker error factorize', error); + throw error; + } + + auth.p = pAndQ[0]; + auth.q = pAndQ[1]; + + console.log(dT(), 'PQ factorization done', pAndQ); + /* let p = new Uint32Array(new Uint8Array(auth.p).buffer)[0]; + let q = new Uint32Array(new Uint8Array(auth.q).buffer)[0]; + console.log(dT(), 'PQ factorization done', pAndQ, p.toString(16), q.toString(16)); */ + + return this.mtpSendReqDhParams(auth); + } + + public async mtpSendReqDhParams(auth: AuthOptions) { + auth.newNonce = new Uint8Array(32).randomize(); + /* auth.newNonce = new Array(32); // need array, not uint8array! + MTProto.secureRandom.nextBytes(auth.newNonce); */ + + //console.log("TCL: Authorizer -> mtpSendReqDhParams -> auth.newNonce", auth.newNonce) + + // remove + // auth.newNonce = fNewNonce ? fNewNonce : auth.newNonce; + // console.log("TCL: Authorizer -> mtpSendReqDhParams -> auth.newNonce", auth.newNonce); + + let p_q_inner_data = { + _: 'p_q_inner_data', + pq: auth.pq, + p: auth.p, + q: auth.q, + nonce: auth.nonce, + server_nonce: auth.serverNonce, + new_nonce: auth.newNonce + }; + + let data = new TLSerialization({mtproto: true}); + data.storeObject(p_q_inner_data, 'P_Q_inner_data', 'DECRYPTED_DATA'); + /* console.log('p_q_inner_data', p_q_inner_data, + bytesToHex(bytesFromArrayBuffer(data.getBuffer())), + sha1BytesSync(data.getBuffer()), + bytesFromArrayBuffer(await CryptoWorker.sha1Hash(data.getBuffer()))); */ + + let uint8Data = data.getBytes(true); + let sha1Hashed = await CryptoWorker.sha1Hash(uint8Data); + + //var dataWithHash = sha1BytesSync(data.getBuffer()).concat(data.getBytes() as number[]); + let dataWithHash = sha1Hashed.concat(uint8Data); + + //dataWithHash = addPadding(dataWithHash, 255); + //dataWithHash = dataWithHash.concat(bytesFromHex('96228ea7790e71caaabc2ab67f4412e9aa224c664d232cc08617a32ce1796aa052da4a737083211689858f461e4473fd6394afd3aa0c8014840dc13f47beaf4fc3b9229aea9cfa83f9f6e676e50ee7676542fb75606879ee7e65cf3a2295b4ba0934ceec1011560c62395a6e9593bfb117cd0da75ba56723672d100ac17ec4d805aa59f7852e3a25a79ee4')); + //console.log('sha1Hashed', bytesToHex(sha1Hashed), 'dataWithHash', bytesToHex(dataWithHash), dataWithHash.length); + + let rsaEncrypted = await CryptoWorker.rsaEncrypt(auth.publicKey, dataWithHash); + //let rsaEncrypted = await CryptoWorker.rsaEncrypt(auth.publicKey, dataWithHash); + + //console.log('rsaEncrypted', rsaEncrypted, new Uint8Array(rsaEncrypted).hex); + + let req_DH_params = { + nonce: auth.nonce, + server_nonce: auth.serverNonce, + p: auth.p, + q: auth.q, + public_key_fingerprint: auth.publicKey.fingerprint, + encrypted_data: rsaEncrypted + }; + + var request = new TLSerialization({mtproto: true}); + request.storeMethod('req_DH_params', req_DH_params); + + let requestBytes = request.getBytes(true); + + console.log(dT(), 'Send req_DH_params', req_DH_params/* , requestBytes.hex */); + + try { + var deserializer = await this.mtpSendPlainRequest(auth.dcID, requestBytes); + } catch(error) { + console.log(dT(), 'Send req_DH_params FAIL!', error); + throw error; + } + + var response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE'); + + console.log(dT(), 'Sent req_DH_params, response:', response); + + if(response._ != 'server_DH_params_fail' && response._ != 'server_DH_params_ok') { + throw new Error('[MT] Server_DH_Params response invalid: ' + response._); + } + + if(!bytesCmp(auth.nonce, response.nonce)) { + throw new Error('[MT] Server_DH_Params nonce mismatch'); + } + + if(!bytesCmp(auth.serverNonce, response.server_nonce)) { + throw new Error('[MT] Server_DH_Params server_nonce mismatch'); + } + + if(response._ == 'server_DH_params_fail') { + //var newNonceHash = sha1BytesSync(auth.newNonce).slice(-16); + var newNonceHash = (await CryptoWorker.sha1Hash(auth.newNonce)).slice(-16); + if(!bytesCmp(newNonceHash, response.new_nonce_hash)) { + throw new Error('[MT] server_DH_params_fail new_nonce_hash mismatch'); + } + + throw new Error('[MT] server_DH_params_fail'); + } + + // fill auth object + try { + await this.mtpDecryptServerDhDataAnswer(auth, response.encrypted_answer); + } catch(e) { + console.error(dT(), 'mtpDecryptServerDhDataAnswer FAILED!', e); + throw e; + } + + //console.log(dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...'); + + return this.mtpSendSetClientDhParams(auth as any); // костыль + } + + public async mtpDecryptServerDhDataAnswer(auth: AuthOptions, encryptedAnswer: any) { + auth.localTime = tsNow(); + + // can't concat Array with Uint8Array! + //auth.tmpAesKey = sha1BytesSync(auth.newNonce.concat(auth.serverNonce)).concat(sha1BytesSync(auth.serverNonce.concat(auth.newNonce)).slice(0, 12)); + //auth.tmpAesIv = sha1BytesSync(auth.serverNonce.concat(auth.newNonce)).slice(12).concat(sha1BytesSync([].concat(auth.newNonce, auth.newNonce)), auth.newNonce.slice(0, 4)); + auth.tmpAesKey = (await CryptoWorker.sha1Hash(auth.newNonce.concat(auth.serverNonce))) + .concat((await CryptoWorker.sha1Hash(auth.serverNonce.concat(auth.newNonce))).slice(0, 12)); + + auth.tmpAesIv = (await CryptoWorker.sha1Hash(auth.serverNonce.concat(auth.newNonce))).slice(12) + .concat(await CryptoWorker.sha1Hash(auth.newNonce.concat(auth.newNonce)), auth.newNonce.slice(0, 4)); + + + /* console.log(auth.serverNonce.concat(auth.newNonce)); + console.log(auth.newNonce.concat(auth.serverNonce)); + console.log(auth.newNonce.concat(auth.newNonce)); */ + + + //var answerWithHash = aesDecryptSync(encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv); + var answerWithHash = new Uint8Array(await CryptoWorker.aesDecrypt(encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv)); + + var hash = answerWithHash.slice(0, 20); + var answerWithPadding = answerWithHash.slice(20); + + // console.log('hash', hash); + + var deserializer = new TLDeserialization(answerWithPadding, {mtproto: true}); + var response = deserializer.fetchObject('Server_DH_inner_data'); + + if(response._ != 'server_DH_inner_data') { + throw new Error('[MT] server_DH_inner_data response invalid: ' + response); + } + + if(!bytesCmp(auth.nonce, response.nonce)) { + throw new Error('[MT] server_DH_inner_data nonce mismatch'); + } + + if(!bytesCmp(auth.serverNonce, response.server_nonce)) { + throw new Error('[MT] server_DH_inner_data serverNonce mismatch'); + } + + console.log(dT(), 'Done decrypting answer'); + auth.g = response.g; + auth.dhPrime = response.dh_prime; + auth.gA = response.g_a; + auth.serverTime = response.server_time; + auth.retry = 0; + + this.mtpVerifyDhParams(auth.g, auth.dhPrime, auth.gA); + + var offset = deserializer.getOffset(); + + //if(!bytesCmp(hash, sha1BytesSync(answerWithPadding.slice(0, offset)))) { + if(!bytesCmp(hash, await CryptoWorker.sha1Hash(answerWithPadding.slice(0, offset)))) { + throw new Error('[MT] server_DH_inner_data SHA1-hash mismatch'); + } + + timeManager.applyServerTime(auth.serverTime, auth.localTime); + } + + public mtpVerifyDhParams(g: number, dhPrime: any, gA: any) { + console.log(dT(), 'Verifying DH params'); + var dhPrimeHex = bytesToHex(dhPrime); + if(g != 3 || dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') { + // The verified value is from https://core.telegram.org/mtproto/security_guidelines + throw new Error('[MT] DH params are not verified: unknown dhPrime'); + } + console.log(dT(), 'dhPrime cmp OK'); + + var gABigInt = new BigInteger(bytesToHex(gA), 16); + var dhPrimeBigInt = new BigInteger(dhPrimeHex, 16); + + if(gABigInt.compareTo(BigInteger.ONE) <= 0) { + throw new Error('[MT] DH params are not verified: gA <= 1'); + } + + if(gABigInt.compareTo(dhPrimeBigInt.subtract(BigInteger.ONE)) >= 0) { + throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1'); + } + console.log(dT(), '1 < gA < dhPrime-1 OK'); + + + var two = new BigInteger(/* null */''); + two.fromInt(2); + var twoPow = two.pow(2048 - 64); + + if(gABigInt.compareTo(twoPow) < 0) { + throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}'); + } + if(gABigInt.compareTo(dhPrimeBigInt.subtract(twoPow)) >= 0) { + throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}'); + } + console.log(dT(), '2^{2048-64} < gA < dhPrime-2^{2048-64} OK'); + + return true; + } + + public async mtpSendSetClientDhParams(auth: AuthOptions): Promise { + var gBytes = bytesFromHex(auth.g.toString(16)); + + auth.b = new Array(256); + MTProto.secureRandom.nextBytes(auth.b); + + try { + var gB = await CryptoWorker.modPow(gBytes, auth.b, auth.dhPrime); + } catch(error) { + throw error; + } + + var data = new TLSerialization({mtproto: true}); + data.storeObject({ + _: 'client_DH_inner_data', + nonce: auth.nonce, + server_nonce: auth.serverNonce, + retry_id: [0, auth.retry++], + g_b: gB + }, 'Client_DH_Inner_Data'); + + //var dataWithHash = sha1BytesSync(data.getBuffer()).concat(data.getBytes()); + var dataWithHash = (await CryptoWorker.sha1Hash(data.getBuffer())).concat(data.getBytes()); + + //var encryptedData = aesEncryptSync(dataWithHash, auth.tmpAesKey, auth.tmpAesIv); + var encryptedData = await CryptoWorker.aesEncrypt(dataWithHash, auth.tmpAesKey, auth.tmpAesIv); + + var request = new TLSerialization({mtproto: true}); + request.storeMethod('set_client_DH_params', { + nonce: auth.nonce, + server_nonce: auth.serverNonce, + encrypted_data: encryptedData + }); + + console.log(dT(), 'Send set_client_DH_params'); + + try { + var deserializer = await this.mtpSendPlainRequest(auth.dcID, request.getBytes(true)); + } catch(err) { + throw err; + } + + let response = deserializer.fetchObject('Set_client_DH_params_answer'); + + if(response._ != 'dh_gen_ok' && response._ != 'dh_gen_retry' && response._ != 'dh_gen_fail') { + throw new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._); + } + + if(!bytesCmp(auth.nonce, response.nonce)) { + throw new Error('[MT] Set_client_DH_params_answer nonce mismatch'); + } + + if(!bytesCmp(auth.serverNonce, response.server_nonce)) { + throw new Error('[MT] Set_client_DH_params_answer server_nonce mismatch'); + } + + try { + var authKey = await CryptoWorker.modPow(auth.gA, auth.b, auth.dhPrime); + } catch(err) { + throw authKey; + } + + //var authKeyHash = sha1BytesSync(authKey), + let authKeyHash = await CryptoWorker.sha1Hash(authKey), + authKeyAux = authKeyHash.slice(0, 8), + authKeyID = authKeyHash.slice(-8); + + console.log(dT(), 'Got Set_client_DH_params_answer', response._, authKey); + switch(response._) { + case 'dh_gen_ok': + var newNonceHash1 = (await CryptoWorker.sha1Hash(auth.newNonce.concat([1], authKeyAux))).slice(-16); + //var newNonceHash1 = sha1BytesSync(auth.newNonce.concat([1], authKeyAux)).slice(-16); + + if(!bytesCmp(newNonceHash1, response.new_nonce_hash1)) { + throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash1 mismatch'); + } + + var serverSalt = bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8)); + console.log('Auth successfull!', authKeyID, authKey, serverSalt); + + auth.authKeyID = authKeyID; + auth.authKey = authKey; + auth.serverSalt = serverSalt; + + return auth; + break; + + case 'dh_gen_retry': + //var newNonceHash2 = sha1BytesSync(auth.newNonce.concat([2], authKeyAux)).slice(-16); + var newNonceHash2 = (await CryptoWorker.sha1Hash(auth.newNonce.concat([2], authKeyAux))).slice(-16); + if(!bytesCmp(newNonceHash2, response.new_nonce_hash2)) { + throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch'); + } + + return this.mtpSendSetClientDhParams(auth); + + case 'dh_gen_fail': + //var newNonceHash3 = sha1BytesSync(auth.newNonce.concat([3], authKeyAux)).slice(-16); + var newNonceHash3 = (await CryptoWorker.sha1Hash(auth.newNonce.concat([3], authKeyAux))).slice(-16); + if(!bytesCmp(newNonceHash3, response.new_nonce_hash3)) { + throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch'); + } + + throw new Error('[MT] Set_client_DH_params_answer fail'); + } + } + + // mtpAuth + public async auth(dcID: number): Promise { + if(dcID in this.cached) { + return this.cached[dcID]; + } + + let nonce = /* fNonce ? fNonce : */new Uint8Array(16).randomize(); + /* var nonce = new Array(16); + MTProto.secureRandom.nextBytes(nonce); */ + + if(!dcConfigurator.chooseServer(dcID)) { + return Promise.reject(new Error('[MT] No server found for dc ' + dcID)); + } + + try { + let promise = this.mtpSendReqPQ({dcID, nonce}); + this.cached[dcID] = promise; + return await promise; + } catch(err) { + delete this.cached[dcID]; + throw err; + } + } +} + +export default new Authorizer(); diff --git a/src/lib/mtproto/dcConfigurator.ts b/src/lib/mtproto/dcConfigurator.ts new file mode 100644 index 00000000..9a2e17b7 --- /dev/null +++ b/src/lib/mtproto/dcConfigurator.ts @@ -0,0 +1,87 @@ +import Socket from './transports/websocket'; +import MTTransport from './transports/transport'; +import HTTP from './transports/http'; + +type Servers = { + [transport: string]: { + [dcID: number]: MTTransport + } + /* websocket: { + [dcID: number]: Socket + }, + https: { + [dcID: number]: HTTPTransport + }, + http: { + [dcID: number]: HTTPTransport + } */ +}; + +export class DcConfigurator { + private sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora']; + + private dcOptions = Config.Modes.test + ? [ + {id: 1, host: '149.154.175.10', port: 80}, + {id: 2, host: '149.154.167.40', port: 80}, + {id: 3, host: '149.154.175.117', port: 80} + ] + : [ + {id: 1, host: '149.154.175.50', port: 80}, + {id: 2, host: '149.154.167.50', port: 80}, + {id: 3, host: '149.154.175.100', port: 80}, + {id: 4, host: '149.154.167.91', port: 80}, + {id: 5, host: '149.154.171.5', port: 80} + ]; + + private chosenServers: Servers = { + websocket: {}, + https: {}, + http: {} + }; + + private chosenUploadServers: Servers = { + websocket: {}, + https: {}, + http: {} + }; + + public chooseServer(dcID: number, upload?: boolean, transport = 'websocket') { + let servers = upload && (transport != 'websocket' || Config.Modes.multipleConnections) + ? this.chosenUploadServers[transport] + : this.chosenServers[transport]; + + if(!(dcID in servers)) { + let chosenServer = ''; + + if(transport == 'websocket') { + let subdomain = this.sslSubdomains[dcID - 1]; + let path = Config.Modes.test ? 'apiws_test' : 'apiws'; + chosenServer = 'wss://' + subdomain + '.web.telegram.org/' + path; + return servers[dcID] = new Socket(dcID, chosenServer); + } + + if(Config.Modes.ssl || !Config.Modes.http || transport == 'https') { + let subdomain = this.sslSubdomains[dcID - 1] + (upload ? '-1' : ''); + let path = Config.Modes.test ? 'apiw_test1' : 'apiw1'; + chosenServer = 'https://' + subdomain + '.web.telegram.org/' + path; + return servers[dcID] = new HTTP(dcID, chosenServer); + } + + for(let dcOption of this.dcOptions) { + if(dcOption.id == dcID) { + chosenServer = 'http://' + dcOption.host + (dcOption.port != 80 ? ':' + dcOption.port : '') + '/apiw1'; + return servers[dcID] = new HTTP(dcID, chosenServer); + } + } + + console.error('No chosenServer!', dcID); + + return null; + } + + return servers[dcID]; + } +} + +export default new DcConfigurator(); diff --git a/src/lib/mtproto/mtproto.ts b/src/lib/mtproto/mtproto.ts new file mode 100644 index 00000000..8065fd40 --- /dev/null +++ b/src/lib/mtproto/mtproto.ts @@ -0,0 +1,76 @@ +import * as Config from '../config'; +import AppStorage from '../storage'; + +import {tsNow} from '../utils'; + +import PasswordManager from './passwordManager'; +import DcConfigurator from './dcConfigurator'; +import RSAKeysManager from './rsaKeysManager'; +import TimeManager from './timeManager'; +import ServerTimeManager from './serverTimeManager'; +import Authorizer from './authorizer'; +import NetworkerFactory from './networkerFactory'; +import ApiManager from './apiManager'; +import ApiFileManager from './apiFileManager'; + +export class TelegramMeWebService { + public disabled = Config.Modes.test || + Config.App.domains.indexOf(location.hostname) == -1 || + location.protocol != 'http:' && location.protocol != 'https:' || + location.protocol == 'https:' && location.hostname != 'web.telegram.org'; + + public setAuthorized(canRedirect: boolean) { + if(this.disabled) { + return false; + } + + AppStorage.get('tgme_sync').then((curValue) => { + var ts = tsNow(true); + if(canRedirect && + curValue && + curValue.canRedirect == canRedirect && + curValue.ts + 86400 > ts) { + return false; + } + + AppStorage.set({tgme_sync: {canRedirect: canRedirect, ts: ts}}); + + var urls = [ + '//telegram.me/_websync_?authed=' + (canRedirect ? '1' : '0'), + '//t.me/_websync_?authed=' + (canRedirect ? '1' : '0') + ]; + + urls.forEach(url => { + let script = document.createElement('script'); + script.onload = script.onerror = function() { + script.remove(); + }; + script.src = url; + document.body.appendChild(script); + }); + }); + } +} + +export const telegramMeWebService = new TelegramMeWebService(); + +// @ts-ignore +import {SecureRandom} from 'jsbn'; + +export namespace MTProto { + //$($window).on('click keydown', rng_seed_time); // WARNING! + + export const secureRandom = new SecureRandom(); + + export const passwordManager = PasswordManager; + export const dcConfigurator = DcConfigurator; + export const rsaKeysManager = RSAKeysManager; + export const timeManager = TimeManager; + export const authorizer = Authorizer; + export const networkerFactory = NetworkerFactory; + export const apiManager = ApiManager; + export const apiFileManager = ApiFileManager; + export const serverTimeManager = ServerTimeManager; +} + +(window as any).MTProto = MTProto; diff --git a/src/lib/mtproto/networker.ts b/src/lib/mtproto/networker.ts new file mode 100644 index 00000000..72a36cea --- /dev/null +++ b/src/lib/mtproto/networker.ts @@ -0,0 +1,1229 @@ +import {tsNow, isObject} from '../utils'; +import {convertToUint8Array, + bufferConcat, nextRandomInt, bytesToHex, longToBytes, + bytesCmp, uintToInt, bigStringInt} from '../bin_utils'; +import {MTProto} from './mtproto'; +import {TLDeserialization, TLSerialization} from '../tl_utils'; +import CryptoWorker from '../crypto/cryptoworker'; +import AppStorage from '../storage'; +import * as Config from '../config'; + +import timeManager from './timeManager'; +import NetworkerFactory from './networkerFactory'; +import dcConfigurator from './dcConfigurator'; +import Socket from './transports/websocket'; +import HTTP from './transports/http'; +import { logger } from '../polyfill'; + +/* const chromeMatches = navigator.userAgent.match(/Chrome\/(\d+(\.\d+)?)/); +const chromeVersion = chromeMatches && parseFloat(chromeMatches[1]) || false; +const xhrSendBuffer = !('ArrayBufferView' in window) && (chromeVersion > 0 && chromeVersion < 30);*/ + +type Message = { + msg_id: string, + seq_no: number, + body?: Uint8Array | number[], + isAPI?: boolean, + + acked?: boolean, + + deferred?: { + resolve: any, + reject: any + }, + + container?: boolean, + inner?: string[], + + notContentRelated?: boolean, + noSchedule?: boolean, + + resultType?: string, + + singleInRequest?: boolean, + longPoll?: boolean, + noResponse?: boolean, // only with http (http_wait for longPoll) +}; + +class MTPNetworker { + private authKeyUint8: Uint8Array; + + private upload: boolean; + + private lastServerMessages: Array = []; + + private sentMessages: { + [msgID: string]: Message + } = {}; + + private pendingMessages: any = {}; + private pendingAcks: Array = []; + private pendingResends: Array = []; + private connectionInited = false; + + //private longPollInt: number; + private longPollPending = 0; + + private seqNo: number = 0; + private prevSessionID: Array = []; + private sessionID: Array = []; + + private sleepAfter = 0; + + private offline = false; + + private checkConnectionTimeout: number; + private checkConnectionPeriod = 0; + + private nextReqTimeout: number; + private nextReq: number = 0; + + private onOnlineCb = this.checkConnection.bind(this); + + private debug = false; + + private lastResendReq: { + req_msg_id: string, + resend_msg_ids: Array + } | null = null; + + private transport: Socket | HTTP; + + private log: ReturnType; + + constructor(private dcID: number, private authKey: number[], private authKeyID: Uint8Array, + private serverSalt: number[], private options: any = {}) { + this.authKeyUint8 = convertToUint8Array(this.authKey); + //this.authKeyID = sha1BytesSync(this.authKey).slice(-8); + + this.upload = this.options.fileUpload || this.options.fileDownload || false; + + this.log = logger('NET-' + dcID + (this.upload ? '-U' : '')); + + this.log('constructor', this.authKey, this.authKeyID, this.serverSalt); + + this.updateSession(); + + if(!NetworkerFactory.offlineInited) { + NetworkerFactory.offlineInited = true; + /* $rootScope.offline = true + $rootScope.offlineConnecting = true */ + } + + if(Config.Navigator.mobile) { + this.setupMobileSleep(); + } + + this.transport = dcConfigurator.chooseServer(this.dcID, this.upload); + + if(this.transport instanceof HTTP) { + /* this.longPollInt = */window.setInterval(this.checkLongPoll.bind(this), 10000); + this.checkLongPoll(); + } else { + (this.transport as Socket).networker = this; + } + } + + public updateSession() { + this.seqNo = 0; + this.prevSessionID = this.sessionID; + this.sessionID = new Array(8); + MTProto.secureRandom.nextBytes(this.sessionID); + } + + public setupMobileSleep() { + /* $rootScope.$watch('idle.isIDLE', (isIDLE) => { + if(isIDLE) { + this.sleepAfter = tsNow() + 30000; + } else { + delete this.sleepAfter; + this.checkLongPoll(); + } + }) + + $rootScope.$on('push_received', function() { + // this.log('push recieved', self.sleepAfter) + if(this.sleepAfter) { + this.sleepAfter = tsNow() + 30000; + this.checkLongPoll(); + } + }) */ + } + + public updateSentMessage(sentMessageID: any) { + var sentMessage = this.sentMessages[sentMessageID]; + if(!sentMessage) { + return false; + } + var self = this; + if(sentMessage.container) { + var newInner: any = []; + sentMessage.inner.forEach((innerSentMessageID: any) => { + var innerSentMessage = self.updateSentMessage(innerSentMessageID); + if(innerSentMessage) { + newInner.push(innerSentMessage.msg_id); + } + }) + sentMessage.inner = newInner; + } + + sentMessage.msg_id = timeManager.generateID(); + sentMessage.seq_no = this.generateSeqNo( + sentMessage.notContentRelated || + sentMessage.container + ); + this.sentMessages[sentMessage.msg_id] = sentMessage; + delete self.sentMessages[sentMessageID]; + + return sentMessage; + } + + public generateSeqNo(notContentRelated?: boolean) { + var seqNo = this.seqNo * 2; + + if(!notContentRelated) { + seqNo++; + this.seqNo++; + } + + return seqNo; + } + + public wrapMtpCall(method: string, params: any = {}, options: any = {}) { + var serializer = new TLSerialization({mtproto: true}); + + serializer.storeMethod(method, params); + + var messageID = timeManager.generateID(); + var seqNo = this.generateSeqNo(); + var message = { + msg_id: messageID, + seq_no: seqNo, + body: serializer.getBytes() + }; + + if(Config.Modes.debug) { + this.log('MT call', method, params, messageID, seqNo); + } + + return this.pushMessage(message, options); + } + + public wrapMtpMessage(object: any = {}, options: any = {}) { + var serializer = new TLSerialization({mtproto: true}); + serializer.storeObject(object, 'Object'); + + var messageID = timeManager.generateID(); + var seqNo = this.generateSeqNo(options.notContentRelated); + var message = { + msg_id: messageID, + seq_no: seqNo, + body: serializer.getBytes() + }; + + if(Config.Modes.debug) { + this.log('MT message', object, messageID, seqNo); + } + + return this.pushMessage(message, options); + } + + public wrapApiCall(method: string, params: any = {}, options: { + dcID?: number, + timeout?: number, + noErrorBox?: boolean, + fileUpload?: boolean, + ignoreErrors?: boolean, + fileDownload?: boolean, + createNetworker?: boolean, + singleInRequest?: boolean, + startMaxLength?: number, + + afterMessageID?: string, + resultType?: boolean, + + waitTime?: number, + stopTime?: number, + rawError?: any + } = {}) { + let serializer = new TLSerialization(options); + + if(!this.connectionInited) { // this will call once for each new session + this.log('Wrap api call !this.connectionInited'); + + let invokeWithLayer = Config.Schema.API.methods.find((m: any) => m.method == 'invokeWithLayer'); + if(!invokeWithLayer) throw new Error('no invokeWithLayer!'); + serializer.storeInt(+invokeWithLayer.id >>> 0, 'invokeWithLayer'); + + // @ts-ignore + serializer.storeInt(Config.Schema.API.layer, 'layer'); + + let initConnection = Config.Schema.API.methods.find((m: any) => m.method == 'initConnection'); + if(!initConnection) throw new Error('no initConnection!'); + + serializer.storeInt(+initConnection.id >>> 0, 'initConnection'); + serializer.storeInt(0x0, 'flags'); + serializer.storeInt(Config.App.id, 'api_id'); + serializer.storeString(navigator.userAgent || 'Unknown UserAgent', 'device_model'); + serializer.storeString(navigator.platform || 'Unknown Platform', 'system_version'); + serializer.storeString(Config.App.version, 'app_version'); + serializer.storeString(navigator.language || 'en', 'system_lang_code'); + serializer.storeString('', 'lang_pack'); + serializer.storeString(navigator.language || 'en', 'lang_code'); + //serializer.storeInt(0x0, 'proxy'); + /* serializer.storeMethod('initConnection', { + 'flags': 0, + 'api_id': Config.App.id, + 'device_model': navigator.userAgent || 'Unknown UserAgent', + 'system_version': navigator.platform || 'Unknown Platform', + 'app_version': Config.App.version, + 'system_lang_code': navigator.language || 'en', + 'lang_pack': '', + 'lang_code': navigator.language || 'en' + }); */ + } + + if(options.afterMessageID) { + this.log('Api call options.afterMessageID!'); + serializer.storeInt(0xcb9f372d, 'invokeAfterMsg'); + serializer.storeLong(options.afterMessageID, 'msg_id'); + } + + options.resultType = serializer.storeMethod(method, params); + + var messageID = timeManager.generateID(); + var seqNo = this.generateSeqNo(); + var message = { + msg_id: messageID, + seq_no: seqNo, + body: serializer.getBytes(true), + isAPI: true + }; + + if(Config.Modes.debug || true) { + this.log('Api call', method, message, params, options); + } else { + this.log('Api call', method); + } + + return this.pushMessage(message, options); + } + + public checkLongPoll() { + var isClean = this.cleanupSent(); + //this.log('Check lp', this.longPollPending, tsNow(), this.dcID, isClean, this); + if((this.longPollPending && tsNow() < this.longPollPending) || + this.offline || + NetworkerFactory.akStopped) { + //this.log('No lp this time'); + return false; + } + + var self = this; + AppStorage.get('dc').then((baseDcID: number) => { + if(isClean && ( + baseDcID != self.dcID || + self.upload || + (self.sleepAfter && tsNow() > self.sleepAfter) + )) { + //console.warn(dT(), 'Send long-poll for DC is delayed', self.dcID, self.sleepAfter); + return; + } + + self.sendLongPoll(); + }); + } + + public sendLongPoll() { + let maxWait = 25000; + + this.longPollPending = tsNow() + maxWait; + //this.log('Set lp', this.longPollPending, tsNow()) + + this.wrapMtpCall('http_wait', { + max_delay: 500, + wait_after: 150, + max_wait: maxWait + }, { + noResponse: true, + longPoll: true + }).then(() => { + this.longPollPending = 0; + setTimeout(this.checkLongPoll.bind(this), 0); + }, (error: ErrorEvent) => { + this.log('Long-poll failed', error); + }); + } + + public pushMessage(message: { + msg_id: string, + seq_no: number, + body: Uint8Array | number[], + isAPI?: boolean + }, options: any = {}) { + return new Promise((resolve, reject) => { + this.sentMessages[message.msg_id] = Object.assign(message, options, { + deferred: {resolve, reject} + }); + + // this.log('Networker pushMessage:', this.sentMessages[message.msg_id]); + + this.pendingMessages[message.msg_id] = 0; + + if(!options || !options.noSchedule) { + this.scheduleRequest(); + } + + if(isObject(options)) { + options.messageID = message.msg_id; + } + }); + } + + public pushResend(messageID: string, delay = 0) { + var value = delay ? tsNow() + delay : 0; + var sentMessage = this.sentMessages[messageID]; + if(sentMessage.container) { + for(var i = 0; i < sentMessage.inner.length; i++) { + this.pendingMessages[sentMessage.inner[i]] = value; + } + } else { + this.pendingMessages[messageID] = value; + } + + // this.log('Resend due', messageID, this.pendingMessages) + + this.scheduleRequest(delay); + } + + public async getMsgKey(dataWithPadding: ArrayBuffer, isOut: boolean) { + var authKey = this.authKeyUint8; + var x = isOut ? 0 : 8 + var msgKeyLargePlain = bufferConcat(authKey.subarray(88 + x, 88 + x + 32), dataWithPadding); + + let msgKeyLarge = await CryptoWorker.sha256Hash(msgKeyLargePlain); + var msgKey = new Uint8Array(msgKeyLarge).subarray(8, 24); + return msgKey; + }; + + public getAesKeyIv(msgKey: Uint8Array | number[], isOut: boolean): Promise<[Uint8Array, Uint8Array]> { + var authKey = this.authKeyUint8; + var x = isOut ? 0 : 8; + var sha2aText = new Uint8Array(52); + var sha2bText = new Uint8Array(52); + var promises: Array> = []; + + sha2aText.set(msgKey, 0); + sha2aText.set(authKey.subarray(x, x + 36), 16); + promises.push(CryptoWorker.sha256Hash(sha2aText)); + + sha2bText.set(authKey.subarray(40 + x, 40 + x + 36), 0); + sha2bText.set(msgKey, 36); + promises.push(CryptoWorker.sha256Hash(sha2bText)); + + return Promise.all(promises).then((results) => { + var aesKey = new Uint8Array(32); + var aesIv = new Uint8Array(32); + var sha2a = new Uint8Array(results[0]); + var sha2b = new Uint8Array(results[1]); + + aesKey.set(sha2a.subarray(0, 8)); + aesKey.set(sha2b.subarray(8, 24), 8); + aesKey.set(sha2a.subarray(24, 32), 24); + + aesIv.set(sha2b.subarray(0, 8)); + aesIv.set(sha2a.subarray(8, 24), 8); + aesIv.set(sha2b.subarray(24, 32), 24); + + return [aesKey, aesIv]; + }); + } + + public checkConnection(event: Event | string) { + /* $rootScope.offlineConnecting = true */ + + this.log('Check connection', event); + clearTimeout(this.checkConnectionTimeout); + this.checkConnectionTimeout = 0; + + var serializer = new TLSerialization({mtproto: true}); + var pingID = [nextRandomInt(0xFFFFFFFF), nextRandomInt(0xFFFFFFFF)]; + + serializer.storeMethod('ping', { + ping_id: pingID + }); + + var pingMessage = { + msg_id: timeManager.generateID(), + seq_no: this.generateSeqNo(true), + body: serializer.getBytes() + }; + + var self = this; + this.sendEncryptedRequest(pingMessage, { + timeout: 15000 + }).then((result) => { + /* delete $rootScope.offlineConnecting */ + self.toggleOffline(false); + }, () => { + this.log('Delay ', self.checkConnectionPeriod * 1000); + self.checkConnectionTimeout = setTimeout(self.checkConnection.bind(self), self.checkConnectionPeriod * 1000 | 0); + self.checkConnectionPeriod = Math.min(60, self.checkConnectionPeriod * 1.5); + /* setTimeout(function() { + delete $rootScope.offlineConnecting + }, 1000); */ + }); + } + + public toggleOffline(enabled: boolean) { + // this.log('toggle ', enabled, this.dcID, this.iii) + if(this.offline !== undefined && this.offline == enabled) { + return false; + } + + this.offline = enabled; + /* $rootScope.offline = enabled; + $rootScope.offlineConnecting = false; */ + + if(!(this.transport instanceof HTTP)) { + this.log('toggle ', enabled, this.dcID); + return; + } + + if(this.offline) { + clearTimeout(this.nextReqTimeout); + this.nextReqTimeout = 0; + this.nextReq = 0; + + if(this.checkConnectionPeriod < 1.5) { + this.checkConnectionPeriod = 0; + } + + this.checkConnectionTimeout = setTimeout(this.checkConnection.bind(this), this.checkConnectionPeriod * 1000 | 0); + this.checkConnectionPeriod = Math.min(30, (1 + this.checkConnectionPeriod) * 1.5); + + document.body.addEventListener('online', this.onOnlineCb, false); + document.body.addEventListener('focus', this.onOnlineCb, false); + } else { + this.checkLongPoll(); + + this.scheduleRequest(); + + document.body.removeEventListener('online', this.onOnlineCb); + document.body.removeEventListener('focus', this.onOnlineCb); + + clearTimeout(this.checkConnectionTimeout); + this.checkConnectionTimeout = 0; + } + } + + public performScheduledRequest() { + // this.log('scheduled', this.dcID, this.iii) + if(this.offline || NetworkerFactory.akStopped) { + this.log('Cancel scheduled'); + return false; + } + + this.nextReq = 0; + if(this.pendingAcks.length) { + var ackMsgIDs: Array = this.pendingAcks.slice(); + /* for(var i = 0; i < this.pendingAcks.length; i++) { + ackMsgIDs.push(this.pendingAcks[i]); + } */ + // this.log('acking messages', ackMsgIDs) + this.wrapMtpMessage({ + _: 'msgs_ack', + msg_ids: ackMsgIDs + }, { + notContentRelated: true, + noSchedule: true + }); + } + + if(this.pendingResends.length) { + var resendMsgIDs: Array = this.pendingResends.slice(); + var resendOpts = { + noSchedule: true, + notContentRelated: true, + messageID: '' // will set in wrapMtpMessage->pushMessage + }; + /* for(var i = 0; i < this.pendingResends.length; i++) { + resendMsgIDs.push(this.pendingResends[i]); + } */ + // this.log('resendReq messages', resendMsgIDs) + this.wrapMtpMessage({ + _: 'msg_resend_req', + msg_ids: resendMsgIDs + }, resendOpts); + + this.lastResendReq = { + req_msg_id: resendOpts.messageID, + resend_msg_ids: resendMsgIDs + }; + } + + var messages: Message[] = [], + message: Message; + var messagesByteLen = 0; + var currentTime: number = tsNow(); + var hasApiCall = false; + var hasHttpWait = false; + var lengthOverflow = false; + var singlesCount = 0; + var self = this; + + for(let messageID in this.pendingMessages) { + let value = this.pendingMessages[messageID]; + + if(!value || value >= currentTime) { + if(message = this.sentMessages[messageID]) { + //this.log('performScheduledRequest message:', message); + var messageByteLength = (/* message.body.byteLength || */message.body.length) + 32; + if(!message.notContentRelated && + lengthOverflow) { + continue; // maybe break here + } + + if(!message.notContentRelated && + messagesByteLen && + messagesByteLen + messageByteLength > 655360) { // 640 Kb + this.log.warn('lengthOverflow', message); + lengthOverflow = true; + continue; // maybe break here + } + + if(message.singleInRequest) { + singlesCount++; + if(singlesCount > 1) { + continue; // maybe break here + } + } + + messages.push(message); + messagesByteLen += messageByteLength; + if(message.isAPI) { + hasApiCall = true; + } else if(message.longPoll) { + hasHttpWait = true; + } + } else { + // this.log(message, messageID) + } + + delete self.pendingMessages[messageID]; + } + } + + if(hasApiCall && !hasHttpWait && this.transport instanceof HTTP) { + var serializer = new TLSerialization({mtproto: true}); + serializer.storeMethod('http_wait', { + max_delay: 500, + wait_after: 150, + max_wait: 3000 + }); + + messages.push({ + msg_id: timeManager.generateID(), + seq_no: this.generateSeqNo(), + body: serializer.getBytes() + }); + } + + if(!messages.length) { + // this.log('no scheduled messages') + return; + } + + var noResponseMsgs: Array = []; + + if(messages.length > 1) { + var container = new TLSerialization({ + mtproto: true, + startMaxLength: messagesByteLen + 64 + }); + + container.storeInt(0x73f1f8dc, 'CONTAINER[id]'); + container.storeInt(messages.length, 'CONTAINER[count]'); + + var innerMessages: string[] = []; + messages.forEach((message, i) => { + container.storeLong(message.msg_id, 'CONTAINER[' + i + '][msg_id]'); + innerMessages.push(message.msg_id); + container.storeInt(message.seq_no, 'CONTAINER[' + i + '][seq_no]'); + container.storeInt(message.body.length, 'CONTAINER[' + i + '][bytes]'); + container.storeRawBytes(message.body, 'CONTAINER[' + i + '][body]'); + if(message.noResponse) { + noResponseMsgs.push(message.msg_id); + } + }); + + var containerSentMessage: Message = { + msg_id: timeManager.generateID(), + seq_no: this.generateSeqNo(true), + container: true, + inner: innerMessages + }; + + message = Object.assign({ + body: container.getBytes(true) + }, containerSentMessage); + + this.sentMessages[message.msg_id] = containerSentMessage; + + if(Config.Modes.debug || true) { + this.log('Container', innerMessages, message.msg_id, message.seq_no); + } + } else { + if(message.noResponse) { + noResponseMsgs.push(message.msg_id); + } + + this.sentMessages[message.msg_id] = message; + } + + this.pendingAcks = []; + + let promise = this.sendEncryptedRequest(message); + + if(!(this.transport instanceof HTTP)) { + if(noResponseMsgs.length) this.log.error('noResponseMsgs length!', noResponseMsgs); + } else promise.then((result) => { + self.toggleOffline(false); + // this.log('parse for', message) + self.parseResponse(result).then((response) => { + if(Config.Modes.debug) { + this.log('Server response', self.dcID, response); + } + + self.processMessage(response.response, response.messageID, response.sessionID); + + noResponseMsgs.forEach((msgID) => { + if(self.sentMessages[msgID]) { + var deferred = self.sentMessages[msgID].deferred; + delete self.sentMessages[msgID]; + deferred.resolve(); + } + }); + + if(self.transport instanceof HTTP) { + self.checkLongPoll(); + + this.checkConnectionPeriod = Math.max(1.1, Math.sqrt(this.checkConnectionPeriod)); + } + }); + }, (error) => { + this.log.error('Encrypted request failed', error, message); + + if(message.container) { + message.inner.forEach((msgID: string) => { + self.pendingMessages[msgID] = 0; + }); + + delete self.sentMessages[message.msg_id]; + } else { + self.pendingMessages[message.msg_id] = 0; + } + + noResponseMsgs.forEach((msgID) => { + if(self.sentMessages[msgID]) { + var deferred = self.sentMessages[msgID].deferred; + delete self.sentMessages[msgID]; + delete self.pendingMessages[msgID]; + deferred.reject(); + } + }) + + self.toggleOffline(true); + }); + + if(lengthOverflow || singlesCount > 1) { + this.scheduleRequest(); + } + } + + public async getEncryptedMessage(dataWithPadding: ArrayBuffer) { + let msgKey = await this.getMsgKey(dataWithPadding, true); + let keyIv = await this.getAesKeyIv(msgKey, true); + // this.log('after msg key iv') + + let encryptedBytes = await CryptoWorker.aesEncrypt(dataWithPadding, keyIv[0], keyIv[1]); + // this.log('Finish encrypt') + + return { + bytes: encryptedBytes, + msgKey: msgKey + }; + } + + public getDecryptedMessage(msgKey: Uint8Array | number[], encryptedData: Uint8Array | number[]): Promise { + // this.log('get decrypted start') + return this.getAesKeyIv(msgKey, false).then((keyIv) => { + // this.log('after msg key iv') + return CryptoWorker.aesDecrypt(encryptedData, keyIv[0], keyIv[1]); + }); + } + + public sendEncryptedRequest(message: any, options: any = {}) { + var self = this; + + this.debug && this.log('Send encrypted', message, options, this.authKeyID); + // console.trace() + var data = new TLSerialization({ + startMaxLength: message.body.length + 2048 + }); + + data.storeIntBytes(this.serverSalt, 64, 'salt'); + data.storeIntBytes(this.sessionID, 64, 'session_id'); + + data.storeLong(message.msg_id, 'message_id'); + data.storeInt(message.seq_no, 'seq_no'); + + data.storeInt(message.body.length, 'message_data_length'); + data.storeRawBytes(message.body, 'message_data'); + + var dataBuffer = data.getBuffer(); + + var paddingLength = (16 - (data.offset % 16)) + 16 * (1 + nextRandomInt(5)); + var padding = new Array(paddingLength); + MTProto.secureRandom.nextBytes(padding); + + var dataWithPadding = bufferConcat(dataBuffer, padding); + // this.log('Adding padding', dataBuffer, padding, dataWithPadding) + // this.log('auth_key_id', bytesToHex(self.authKeyID)) + + return this.getEncryptedMessage(dataWithPadding).then((encryptedResult) => { + this.debug && this.log('Got encrypted out message', encryptedResult); + + let request = new TLSerialization({ + startMaxLength: encryptedResult.bytes.byteLength + 256 + }); + request.storeIntBytes(self.authKeyID, 64, 'auth_key_id'); + request.storeIntBytes(encryptedResult.msgKey, 128, 'msg_key'); + request.storeRawBytes(encryptedResult.bytes, 'encrypted_data'); + + //var requestData = xhrSendBuffer ? request.getBuffer() : request.getBytes(true) as Uint8Array; + let requestData = request.getBytes(true); + + let baseError = { + code: 406, + type: 'NETWORK_BAD_RESPONSE', + transport: this.transport + }; + + let promise = this.transport.send(requestData); + if(!(this.transport instanceof HTTP)) return promise; + + return promise.then((result) => { + if(!result || !result.byteLength) { + return Promise.reject(baseError); + } + + return result; + }, (error) => { + if(!error.message && !error.type) { + error = Object.assign(baseError, { + type: 'NETWORK_BAD_REQUEST', + originalError: error + }); + } + return Promise.reject(error); + }); + }); + } + + public parseResponse(responseBuffer: Uint8Array) { + this.debug && this.log('Start parsing response'/* , responseBuffer */); + + let self = this; + let deserializer = new TLDeserialization(responseBuffer); + + let authKeyID = deserializer.fetchIntBytes(64, true, 'auth_key_id'); + if(!bytesCmp(authKeyID, this.authKeyID)) { + throw new Error('[MT] Invalid server auth_key_id: ' + authKeyID.hex); + } + let msgKey = deserializer.fetchIntBytes(128, true, 'msg_key'); + let encryptedData = deserializer.fetchRawBytes(responseBuffer.byteLength - deserializer.getOffset(), true, 'encrypted_data'); + + return self.getDecryptedMessage(msgKey, encryptedData).then((dataWithPadding) => { + // this.log('after decrypt') + return self.getMsgKey(dataWithPadding, false).then((calcMsgKey) => { + if(!bytesCmp(msgKey, calcMsgKey)) { + this.log.warn('[MT] msg_keys', msgKey, calcMsgKey); + this.updateSession(); // fix 28.01.2020 + throw new Error('[MT] server msgKey mismatch, updating session'); + } + // this.log('after msgKey check') + + let deserializer = new TLDeserialization(dataWithPadding, {mtproto: true}); + + /* let salt = */deserializer.fetchIntBytes(64, false, 'salt'); // need + let sessionID = deserializer.fetchIntBytes(64, false, 'session_id'); + let messageID = deserializer.fetchLong('message_id'); + + if(!bytesCmp(sessionID, self.sessionID) && + (!self.prevSessionID || !bytesCmp(sessionID, self.prevSessionID))) { + this.log.warn('Sessions', sessionID, self.sessionID, self.prevSessionID, dataWithPadding); + //this.updateSession(); + //this.sessionID = sessionID; + throw new Error('[MT] Invalid server session_id: ' + bytesToHex(sessionID)); + } + + let seqNo = deserializer.fetchInt('seq_no'); + + let totalLength = dataWithPadding.byteLength; + + let messageBodyLength = deserializer.fetchInt('message_data[length]'); + let offset = deserializer.getOffset(); + + if((messageBodyLength % 4) || + messageBodyLength > totalLength - offset) { + throw new Error('[MT] Invalid body length: ' + messageBodyLength); + } + let messageBody = deserializer.fetchRawBytes(messageBodyLength, true, 'message_data'); + + offset = deserializer.getOffset(); + let paddingLength = totalLength - offset; + if(paddingLength < 12 || paddingLength > 1024) { + throw new Error('[MT] Invalid padding length: ' + paddingLength); + } + + //let buffer = bytesToArrayBuffer(messageBody); + deserializer = new TLDeserialization(/* buffer */messageBody, {mtproto: true}); + // костыль + deserializer.override = { + mt_message: (function(this: TLDeserialization, result: any, field: string) { + result.msg_id = this.fetchLong(field + '[msg_id]'); + result.seqno = this.fetchInt(field + '[seqno]'); + result.bytes = this.fetchInt(field + '[bytes]'); + + var offset = this.getOffset(); + + //self.log('mt_message!!!!!', result, field); + + try { + result.body = this.fetchObject('Object', field + '[body]'); + } catch(e) { + self.log.error('parse error', e.message, e.stack); + result.body = { + _: 'parse_error', + error: e + }; + } + if(this.offset != offset + result.bytes) { + // console.warn(dT(), 'set offset', this.offset, offset, result.bytes) + // this.log(result) + this.offset = offset + result.bytes; + } + // this.log('override message', result) + }).bind(deserializer), + mt_rpc_result: (function(this: TLDeserialization, result: any, field: any) { + result.req_msg_id = this.fetchLong(field + '[req_msg_id]'); + + var sentMessage = self.sentMessages[result.req_msg_id]; + var type = sentMessage && sentMessage.resultType || 'Object'; + + if(result.req_msg_id && !sentMessage) { + // console.warn(dT(), 'Result for unknown message', result); + return; + } + + result.result = this.fetchObject(type, field + '[result]'); + // self.log(dT(), 'override rpc_result', sentMessage, type, result); + }).bind(deserializer) + }; + + var response = deserializer.fetchObject('', 'INPUT'); + + return { + response: response, + messageID: messageID, + sessionID: sessionID, + seqNo: seqNo + }; + }); + }); + } + + public applyServerSalt(newServerSalt: string) { + var serverSalt = longToBytes(newServerSalt); + + AppStorage.set({ + ['dc' + this.dcID + '_server_salt']: bytesToHex(serverSalt) + }); + + this.serverSalt = serverSalt; + return true; + } + + public scheduleRequest(delay = 0) { + if(!(this.transport instanceof HTTP)) { // if socket + return this.performScheduledRequest(); + } + + if(this.offline/* && this.transport instanceof HTTP */) { + this.checkConnection('forced schedule'); + } + + /* if(delay && !(this.transport instanceof HTTP)) { + delay = 0; + } */ + + var nextReq = tsNow() + delay; + + if(delay && this.nextReq && this.nextReq <= nextReq) { + return false; + } + + // this.log('schedule req', delay) + // console.trace() + + clearTimeout(this.nextReqTimeout); + this.nextReqTimeout = 0; + if(delay > 0) { + this.nextReqTimeout = window.setTimeout(this.performScheduledRequest.bind(this), delay || 0); + } else { + setTimeout(this.performScheduledRequest.bind(this), 0); + } + + this.nextReq = nextReq; + } + + public ackMessage(msgID: string) { + // this.log('ack message', msgID) + this.pendingAcks.push(msgID); + this.scheduleRequest(30000); + } + + public reqResendMessage(msgID: string) { + this.log('Req resend', msgID); + this.pendingResends.push(msgID); + this.scheduleRequest(100); + } + + public cleanupSent() { + var self = this; + var notEmpty = false; + // this.log('clean start', this.dcID/*, this.sentMessages*/) + Object.keys(this.sentMessages).forEach((msgID) => { + let message = this.sentMessages[msgID]; + + // this.log('clean iter', msgID, message) + if(message.notContentRelated && self.pendingMessages[msgID] === undefined) { + // this.log('clean notContentRelated', msgID) + delete self.sentMessages[msgID]; + } else if(message.container) { + for(var i = 0; i < message.inner.length; i++) { + if(self.sentMessages[message.inner[i]] !== undefined) { + // this.log('clean failed, found', msgID, message.inner[i], self.sentMessages[message.inner[i]].seq_no) + notEmpty = true; + return; + } + } + // this.log('clean container', msgID) + delete self.sentMessages[msgID]; + } else { + notEmpty = true; + } + }); + + return !notEmpty; + } + + public processMessageAck(messageID: string) { + var sentMessage = this.sentMessages[messageID]; + if(sentMessage && !sentMessage.acked) { + delete sentMessage.body; + sentMessage.acked = true; + + return true; + } + + return false; + } + + public processError(rawError: {error_message: string, error_code: number}) { + var matches = (rawError.error_message || '').match(/^([A-Z_0-9]+\b)(: (.+))?/) || []; + rawError.error_code = uintToInt(rawError.error_code); + + return { + code: !rawError.error_code || rawError.error_code <= 0 ? 500 : rawError.error_code, + type: matches[1] || 'UNKNOWN', + description: matches[3] || ('CODE#' + rawError.error_code + ' ' + rawError.error_message), + originalError: rawError + }; + } + + public processMessage(message: any, messageID: string, sessionID: Uint8Array | number[]) { + var msgidInt = parseInt(messageID/* .toString(10) */.substr(0, -10), 10); + if(msgidInt % 2) { + this.log.warn('[MT] Server even message id: ', messageID, message); + return; + } + + this.debug && this.log('process message', message, messageID, sessionID); + + switch(message._) { + case 'msg_container': + var len = message.messages.length; + for(var i = 0; i < len; i++) { + this.processMessage(message.messages[i], message.messages[i].msg_id, sessionID); + } + break; + + case 'bad_server_salt': + this.log('Bad server salt', message); + var sentMessage = this.sentMessages[message.bad_msg_id]; + if(!sentMessage || sentMessage.seq_no != message.bad_msg_seqno) { + this.log(message.bad_msg_id, message.bad_msg_seqno); + throw new Error('[MT] Bad server salt for invalid message'); + } + + this.applyServerSalt(message.new_server_salt); + this.pushResend(message.bad_msg_id); + this.ackMessage(messageID); + break; + + case 'bad_msg_notification': + this.log('Bad msg notification', message); + var sentMessage = this.sentMessages[message.bad_msg_id]; + if(!sentMessage || sentMessage.seq_no != message.bad_msg_seqno) { + this.log(message.bad_msg_id, message.bad_msg_seqno); + throw new Error('[MT] Bad msg notification for invalid message'); + } + + if(message.error_code == 16 || message.error_code == 17) { + if(timeManager.applyServerTime( + bigStringInt(messageID).shiftRight(32).toString(10) + )) { + this.log('Update session'); + this.updateSession(); + } + + var badMessage = this.updateSentMessage(message.bad_msg_id); + if(badMessage) this.pushResend(badMessage.msg_id); // fix 23.01.2020 + this.ackMessage(messageID); + } + break; + + case 'message': + if(this.lastServerMessages.indexOf(messageID) != -1) { + // console.warn('[MT] Server same messageID: ', messageID) + this.ackMessage(messageID); + return; + } + this.lastServerMessages.push(messageID); + if(this.lastServerMessages.length > 100) { + this.lastServerMessages.shift(); + } + this.processMessage(message.body, message.msg_id, sessionID); + break; + + case 'new_session_created': + this.ackMessage(messageID); + + this.log('new_session_created in my head'); + //this.updateSession(); + + this.processMessageAck(message.first_msg_id); + this.applyServerSalt(message.server_salt); + + AppStorage.get('dc').then((baseDcID: number) => { + if(baseDcID == this.dcID && !this.upload && NetworkerFactory.updatesProcessor) { + NetworkerFactory.updatesProcessor(message, true); + } + }); + break; + + case 'msgs_ack': + for(var i = 0; i < message.msg_ids.length; i++) { + this.processMessageAck(message.msg_ids[i]); + } + break; + + case 'msg_detailed_info': + if(!this.sentMessages[message.msg_id]) { + this.ackMessage(message.answer_msg_id); + break; + } + case 'msg_new_detailed_info': + if(this.pendingAcks.indexOf(message.answer_msg_id)) { + break; + } + this.reqResendMessage(message.answer_msg_id); + break; + + case 'msgs_state_info': + this.ackMessage(message.answer_msg_id); + if(this.lastResendReq && + this.lastResendReq.req_msg_id == message.req_msg_id && + this.pendingResends.length + ) { + var badMsgID, pos; + for(let i = 0; i < this.lastResendReq.resend_msg_ids.length; i++) { + badMsgID = this.lastResendReq.resend_msg_ids[i]; + pos = this.pendingResends.indexOf(badMsgID); + if(pos != -1) { + this.pendingResends.splice(pos, 1); + } + } + } + break; + + case 'rpc_result': + this.ackMessage(messageID); + + var sentMessageID = message.req_msg_id; + var sentMessage = this.sentMessages[sentMessageID]; + + this.processMessageAck(sentMessageID); + if(sentMessage) { + var deferred = sentMessage.deferred; + if(message.result._ == 'rpc_error') { + var error = this.processError(message.result); + this.log('Rpc error', error); + if(deferred) { + deferred.reject(error); + } + } else { + if(deferred) { + if(Config.Modes.debug) { + this.debug && this.log('Rpc response', message.result); + } else { + var dRes = message.result._; + if(!dRes) { + if(message.result.length > 5) { + dRes = '[..' + message.result.length + '..]'; + } else { + dRes = message.result; + } + } + this.debug && this.log('Rpc response', dRes, sentMessage); + } + + sentMessage.deferred.resolve(message.result); + } + + if(sentMessage.isAPI && !this.connectionInited) { + this.connectionInited = true; + this.log('Rpc set connectionInited to:', this.connectionInited, this); + } + } + + delete this.sentMessages[sentMessageID]; + } + break; + + default: + this.ackMessage(messageID); + + this.debug && this.log('Update', message); + + if(NetworkerFactory.updatesProcessor !== null) { + NetworkerFactory.updatesProcessor(message, true); + } + break; + } + } +} + +export {MTPNetworker}; diff --git a/src/lib/mtproto/networkerFactory.ts b/src/lib/mtproto/networkerFactory.ts new file mode 100644 index 00000000..e6c219e5 --- /dev/null +++ b/src/lib/mtproto/networkerFactory.ts @@ -0,0 +1,42 @@ +import { dT } from "../utils"; + +import { MTPNetworker } from "./networker"; + +export class NetworkerFactory { + public updatesProcessor: (obj: any, bool: boolean) => void = null; + public offlineInited = false; + public akStopped = false; + + constructor() { + /* $rootScope.retryOnline = function() { + $(document.body).trigger('online'); + } */ + } + + public startAll() { + if(this.akStopped) { + this.akStopped = false; + + if(this.updatesProcessor) { + this.updatesProcessor({ + _: 'new_session_created' + }, true); + } + } + } + + public stopAll() { + this.akStopped = true; + } + + public setUpdatesProcessor(callback: (obj: any, bool: boolean) => void) { + this.updatesProcessor = callback; + } + + public getNetworker(dcID: number, authKey: number[], authKeyID: Uint8Array, serverSalt: number[], options: any) { + console.log(dT(), 'NetworkerFactory: creating new instance of MTPNetworker:', dcID, options); + return new MTPNetworker(dcID, authKey, authKeyID, serverSalt, options); + } +} + +export default new NetworkerFactory(); diff --git a/src/lib/mtproto/passwordManager.ts b/src/lib/mtproto/passwordManager.ts new file mode 100644 index 00000000..1485469e --- /dev/null +++ b/src/lib/mtproto/passwordManager.ts @@ -0,0 +1,303 @@ +import apiManager from "./apiManager"; + +import { bufferConcats, bytesToHex, bytesFromHex, bufferConcat, bytesXor } from "../bin_utils"; + +import CryptoWorker from "../crypto/cryptoworker"; + +import {str2bigInt, greater, isZero, + // @ts-ignore + bigInt2str, powMod, int2bigInt, mult, mod, sub, bitSize, negative, mult, add} from 'leemon'; + +export class PasswordManager { + public getState(options: any = {}) { + return apiManager.invokeApi('account.getPassword', {}, options).then((result) => { + return result + }); + } + + /* public updateSettings(state: any, settings: any) { + var currentHashPromise; + var newHashPromise; + var params: any = { + new_settings: { + _: 'account.passwordInputSettings', + flags: 0, + hint: settings.hint || '' + } + }; + + if(typeof settings.cur_password === 'string' && + settings.cur_password.length > 0) { + currentHashPromise = this.makePasswordHash(state.current_salt, settings.cur_password); + } else { + currentHashPromise = Promise.resolve([]); + } + + if (typeof settings.new_password === 'string' && + settings.new_password.length > 0) { + var saltRandom = new Array(8); + var newSalt = bufferConcat(state.new_salt, saltRandom); + secureRandom.nextBytes(saltRandom); + newHashPromise = this.makePasswordHash(newSalt, settings.new_password); + params.new_settings.new_salt = newSalt; + params.new_settings.flags |= 1; + } else { + if(typeof settings.new_password === 'string') { + params.new_settings.flags |= 1; + params.new_settings.new_salt = []; + } + newHashPromise = Promise.resolve([]); + } + + if(typeof settings.email === 'string') { + params.new_settings.flags |= 2; + params.new_settings.email = settings.email || ''; + } + + return Promise.all([currentHashPromise, newHashPromise]).then((hashes) => { + params.current_password_hash = hashes[0]; + params.new_settings.new_password_hash = hashes[1]; + + return apiManager.invokeApi('account.updatePasswordSettings', params); + }); + } */ + + public check(state: any, password: string, options: any = {}) { + return this.computeCheck(password, state).then((inputCheckPassword) => { + return apiManager.invokeApi('auth.checkPassword', { + password: inputCheckPassword + }, options); + }); + } + + public requestRecovery(options: any = {}) { + return apiManager.invokeApi('auth.requestPasswordRecovery', {}, options); + } + + public recover(code: any, options: any = {}) { + return apiManager.invokeApi('auth.recoverPassword', { + code: code + }, options); + } + + /* public makePasswordHash(salt: any, password: any) { + var passwordUTF8 = unescape(encodeURIComponent(password)); + + var buffer = new ArrayBuffer(passwordUTF8.length); + var byteView = new Uint8Array(buffer); + for(var i = 0, len = passwordUTF8.length; i < len; i++) { + byteView[i] = passwordUTF8.charCodeAt(i); + } + + buffer = bufferConcat(bufferConcat(salt, byteView), salt); + + return CryptoWorker.sha256Hash(buffer); + } */ + public makePasswordHash(password: string, client_salt: Uint8Array, server_salt: Uint8Array) { + var passwordUTF8 = unescape(encodeURIComponent(password)); + + // @ts-ignore + const textEncoder = new TextEncoder("utf-8"); + const passwordBuffer = textEncoder.encode(passwordUTF8); + + // right + + let buffer = bufferConcats(client_salt, passwordBuffer, client_salt); + + return CryptoWorker.sha256Hash(buffer).then((buffer: any) => { + console.log('encoded 1', bytesToHex(new Uint8Array(buffer))); + + buffer = bufferConcats(server_salt, buffer, server_salt); + return CryptoWorker.sha256Hash(buffer).then((buffer: any) => { + + console.log('encoded 2', buffer, bytesToHex(new Uint8Array(buffer))); + + return CryptoWorker.pbkdf2(new Uint8Array(buffer), client_salt, 100000).then((hash: any) => { + console.log('encoded 3', hash, bytesToHex(new Uint8Array(hash))); + + hash = bufferConcats(server_salt, hash, server_salt); + return CryptoWorker.sha256Hash(hash).then((buffer: any) => { + console.log('got password hash:', buffer, bytesToHex(new Uint8Array(buffer))); + + return buffer; + }); + }); + }); + }); + } + + public async computeCheck(password: string, state: any) { + let algo = state.current_algo; + + let p = str2bigInt(bytesToHex(algo.p), 16); + let B = str2bigInt(bytesToHex(state.srp_B), 16); + let g = int2bigInt(algo.g, 32, 256); + + console.log('p', bigInt2str(p, 16)); + console.log('B', bigInt2str(B, 16)); + + /* if(B.compareTo(BigInteger.ZERO) < 0) { + console.error('srp_B < 0') + } + + if(B.compareTo(p) <= 0) { + console.error('srp_B <= p'); + } */ + + /* let check_prime_and_good = (bytes: any, g: number) => { + let good_prime = 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b'; + + if(bytesToHex(bytes) == good_prime && [3, 4, 5, 7].indexOf(g) !== -1) { + return true; + } + + // TO-DO check_prime_and_good_check + }; */ + + //check_prime_and_good(algo.p, g); + + let pw_hash = await this.makePasswordHash(password, new Uint8Array(algo.salt1), + new Uint8Array(algo.salt2)) as ArrayBuffer; + let x = str2bigInt(bytesToHex(new Uint8Array(pw_hash)), 16); + + console.warn('computed pw_hash:', pw_hash, x, bytesToHex(new Uint8Array(pw_hash))); + + + var padArray = function(arr: any[], len: number, fill = 0) { + return Array(len).fill(fill).concat(arr).slice(-len); + }; + + let pForHash = padArray(bytesFromHex(bigInt2str(p, 16)), 256); + let gForHash = padArray(bytesFromHex(bigInt2str(g, 16)), 256); // like uint8array + let b_for_hash = padArray(bytesFromHex(bigInt2str(B, 16)), 256); + + console.log(bytesToHex(pForHash)); + console.log(bytesToHex(gForHash)); + console.log(bytesToHex(b_for_hash)); + + let g_x = powMod(g, x, p); + + console.log('g_x', bigInt2str(g_x, 16)); + + let k: any = await CryptoWorker.sha256Hash(bufferConcat(pForHash, gForHash)); + k = str2bigInt(bytesToHex(new Uint8Array(k)), 16); + + console.log('k', bigInt2str(k, 16)); + + // kg_x = (k * g_x) % p + let kg_x = mod(mult(k, g_x), p); + + // good + + console.log('kg_x', bigInt2str(kg_x, 16)); + + let is_good_mod_exp_first = (modexp: any, prime: any) => { + let diff = sub(prime, modexp); + let min_diff_bits_count = 2048 - 64; + let max_mod_exp_size = 256; + if(negative(diff) || + bitSize(diff) < min_diff_bits_count || + bitSize(modexp) < min_diff_bits_count || + Math.floor((bitSize(modexp) + 7) / 8) > max_mod_exp_size) + return false; + return true; + }; + + let generate_and_check_random = async() => { + //let random_size = 256; + while(true) { + /* let a = addPadding([], random_size, false, true); + a = str2bigInt(bytesToHex(a), 16); */ + //let a = randBigInt(random_size, 1); + let a = str2bigInt(bytesToHex(state.secure_random), 16); + + /* console.log('a', bigInt2str(a, 16)); + break; */ + + let A = powMod(g, a, p); + //console.log('A', bigInt2str(A, 16)); + if(is_good_mod_exp_first(A, p)) { + // a_for_hash = big_num_for_hash(A) + let a_for_hash = bytesFromHex(bigInt2str(A, 16)); + + let s: any = await CryptoWorker.sha256Hash( + bufferConcat(new Uint8Array(a_for_hash), new Uint8Array(b_for_hash))); + let u = str2bigInt(bytesToHex(new Uint8Array(s)), 16); + //if(u > 0) + if(!isZero(u) && !negative(u)) + return {a, a_for_hash, u}; + } + } + } + + + let {a, a_for_hash, u} = await generate_and_check_random(); + + console.log('a', bigInt2str(a, 16)); + console.log('a_for_hash', bytesToHex(a_for_hash)); + console.log('u', bigInt2str(u, 16)); + + // g_b = (B - kg_x) % p + console.log('B - kg_x', bigInt2str(sub(B, kg_x), 16)); + //let g_b = mod(sub(B, kg_x), p); + /* let g_b = sub(B, kg_x); + if(negative(g_b)) g_b = add(g_b, p); + else g_b = mod(g_b, p); */ + /* let g_b; // g_b = sub(mod(B, p), kg_x); + if(!negative(sub(B, kg_x))) g_b = sub(mod(B, p), kg_x); + else g_b = mod(sub(B, kg_x), p); */ + /* let lol = trim(sub(B, kg_x), 10); + console.log('llalala', bigInt2str(lol, 16)); */ + let g_b; + if(!greater(B, kg_x)) { + console.log('negative'); + g_b = add(B, p); + } else g_b = B; + g_b = mod(sub(g_b, kg_x), p); + //g_b = mod(g_b, p); + //console.log('g_b', bigInt2str(g_b, 16)); + + /* if(!is_good_mod_exp_first(g_b, p)) + throw new Error('bad g_b'); */ + + let ux = mult(u, x); + let a_ux = add(a, ux); + let S = powMod(g_b, a_ux, p); + + let K: any = await CryptoWorker.sha256Hash(padArray(bytesFromHex(bigInt2str(S, 16)), 256)); + + let h1: any = await CryptoWorker.sha256Hash(pForHash); + let h2: any = await CryptoWorker.sha256Hash(gForHash); + h1 = bytesXor(new Uint8Array(h1), new Uint8Array(h2)); + + /* let buff = bufferConcat(h1, await CryptoWorker.sha256Hash(algo.salt1)); + buff = bufferConcat(buff, await CryptoWorker.sha256Hash(algo.salt2)); + buff = bufferConcat(buff, a_for_hash); + buff = bufferConcat(buff, b_for_hash); + buff = bufferConcat(buff, K); */ + let buff = bufferConcats(h1, + await CryptoWorker.sha256Hash(algo.salt1), + await CryptoWorker.sha256Hash(algo.salt2), + a_for_hash, + b_for_hash, + K + ); + + let M1: any = await CryptoWorker.sha256Hash(buff); + + let out = { + _: 'inputCheckPasswordSRP', + srp_id: state.srp_id, + A: new Uint8Array(a_for_hash), + M1: new Uint8Array(M1) + }; + + + console.log('out', bytesToHex(out.A), bytesToHex(out.M1)); + return out; + + /* console.log(gForHash, pForHash, bForHash); */ + } +} + +export default new PasswordManager(); diff --git a/src/lib/mtproto/rsaKeysManager.ts b/src/lib/mtproto/rsaKeysManager.ts new file mode 100644 index 00000000..969b0ffa --- /dev/null +++ b/src/lib/mtproto/rsaKeysManager.ts @@ -0,0 +1,147 @@ +import { TLSerialization } from "../tl_utils"; + +import { bytesFromHex, bigStringInt, bytesToHex, bytesFromArrayBuffer } from "../bin_utils"; + +import CryptoWorker from '../crypto/cryptoworker'; + +export class RSAKeysManager { + + /** + * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id + * + * + * -----BEGIN RSA PUBLIC KEY----- + * MIIBCgKCAQEAwVACPi9w23mF3tBkdZz+zwrzKOaaQdr01vAbU4E1pvkfj4sqDsm6 + * lyDONS789sVoD/xCS9Y0hkkC3gtL1tSfTlgCMOOul9lcixlEKzwKENj1Yz/s7daS + * an9tqw3bfUV/nqgbhGX81v/+7RFAEd+RwFnK7a+XYl9sluzHRyVVaTTveB2GazTw + * Efzk2DWgkBluml8OREmvfraX3bkHZJTKX4EQSjBbbdJ2ZXIsRrYOXfaA+xayEGB+ + * 8hdlLmAjbCVfaigxX0CDqWeR1yFL9kwd9P0NsZRPsmoqVwMbMu7mStFai6aIhc3n + * Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB + * -----END RSA PUBLIC KEY----- + * + * -----BEGIN PUBLIC KEY----- + * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAruw2yP/BCcsJliRoW5eB + * VBVle9dtjJw+OYED160Wybum9SXtBBLXriwt4rROd9csv0t0OHCaTmRqBcQ0J8fx + * hN6/cpR1GWgOZRUAiQxoMnlt0R93LCX/j1dnVa/gVbCjdSxpbrfY2g2L4frzjJvd + * l84Kd9ORYjDEAyFnEA7dD556OptgLQQ2e2iVNq8NZLYTzLp5YpOdO1doK+ttrltg + * gTCy5SrKeLoCPPbOgGsdxJxyz5KKcZnSLj16yE5HvJQn0CNpRdENvRUXe6tBP78O + * 39oJ8BTHp9oIjd6XWXAsp2CvK45Ol8wFXGF710w9lwCGNbmNxNYhtIkdqfsEcwR5 + * JwIDAQAB + * -----END PUBLIC KEY----- + * + * -----BEGIN PUBLIC KEY----- + * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvfLHfYH2r9R70w8prHbl + * Wt/nDkh+XkgpflqQVcnAfSuTtO05lNPspQmL8Y2XjVT4t8cT6xAkdgfmmvnvRPOO + * KPi0OfJXoRVylFzAQG/j83u5K3kRLbae7fLccVhKZhY46lvsueI1hQdLgNV9n1cQ + * 3TDS2pQOCtovG4eDl9wacrXOJTG2990VjgnIKNA0UMoP+KF03qzryqIt3oTvZq03 + * DyWdGK+AZjgBLaDKSnC6qD2cFY81UryRWOab8zKkWAnhw2kFpcqhI0jdV5QaSCEx + * vnsjVaX0Y1N0870931/5Jb9ICe4nweZ9kSDF/gip3kWLG0o8XQpChDfyvsqB9OLV + * /wIDAQAB + * -----END PUBLIC KEY----- + * + * -----BEGIN PUBLIC KEY----- + * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/ditzm+mPND6xkhzwFI + * z6J/968CtkcSE/7Z2qAJiXbmZ3UDJPGrzqTDHkO30R8VeRM/Kz2f4nR05GIFiITl + * 4bEjvpy7xqRDspJcCFIOcyXm8abVDhF+th6knSU0yLtNKuQVP6voMrnt9MV1X92L + * GZQLgdHZbPQz0Z5qIpaKhdyA8DEvWWvSUwwc+yi1/gGaybwlzZwqXYoPOhwMebzK + * Uk0xW14htcJrRrq+PXXQbRzTMynseCoPIoke0dtCodbA3qQxQovE16q9zz4Otv2k + * 4j63cz53J+mhkVWAeWxVGI0lltJmWtEYK6er8VqqWot3nqmWMXogrgRLggv/Nbbo + * oQIDAQAB + * -----END PUBLIC KEY----- + * + * -----BEGIN PUBLIC KEY----- + * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmpxVY7ld/8DAjz6F6q0 + * 5shjg8/4p6047bn6/m8yPy1RBsvIyvuDuGnP/RzPEhzXQ9UJ5Ynmh2XJZgHoE9xb + * nfxL5BXHplJhMtADXKM9bWB11PU1Eioc3+AXBB8QiNFBn2XI5UkO5hPhbb9mJpjA + * 9Uhw8EdfqJP8QetVsI/xrCEbwEXe0xvifRLJbY08/Gp66KpQvy7g8w7VB8wlgePe + * xW3pT13Ap6vuC+mQuJPyiHvSxjEKHgqePji9NP3tJUFQjcECqcm0yV7/2d0t/pbC + * m+ZH1sadZspQCEPPrtbkQBlvHb4OLiIWPGHKSMeRFvp3IWcmdJqXahxLCUS1Eh6M + * AQIDAQAB + * -----END PUBLIC KEY----- + * + * Bytes can be got via + * $ openssl rsa -pubin -in key.pub -text -noout + */ + + private publisKeysHex = [{ + modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f', + exponent: '010001' + }, { + modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927', + exponent: '010001' + }, { + modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff', + exponent: '010001' + }, { + modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1', + exponent: '010001' + }, { + modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01', + exponent: '010001' + }]; + + private publicKeysParsed: { + [hex: string]: { + modulus: string, + exponent: string + } + } = {}; + private prepared = false; + private preparePromise: Promise = null; + + // prepareRsaKeys + public prepare(): Promise { + if(this.preparePromise) return this.preparePromise; + else if(this.prepared) { + return Promise.resolve(); + } + + return this.preparePromise = Promise.all(this.publisKeysHex.map(keyParsed => { + let RSAPublicKey = new TLSerialization(); + RSAPublicKey.storeBytes(bytesFromHex(keyParsed.modulus), 'n'); + RSAPublicKey.storeBytes(bytesFromHex(keyParsed.exponent), 'e'); + + let buffer = RSAPublicKey.getBuffer(); + + return CryptoWorker.sha1Hash(buffer).then(hash => { + let fingerprintBytes = bytesFromArrayBuffer(hash).slice(-8); + fingerprintBytes.reverse(); + + this.publicKeysParsed[bytesToHex(fingerprintBytes)] = { + modulus: keyParsed.modulus, + exponent: keyParsed.exponent + }; + }); + })).then(() => { + this.prepared = true; + + console.log('[MT] Prepared keys'); + this.preparePromise = null; + }); + } + + // selectRsaKeyByFingerPrint + public async select(fingerprints: Array) { + await this.prepare(); + + var fingerprintHex, foundKey, i; + for(i = 0; i < fingerprints.length; i++) { + fingerprintHex = bigStringInt(fingerprints[i]).toString(16); + + if(fingerprintHex.length < 16) { + fingerprintHex = new Array(16 - fingerprintHex.length).fill('0').join('') + fingerprintHex; + } + + console.log(fingerprintHex, this.publicKeysParsed); + if(foundKey = this.publicKeysParsed[fingerprintHex]) { + return Object.assign({ + fingerprint: fingerprints[i] + }, foundKey); + } + } + + return false; + } +} + +export default new RSAKeysManager(); diff --git a/src/lib/mtproto/serverTimeManager.ts b/src/lib/mtproto/serverTimeManager.ts new file mode 100644 index 00000000..a4cd89fa --- /dev/null +++ b/src/lib/mtproto/serverTimeManager.ts @@ -0,0 +1,31 @@ +import AppStorage from '../storage'; +import { tsNow } from '../utils'; + +export class ServerTimeManager { + public timestampNow = tsNow(true); + public midnightNoOffset = this.timestampNow - (this.timestampNow % 86400); + public midnightOffseted = new Date(); + + public midnightOffset = this.midnightNoOffset - (Math.floor(+this.midnightOffseted / 1000)); + + public serverTimeOffset = 0; + public timeParams = { + midnightOffset: this.midnightOffset, + serverTimeOffset: this.serverTimeOffset + }; + + constructor() { + this.midnightOffseted.setHours(0); + this.midnightOffseted.setMinutes(0); + this.midnightOffseted.setSeconds(0); + + AppStorage.get('server_time_offset').then((to) => { + if(to) { + this.serverTimeOffset = to; + this.timeParams.serverTimeOffset = to; + } + }); + } +} + +export default new ServerTimeManager(); diff --git a/src/lib/mtproto/timeManager.ts b/src/lib/mtproto/timeManager.ts new file mode 100644 index 00000000..a4224e45 --- /dev/null +++ b/src/lib/mtproto/timeManager.ts @@ -0,0 +1,51 @@ +import AppStorage from '../storage'; +import { tsNow } from '../utils'; +import { nextRandomInt, longFromInts, dT } from '../bin_utils'; + +export class TimeManager { + private lastMessageID = [0, 0]; + private timeOffset = 0; + + constructor() { + AppStorage.get('server_time_offset').then((to: any) => { + if(to) { + this.timeOffset = to; + } + }); + } + + public generateID(): string { + var timeTicks = tsNow(), + timeSec = Math.floor(timeTicks / 1000) + this.timeOffset, + timeMSec = timeTicks % 1000, + random = nextRandomInt(0xFFFF); + + var messageID = [timeSec, (timeMSec << 21) | (random << 3) | 4]; + if(this.lastMessageID[0] > messageID[0] || + this.lastMessageID[0] == messageID[0] && this.lastMessageID[1] >= messageID[1]) { + messageID = [this.lastMessageID[0], this.lastMessageID[1] + 4]; + } + + this.lastMessageID = messageID; + + // console.log('generated msg id', messageID, timeOffset) + + return longFromInts(messageID[0], messageID[1]); + } + + public applyServerTime(serverTime: number, localTime?: number) { + var newTimeOffset = serverTime - Math.floor((localTime || tsNow()) / 1000); + var changed = Math.abs(this.timeOffset - newTimeOffset) > 10; + AppStorage.set({ + server_time_offset: newTimeOffset + }); + + this.lastMessageID = [0, 0]; + this.timeOffset = newTimeOffset; + console.log(dT(), 'Apply server time', serverTime, localTime, newTimeOffset, changed); + + return changed; + } +} + +export default new TimeManager(); diff --git a/src/lib/mtproto/transports/abridged.ts b/src/lib/mtproto/transports/abridged.ts new file mode 100644 index 00000000..17c93d51 --- /dev/null +++ b/src/lib/mtproto/transports/abridged.ts @@ -0,0 +1,32 @@ +import { bytesFromHex, addPadding } from "../../bin_utils"; + +class AbridgedPacketCodec { + public tag = 0xef; + public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]); + + public encodePacket(data: Uint8Array) { + let len = data.byteLength >> 2; + let header: Uint8Array; + if(len < 127) { + header = new Uint8Array([len]); + } else { + header = new Uint8Array([0x7f, ...addPadding(bytesFromHex(len.toString(16)).reverse(), 3, true)/* .reverse() */]); + console.log('got nobody cause im braindead', header, len); + } + + return new Uint8Array([...header, ...data]); + } + + public readPacket(data: Uint8Array) { + let length = data[0]; + if(length >= 127) { // 0x7f + length = data[1] | (data[2] << 8) | (data[3] << 16); + + return data.slice(4, length << 2 + 1); // need +1 + } + + return data.slice(1, length << 2 + 1); // need +1 + } +} + +export default new AbridgedPacketCodec(); diff --git a/src/lib/mtproto/transports/codec.ts b/src/lib/mtproto/transports/codec.ts new file mode 100644 index 00000000..9a817bcf --- /dev/null +++ b/src/lib/mtproto/transports/codec.ts @@ -0,0 +1,7 @@ +export interface Codec { + tag?: number; + obfuscateTag?: Uint8Array; + + encodePacket: (data: Uint8Array) => Uint8Array; + readPacket: (data: Uint8Array) => Uint8Array; +} diff --git a/src/lib/mtproto/transports/http.ts b/src/lib/mtproto/transports/http.ts new file mode 100644 index 00000000..1b84c1d7 --- /dev/null +++ b/src/lib/mtproto/transports/http.ts @@ -0,0 +1,27 @@ +import MTTransport from './transport'; +import { bytesFromArrayBuffer } from '../../bin_utils'; + +export default class HTTP extends MTTransport { + constructor(dcID: number, url: string) { + super(dcID, url); + } + + send = (data: Uint8Array) => { + return fetch(this.url, {method: 'POST', body: data}).then(response => { + console.log('http response', response/* , response.arrayBuffer() */); + + if(response.status != 200) { + response.arrayBuffer().then(buffer => { + console.log('not 200', + new TextDecoder("utf-8").decode(new Uint8Array(bytesFromArrayBuffer(buffer)))); + }) + + throw response; + } + + return response.arrayBuffer().then(buffer => { + return new Uint8Array(bytesFromArrayBuffer(buffer)); + }); + }); + } +} diff --git a/src/lib/mtproto/transports/transport.ts b/src/lib/mtproto/transports/transport.ts new file mode 100644 index 00000000..58883f21 --- /dev/null +++ b/src/lib/mtproto/transports/transport.ts @@ -0,0 +1,7 @@ +export default abstract class MTTransport { + constructor(protected dcID: number, protected url: string) { + + } + + abstract send: (data: Uint8Array/* , msgKey?: Uint8Array*/) => Promise; +} diff --git a/src/lib/mtproto/transports/websocket.ts b/src/lib/mtproto/transports/websocket.ts new file mode 100644 index 00000000..1d9ea8ce --- /dev/null +++ b/src/lib/mtproto/transports/websocket.ts @@ -0,0 +1,376 @@ +import MTTransport from './transport'; + +import aesjs from 'aes-js'; +import abridgetPacketCodec from './abridged'; +import {MTPNetworker} from '../networker'; +import { logger } from '../../polyfill'; +//import '../../types.d.ts'; + +export class Obfuscation { + /** Encription Cipher */ + public enc: aesjs.ModeOfOperation.ModeOfOperationCTR; + + /** Decription Cipher */ + public dec: aesjs.ModeOfOperation.ModeOfOperationCTR; + + //public initPayload: Uint8Array; + + /** + * Creates initialization payload for establishing web-socket connection + */ + public init() { + //if(this.initPayload) return this.initPayload; + + const initPayload = new Uint8Array(64); + initPayload.randomize(); + //initPayload.set(new Uint8Array(bytesFromHex('8546029e63835e4138142813963d2987482dd6126089a1852ffadec149b4375c568dd0591d6b66cc95cec4b280b16f82fb6461ee1842b26fafc9ea76991ea4b1'))); + + while(true) { + let val = (initPayload[3] << 24) | (initPayload[2] << 16) | (initPayload[1] << 8) | (initPayload[0]); + let val2 = (initPayload[7] << 24) | (initPayload[6] << 16) | (initPayload[5] << 8) | (initPayload[4]); + if(initPayload[0] != 0xef && + val != 0x44414548 && + val != 0x54534f50 && + val != 0x20544547 && + val != 0x4954504f && + val != 0xeeeeeeee && + val2 != 0x00000000) { + //initPayload[56] = initPayload[57] = initPayload[58] = initPayload[59] = transport; + break; + } + initPayload.randomize(); + } + + //initPayload[0] = 0xFF; + //let h = initPayload.hex; + //console.log('initPayload.hex', initPayload.hex); + ////////////////////////initPayload.subarray(60, 62).hex = dcID; + //console.log(initPayload.hex, h == initPayload.hex); + + //console.log('initPayload', initPayload.hex); + const reversedPayload = initPayload.slice().reverse(); + //console.log('initPayload', initPayload.hex); + + let encKey = initPayload.slice(8, 40); + let encIv = initPayload.slice(40, 56); + let decKey = reversedPayload.slice(8, 40); + let decIv = reversedPayload.slice(40, 56); + + this.enc = new aesjs.ModeOfOperation.ctr(encKey, new aesjs.Counter(encIv as any)); + this.dec = new aesjs.ModeOfOperation.ctr(decKey, new aesjs.Counter(decIv as any)); + + initPayload.set(abridgetPacketCodec.obfuscateTag, 56); + const encrypted = this.encode(initPayload); + //console.log('encrypted', encrypted.hex); + + initPayload.set(encrypted.slice(56, 64), 56); + //console.log('initPayload.hex', initPayload.hex); + + return /* this.initPayload = */ initPayload; + } + + /** + * Obfuscates data + */ + public encode(payload: Uint8Array) { + return this.enc.encrypt(payload); + } + + + /** + * Decodes obfuscated data + */ + public decode(data: Uint8Array) { + return this.dec.encrypt(data); + } +} + +//let obfuscation = new Obfuscation(); + +export default class Socket extends MTTransport { + /** Connection handler */ + ws: WebSocket | undefined; + + /** Pending requests */ + pending: Array<{resolve?: any, reject?: any, body?: Uint8Array/* , msgKey?: Uint8Array */}> = []; + + /** WebSocket connecting flag */ + connected = false; + + /** Instance transport */ + transport = 'websocket'; + + obfuscation = new Obfuscation(); + + networker: MTPNetworker; + + log: ReturnType; + + debug = false; + + /** + * Creates new web socket handler + */ + constructor(dcID: number, url: string) { + super(dcID, url); + + this.log = logger(`WS-${dcID}`); + + this.log('constructor'); + + this.connect(); + } + + connect = () => { + if(this.ws) { + this.ws.removeEventListener('open', this.handleOpen); + this.ws.removeEventListener('close', this.handleClose); + this.ws.removeEventListener('message', this.handleMessage); + this.ws.close(1000); + } + + this.ws = new WebSocket(/* dcConfigurator.chooseServer(this.dcID, false, 'websocket') */this.url, 'binary'); + this.ws.binaryType = 'arraybuffer'; + this.ws.onopen = this.handleOpen; + this.ws.onclose = this.handleClose; + this.ws.onmessage = this.handleMessage; + }; + + /** + * Handles onopen event at websocket object + */ + handleOpen = () => { + this.log('opened'); + + //obfuscation.init(); + //this.ws.send(new Uint8Array(bytesFromHex('ffc8b30b09c27d42791242f256b5186d3716f6f4f28121cf10cadc2196e496f092f97d13ed2c5a8b7181ca08ebe18e714ccac1cd60e88c4989bb4255682331c0'))); + this.ws.send(this.obfuscation.init()); + this.connected = true; + + this.releasePending(); + + /* let request = new TLSerialization({mtproto: true}); + + //let nonce = new Uint8Array(bytesFromHex('a370ec66e6e03c7b83843f3dfda22fd4').reverse()); + let nonce = new Uint8Array(16).randomize(); + + request.storeMethod('req_pq_multi', {nonce: nonce}); + + let body = request.getBytes(true) as Uint8Array; + + this.send(body); */ + + //this.ws.send(new Uint8Array(bytesFromHex('0e3cae6322eb93d4fc09d924fb17eb7887f1002679dedec754a6130f31e66c19016e6f3693a803b0a44d0567fcd01fe6a38b70fd328d3ebe9302f73454edd93a')).buffer); + //initPayload.slice(56).raw = encrypted.slice(56).raw; + + /* const { dc, thread, protocol } = this.cfg; + const payload = { + dc, thread, protocol, transport: this.transport, + }; + + async('transport_init', payload, (initPayload: Bytes) => { + if (!this.ws) return; + + this.ws.send(initPayload.buffer.buffer); + + this.isConnecting = false; + + log(this.cfg.dc, 'ready'); + + this.releasePending(); + }); */ + }; + + /** + * Handles onclose event at websocket object + */ + handleClose = (event: CloseEvent) => { + this.log('closed', event); + //this.emit('disconnected'); + //this.pending = []; + this.connected = false; + + this.pending.length = 0; + if(this.networker) { + this.networker.cleanupSent(); + } + + this.log('trying to reconnect...'); + this.connect(); + //this.cfg.resolveError(this.cfg.dc, this.cfg.thread, this.transport, this.lastNonce || '', event.code, event.reason); + }; + + /* set networker(networker: MTPNetworker) { + this.networker = networker; + } */ + + /** + * Handles onmessage event at websocket object + */ + handleMessage = (event: MessageEvent) => { + this.debug && this.log('<-', 'handleMessage', event); + + let data = this.obfuscation.decode(new Uint8Array(event.data)); + data = abridgetPacketCodec.readPacket(data); + + if(this.networker) { // authenticated! + //this.pending = this.pending.filter(p => p.body); // clear pending + + this.debug && this.log('redirecting to networker'); + return this.networker.parseResponse(data).then(response => { + this.debug && this.log('redirecting to networker response:', response); + this.networker.processMessage(response.response, response.messageID, response.sessionID); + }); + } + + //console.log('got hex:', data.hex); + let pending = this.pending.shift(); + if(!pending) { + return this.log('no pending for res:', data.hex); + } + + pending.resolve(data); + + /* try { + let deserializer = new TLDeserialization(data.buffer, {mtproto: true}); + let auth_key_id = deserializer.fetchLong('auth_key_id'); + if(auth_key_id != 0) console.error('auth_key_id != 0', auth_key_id); + + let msg_id = deserializer.fetchLong('msg_id'); + if(msg_id == 0) console.error('msg_id == 0', msg_id); + + let msg_len = deserializer.fetchInt('msg_len'); + if(!msg_len) console.error('no msg_len', msg_len); + + let response = deserializer.fetchObject('ResPQ'); + console.log(response); + } catch(e) { + console.error('mtpSendPlainRequest: deserialization went bad', e); + throw e; + } */ + /* const authKey = this.svc.getAuthKey(this.cfg.dc); + const { dc, thread } = this.cfg; + const payload = { + dc, thread, transport: this.transport, authKey: authKey ? authKey.key : '', msg: new Bytes(event.data), + }; + + if (!event.data) return; + + async('transport_decrypt', payload, (msg: Message | PlainMessage | Bytes) => { + if (msg instanceof PlainMessage) this.lastNonce = msg.nonce; + if (msg instanceof Message || msg instanceof PlainMessage) { + this.cfg.resolve(msg, { + dc: this.cfg.dc, + thread: this.cfg.thread, + transport: this.transport, + msgID: msg.id, + }); + } else { + throw new Error(`Unexpected answer: ${msg.hex}`); + } + }); */ + }; + + /** + * Method sends bytes to server via web socket. + */ + send = (body: Uint8Array/* , msgKey?: Uint8Array */) => { + this.debug && this.log('-> body length to pending:', body.length); + + if(this.networker) { + this.pending.push({body}); + this.releasePending(); + } else { + let promise = new Promise((resolve, reject) => { + this.pending.push({resolve, reject, body}); + }); + + this.releasePending(); + + return promise; + } + + /* let promise = new Promise((resolve, reject) => { + this.pending.push({resolve, reject, body}); + + this.releasePending(); + }); + + return promise; */ + + /* // let msg_id = '6784284127384679768';//timeManager.generateID(); + let msg_id = timeManager.generateID(); + console.log('generated msg_id:', msg_id); + let packed = new TLSerialization({ + mtproto: true + }); + //packed.storeRawBytes([0x0a]); + packed.storeLong(0); + packed.storeLong(msg_id); + packed.storeInt(body.byteLength); + packed.storeRawBytes(body); + + console.log('packed', (packed.getBytes(true) as Uint8Array).hex, + bytesToHex([...new Uint8Array(bigStringInt(msg_id).toByteArray())])); + + let toEncode = abridgetPacketCodec.encodePacket(packed.getBytes(true) as Uint8Array); + + console.log('send req_pq:', toEncode.hex); + //let enc = obfuscation.encode(request.getBytes(true) as Uint8Array); + let enc = obfuscation.encode(toEncode); + //let enc = new Uint8Array(bytesFromHex('b6f899247854750f879db416e95fd41145e8f7f910741b50c02a20025d3f9cbd09b09f3306be378c43')); + //let enc = obfuscation.encode(new Uint8Array(bytesFromHex('00000000000000000424ec94a191265e14000000f18e7ebef8c6203ebc2ae31b44a3aafd8afdf367'))); + console.log('send req_pq:', enc.hex); + this.ws.send(enc); */ + + //if (msg instanceof PlainMessage) this.lastNonce = msg.nonce; + + /* if(this.ws && this.ws.readyState === 1) { + const authKey = this.svc.getAuthKey(this.cfg.dc); + const { dc, thread } = this.cfg; + const payload = { + msg, dc, thread, transport: this.transport, authKey: authKey ? authKey.key : '', + }; + + async('transport_encrypt', payload, (data: Bytes) => { + if (this.ws) this.ws.send(data.buffer.buffer); + }); + + this.releasePending(); + return; + } */ + + //this.pending.push(msg); + } + + releasePending() { + if(!this.connected) { + //this.connect(); + return; + } + + let length = this.pending.length; + for(let i = length - 1; i >= 0; --i) { + let pending = this.pending[i]; + let {body} = pending; + if(body) { + let toEncode = abridgetPacketCodec.encodePacket(body); + + //console.log('send before obf:', /* body.hex, nonce.hex, */ toEncode.hex); + let enc = this.obfuscation.encode(toEncode); + //console.log('send after obf:', enc.hex); + + this.debug && this.log('-> body length to send:', enc.length); + + this.ws.send(enc); + + if(!pending.resolve) { // remove if no response needed + this.pending.splice(i, 1); + } + + delete pending.body; + } + } + } +} + \ No newline at end of file diff --git a/src/lib/polyfill.ts b/src/lib/polyfill.ts new file mode 100644 index 00000000..fdcaa97e --- /dev/null +++ b/src/lib/polyfill.ts @@ -0,0 +1,65 @@ +import { bytesToHex, bytesFromHex, dT, bufferConcats } from "./bin_utils"; +import { MTProto } from "./mtproto/mtproto"; + +export function logger(prefix: string) { + function Log(...args: any[]) { + return console.log(dT(), '[' + prefix + ']:', ...args); + } + + Log.warn = function(...args: any[]) { + return console.warn(dT(), '[' + prefix + ']:', ...args); + }; + + Log.info = function(...args: any[]) { + return console.info(dT(), '[' + prefix + ']:', ...args); + }; + + Log.error = function(...args: any[]) { + return console.error(dT(), '[' + prefix + ']:', ...args); + }; + + Log.trace = function(...args: any[]) { + return console.trace(dT(), '[' + prefix + ']:', ...args); + } + + return Log; +}; + +Object.defineProperty(Uint8Array.prototype, 'hex', { + get: function(): string { + return bytesToHex([...this]); + }, + + set: function(str: string) { + this.set(bytesFromHex(str)); + }, + enumerable: true, + configurable: true +}); + +Uint8Array.prototype.randomize = function() { + MTProto.secureRandom.nextBytes(this); + return this; +}; + +Uint8Array.prototype.concat = function(...args: Array) { + return bufferConcats(this, ...args); +}; + +/* Uint8Array.prototype.concat = function(array: number[] | ArrayBuffer | Uint8Array) { + let res = new Uint8Array(this.length + (array instanceof ArrayBuffer ? array.byteLength : array.length)); + + res.set(this); + res.set(array instanceof ArrayBuffer ? new Uint8Array(array) : array, this.length); + + return res; +}; */ + +declare global { + interface Uint8Array { + hex: string; + randomize: () => Uint8Array, + //concat: (array: number[] | ArrayBuffer | Uint8Array) => Uint8Array + concat: (...args: Array) => Uint8Array + } +} diff --git a/src/lib/richtextprocessor.js b/src/lib/richtextprocessor.js new file mode 100644 index 00000000..affcb585 --- /dev/null +++ b/src/lib/richtextprocessor.js @@ -0,0 +1,786 @@ +import {encodeEntities, copy/* , emojiUnicode */} from './utils'; + +var EmojiHelper = { + emojiMap: (code) => { return code; }, + shortcuts: [], + emojis: [] +}; + +var emojiData = Config.Emoji; +var emojiIconSize = emojiData.img_size; +var emojiSupported = navigator.userAgent.search(/OS X|iPhone|iPad|iOS|Android/i) != -1/* && false */, + emojiCode; +//var emojiRegExp = '\\u0023\\u20E3|\\u00a9|\\u00ae|\\u203c|\\u2049|\\u2139|[\\u2194-\\u2199]|\\u21a9|\\u21aa|\\u231a|\\u231b|\\u23e9|[\\u23ea-\\u23ec]|\\u23f0|\\u24c2|\\u25aa|\\u25ab|\\u25b6|\\u2611|\\u2614|\\u26fd|\\u2705|\\u2709|[\\u2795-\\u2797]|\\u27a1|\\u27b0|\\u27bf|\\u2934|\\u2935|[\\u2b05-\\u2b07]|\\u2b1b|\\u2b1c|\\u2b50|\\u2b55|\\u3030|\\u303d|\\u3297|\\u3299|[\\uE000-\\uF8FF\\u270A-\\u2764\\u2122\\u25C0\\u25FB-\\u25FE\\u2615\\u263a\\u2648-\\u2653\\u2660-\\u2668\\u267B\\u267F\\u2693\\u261d\\u26A0-\\u26FA\\u2708\\u2702\\u2601\\u260E]|[\\u2600\\u26C4\\u26BE\\u23F3\\u2764]|\\uD83D[\\uDC00-\\uDFFF]|\\uD83C[\\uDDE8-\\uDDFA\uDDEC]\\uD83C[\\uDDEA-\\uDDFA\uDDE7]|[0-9]\\u20e3|\\uD83C[\\uDC00-\\uDFFF]'; +//var emojiRegExp = '\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]'; +var emojiRegExp = '\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC6F\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDF])\\u200D[\\u2640\\u2642])\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])'; +var alphaCharsRegExp = 'a-z' + + '\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff' + // Latin-1 + '\\u0100-\\u024f' + // Latin Extended A and B + '\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b' + // IPA Extensions + '\\u02bb' + // Hawaiian + '\\u0300-\\u036f' + // Combining diacritics + '\\u1e00-\\u1eff' + // Latin Extended Additional (mostly for Vietnamese) + '\\u0400-\\u04ff\\u0500-\\u0527' + // Cyrillic + '\\u2de0-\\u2dff\\ua640-\\ua69f' + // Cyrillic Extended A/B + '\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7' + + '\\u05d0-\\u05ea\\u05f0-\\u05f4' + // Hebrew + '\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41' + + '\\ufb43-\\ufb44\\ufb46-\\ufb4f' + // Hebrew Pres. Forms + '\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc' + + '\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff' + // Arabic + '\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe' + // Arabic Supplement and Extended A + '\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb' + // Pres. Forms A + '\\ufe70-\\ufe74\\ufe76-\\ufefc' + // Pres. Forms B + '\\u200c' + // Zero-Width Non-Joiner + '\\u0e01-\\u0e3a\\u0e40-\\u0e4e' + // Thai + '\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF' + // Hangul (Korean) + '\\u3003\\u3005\\u303b' + // Kanji/Han iteration marks + '\\uff21-\\uff3a\\uff41-\\uff5a' + // full width Alphabet + '\\uff66-\\uff9f' + // half width Katakana + '\\uffa1-\\uffdc'; // half width Hangul (Korean) +var alphaNumericRegExp = '0-9\_' + alphaCharsRegExp; +var domainAddChars = '\u00b7'; +// Based on Regular Expression for URL validation by Diego Perini +var urlRegExp = '((?:https?|ftp)://|mailto:)?' + + // user:pass authentication + '(?:\\S{1,64}(?::\\S{0,64})?@)?' + + '(?:' + + // sindresorhus/ip-regexp + '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}' + + '|' + + // host name + '[' + alphaCharsRegExp + '0-9][' + alphaCharsRegExp + domainAddChars + '0-9\-]{0,64}' + + // domain name + '(?:\\.[' + alphaCharsRegExp + '0-9][' + alphaCharsRegExp + domainAddChars + '0-9\-]{0,64}){0,10}' + + // TLD identifier + '(?:\\.(xn--[0-9a-z]{2,16}|[' + alphaCharsRegExp + ']{2,24}))' + + ')' + + // port number + '(?::\\d{2,5})?' + + // resource path + '(?:/(?:\\S{0,255}[^\\s.;,(\\[\\]{}<>"\'])?)?' +var usernameRegExp = '[a-zA-Z\\d_]{5,32}' +var botCommandRegExp = '\\/([a-zA-Z\\d_]{1,32})(?:@(' + usernameRegExp + '))?(\\b|$)' +var fullRegExp = new RegExp('(^| )(@)(' + usernameRegExp + ')|(' + urlRegExp + ')|(\\n)|(' + emojiRegExp + ')|(^|[\\s\\(\\]])(#[' + alphaNumericRegExp + ']{2,64})|(^|\\s)' + botCommandRegExp, 'i') +var emailRegExp = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ +var youtubeRegExp = /^(?:https?:\/\/)?(?:www\.)?youtu(?:|\.be|be\.com|\.b)(?:\/v\/|\/watch\\?v=|e\/|(?:\/\??#)?\/watch(?:.+)v=)(.{11})(?:\&[^\s]*)?/ +var vimeoRegExp = /^(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(\d+)/ +var instagramRegExp = /^https?:\/\/(?:instagr\.am\/p\/|instagram\.com\/p\/)([a-zA-Z0-9\-\_]+)/i +var vineRegExp = /^https?:\/\/vine\.co\/v\/([a-zA-Z0-9\-\_]+)/i +var twitterRegExp = /^https?:\/\/twitter\.com\/.+?\/status\/\d+/i +var facebookRegExp = /^https?:\/\/(?:www\.|m\.)?facebook\.com\/(?:.+?\/posts\/\d+|(?:story\.php|permalink\.php)\?story_fbid=(\d+)(?:&substory_index=\d+)?&id=(\d+))/i +var gplusRegExp = /^https?:\/\/plus\.google\.com\/\d+\/posts\/[a-zA-Z0-9\-\_]+/i +var soundcloudRegExp = /^https?:\/\/(?:soundcloud\.com|snd\.sc)\/([a-zA-Z0-9%\-\_]+)\/([a-zA-Z0-9%\-\_]+)/i +var spotifyRegExp = /(https?:\/\/(open\.spotify\.com|play\.spotify\.com|spoti\.fi)\/(.+)|spotify:(.+))/i +var markdownTestRegExp = /[`_*@]/ +var markdownRegExp = /(^|\s|\n)(````?)([\s\S]+?)(````?)([\s\n\.,:?!;]|$)|(^|\s)(`|\*\*|__)([^\n]+?)\7([\s\.,:?!;]|$)|@(\d+)\s*\((.+?)\)/m +var siteHashtags = { + Telegram: 'tg://search_hashtag?hashtag={1}', + Twitter: 'https://twitter.com/hashtag/{1}', + Instagram: 'https://instagram.com/explore/tags/{1}/', + 'Google Plus': 'https://plus.google.com/explore/{1}' +} +var siteMentions = { + Telegram: '#/im?p=%40{1}', + Twitter: 'https://twitter.com/{1}', + Instagram: 'https://instagram.com/{1}/', + GitHub: 'https://github.com/{1}' +} +var markdownEntities = { + '`': 'messageEntityCode', + '**': 'messageEntityBold', + '__': 'messageEntityItalic' +} +function getEmojiSpritesheetCoords(emojiCode) { + //////////////emojiCode = emojiUnicode(emojiCode); + + let emojiInfo = emojiData.emoji[emojiCode]; + if(!emojiInfo) { + //console.error('no emoji by code:', emojiCode, emojiCode.length, new TextEncoder().encode(emojiCode)); + return null; + } + + let sheetX = 0; + let sheetNo = ''; + if(emojiData.splitted) { + sheetX = emojiInfo[emojiData.keyX] % 6; + sheetNo = (emojiInfo[emojiData.keyX] / 6 | 0) + 1; + } else { + sheetX = emojiInfo[emojiData.keyX]; + } + + /* let xPos = 100 * (((emojiInfo.sheet_x * (img_size + 2)) + 1) / (sheetSizeX - img_size)); + let yPos = 100 * (((emojiInfo.sheet_y * (img_size + 2)) + 1) / (sheetSizeY - img_size)); */ + let xPos = sheetX * emojiData.multiplyX; + let yPos = 100 / emojiData.side * emojiInfo[emojiData.keyY]; + + if(emojiData.splitted) { + /* if(sheetX != 2 && sheetX != 3) { + xPos += ((sheetX + 1) > (6 / 2) ? -1 : 1) * 100 / 204; + } */ + + if(sheetNo == 9) { + xPos = sheetX * 100 / 5; + } else { + xPos = sheetX * 100 / 6; + } + } + + //console.log({row: yPos, column: xPos, sheetNo}); + + return {row: yPos, column: xPos, sheetNo}; +} +function parseEntities (text, options) { + options = options || {} + var match + var raw = text, + url + var entities = [], + emojiCode = '', + emojiCoords, + matchIndex + var rawOffset = 0 + // var start = tsNow() + while ((match = raw.match(fullRegExp))) { + matchIndex = rawOffset + match.index; + + if(match[3]) { // mentions + entities.push({ + _: 'messageEntityMention', + offset: matchIndex + match[1].length, + length: match[2].length + match[3].length + }); + } else if(match[4]) { + if(emailRegExp.test(match[4])) { // email + entities.push({ + _: 'messageEntityEmail', + offset: matchIndex, + length: match[4].length + }); + } else { + var url = false; + var protocol = match[5]; + var tld = match[6]; + var excluded = ''; + if(tld) { // URL + if(!protocol && (tld.substr(0, 4) === 'xn--' || Config.TLD.indexOf(tld.toLowerCase()) !== -1)) { + protocol = 'http://'; + } + + if(protocol) { + var balanced = checkBrackets(match[4]); + if (balanced.length !== match[4].length) { + excluded = match[4].substring(balanced.length); + match[4] = balanced; + } + + url = (match[5] ? '' : protocol) + match[4]; + } + } else { // IP address + url = (match[5] ? '' : 'http://') + match[4]; + } + + if (url) { + entities.push({ + _: 'messageEntityUrl', + offset: matchIndex, + length: match[4].length + }); + } + } + } else if(match[7]) { // New line + entities.push({ + _: 'messageEntityLinebreak', + offset: matchIndex, + length: 1 + }); + } else if(match[8]/* && !emojiSupported */) { // Emoji + if(emojiCode) matchIndex -= match[8].length; + emojiCode += match[8]; + //console.log('hit', match[8], emojiCode.length); + if((emojiCoords = getEmojiSpritesheetCoords(emojiCode))) { + entities.push({ + _: 'messageEntityEmoji', + offset: matchIndex, + length: emojiCode.length, + coords: emojiCoords/* , + title: emojiData[emojiCode][1][0] */ + }); + + emojiCode = ''; + } + } else if(match[10]) { // Hashtag + entities.push({ + _: 'messageEntityHashtag', + offset: matchIndex + match[9].length, + length: match[10].length + }); + } else if(match[12]) { // Bot command + entities.push({ + _: 'messageEntityBotCommand', + offset: matchIndex + match[11].length, + length: 1 + match[12].length + (match[13] ? 1 + match[13].length : 0) + }); + } + + raw = raw.substr(match.index + match[0].length); + rawOffset += match.index + match[0].length; + } + + // if (entities.length) { + // console.log('parse entities', text, entities.slice()) + // } + return entities +} +function parseEmojis (text) { + return text.replace(/:([a-z0-9\-\+\*_]+?):/gi, function (all, shortcut) { + var emojiCode = EmojiHelper.shortcuts[shortcut] + if (emojiCode !== undefined) { + return EmojiHelper.emojis[emojiCode][0] + } + return all + }) +} +function parseMarkdown (text, entities, noTrim) { +  if (!markdownTestRegExp.test(text)) { + return noTrim ? text : text.trim() + } + var raw = text + var match + var newText = [] + var rawOffset = 0 + var matchIndex + while (match = raw.match(markdownRegExp)) { + matchIndex = rawOffset + match.index + newText.push(raw.substr(0, match.index)) + var text = (match[3] || match[8] || match[11]) + rawOffset -= text.length + text = text.replace(/^\s+|\s+$/g, '') + rawOffset += text.length + if (text.match(/^`*$/)) { + newText.push(match[0]) + } + else if (match[3]) { // pre + if (match[5] == '\n') { + match[5] = '' + rawOffset -= 1 + } + newText.push(match[1] + text + match[5]) + entities.push({ + _: 'messageEntityPre', + language: '', + offset: matchIndex + match[1].length, + length: text.length + }) + rawOffset -= match[2].length + match[4].length + } else if (match[7]) { // code|italic|bold + newText.push(match[6] + text + match[9]) + entities.push({ + _: markdownEntities[match[7]], + offset: matchIndex + match[6].length, + length: text.length + }) + rawOffset -= match[7].length * 2 + } else if (match[11]) { // custom mention + newText.push(text) + entities.push({ + _: 'messageEntityMentionName', + user_id: match[10], + offset: matchIndex, + length: text.length + }) + rawOffset -= match[0].length - text.length + } + raw = raw.substr(match.index + match[0].length) + rawOffset += match.index + match[0].length + } + newText.push(raw) + newText = newText.join('') + if (!newText.replace(/\s+/g, '').length) { + newText = text + entities.splice(0, entities.length) + } + if (!entities.length && !noTrim) { + newText = newText.trim() + } + return newText +} +function mergeEntities (currentEntities, newEntities, fromApi) { + var totalEntities = newEntities.slice() + var i + var len = currentEntities.length + var j + var len2 = newEntities.length + var startJ = 0 + var curEntity + var newEntity + var start, end + var cStart, cEnd + var bad + for (i = 0; i < len; i++) { + curEntity = currentEntities[i] + if (fromApi && + curEntity._ != 'messageEntityLinebreak' && + curEntity._ != 'messageEntityEmoji') { + continue + } + // console.log('s', curEntity, newEntities) + start = curEntity.offset + end = start + curEntity.length + bad = false + for (j = startJ; j < len2; j++) { + newEntity = newEntities[j] + cStart = newEntity.offset + cEnd = cStart + newEntity.length + if (cStart <= start) { + startJ = j + } + if (start >= cStart && start < cEnd || + end > cStart && end <= cEnd) { + // console.log('bad', curEntity, newEntity) + if (fromApi && + start >= cStart && end <= cEnd) { + if (newEntity.nested === undefined) { + newEntity.nested = [] + } + curEntity.offset -= cStart + newEntity.nested.push(copy(curEntity)) + } + bad = true + break + } + if (cStart >= end) { + break + } + } + if (bad) { + continue + } + totalEntities.push(curEntity) + } + totalEntities.sort(function (a, b) { + return a.offset - b.offset + }) + // console.log('merge', currentEntities, newEntities, totalEntities) + return totalEntities +} +function wrapRichNestedText (text, nested, options) { + if (nested === undefined) { + return encodeEntities(text) + } + options.hasNested = true + return wrapRichText(text, {entities: nested, nested: true}) +} +function wrapRichText (text, options = {}) { + if(!text || !text.length) { + return '' + } + + var entities = options.entities; + var contextSite = options.contextSite || 'Telegram'; + var contextExternal = contextSite != 'Telegram'; + var emojiFound = false; + if(entities === undefined) { + entities = parseEntities(text, options); + } + + //console.log('wrapRichText got entities:', text, entities); + var len = entities.length; + var entity; + var entityText; + var skipEntity; + var url; + var html = []; + var lastOffset = 0; + var curEmojiSize = options.emojiIconSize || emojiIconSize; + for(var i = 0; i < len; i++) { + entity = entities[i]; + if(entity.offset > lastOffset) { + html.push( + encodeEntities(text.substr(lastOffset, entity.offset - lastOffset)) + ); + } else if(entity.offset < lastOffset) { + continue; + } + + skipEntity = false; + entityText = text.substr(entity.offset, entity.length); + switch(entity._) { + case 'messageEntityMention': + var contextUrl = !options.noLinks && siteMentions[contextSite] + if (!contextUrl) { + skipEntity = true + break + } + var username = entityText.substr(1) + var attr = '' + if (options.highlightUsername && + options.highlightUsername.toLowerCase() == username.toLowerCase()) { + attr = 'class="im_message_mymention"' + } + html.push( + '', + encodeEntities(entityText), + '' + ) + break + case 'messageEntityMentionName': + if (options.noLinks) { + skipEntity = true + break + } + html.push( + '', + encodeEntities(entityText), + '' + ) + break + case 'messageEntityHashtag': + var contextUrl = !options.noLinks && siteHashtags[contextSite] + if (!contextUrl) { + skipEntity = true + break + } + var hashtag = entityText.substr(1) + html.push( + '', + encodeEntities(entityText), + '' + ) + break + case 'messageEntityEmail': + if (options.noLinks) { + skipEntity = true + break + } + html.push( + '', + encodeEntities(entityText), + '' + ) + break + case 'messageEntityUrl': + case 'messageEntityTextUrl': + var inner + if (entity._ == 'messageEntityTextUrl') { + url = entity.url + url = wrapUrl(url, true) + inner = wrapRichNestedText(entityText, entity.nested, options) + } else { + url = wrapUrl(entityText, false) + inner = encodeEntities(replaceUrlEncodings(entityText)) + } + if (options.noLinks) { + html.push(inner); + } else { + html.push( + '', + inner, + '' + ) + } + break + case 'messageEntityLinebreak': + html.push(options.noLinebreaks ? ' ' : '
') + break + case 'messageEntityEmoji': + + /* var inner = `${encodeEntities(entityText)}`; */ + /* var inner = `\u200B`; */ + + /* if(emojiSupported) { + html.push(encodeEntities(entityText)); + } else { + *///html.push(`${emojiSupported ? encodeEntities(entityText) : inner}\u200B`); + //} + + inner = ``; + + //html.push(`${emojiSupported ? encodeEntities(entityText) : inner}\u200B`); + + html.push(emojiSupported ? `${encodeEntities(entityText)}` : inner); + + emojiFound = true; + break + case 'messageEntityBotCommand': + if (options.noLinks || options.noCommands || contextExternal) { + skipEntity = true + break + } + var command = entityText.substr(1) + var bot + var atPos + if ((atPos = command.indexOf('@')) != -1) { + bot = command.substr(atPos + 1) + command = command.substr(0, atPos) + } else { + bot = options.fromBot + } + html.push( + '', + encodeEntities(entityText), + '' + ) + break + case 'messageEntityBold': + html.push( + '', + wrapRichNestedText(entityText, entity.nested, options), + '' + ) + break + case 'messageEntityItalic': + html.push( + '', + wrapRichNestedText(entityText, entity.nested, options), + '' + ) + break + case 'messageEntityCode': + html.push( + '', + encodeEntities(entityText), + '' + ) + break + case 'messageEntityPre': + html.push( + '
',
+          encodeEntities(entityText),
+          '
' + ) + break + default: + skipEntity = true + } + lastOffset = entity.offset + (skipEntity ? 0 : entity.length) + } + + html.push(encodeEntities(text.substr(lastOffset))); // may be empty string + //console.log(html); + text = html.join('')//$sanitize(html.join('')) + /* if (!options.nested && (emojiFound || options.hasNested)) { + text = text.replace(/\ufe0f|️|�|‍/g, '', text) + var emojiSizeClass = curEmojiSize == 18 ? '' : (' emoji-w' + curEmojiSize) + text = text.replace(/]*)?) class="emoji emoji-(\d)-(\d+)-(\d+)"(.+?)<\/span>/g, + '') + } */ + return text;//$sce.trustAs('html', text) +} +function wrapDraftText (text, options) { + if (!text || !text.length) { + return '' + } + options = options || {} + var entities = options.entities + if (entities === undefined) { + entities = parseEntities(text, options) + } + var i = 0 + var len = entities.length + var entity + var entityText + var skipEntity + var code = [] + var lastOffset = 0 + for (i = 0; i < len; i++) { + entity = entities[i] + if (entity.offset > lastOffset) { + code.push( + text.substr(lastOffset, entity.offset - lastOffset) + ) + } + else if (entity.offset < lastOffset) { + continue + } + skipEntity = false + entityText = text.substr(entity.offset, entity.length) + switch (entity._) { + case 'messageEntityEmoji': + code.push( + ':', + entity.title, + ':' + ) + break + case 'messageEntityCode': + code.push( + '`', entityText, '`' + ) + break + case 'messageEntityBold': + code.push( + '**', entityText, '**' + ) + break + case 'messageEntityItalic': + code.push( + '__', entityText, '__' + ) + break + case 'messageEntityPre': + code.push( + '```', entityText, '```' + ) + break + case 'messageEntityMentionName': + code.push( + '@', entity.user_id, ' (', entityText, ')' + ) + break + default: + skipEntity = true + } + lastOffset = entity.offset + (skipEntity ? 0 : entity.length) + } + code.push(text.substr(lastOffset)) + return code.join('') +} +function checkBrackets (url) { + var urlLength = url.length + var urlOpenBrackets = url.split('(').length - 1 + var urlCloseBrackets = url.split(')').length - 1 + while (urlCloseBrackets > urlOpenBrackets && + url.charAt(urlLength - 1) === ')') { + url = url.substr(0, urlLength - 1) + urlCloseBrackets-- + urlLength-- + } + if (urlOpenBrackets > urlCloseBrackets) { + url = url.replace(/\)+$/, '') + } + return url +} + +function replaceUrlEncodings(urlWithEncoded) { + return urlWithEncoded.replace(/(%[A-Z\d]{2})+/g, function (str) { + try { + return decodeURIComponent(str); + } catch (e) { + return str; + } + }); +} + +function wrapPlainText(text, options = {}) { + if(emojiSupported) { + return text; + } + + if(!text || !text.length) { + return ''; + } + + text = text.replace(/\ufe0f/g, '', text); + var match; + var raw = text; + var text = [], + emojiTitle; + while((match = raw.match(fullRegExp))) { + text.push(raw.substr(0, match.index)) + if(match[8]) { + if((emojiCode = EmojiHelper.emojiMap[match[8]]) && + (emojiTitle = emojiData[emojiCode][1][0])) { + text.push(':' + emojiTitle + ':'); + } else { + text.push(match[0]); + } + } else { + text.push(match[0]); + } + + raw = raw.substr(match.index + match[0].length); + } + text.push(raw); + return text.join(''); +} +function wrapUrl (url, unsafe) { + if (!url.match(/^https?:\/\//i)) { + url = 'http://' + url + } + var tgMeMatch + var telescoPeMatch + if (unsafe == 2) { + url = 'tg://unsafe_url?url=' + encodeURIComponent(url) + } + else if ((tgMeMatch = url.match(/^https?:\/\/t(?:elegram)?\.me\/(.+)/))) { + var fullPath = tgMeMatch[1] + var path = fullPath.split('/') + switch (path[0]) { + case 'joinchat': + url = 'tg://join?invite=' + path[1] + break + case 'addstickers': + url = 'tg://addstickers?set=' + path[1] + break + default: + if (path[1] && path[1].match(/^\d+$/)) { + url = 'tg://resolve?domain=' + path[0] + '&post=' + path[1] + } + else if (path.length == 1) { + var domainQuery = path[0].split('?') + var domain = domainQuery[0] + var query = domainQuery[1] + if (domain == 'iv') { + var match = (query || '').match(/url=([^&=]+)/) + if (match) { + url = match[1] + try { + url = decodeURIComponent(url) + } catch (e) {} + return wrapUrl(url, unsafe) + } + } + url = 'tg://resolve?domain=' + domain + (query ? '&' + query : '') + } + } + } + else if ((telescoPeMatch = url.match(/^https?:\/\/telesco\.pe\/([^/?]+)\/(\d+)/))) { + url = 'tg://resolve?domain=' + telescoPeMatch[1] + '&post=' + telescoPeMatch[2] + } + else if (unsafe) { + url = 'tg://unsafe_url?url=' + encodeURIComponent(url) + } + return url +} + +let RichTextProcessor = { + wrapRichText: wrapRichText, + wrapPlainText: wrapPlainText, + wrapDraftText: wrapDraftText, + wrapUrl: wrapUrl, + parseEntities: parseEntities, + parseMarkdown: parseMarkdown, + parseEmojis: parseEmojis, + mergeEntities: mergeEntities, + getEmojiSpritesheetCoords: getEmojiSpritesheetCoords +}; + +window.RichTextProcessor = RichTextProcessor; + +export {RichTextProcessor}; + diff --git a/src/lib/services.ts b/src/lib/services.ts new file mode 100644 index 00000000..8f5d4f8c --- /dev/null +++ b/src/lib/services.ts @@ -0,0 +1,60 @@ +console.log('Services included!'); + +import AppUsersManager from './appManagers/appUsersManager'; +import AppChatsManager from './appManagers/appChatsManager'; +import AppMessagesIDsManager from './appManagers/appMessagesIDsManager'; +import ApiUpdatesManager from './appManagers/apiUpdatesManager'; +import AppPhotosManager from './appManagers/appPhotosManager'; +import AppDialogsManager from './appManagers/appDialogsManager'; +import AppMessagesManager from './appManagers/appMessagesManager'; +import AppProfileManager from './appManagers/appProfileManager'; +import AppImManager from './appManagers/appImManager'; +import AppPeersManager from './appManagers/appPeersManager'; +import AppStickersManager from './appManagers/appStickersManager'; +import AppSidebarRight from './appManagers/appSidebarRight'; +import AppSidebarLeft from './appManagers/appSidebarLeft'; +//import AppSharedMediaManager from './appManagers/appSharedMediaManager'; + +export const appUsersManager = AppUsersManager; +export const appChatsManager = AppChatsManager; +export const appMessagesIDsManager = AppMessagesIDsManager; +export const apiUpdatesManager = ApiUpdatesManager; +export const appPhotosManager = AppPhotosManager; +export const appDialogsManager = AppDialogsManager; +export const appMessagesManager = AppMessagesManager; +export const appProfileManager = AppProfileManager; +export const appImManager = AppImManager; +export const appPeersManager = AppPeersManager; +export const appStickersManager = AppStickersManager; +//export const appSharedMediaManager = AppSharedMediaManager; +export const appSidebarRight = AppSidebarRight; +export const appSidebarLeft = AppSidebarLeft; + + +export type DialogDom = { + avatarDiv: HTMLDivElement, + captionDiv: HTMLDivElement, + titleSpan: HTMLSpanElement, + statusSpan: HTMLSpanElement, + lastTimeSpan: HTMLSpanElement, + unreadMessagesSpan: HTMLSpanElement, + lastMessageSpan: HTMLSpanElement, + listEl: HTMLLIElement +}; + +(window as any).Services = { + appUsersManager, + appChatsManager, + apiUpdatesManager, + appMessagesManager, + appPeersManager, + appProfileManager, + appPhotosManager, + + appDialogsManager, + appImManager, + appStickersManager, + appSidebarRight, + appSidebarLeft + //appSharedMediaManager +}; diff --git a/src/lib/storage.ts b/src/lib/storage.ts new file mode 100644 index 00000000..45361e0a --- /dev/null +++ b/src/lib/storage.ts @@ -0,0 +1,50 @@ +import {Storage as ConfigStorage, Modes} from './config'; + +class AppStorage { + public setPrefix(newPrefix: string) { + ConfigStorage.prefix(newPrefix); + } + + public noPrefix() { + ConfigStorage.noPrefix(); + } + + private proxy(methodName: string, ..._args: any[]) { + let args = Array.prototype.slice.call(_args); + + let promise = new Promise((resolve, reject) => { + args.push((result: T) => { + resolve(result); + }); + + ConfigStorage[methodName].apply(ConfigStorage, args); + }); + + return promise; + } + + public get(...args: any[]) { + return this.proxy('get', ...args); + } + + public set(...args: any[]) { + //console.trace(...args); + return this.proxy('set', ...args); + } + + public remove(...args: any[]) { + return this.proxy('remove', ...args); + } + + public clear(...args: any[]) { + return this.proxy('clear', ...args); + } + + constructor() { + if(Modes.test) { + this.setPrefix('t_'); + } + } +} + +export default new AppStorage(); diff --git a/src/lib/tl_utils.ts b/src/lib/tl_utils.ts new file mode 100644 index 00000000..67bc535b --- /dev/null +++ b/src/lib/tl_utils.ts @@ -0,0 +1,750 @@ +/*! + * Webogram v0.7.0 - messaging web application for MTProto + * https://github.com/zhukov/webogram + * Copyright (C) 2014 Igor Zhukov + * https://github.com/zhukov/webogram/blob/master/LICENSE + */ + +import {bigint, intToUint, bigStringInt, bytesToHex, gzipUncompress, uintToInt} from './bin_utils'; +import {isObject} from './utils'; +import * as Config from './config'; + +class TLSerialization { + public maxLength = 2048; // 2Kb + public offset = 0; // in bytes + public mtproto = false; + private debug = false;//Config.Modes.debug; + + public buffer: ArrayBuffer; + public intView: Int32Array; + public byteView: Uint8Array; + + constructor(options: any = {}) { + this.maxLength = options.startMaxLength || 2048 // 2Kb + this.mtproto = options.mtproto || false; + this.createBuffer(); + } + + public createBuffer() { + this.buffer = new ArrayBuffer(this.maxLength); + this.intView = new Int32Array(this.buffer); + this.byteView = new Uint8Array(this.buffer); + } + + public getArray() { + let resultBuffer = new ArrayBuffer(this.offset); + let resultArray = new Int32Array(resultBuffer); + + resultArray.set(this.intView.subarray(0, this.offset / 4)); + + return resultArray; + } + + public getBuffer() { + return this.getArray().buffer; + } + + public getBytes(typed: true): Uint8Array; + public getBytes(typed?: false): number[]; + public getBytes(typed?: boolean): number[] | Uint8Array { + if(typed) { + let resultBuffer = new ArrayBuffer(this.offset); + let resultArray = new Uint8Array(resultBuffer); + + resultArray.set(this.byteView.subarray(0, this.offset)); + + return resultArray; + } + + let bytes: number[] = []; + for(var i = 0; i < this.offset; i++) { + bytes.push(this.byteView[i]); + } + return bytes; + } + + public checkLength(needBytes: number) { + if(this.offset + needBytes < this.maxLength) { + return; + } + + console.trace('Increase buffer', this.offset, needBytes, this.maxLength); + this.maxLength = Math.ceil(Math.max(this.maxLength * 2, this.offset + needBytes + 16) / 4) * 4; + var previousBuffer = this.buffer; + var previousArray = new Int32Array(previousBuffer); + + this.createBuffer(); + + new Int32Array(this.buffer).set(previousArray); + } + + public writeInt(i: number, field: string) { + this.debug && console.log('>>>', i.toString(16), i, field); + + this.checkLength(4); + this.intView[this.offset / 4] = i; + this.offset += 4; + } + + public storeInt(i: number, field?: string) { + this.writeInt(i, (field || '') + ':int'); + } + + public storeBool(i: boolean, field?: string) { + if(i) { + this.writeInt(0x997275b5, (field || '') + ':bool'); + } else { + this.writeInt(0xbc799737, (field || '') + ':bool'); + } + } + + public storeLongP(iHigh: number, iLow: number, field?: string) { + this.writeInt(iLow, (field || '') + ':long[low]'); + this.writeInt(iHigh, (field || '') + ':long[high]'); + } + + public storeLong(sLong: Array | string | number, field?: string) { + if(Array.isArray(sLong)) { + if(sLong.length == 2) { + return this.storeLongP(sLong[0], sLong[1], field); + } else { + return this.storeIntBytes(sLong, 64, field); + } + } + + if(typeof sLong != 'string') { + sLong = sLong ? sLong.toString() : '0'; + } + var divRem = bigStringInt(sLong).divideAndRemainder(bigint(0x100000000)); + + this.writeInt(intToUint(divRem[1].intValue()), (field || '') + ':long[low]'); + this.writeInt(intToUint(divRem[0].intValue()), (field || '') + ':long[high]'); + } + + public storeDouble(f: any, field?: string) { + var buffer = new ArrayBuffer(8); + var intView = new Int32Array(buffer); + var doubleView = new Float64Array(buffer); + + doubleView[0] = f; + + this.writeInt(intView[0], (field || '') + ':double[low]'); + this.writeInt(intView[1], (field || '') + ':double[high]'); + } + + public storeString(s: string, field?: string) { + this.debug && console.log('>>>', s, (field || '') + ':string'); + + if(s === undefined) { + s = ''; + } + var sUTF8 = unescape(encodeURIComponent(s)); + + this.checkLength(sUTF8.length + 8); + + var len = sUTF8.length; + if(len <= 253) { + this.byteView[this.offset++] = len; + } else { + this.byteView[this.offset++] = 254; + this.byteView[this.offset++] = len & 0xFF; + this.byteView[this.offset++] = (len & 0xFF00) >> 8; + this.byteView[this.offset++] = (len & 0xFF0000) >> 16; + } + for(var i = 0; i < len; i++) { + this.byteView[this.offset++] = sUTF8.charCodeAt(i); + } + + // Padding + while(this.offset % 4) { + this.byteView[this.offset++] = 0; + } + } + + public storeBytes(bytes: any, field?: string) { + if(bytes instanceof ArrayBuffer) { + bytes = new Uint8Array(bytes); + } else if(bytes === undefined) { + bytes = []; + } + this.debug && console.log('>>>', bytesToHex(bytes), (field || '') + ':bytes'); + + // if uint8array were json.stringified, then will be: {'0': 123, '1': 123} + var len = bytes.byteLength || bytes.length; + this.checkLength(len + 8) + if(len <= 253) { + this.byteView[this.offset++] = len; + } else { + this.byteView[this.offset++] = 254; + this.byteView[this.offset++] = len & 0xFF; + this.byteView[this.offset++] = (len & 0xFF00) >> 8; + this.byteView[this.offset++] = (len & 0xFF0000) >> 16; + } + + this.byteView.set(bytes, this.offset); + this.offset += len; + + // Padding + while(this.offset % 4) { + this.byteView[this.offset++] = 0; + } + } + + public storeIntBytes(bytes: any, bits: any, field?: string) { + if(bytes instanceof ArrayBuffer) { + bytes = new Uint8Array(bytes); + } + + var len = bytes.length; + if((bits % 32) || (len * 8) != bits) { + throw new Error('Invalid bits: ' + bits + ', ' + bytes.length); + } + + this.debug && console.log('>>>', bytesToHex(bytes), (field || '') + ':int' + bits); + this.checkLength(len); + + this.byteView.set(bytes, this.offset); + this.offset += len; + } + + public storeRawBytes(bytes: any, field?: string) { + if(bytes instanceof ArrayBuffer) { + bytes = new Uint8Array(bytes); + } + + var len = bytes.length; + + this.debug && console.log('>>>', bytesToHex(bytes), (field || '')); + this.checkLength(len); + + this.byteView.set(bytes, this.offset); + this.offset += len; + } + + public storeMethod(methodName: string, params: any) { + var schema = this.mtproto ? Config.Schema.MTProto : Config.Schema.API; + var methodData: any = false, + i; + + for(i = 0; i < schema.methods.length; i++) { + if(schema.methods[i].method == methodName) { + methodData = schema.methods[i]; + break; + } + } + if(!methodData) { + throw new Error('No method ' + methodName + ' found'); + } + + this.storeInt(intToUint(methodData.id), methodName + '[id]'); + + var param, type; + var i, condType; + var fieldBit; + var len = methodData.params.length; + for(i = 0; i < len; i++) { + param = methodData.params[i]; + type = param.type; + if(type.indexOf('?') !== -1) { + condType = type.split('?'); + fieldBit = condType[0].split('.'); + if(!(params[fieldBit[0]] & (1 << fieldBit[1]))) { + continue; + } + type = condType[1]; + } + + this.storeObject(params[param.name], type, methodName + '[' + param.name + ']'); + } + + return methodData.type; + } + + public storeObject(obj: any, type: string, field?: string) { + //console.log('storeObject', obj, type, field, this.offset, this.getBytes(true).hex); + switch(type) { + case '#': + case 'int': + return this.storeInt(obj, field); + case 'long': + return this.storeLong(obj, field); + case 'int128': + return this.storeIntBytes(obj, 128, field); + case 'int256': + return this.storeIntBytes(obj, 256, field); + case 'int512': + return this.storeIntBytes(obj, 512, field); + case 'string': + return this.storeString(obj, field); + case 'bytes': + return this.storeBytes(obj, field); + case 'double': + return this.storeDouble(obj, field); + case 'Bool': + return this.storeBool(obj, field); + case 'true': + return + } + + if(Array.isArray(obj)) { + if(type.substr(0, 6) == 'Vector') { + this.writeInt(0x1cb5c415, field + '[id]'); + } else if (type.substr(0, 6) != 'vector') { + throw new Error('Invalid vector type ' + type); + } + + var itemType = type.substr(7, type.length - 8); // for "Vector" + this.writeInt(obj.length, field + '[count]'); + for(var i = 0; i < obj.length; i++) { + this.storeObject(obj[i], itemType, field + '[' + i + ']'); + } + + return true; + } else if (type.substr(0, 6).toLowerCase() == 'vector') { + throw new Error('Invalid vector object'); + } + + if(!isObject(obj)) { + throw new Error('Invalid object for type ' + type); + } + + var schema = this.mtproto ? Config.Schema.MTProto : Config.Schema.API; + var predicate = obj['_']; + var isBare = false; + var constructorData: any = false; + + if(isBare = (type.charAt(0) == '%')) { + type = type.substr(1); + } + + for(i = 0; i < schema.constructors.length; i++) { + if(schema.constructors[i].predicate == predicate) { + constructorData = schema.constructors[i]; + break; + } + } + if(!constructorData) { + throw new Error('No predicate ' + predicate + ' found'); + } + + if(predicate == type) { + isBare = true; + } + + if(!isBare) { + this.writeInt(intToUint(constructorData.id), field + '[' + predicate + '][id]'); + } + + var param, type: string; + var condType; + var fieldBit; + var len = constructorData.params.length; + for(i = 0; i < len; i++) { + param = constructorData.params[i]; + type = param.type; + + if(type.indexOf('?') !== -1) { + condType = type.split('?'); + fieldBit = condType[0].split('.'); + if(!(obj[fieldBit[0]] & (1 << +fieldBit[1]))) { + continue; + } + type = condType[1]; + } + + this.storeObject(obj[param.name], type, field + '[' + predicate + '][' + param.name + ']'); + } + + return constructorData.type; + } +} + +class TLDeserialization { + public offset = 0; // in bytes + public override: any; + + public buffer: ArrayBuffer; + //public intView: Uint32Array; + public byteView: Uint8Array; + + // this.debug = + public mtproto: boolean = false; + private debug: boolean; + + constructor(buffer: ArrayBuffer | Uint8Array, options: any = {}) { + //buffer = addPadding(buffer, 4, true); // fix 21.01.2020 for wss + //console.log("TCL: TLDeserialization -> constructor -> buffer", buffer, buffer instanceof ArrayBuffer); + if(buffer instanceof ArrayBuffer) { + this.buffer = buffer; + this.byteView = new Uint8Array(this.buffer); + } else { + this.buffer = buffer.buffer; + this.byteView = buffer; + } + + /* this.buffer = buffer; + //this.intView = new Uint32Array(this.buffer); + this.byteView = new Uint8Array(this.buffer); */ + + //console.log(this.intView); + + this.override = 'override' in options ? options.override : {}; + this.mtproto = 'mtproto' in options ? options.mtproto : false; + this.debug = options.debug !== undefined ? options.debug : /* Config.Modes.debug */false; + } + + public readInt(field: string) { + //if(this.offset >= this.intView.length * 4) { + if((this.byteView.length - this.offset) < 4) { + console.error(this.byteView, this.offset); + throw new Error('Nothing to fetch: ' + field); + } + + //var i = this.intView[this.offset / 4]; + let i = new Uint32Array(this.byteView.buffer.slice(this.offset, this.offset + 4))[0]; + + this.debug/* || field.includes('[dialog][read_outbox_max_id]') */ + && console.log('<<<', i.toString(16), i, field, + this.byteView.slice(this.offset - 16, this.offset + 16), + this.byteView.slice(this.offset - 16, this.offset + 16).hex); + + this.offset += 4; + + return i; + } + + public fetchInt(field?: string) { + return this.readInt((field || '') + ':int'); + } + + public fetchDouble(field?: string) { + var buffer = new ArrayBuffer(8); + var intView = new Int32Array(buffer); + var doubleView = new Float64Array(buffer); + + intView[0] = this.readInt((field || '') + ':double[low]'), + intView[1] = this.readInt((field || '') + ':double[high]'); + + return doubleView[0]; + } + + public fetchLong(field?: string) { + var iLow = this.readInt((field || '') + ':long[low]'); + var iHigh = this.readInt((field || '') + ':long[high]'); + + var longDec = bigint(iHigh).shiftLeft(32).add(bigint(iLow)).toString(); + + return longDec; + } + + public fetchBool(field?: string) { + var i = this.readInt((field || '') + ':bool'); + if(i == 0x997275b5) { + return true; + } else if(i == 0xbc799737) { + return false; + } + + this.offset -= 4; + return this.fetchObject('Object', field); + } + + public fetchString(field?: string) { + var len = this.byteView[this.offset++]; + + if(len == 254) { + var len = this.byteView[this.offset++] | + (this.byteView[this.offset++] << 8) | + (this.byteView[this.offset++] << 16); + } + + var sUTF8 = ''; + for(var i = 0; i < len; i++) { + sUTF8 += String.fromCharCode(this.byteView[this.offset++]); + } + + // Padding + while(this.offset % 4) { + this.offset++; + } + + try { + var s = decodeURIComponent(escape(sUTF8)); + } catch (e) { + var s = sUTF8; + } + + this.debug && console.log('<<<', s, (field || '') + ':string'); + + return s; + } + + public fetchBytes(field?: string) { + var len = this.byteView[this.offset++]; + + if(len == 254) { + len = this.byteView[this.offset++] | + (this.byteView[this.offset++] << 8) | + (this.byteView[this.offset++] << 16); + } + + var bytes = this.byteView.subarray(this.offset, this.offset + len); + this.offset += len; + + // Padding + while(this.offset % 4) { + this.offset++; + } + + this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':bytes'); + + return bytes; + } + + public fetchIntBytes(bits: number, typed: true, field?: string): Uint8Array; + public fetchIntBytes(bits: number, typed?: false, field?: string): number[]; + public fetchIntBytes(bits: number, typed?: boolean, field?: string) { + if(bits % 32) { + throw new Error('Invalid bits: ' + bits); + } + + var len = bits / 8; + if(typed) { + var result = this.byteView.subarray(this.offset, this.offset + len); + this.offset += len; + return result; + } + + var bytes = []; + for(var i = 0; i < len; i++) { + bytes.push(this.byteView[this.offset++]); + } + + this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':int' + bits); + + return bytes; + } + + public fetchRawBytes(len: any, typed: true, field: string): Uint8Array; + public fetchRawBytes(len: any, typed: false, field: string): number[]; + public fetchRawBytes(len: any, typed: boolean, field: string) { + if(len === false) { + len = this.readInt((field || '') + '_length'); + if(len > this.byteView.byteLength) { + throw new Error('Invalid raw bytes length: ' + len + ', buffer len: ' + this.byteView.byteLength); + } + } + + if(typed) { + let bytes = new Uint8Array(len); + bytes.set(this.byteView.subarray(this.offset, this.offset + len)); + this.offset += len; + return bytes; + } + + var bytes = []; + for(var i = 0; i < len; i++) { + bytes.push(this.byteView[this.offset++]); + } + + this.debug && console.log('<<<', bytesToHex(bytes), (field || '')); + + return bytes; + } + + public fetchObject(type: any, field?: string): any { + switch(type) { + case '#': + case 'int': + return this.fetchInt(field); + case 'long': + return this.fetchLong(field); + case 'int128': + return this.fetchIntBytes(128, false, field); + case 'int256': + return this.fetchIntBytes(256, false, field); + case 'int512': + return this.fetchIntBytes(512, false, field); + case 'string': + return this.fetchString(field); + case 'bytes': + return this.fetchBytes(field); + case 'double': + return this.fetchDouble(field); + case 'Bool': + return this.fetchBool(field); + case 'true': + return true; + } + + field = field || type || 'Object'; + + if(type.substr(0, 6) == 'Vector' || type.substr(0, 6) == 'vector') { + if(type.charAt(0) == 'V') { + var constructor = this.readInt(field + '[id]'); + var constructorCmp = uintToInt(constructor); + + if(constructorCmp == 0x3072cfa1) { // Gzip packed + var compressed = this.fetchBytes(field + '[packed_string]'); + var uncompressed = gzipUncompress(compressed); + var newDeserializer = new TLDeserialization(uncompressed); + + return newDeserializer.fetchObject(type, field); + } + + if(constructorCmp != 0x1cb5c415) { + throw new Error('Invalid vector constructor ' + constructor); + } + } + + var len = this.readInt(field + '[count]'); + var result: any = []; + if(len > 0) { + var itemType = type.substr(7, type.length - 8); // for "Vector" + for(var i = 0; i < len; i++) { + result.push(this.fetchObject(itemType, field + '[' + i + ']')); + } + } + + return result; + } + + var schema = (this.mtproto ? Config.Schema.MTProto : Config.Schema.API) as any; + var predicate = false; + var constructorData: any = false; + + if(type.charAt(0) == '%') { + var checkType = type.substr(1); + for(var i = 0; i < schema.constructors.length; i++) { + if(schema.constructors[i].type == checkType) { + constructorData = schema.constructors[i]; + break; + } + } + + if(!constructorData) { + throw new Error('Constructor not found for type: ' + type); + } + } else if(type.charAt(0) >= 97 && type.charAt(0) <= 122) { + for(var i = 0; i < schema.constructors.length; i++) { + if(schema.constructors[i].predicate == type) { + constructorData = schema.constructors[i]; + break; + } + } + + if(!constructorData) { + throw new Error('Constructor not found for predicate: ' + type); + } + } else { + var constructor = this.readInt(field + '[id]'); + var constructorCmp = uintToInt(constructor); + + if(constructorCmp == 0x3072cfa1) { // Gzip packed + var compressed = this.fetchBytes(field + '[packed_string]'); + var uncompressed = gzipUncompress(compressed); + var newDeserializer = new TLDeserialization(uncompressed); + + return newDeserializer.fetchObject(type, field); + } + + var index = schema.constructorsIndex; + if(!index) { + schema.constructorsIndex = index = {}; + for(var i = 0; i < schema.constructors.length; i++) { + index[schema.constructors[i].id] = i; + } + } + + var i: number = index[constructorCmp]; + if(i) { + constructorData = schema.constructors[i]; + } + + var fallback = false; + if(!constructorData && this.mtproto) { + var schemaFallback = Config.Schema.API; + for(i = 0; i < schemaFallback.constructors.length; i++) { + if(+schemaFallback.constructors[i].id == constructorCmp) { + constructorData = schemaFallback.constructors[i]; + + delete this.mtproto; + fallback = true; + break; + } + } + } + + if(!constructorData) { + throw new Error('Constructor not found: ' + constructor + ' ' + this.fetchInt() + ' ' + this.fetchInt()); + } + } + + predicate = constructorData.predicate; + + var result: any = {'_': predicate}; + var overrideKey = (this.mtproto ? 'mt_' : '') + predicate; + var self = this; + + if(this.override[overrideKey]) { + this.override[overrideKey].apply(this, [result, field + '[' + predicate + ']']); + } else { + var i: number, param; + var type, isCond; + var condType, fieldBit; + var value; + var len: number = constructorData.params.length; + for(i = 0; i < len; i++) { + param = constructorData.params[i]; + type = param.type; + + if(type == '#' && result.pFlags === undefined) { + result.pFlags = {}; + } + + if(isCond = (type.indexOf('?') !== -1)) { + condType = type.split('?'); + fieldBit = condType[0].split('.'); + + if(!(result[fieldBit[0]] & (1 << fieldBit[1]))) { + continue; + } + + type = condType[1]; + } + + value = self.fetchObject(type, field + '[' + predicate + '][' + param.name + ']'); + + if(isCond && type === 'true') { + result.pFlags[param.name] = value; + } else { + /* if(param.name == 'read_outbox_max_id') { + console.log(result, param.name, value, field + '[' + predicate + '][' + param.name + ']'); + } */ + + result[param.name] = value; + } + } + } + + if(fallback) { + this.mtproto = true; + } + + return result; + } + + public getOffset() { + return this.offset; + } + + public fetchEnd() { + if(this.offset != this.byteView.length) { + throw new Error('Fetch end with non-empty buffer'); + } + + return true; + } +} + +export {TLDeserialization, TLSerialization}; diff --git a/src/lib/utils.js b/src/lib/utils.js new file mode 100644 index 00000000..b06576aa --- /dev/null +++ b/src/lib/utils.js @@ -0,0 +1,765 @@ +/*! + * Webogram v0.7.0 - messaging web application for MTProto + * https://github.com/zhukov/webogram + * Copyright (C) 2014 Igor Zhukov + * https://github.com/zhukov/webogram/blob/master/LICENSE + */ +var _logTimer = (new Date()).getTime() +export function dT () { + return '[' + (((new Date()).getTime() - _logTimer) / 1000).toFixed(3) + ']' +} + +export function checkClick (e, noprevent) { + if (e.which == 1 && (e.ctrlKey || e.metaKey) || e.which == 2) { + return true + } + + if (!noprevent) { + e.preventDefault() + } + + return false +} + +export function isInDOM (element, parentNode) { + if (!element) { + return false + } + parentNode = parentNode || document.body + if (element == parentNode) { + return true + } + return isInDOM(element.parentNode, parentNode) +} + +export function checkDragEvent(e) { + if (!e || e.target && (e.target.tagName == 'IMG' || e.target.tagName == 'A')) return false + if (e.dataTransfer && e.dataTransfer.types) { + for (var i = 0; i < e.dataTransfer.types.length; i++) { + if (e.dataTransfer.types[i] == 'Files') { + return true + } + } + } else { + return true + } + + return false +} + +export function cancelEvent (event) { + event = event || window.event + if (event) { + event = event.originalEvent || event + + if (event.stopPropagation) event.stopPropagation() + if (event.preventDefault) event.preventDefault() + event.returnValue = false + event.cancelBubble = true + } + + return false +} + +export function onCtrlEnter (textarea, cb) { + $(textarea).on('keydown', function (e) { + if (e.keyCode == 13 && (e.ctrlKey || e.metaKey)) { + cb() + return cancelEvent(e) + } + }) +} + +export function setFieldSelection (field, from, to) { + field = $(field)[0] + try { + field.focus() + if (from === undefined || from === false) { + from = field.value.length + } + if (to === undefined || to === false) { + to = from + } + if (field.createTextRange) { + var range = field.createTextRange() + range.collapse(true) + range.moveEnd('character', to) + range.moveStart('character', from) + range.select() + } + else if (field.setSelectionRange) { + field.setSelectionRange(from, to) + } + } catch(e) {} +} + +export function getFieldSelection (field) { + if (field.selectionStart) { + return field.selectionStart + } + else if (!document.selection) { + return 0 + } + + var c = '\x01' + var sel = document.selection.createRange() + var txt = sel.text + var dup = sel.duplicate() + var len = 0 + + try { + dup.moveToElementText(field) + } catch(e) { + return 0 + } + + sel.text = txt + c + len = dup.text.indexOf(c) + sel.moveStart('character', -1) + sel.text = '' + + // if (browser.msie && len == -1) { + // return field.value.length + // } + return len +} + +export function getRichValue (field) { + if (!field) { + return '' + } + var lines = [] + var line = [] + + getRichElementValue(field, lines, line) + if (line.length) { + lines.push(line.join('')) + } + + var value = lines.join('\n') + value = value.replace(/\u00A0/g, ' ') + + return value +} + +export function getRichValueWithCaret (field) { + if (!field) { + return [] + } + var lines = [] + var line = [] + + var sel = window.getSelection ? window.getSelection() : false + var selNode + var selOffset + if (sel && sel.rangeCount) { + var range = sel.getRangeAt(0) + if (range.startContainer && + range.startContainer == range.endContainer && + range.startOffset == range.endOffset) { + selNode = range.startContainer + selOffset = range.startOffset + } + } + + getRichElementValue(field, lines, line, selNode, selOffset) + + if (line.length) { + lines.push(line.join('')) + } + + var value = lines.join('\n') + var caretPos = value.indexOf('\x01') + if (caretPos != -1) { + value = value.substr(0, caretPos) + value.substr(caretPos + 1) + } + value = value.replace(/\u00A0/g, ' ') + + return [value, caretPos] +} + +export function getRichElementValue (node, lines, line, selNode, selOffset) { + if (node.nodeType == 3) { // TEXT + if (selNode === node) { + var value = node.nodeValue + line.push(value.substr(0, selOffset) + '\x01' + value.substr(selOffset)) + } else { + line.push(node.nodeValue) + } + return + } + if (node.nodeType != 1) { // NON-ELEMENT + return + } + var isSelected = (selNode === node) + var isBlock = node.tagName == 'DIV' || node.tagName == 'P' + var curChild + if (isBlock && line.length || node.tagName == 'BR') { + lines.push(line.join('')) + line.splice(0, line.length) + } + else if (node.tagName == 'IMG') { + if (node.alt) { + line.push(node.alt) + } + } + if (isSelected && !selOffset) { + line.push('\x01') + } + var curChild = node.firstChild + while (curChild) { + getRichElementValue(curChild, lines, line, selNode, selOffset) + curChild = curChild.nextSibling + } + if (isSelected && selOffset) { + line.push('\x01') + } + if (isBlock && line.length) { + lines.push(line.join('')) + line.splice(0, line.length) + } +} + +export function setRichFocus (field, selectNode, noCollapse) { + field.focus() + if (selectNode && + selectNode.parentNode == field && + !selectNode.nextSibling && + !noCollapse) { + field.removeChild(selectNode) + selectNode = null + } + if (window.getSelection && document.createRange) { + var range = document.createRange() + if (selectNode) { + range.selectNode(selectNode) + } else { + range.selectNodeContents(field) + } + if (!noCollapse) { + range.collapse(false) + } + + var sel = window.getSelection() + sel.removeAllRanges() + sel.addRange(range) + } + else if (document.body.createTextRange !== undefined) { + var textRange = document.body.createTextRange() + textRange.moveToElementText(selectNode || field) + if (!noCollapse) { + textRange.collapse(false) + } + textRange.select() + } +} + +export function getSelectedText() { + var sel = ( + window.getSelection && window.getSelection() || + document.getSelection && document.getSelection() || + document.selection && document.selection.createRange().text || '' + ).toString().replace(/^\s+|\s+$/g, '') + + return sel +} + +/* if (Config.Modes.animations && + typeof window.requestAnimationFrame == 'function') { + window.onAnimationFrameCallback = function (cb) { + return (function () { + window.requestAnimationFrame(cb) + }) + } +} else { + window.onAnimationFrameCallback = function (cb) { + return cb + } +} */ + +export const $rootScope = { + $broadcast: (name/* : string */, detail/*? : any */) => { + console.log(dT(), 'Broadcasting ' + name + ' event, with args:', detail); + //console.trace(); + let myCustomEvent = new CustomEvent(name, {detail}); + document.dispatchEvent(myCustomEvent); + }, + $on: (name/* : string */, callback/* : any */) => { + document.addEventListener(name, callback); + }, + + selectedPeerID: 0, + idle: { + isIDLE: false + } +}; + +export const _ = (str/* : string */) => str; + +export function isObject(object) { + return typeof(object) === 'object' && object !== null; +} + +export function tsNow (seconds) { + var t = +new Date() + (window.tsOffset || 0) + return seconds ? Math.floor(t / 1000) : t +} + +export function safeReplaceObject (wasObject, newObject) { + for (var key in wasObject) { + if (!newObject.hasOwnProperty(key) && key.charAt(0) != '$') { + delete wasObject[key] + } + } + for (var key in newObject) { + if (newObject.hasOwnProperty(key)) { + wasObject[key] = newObject[key] + } + } +} + +export function numberWithCommas(x) { + var parts = x.toString().split("."); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); + return parts.join("."); +} + +export function findUpTag(el, tag) { + if(el.tagName == tag) return el; // 03.02.2020 + + while(el.parentNode) { + el = el.parentNode; + if(el.tagName === tag) + return el; + } + return null; +} + +export function isElementInViewport(el) { + var rect = el.getBoundingClientRect(), + vWidth = window.innerWidth || document.documentElement.clientWidth, + vHeight = window.innerHeight || document.documentElement.clientHeight, + efp = function(x, y) { return document.elementFromPoint(x, y) }; + + // Return false if it's not in the viewport + if(rect.right < 0 || rect.bottom < 0 + || rect.left > vWidth || rect.top > vHeight + || !rect.width || !rect.height) { + return false; + } + + let elements = [ + efp(rect.left + 1, rect.top + 1), + efp(rect.right - 1, rect.top + 1), + efp(rect.right - 1, rect.bottom - 1), + efp(rect.left + 1, rect.bottom - 1) + ]; + + // Return true if any of its four corners are visible + return elements.find(e => el.contains(e) || el.parentElement == e) !== undefined; +} + +export function whichChild(elem/* : Node */) { + let i = 0; + // @ts-ignore + while((elem = elem.previousElementSibling) != null) ++i; + return i; +}; + +export function copy(obj) { + //in case of premitives + if(obj===null || typeof obj !== "object"){ + return obj; + } + + //date objects should be + if(obj instanceof Date){ + return new Date(obj.getTime()); + } + + //handle Array + if(Array.isArray(obj)){ + var clonedArr = []; + obj.forEach(function(element){ + clonedArr.push(copy(element)) + }); + return clonedArr; + } + + //lastly, handle objects + let clonedObj = new obj.constructor(); + for(var prop in obj){ + if(obj.hasOwnProperty(prop)){ + clonedObj[prop] = copy(obj[prop]); + } + } + return clonedObj; +} + +/* export function ripple(elem) { + elem.addEventListener('mousedown', function(e) { + let rect = this.getBoundingClientRect(); + + const startTime = Date.now(); + const animationTime = 350; + + let X = e.clientX - rect.left; + let Y = e.clientY - rect.top; + let rippleDiv = document.createElement("div"); + rippleDiv.classList.add("ripple"); + rippleDiv.setAttribute("style", "top:" + Y + "px; left:" + X + "px;"); + this.appendChild(rippleDiv); + + elem.addEventListener('mouseup', () => { + let elapsed = Date.now() - startTime; + + setTimeout(() => { + rippleDiv.parentElement.removeChild(rippleDiv); + }, elapsed < animationTime ? animationTime - elapsed : 0); + }, {once: true}); + }); +}; */ + +export function formatBytes(bytes, decimals = 2) { + if (bytes === 0) return '0 Bytes'; + + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; +} + +export function deepEqual(x, y) { + const ok = Object.keys, tx = typeof x, ty = typeof y; + return x && y && tx === 'object' && tx === ty ? ( + ok(x).length === ok(y).length && + ok(x).every(key => deepEqual(x[key], y[key])) + ) : (x === y); +} + +export function listMergeSorted (list1, list2) { + list1 = list1 || [] + list2 = list2 || [] + + var result = copy(list1); + + var minID = list1.length ? list1[list1.length - 1] : 0xFFFFFFFF + for (var i = 0; i < list2.length; i++) { + if (list2[i] < minID) { + result.push(list2[i]) + } + } + + return result +} + +export function listUniqSorted (list) { + list = list || [] + var resultList = [] + var prev = false + for (var i = 0; i < list.length; i++) { + if (list[i] !== prev) { + resultList.push(list[i]) + } + prev = list[i] + } + + return resultList +} + +export function templateUrl (tplName) { + var forceLayout = { + confirm_modal: 'desktop', + error_modal: 'desktop', + media_modal_layout: 'desktop', + slider: 'desktop', + reply_message: 'desktop', + full_round: 'desktop', + message_body: 'desktop', + message_media: 'desktop', + message_attach_game: 'desktop', + forwarded_messages: 'desktop', + chat_invite_link_modal: 'desktop', + reply_markup: 'desktop', + short_message: 'desktop', + pinned_message: 'desktop', + channel_edit_modal: 'desktop', + megagroup_edit_modal: 'desktop', + inline_results: 'desktop', + composer_dropdown: 'desktop', + peer_pinned_message_bar: 'desktop', + report_msgs_modal: 'desktop' + } + var layout = forceLayout[tplName] || (Config.Mobile ? 'mobile' : 'desktop') + return 'partials/' + layout + '/' + tplName + '.html' +} + +export function encodeEntities (value) { + return value.replace(/&/g, '&').replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function (value) { + var hi = value.charCodeAt(0) + var low = value.charCodeAt(1) + return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';' + }).replace(/([^\#-~| |!])/g, function (value) { // non-alphanumeric + return '&#' + value.charCodeAt(0) + ';' + }).replace(//g, '>') +} + +export function calcImageInBox (imageW, imageH, boxW, boxH, noZooom) { + var boxedImageW = boxW + var boxedImageH = boxH + + if ((imageW / imageH) > (boxW / boxH)) { + boxedImageH = parseInt(imageH * boxW / imageW) + }else { + boxedImageW = parseInt(imageW * boxH / imageH) + if (boxedImageW > boxW) { + boxedImageH = parseInt(boxedImageH * boxW / boxedImageW) + boxedImageW = boxW + } + } + + // if (Config.Navigator.retina) { + // imageW = Math.floor(imageW / 2) + // imageH = Math.floor(imageH / 2) + // } + + if (noZooom && boxedImageW >= imageW && boxedImageH >= imageH) { + boxedImageW = imageW + boxedImageH = imageH + } + + return {w: boxedImageW, h: boxedImageH} +} + +/** + * emojiUnicode + * Get the unicode code of an emoji in base 16. + * + * @name emojiUnicode + * @function + * @param {String} input The emoji character. + * @returns {String} The base 16 unicode code. + */ +/* export function emojiUnicode (input) { + let pairs = emojiUnicode.raw(input).split(' ').map(val => parseInt(val).toString(16)); + if(pairs[0].length == 2) pairs[0] = '00' + pairs[0]; + return pairs.join('-').toUpperCase(); +} */ + +/** +* emojiunicode.raw +* Get the unicode code points of an emoji in base 16. +* +* @name emojiunicode.raw +* @function +* @param {String} input The emoji character. +* @returns {String} The unicode code points. +*/ +/* emojiUnicode.raw = function (input) { + if(input.length === 1) { + return input.charCodeAt(0).toString(); + } else if(input.length > 1) { + const pairs = []; + for(var i = 0; i < input.length; i++) { + // high surrogate + if(input.charCodeAt(i) >= 0xd800 && input.charCodeAt(i) <= 0xdbff) { + if(input.charCodeAt(i + 1) >= 0xdc00 && input.charCodeAt(i + 1) <= 0xdfff) { + // low surrogate + pairs.push( + (input.charCodeAt(i) - 0xd800) * 0x400 + + (input.charCodeAt(i + 1) - 0xdc00) + 0x10000 + ); + } + } else if (input.charCodeAt(i) < 0xd800 || input.charCodeAt(i) > 0xdfff) { + // modifiers and joiners + pairs.push(input.charCodeAt(i)) + } + } + + return pairs.join(' '); + } + + return ''; +}; */ + +// country code regex +const CC_REGEX = /^[a-z]{2}$/i; + +// offset between uppercase ascii and regional indicator symbols +const OFFSET = 127397; + +/** + * convert country code to corresponding emoji flag + * @param {string} cc - country code string + * @returns {string} country code emoji + */ +export function countryCodeEmoji(cc/* : string */) { + if(!CC_REGEX.test(cc)) { + const type = typeof cc; + throw new TypeError( + `cc argument must be an ISO 3166-1 alpha-2 string, but got '${ + type === 'string' ? cc : type + }' instead.`, + ); + } + + const chars = [...cc.toUpperCase()].map(c => c.charCodeAt(0) + OFFSET); + //console.log(chars); + return String.fromCodePoint(...chars); +} + +export function unifiedCountryCodeEmoji(cc/* : string */) { + if(!CC_REGEX.test(cc)) { + const type = typeof cc; + throw new TypeError( + `cc argument must be an ISO 3166-1 alpha-2 string, but got '${ + type === 'string' ? cc : type + }' instead.`, + ); + } + + const chars = [...cc.toUpperCase()].map(c => c.charCodeAt(0) + OFFSET); + return chars.map(c => c.toString(16).toUpperCase()).join('-'); +} + +function versionCompare (ver1, ver2) { + if (typeof ver1 !== 'string') { + ver1 = '' + } + if (typeof ver2 !== 'string') { + ver2 = '' + } + ver1 = ver1.replace(/^\s+|\s+$/g, '').split('.') + ver2 = ver2.replace(/^\s+|\s+$/g, '').split('.') + + var a = Math.max(ver1.length, ver2.length), i + + for (i = 0; i < a; i++) { + if (ver1[i] == ver2[i]) { + continue + } + if (ver1[i] > ver2[i]) { + return 1 + } else { + return -1 + } + } + + return 0 +} + + + var badCharsRe = /[`~!@#$%^&*()\-_=+\[\]\\|{}'";:\/?.>,<\s]+/g, + trimRe = /^\s+|\s$/g + + function createIndex () { + return { + shortIndexes: {}, + fullTexts: {} + } + } + + function cleanSearchText (text) { + var hasTag = text.charAt(0) == '%' + text = text.replace(badCharsRe, ' ').replace(trimRe, '') + text = text.replace(/[^A-Za-z0-9]/g, function (ch) { + var latinizeCh = Config.LatinizeMap[ch] + return latinizeCh !== undefined ? latinizeCh : ch + }) + text = text.toLowerCase() + if (hasTag) { + text = '%' + text + } + + return text + } + + function cleanUsername (username) { + return username && username.toLowerCase() || '' + } + + function indexObject (id, searchText, searchIndex) { + if (searchIndex.fullTexts[id] !== undefined) { + return false + } + + searchText = cleanSearchText(searchText) + + if (!searchText.length) { + return false + } + + var shortIndexes = searchIndex.shortIndexes + + searchIndex.fullTexts[id] = searchText + + searchText.split(' ').forEach(function(searchWord) { + var len = Math.min(searchWord.length, 3), + wordPart, i + for (i = 1; i <= len; i++) { + wordPart = searchWord.substr(0, i) + if (shortIndexes[wordPart] === undefined) { + shortIndexes[wordPart] = [id] + } else { + shortIndexes[wordPart].push(id) + } + } + }) + } + + function search (query, searchIndex) { + var shortIndexes = searchIndex.shortIndexes + var fullTexts = searchIndex.fullTexts + + query = cleanSearchText(query) + + var queryWords = query.split(' ') + var foundObjs = false, + newFoundObjs, i + var j, searchText + var found + + for (i = 0; i < queryWords.length; i++) { + newFoundObjs = shortIndexes[queryWords[i].substr(0, 3)] + if (!newFoundObjs) { + foundObjs = [] + break + } + if (foundObjs === false || foundObjs.length > newFoundObjs.length) { + foundObjs = newFoundObjs + } + } + + newFoundObjs = {} + + for (j = 0; j < foundObjs.length; j++) { + found = true + searchText = fullTexts[foundObjs[j]] + for (i = 0; i < queryWords.length; i++) { + if (searchText.indexOf(queryWords[i]) == -1) { + found = false + break + } + } + if (found) { + newFoundObjs[foundObjs[j]] = true + } + } + + return newFoundObjs + } + + let SearchIndexManager = { + createIndex: createIndex, + indexObject: indexObject, + cleanSearchText: cleanSearchText, + cleanUsername: cleanUsername, + search: search + }; + window.SearchIndexManager = SearchIndexManager; + + export {SearchIndexManager}; +//})(window) diff --git a/src/materialize.min.js b/src/materialize.min.js new file mode 100644 index 00000000..4ff077d6 --- /dev/null +++ b/src/materialize.min.js @@ -0,0 +1,6 @@ +/*! + * Materialize v1.0.0 (http://materializecss.com) + * Copyright 2014-2017 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +var _get=function t(e,i,n){null===e&&(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,i);if(void 0===s){var o=Object.getPrototypeOf(e);return null===o?void 0:t(o,i,n)}if("value"in s)return s.value;var a=s.get;return void 0!==a?a.call(n):void 0},_createClass=function(){function n(t,e){for(var i=0;i/,p=/^\w+$/;function v(t,e){e=e||o;var i=u.test(t)?e.getElementsByClassName(t.slice(1)):p.test(t)?e.getElementsByTagName(t):e.querySelectorAll(t);return i}function f(t){if(!i){var e=(i=o.implementation.createHTMLDocument(null)).createElement("base");e.href=o.location.href,i.head.appendChild(e)}return i.body.innerHTML=t,i.body.childNodes}function m(t){"loading"!==o.readyState?t():o.addEventListener("DOMContentLoaded",t)}function g(t,e){if(!t)return this;if(t.cash&&t!==a)return t;var i,n=t,s=0;if(d(t))n=l.test(t)?o.getElementById(t.slice(1)):c.test(t)?f(t):v(t,e);else if(h(t))return m(t),this;if(!n)return this;if(n.nodeType||n===a)this[0]=n,this.length=1;else for(i=this.length=n.length;ss.right-i||l+e.width>window.innerWidth-i)&&(n.right=!0),(ho-i||h+e.height>window.innerHeight-i)&&(n.bottom=!0),n},M.checkPossibleAlignments=function(t,e,i,n){var s={top:!0,right:!0,bottom:!0,left:!0,spaceOnTop:null,spaceOnRight:null,spaceOnBottom:null,spaceOnLeft:null},o="visible"===getComputedStyle(e).overflow,a=e.getBoundingClientRect(),r=Math.min(a.height,window.innerHeight),l=Math.min(a.width,window.innerWidth),h=t.getBoundingClientRect(),d=e.scrollLeft,u=e.scrollTop,c=i.left-d,p=i.top-u,v=i.top+h.height-u;return s.spaceOnRight=o?window.innerWidth-(h.left+i.width):l-(c+i.width),s.spaceOnRight<0&&(s.left=!1),s.spaceOnLeft=o?h.right-i.width:c-i.width+h.width,s.spaceOnLeft<0&&(s.right=!1),s.spaceOnBottom=o?window.innerHeight-(h.top+i.height+n):r-(p+i.height+n),s.spaceOnBottom<0&&(s.top=!1),s.spaceOnTop=o?h.bottom-(i.height+n):v-(i.height-n),s.spaceOnTop<0&&(s.bottom=!1),s},M.getOverflowParent=function(t){return null==t?null:t===document.body||"visible"!==getComputedStyle(t).overflow?t:M.getOverflowParent(t.parentElement)},M.getIdFromTrigger=function(t){var e=t.getAttribute("data-target");return e||(e=(e=t.getAttribute("href"))?e.slice(1):""),e},M.getDocumentScrollTop=function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},M.getDocumentScrollLeft=function(){return window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0};var getTime=Date.now||function(){return(new Date).getTime()};M.throttle=function(i,n,s){var o=void 0,a=void 0,r=void 0,l=null,h=0;s||(s={});var d=function(){h=!1===s.leading?0:getTime(),l=null,r=i.apply(o,a),o=a=null};return function(){var t=getTime();h||!1!==s.leading||(h=t);var e=n-(t-h);return o=this,a=arguments,e<=0?(clearTimeout(l),l=null,h=t,r=i.apply(o,a),o=a=null):l||!1===s.trailing||(l=setTimeout(d,e)),r}};var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,i){if(i.get||i.set)throw new TypeError("ES3 does not support getters and setters.");t!=Array.prototype&&t!=Object.prototype&&(t[e]=i.value)},$jscomp.getGlobal=function(t){return"undefined"!=typeof window&&window===t?t:"undefined"!=typeof global&&null!=global?global:t},$jscomp.global=$jscomp.getGlobal(this),$jscomp.SYMBOL_PREFIX="jscomp_symbol_",$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){},$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)},$jscomp.symbolCounter_=0,$jscomp.Symbol=function(t){return $jscomp.SYMBOL_PREFIX+(t||"")+$jscomp.symbolCounter_++},$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var t=$jscomp.global.Symbol.iterator;t||(t=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator")),"function"!=typeof Array.prototype[t]&&$jscomp.defineProperty(Array.prototype,t,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}}),$jscomp.initSymbolIterator=function(){}},$jscomp.arrayIterator=function(t){var e=0;return $jscomp.iteratorPrototype(function(){return e=k.currentTime)for(var h=0;ht&&(s.duration=e.duration),s.children.push(e)}),s.seek(0),s.reset(),s.autoplay&&s.restart(),s},s},O.random=function(t,e){return Math.floor(Math.random()*(e-t+1))+t},O}(),function(r,l){"use strict";var e={accordion:!0,onOpenStart:void 0,onOpenEnd:void 0,onCloseStart:void 0,onCloseEnd:void 0,inDuration:300,outDuration:300},t=function(t){function s(t,e){_classCallCheck(this,s);var i=_possibleConstructorReturn(this,(s.__proto__||Object.getPrototypeOf(s)).call(this,s,t,e));(i.el.M_Collapsible=i).options=r.extend({},s.defaults,e),i.$headers=i.$el.children("li").children(".collapsible-header"),i.$headers.attr("tabindex",0),i._setupEventHandlers();var n=i.$el.children("li.active").children(".collapsible-body");return i.options.accordion?n.first().css("display","block"):n.css("display","block"),i}return _inherits(s,Component),_createClass(s,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Collapsible=void 0}},{key:"_setupEventHandlers",value:function(){var e=this;this._handleCollapsibleClickBound=this._handleCollapsibleClick.bind(this),this._handleCollapsibleKeydownBound=this._handleCollapsibleKeydown.bind(this),this.el.addEventListener("click",this._handleCollapsibleClickBound),this.$headers.each(function(t){t.addEventListener("keydown",e._handleCollapsibleKeydownBound)})}},{key:"_removeEventHandlers",value:function(){var e=this;this.el.removeEventListener("click",this._handleCollapsibleClickBound),this.$headers.each(function(t){t.removeEventListener("keydown",e._handleCollapsibleKeydownBound)})}},{key:"_handleCollapsibleClick",value:function(t){var e=r(t.target).closest(".collapsible-header");if(t.target&&e.length){var i=e.closest(".collapsible");if(i[0]===this.el){var n=e.closest("li"),s=i.children("li"),o=n[0].classList.contains("active"),a=s.index(n);o?this.close(a):this.open(a)}}}},{key:"_handleCollapsibleKeydown",value:function(t){13===t.keyCode&&this._handleCollapsibleClickBound(t)}},{key:"_animateIn",value:function(t){var e=this,i=this.$el.children("li").eq(t);if(i.length){var n=i.children(".collapsible-body");l.remove(n[0]),n.css({display:"block",overflow:"hidden",height:0,paddingTop:"",paddingBottom:""});var s=n.css("padding-top"),o=n.css("padding-bottom"),a=n[0].scrollHeight;n.css({paddingTop:0,paddingBottom:0}),l({targets:n[0],height:a,paddingTop:s,paddingBottom:o,duration:this.options.inDuration,easing:"easeInOutCubic",complete:function(t){n.css({overflow:"",paddingTop:"",paddingBottom:"",height:""}),"function"==typeof e.options.onOpenEnd&&e.options.onOpenEnd.call(e,i[0])}})}}},{key:"_animateOut",value:function(t){var e=this,i=this.$el.children("li").eq(t);if(i.length){var n=i.children(".collapsible-body");l.remove(n[0]),n.css("overflow","hidden"),l({targets:n[0],height:0,paddingTop:0,paddingBottom:0,duration:this.options.outDuration,easing:"easeInOutCubic",complete:function(){n.css({height:"",overflow:"",padding:"",display:""}),"function"==typeof e.options.onCloseEnd&&e.options.onCloseEnd.call(e,i[0])}})}}},{key:"open",value:function(t){var i=this,e=this.$el.children("li").eq(t);if(e.length&&!e[0].classList.contains("active")){if("function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,e[0]),this.options.accordion){var n=this.$el.children("li");this.$el.children("li.active").each(function(t){var e=n.index(r(t));i.close(e)})}e[0].classList.add("active"),this._animateIn(t)}}},{key:"close",value:function(t){var e=this.$el.children("li").eq(t);e.length&&e[0].classList.contains("active")&&("function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,e[0]),e[0].classList.remove("active"),this._animateOut(t))}}],[{key:"init",value:function(t,e){return _get(s.__proto__||Object.getPrototypeOf(s),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Collapsible}},{key:"defaults",get:function(){return e}}]),s}();M.Collapsible=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"collapsible","M_Collapsible")}(cash,M.anime),function(h,i){"use strict";var e={alignment:"left",autoFocus:!0,constrainWidth:!0,container:null,coverTrigger:!0,closeOnClick:!0,hover:!1,inDuration:150,outDuration:250,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,onItemClick:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return i.el.M_Dropdown=i,n._dropdowns.push(i),i.id=M.getIdFromTrigger(t),i.dropdownEl=document.getElementById(i.id),i.$dropdownEl=h(i.dropdownEl),i.options=h.extend({},n.defaults,e),i.isOpen=!1,i.isScrollable=!1,i.isTouchMoving=!1,i.focusedIndex=-1,i.filterQuery=[],i.options.container?h(i.options.container).append(i.dropdownEl):i.$el.after(i.dropdownEl),i._makeDropdownFocusable(),i._resetFilterQueryBound=i._resetFilterQuery.bind(i),i._handleDocumentClickBound=i._handleDocumentClick.bind(i),i._handleDocumentTouchmoveBound=i._handleDocumentTouchmove.bind(i),i._handleDropdownClickBound=i._handleDropdownClick.bind(i),i._handleDropdownKeydownBound=i._handleDropdownKeydown.bind(i),i._handleTriggerKeydownBound=i._handleTriggerKeydown.bind(i),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._resetDropdownStyles(),this._removeEventHandlers(),n._dropdowns.splice(n._dropdowns.indexOf(this),1),this.el.M_Dropdown=void 0}},{key:"_setupEventHandlers",value:function(){this.el.addEventListener("keydown",this._handleTriggerKeydownBound),this.dropdownEl.addEventListener("click",this._handleDropdownClickBound),this.options.hover?(this._handleMouseEnterBound=this._handleMouseEnter.bind(this),this.el.addEventListener("mouseenter",this._handleMouseEnterBound),this._handleMouseLeaveBound=this._handleMouseLeave.bind(this),this.el.addEventListener("mouseleave",this._handleMouseLeaveBound),this.dropdownEl.addEventListener("mouseleave",this._handleMouseLeaveBound)):(this._handleClickBound=this._handleClick.bind(this),this.el.addEventListener("click",this._handleClickBound))}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("keydown",this._handleTriggerKeydownBound),this.dropdownEl.removeEventListener("click",this._handleDropdownClickBound),this.options.hover?(this.el.removeEventListener("mouseenter",this._handleMouseEnterBound),this.el.removeEventListener("mouseleave",this._handleMouseLeaveBound),this.dropdownEl.removeEventListener("mouseleave",this._handleMouseLeaveBound)):this.el.removeEventListener("click",this._handleClickBound)}},{key:"_setupTemporaryEventHandlers",value:function(){document.body.addEventListener("click",this._handleDocumentClickBound,!0),document.body.addEventListener("touchend",this._handleDocumentClickBound),document.body.addEventListener("touchmove",this._handleDocumentTouchmoveBound),this.dropdownEl.addEventListener("keydown",this._handleDropdownKeydownBound)}},{key:"_removeTemporaryEventHandlers",value:function(){document.body.removeEventListener("click",this._handleDocumentClickBound,!0),document.body.removeEventListener("touchend",this._handleDocumentClickBound),document.body.removeEventListener("touchmove",this._handleDocumentTouchmoveBound),this.dropdownEl.removeEventListener("keydown",this._handleDropdownKeydownBound)}},{key:"_handleClick",value:function(t){t.preventDefault(),this.open()}},{key:"_handleMouseEnter",value:function(){this.open()}},{key:"_handleMouseLeave",value:function(t){var e=t.toElement||t.relatedTarget,i=!!h(e).closest(".dropdown-content").length,n=!1,s=h(e).closest(".dropdown-trigger");s.length&&s[0].M_Dropdown&&s[0].M_Dropdown.isOpen&&(n=!0),n||i||this.close()}},{key:"_handleDocumentClick",value:function(t){var e=this,i=h(t.target);this.options.closeOnClick&&i.closest(".dropdown-content").length&&!this.isTouchMoving?setTimeout(function(){e.close()},0):!i.closest(".dropdown-trigger").length&&i.closest(".dropdown-content").length||setTimeout(function(){e.close()},0),this.isTouchMoving=!1}},{key:"_handleTriggerKeydown",value:function(t){t.which!==M.keys.ARROW_DOWN&&t.which!==M.keys.ENTER||this.isOpen||(t.preventDefault(),this.open())}},{key:"_handleDocumentTouchmove",value:function(t){h(t.target).closest(".dropdown-content").length&&(this.isTouchMoving=!0)}},{key:"_handleDropdownClick",value:function(t){if("function"==typeof this.options.onItemClick){var e=h(t.target).closest("li")[0];this.options.onItemClick.call(this,e)}}},{key:"_handleDropdownKeydown",value:function(t){if(t.which===M.keys.TAB)t.preventDefault(),this.close();else if(t.which!==M.keys.ARROW_DOWN&&t.which!==M.keys.ARROW_UP||!this.isOpen)if(t.which===M.keys.ENTER&&this.isOpen){var e=this.dropdownEl.children[this.focusedIndex],i=h(e).find("a, button").first();i.length?i[0].click():e&&e.click()}else t.which===M.keys.ESC&&this.isOpen&&(t.preventDefault(),this.close());else{t.preventDefault();var n=t.which===M.keys.ARROW_DOWN?1:-1,s=this.focusedIndex,o=!1;do{if(s+=n,this.dropdownEl.children[s]&&-1!==this.dropdownEl.children[s].tabIndex){o=!0;break}}while(sl.spaceOnBottom?(h="bottom",i+=l.spaceOnTop,o-=l.spaceOnTop):i+=l.spaceOnBottom)),!l[d]){var u="left"===d?"right":"left";l[u]?d=u:l.spaceOnLeft>l.spaceOnRight?(d="right",n+=l.spaceOnLeft,s-=l.spaceOnLeft):(d="left",n+=l.spaceOnRight)}return"bottom"===h&&(o=o-e.height+(this.options.coverTrigger?t.height:0)),"right"===d&&(s=s-e.width+t.width),{x:s,y:o,verticalAlignment:h,horizontalAlignment:d,height:i,width:n}}},{key:"_animateIn",value:function(){var e=this;i.remove(this.dropdownEl),i({targets:this.dropdownEl,opacity:{value:[0,1],easing:"easeOutQuad"},scaleX:[.3,1],scaleY:[.3,1],duration:this.options.inDuration,easing:"easeOutQuint",complete:function(t){e.options.autoFocus&&e.dropdownEl.focus(),"function"==typeof e.options.onOpenEnd&&e.options.onOpenEnd.call(e,e.el)}})}},{key:"_animateOut",value:function(){var e=this;i.remove(this.dropdownEl),i({targets:this.dropdownEl,opacity:{value:0,easing:"easeOutQuint"},scaleX:.3,scaleY:.3,duration:this.options.outDuration,easing:"easeOutQuint",complete:function(t){e._resetDropdownStyles(),"function"==typeof e.options.onCloseEnd&&e.options.onCloseEnd.call(e,e.el)}})}},{key:"_placeDropdown",value:function(){var t=this.options.constrainWidth?this.el.getBoundingClientRect().width:this.dropdownEl.getBoundingClientRect().width;this.dropdownEl.style.width=t+"px";var e=this._getDropdownPosition();this.dropdownEl.style.left=e.x+"px",this.dropdownEl.style.top=e.y+"px",this.dropdownEl.style.height=e.height+"px",this.dropdownEl.style.width=e.width+"px",this.dropdownEl.style.transformOrigin=("left"===e.horizontalAlignment?"0":"100%")+" "+("top"===e.verticalAlignment?"0":"100%")}},{key:"open",value:function(){this.isOpen||(this.isOpen=!0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el),this._resetDropdownStyles(),this.dropdownEl.style.display="block",this._placeDropdown(),this._animateIn(),this._setupTemporaryEventHandlers())}},{key:"close",value:function(){this.isOpen&&(this.isOpen=!1,this.focusedIndex=-1,"function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,this.el),this._animateOut(),this._removeTemporaryEventHandlers(),this.options.autoFocus&&this.el.focus())}},{key:"recalculateDimensions",value:function(){this.isOpen&&(this.$dropdownEl.css({width:"",height:"",left:"",top:"","transform-origin":""}),this._placeDropdown())}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Dropdown}},{key:"defaults",get:function(){return e}}]),n}();t._dropdowns=[],M.Dropdown=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"dropdown","M_Dropdown")}(cash,M.anime),function(s,i){"use strict";var e={opacity:.5,inDuration:250,outDuration:250,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,preventScrolling:!0,dismissible:!0,startingTop:"4%",endingTop:"10%"},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Modal=i).options=s.extend({},n.defaults,e),i.isOpen=!1,i.id=i.$el.attr("id"),i._openingTrigger=void 0,i.$overlay=s(''),i.el.tabIndex=0,i._nthModalOpened=0,n._count++,i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){n._count--,this._removeEventHandlers(),this.el.removeAttribute("style"),this.$overlay.remove(),this.el.M_Modal=void 0}},{key:"_setupEventHandlers",value:function(){this._handleOverlayClickBound=this._handleOverlayClick.bind(this),this._handleModalCloseClickBound=this._handleModalCloseClick.bind(this),1===n._count&&document.body.addEventListener("click",this._handleTriggerClick),this.$overlay[0].addEventListener("click",this._handleOverlayClickBound),this.el.addEventListener("click",this._handleModalCloseClickBound)}},{key:"_removeEventHandlers",value:function(){0===n._count&&document.body.removeEventListener("click",this._handleTriggerClick),this.$overlay[0].removeEventListener("click",this._handleOverlayClickBound),this.el.removeEventListener("click",this._handleModalCloseClickBound)}},{key:"_handleTriggerClick",value:function(t){var e=s(t.target).closest(".modal-trigger");if(e.length){var i=M.getIdFromTrigger(e[0]),n=document.getElementById(i).M_Modal;n&&n.open(e),t.preventDefault()}}},{key:"_handleOverlayClick",value:function(){this.options.dismissible&&this.close()}},{key:"_handleModalCloseClick",value:function(t){s(t.target).closest(".modal-close").length&&this.close()}},{key:"_handleKeydown",value:function(t){27===t.keyCode&&this.options.dismissible&&this.close()}},{key:"_handleFocus",value:function(t){this.el.contains(t.target)||this._nthModalOpened!==n._modalsOpen||this.el.focus()}},{key:"_animateIn",value:function(){var t=this;s.extend(this.el.style,{display:"block",opacity:0}),s.extend(this.$overlay[0].style,{display:"block",opacity:0}),i({targets:this.$overlay[0],opacity:this.options.opacity,duration:this.options.inDuration,easing:"easeOutQuad"});var e={targets:this.el,duration:this.options.inDuration,easing:"easeOutCubic",complete:function(){"function"==typeof t.options.onOpenEnd&&t.options.onOpenEnd.call(t,t.el,t._openingTrigger)}};this.el.classList.contains("bottom-sheet")?s.extend(e,{bottom:0,opacity:1}):s.extend(e,{top:[this.options.startingTop,this.options.endingTop],opacity:1,scaleX:[.8,1],scaleY:[.8,1]}),i(e)}},{key:"_animateOut",value:function(){var t=this;i({targets:this.$overlay[0],opacity:0,duration:this.options.outDuration,easing:"easeOutQuart"});var e={targets:this.el,duration:this.options.outDuration,easing:"easeOutCubic",complete:function(){t.el.style.display="none",t.$overlay.remove(),"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t,t.el)}};this.el.classList.contains("bottom-sheet")?s.extend(e,{bottom:"-100%",opacity:0}):s.extend(e,{top:[this.options.endingTop,this.options.startingTop],opacity:0,scaleX:.8,scaleY:.8}),i(e)}},{key:"open",value:function(t){if(!this.isOpen)return this.isOpen=!0,n._modalsOpen++,this._nthModalOpened=n._modalsOpen,this.$overlay[0].style.zIndex=1e3+2*n._modalsOpen,this.el.style.zIndex=1e3+2*n._modalsOpen+1,this._openingTrigger=t?t[0]:void 0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el,this._openingTrigger),this.options.preventScrolling&&(document.body.style.overflow="hidden"),this.el.classList.add("open"),this.el.insertAdjacentElement("afterend",this.$overlay[0]),this.options.dismissible&&(this._handleKeydownBound=this._handleKeydown.bind(this),this._handleFocusBound=this._handleFocus.bind(this),document.addEventListener("keydown",this._handleKeydownBound),document.addEventListener("focus",this._handleFocusBound,!0)),i.remove(this.el),i.remove(this.$overlay[0]),this._animateIn(),this.el.focus(),this}},{key:"close",value:function(){if(this.isOpen)return this.isOpen=!1,n._modalsOpen--,this._nthModalOpened=0,"function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,this.el),this.el.classList.remove("open"),0===n._modalsOpen&&(document.body.style.overflow=""),this.options.dismissible&&(document.removeEventListener("keydown",this._handleKeydownBound),document.removeEventListener("focus",this._handleFocusBound,!0)),i.remove(this.el),i.remove(this.$overlay[0]),this._animateOut(),this}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Modal}},{key:"defaults",get:function(){return e}}]),n}();t._modalsOpen=0,t._count=0,M.Modal=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"modal","M_Modal")}(cash,M.anime),function(o,a){"use strict";var e={inDuration:275,outDuration:200,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Materialbox=i).options=o.extend({},n.defaults,e),i.overlayActive=!1,i.doneAnimating=!0,i.placeholder=o("
").addClass("material-placeholder"),i.originalWidth=0,i.originalHeight=0,i.originInlineStyles=i.$el.attr("style"),i.caption=i.el.getAttribute("data-caption")||"",i.$el.before(i.placeholder),i.placeholder.append(i.$el),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Materialbox=void 0,o(this.placeholder).after(this.el).remove(),this.$el.removeAttr("style")}},{key:"_setupEventHandlers",value:function(){this._handleMaterialboxClickBound=this._handleMaterialboxClick.bind(this),this.el.addEventListener("click",this._handleMaterialboxClickBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleMaterialboxClickBound)}},{key:"_handleMaterialboxClick",value:function(t){!1===this.doneAnimating||this.overlayActive&&this.doneAnimating?this.close():this.open()}},{key:"_handleWindowScroll",value:function(){this.overlayActive&&this.close()}},{key:"_handleWindowResize",value:function(){this.overlayActive&&this.close()}},{key:"_handleWindowEscape",value:function(t){27===t.keyCode&&this.doneAnimating&&this.overlayActive&&this.close()}},{key:"_makeAncestorsOverflowVisible",value:function(){this.ancestorsChanged=o();for(var t=this.placeholder[0].parentNode;null!==t&&!o(t).is(document);){var e=o(t);"visible"!==e.css("overflow")&&(e.css("overflow","visible"),void 0===this.ancestorsChanged?this.ancestorsChanged=e:this.ancestorsChanged=this.ancestorsChanged.add(e)),t=t.parentNode}}},{key:"_animateImageIn",value:function(){var t=this,e={targets:this.el,height:[this.originalHeight,this.newHeight],width:[this.originalWidth,this.newWidth],left:M.getDocumentScrollLeft()+this.windowWidth/2-this.placeholder.offset().left-this.newWidth/2,top:M.getDocumentScrollTop()+this.windowHeight/2-this.placeholder.offset().top-this.newHeight/2,duration:this.options.inDuration,easing:"easeOutQuad",complete:function(){t.doneAnimating=!0,"function"==typeof t.options.onOpenEnd&&t.options.onOpenEnd.call(t,t.el)}};this.maxWidth=this.$el.css("max-width"),this.maxHeight=this.$el.css("max-height"),"none"!==this.maxWidth&&(e.maxWidth=this.newWidth),"none"!==this.maxHeight&&(e.maxHeight=this.newHeight),a(e)}},{key:"_animateImageOut",value:function(){var t=this,e={targets:this.el,width:this.originalWidth,height:this.originalHeight,left:0,top:0,duration:this.options.outDuration,easing:"easeOutQuad",complete:function(){t.placeholder.css({height:"",width:"",position:"",top:"",left:""}),t.attrWidth&&t.$el.attr("width",t.attrWidth),t.attrHeight&&t.$el.attr("height",t.attrHeight),t.$el.removeAttr("style"),t.originInlineStyles&&t.$el.attr("style",t.originInlineStyles),t.$el.removeClass("active"),t.doneAnimating=!0,t.ancestorsChanged.length&&t.ancestorsChanged.css("overflow",""),"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t,t.el)}};a(e)}},{key:"_updateVars",value:function(){this.windowWidth=window.innerWidth,this.windowHeight=window.innerHeight,this.caption=this.el.getAttribute("data-caption")||""}},{key:"open",value:function(){var t=this;this._updateVars(),this.originalWidth=this.el.getBoundingClientRect().width,this.originalHeight=this.el.getBoundingClientRect().height,this.doneAnimating=!1,this.$el.addClass("active"),this.overlayActive=!0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el),this.placeholder.css({width:this.placeholder[0].getBoundingClientRect().width+"px",height:this.placeholder[0].getBoundingClientRect().height+"px",position:"relative",top:0,left:0}),this._makeAncestorsOverflowVisible(),this.$el.css({position:"absolute","z-index":1e3,"will-change":"left, top, width, height"}),this.attrWidth=this.$el.attr("width"),this.attrHeight=this.$el.attr("height"),this.attrWidth&&(this.$el.css("width",this.attrWidth+"px"),this.$el.removeAttr("width")),this.attrHeight&&(this.$el.css("width",this.attrHeight+"px"),this.$el.removeAttr("height")),this.$overlay=o('
').css({opacity:0}).one("click",function(){t.doneAnimating&&t.close()}),this.$el.before(this.$overlay);var e=this.$overlay[0].getBoundingClientRect();this.$overlay.css({width:this.windowWidth+"px",height:this.windowHeight+"px",left:-1*e.left+"px",top:-1*e.top+"px"}),a.remove(this.el),a.remove(this.$overlay[0]),a({targets:this.$overlay[0],opacity:1,duration:this.options.inDuration,easing:"easeOutQuad"}),""!==this.caption&&(this.$photocaption&&a.remove(this.$photoCaption[0]),this.$photoCaption=o('
'),this.$photoCaption.text(this.caption),o("body").append(this.$photoCaption),this.$photoCaption.css({display:"inline"}),a({targets:this.$photoCaption[0],opacity:1,duration:this.options.inDuration,easing:"easeOutQuad"}));var i=0,n=this.originalWidth/this.windowWidth,s=this.originalHeight/this.windowHeight;this.newWidth=0,this.newHeight=0,si.options.responsiveThreshold,i.$img=i.$el.find("img").first(),i.$img.each(function(){this.complete&&s(this).trigger("load")}),i._updateParallax(),i._setupEventHandlers(),i._setupStyles(),n._parallaxes.push(i),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){n._parallaxes.splice(n._parallaxes.indexOf(this),1),this.$img[0].style.transform="",this._removeEventHandlers(),this.$el[0].M_Parallax=void 0}},{key:"_setupEventHandlers",value:function(){this._handleImageLoadBound=this._handleImageLoad.bind(this),this.$img[0].addEventListener("load",this._handleImageLoadBound),0===n._parallaxes.length&&(n._handleScrollThrottled=M.throttle(n._handleScroll,5),window.addEventListener("scroll",n._handleScrollThrottled),n._handleWindowResizeThrottled=M.throttle(n._handleWindowResize,5),window.addEventListener("resize",n._handleWindowResizeThrottled))}},{key:"_removeEventHandlers",value:function(){this.$img[0].removeEventListener("load",this._handleImageLoadBound),0===n._parallaxes.length&&(window.removeEventListener("scroll",n._handleScrollThrottled),window.removeEventListener("resize",n._handleWindowResizeThrottled))}},{key:"_setupStyles",value:function(){this.$img[0].style.opacity=1}},{key:"_handleImageLoad",value:function(){this._updateParallax()}},{key:"_updateParallax",value:function(){var t=0e.options.responsiveThreshold}}},{key:"defaults",get:function(){return e}}]),n}();t._parallaxes=[],M.Parallax=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"parallax","M_Parallax")}(cash),function(a,s){"use strict";var e={duration:300,onShow:null,swipeable:!1,responsiveThreshold:1/0},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Tabs=i).options=a.extend({},n.defaults,e),i.$tabLinks=i.$el.children("li.tab").children("a"),i.index=0,i._setupActiveTabLink(),i.options.swipeable?i._setupSwipeableTabs():i._setupNormalTabs(),i._setTabsAndTabWidth(),i._createIndicator(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this._indicator.parentNode.removeChild(this._indicator),this.options.swipeable?this._teardownSwipeableTabs():this._teardownNormalTabs(),this.$el[0].M_Tabs=void 0}},{key:"_setupEventHandlers",value:function(){this._handleWindowResizeBound=this._handleWindowResize.bind(this),window.addEventListener("resize",this._handleWindowResizeBound),this._handleTabClickBound=this._handleTabClick.bind(this),this.el.addEventListener("click",this._handleTabClickBound)}},{key:"_removeEventHandlers",value:function(){window.removeEventListener("resize",this._handleWindowResizeBound),this.el.removeEventListener("click",this._handleTabClickBound)}},{key:"_handleWindowResize",value:function(){this._setTabsAndTabWidth(),0!==this.tabWidth&&0!==this.tabsWidth&&(this._indicator.style.left=this._calcLeftPos(this.$activeTabLink)+"px",this._indicator.style.right=this._calcRightPos(this.$activeTabLink)+"px")}},{key:"_handleTabClick",value:function(t){var e=this,i=a(t.target).closest("li.tab"),n=a(t.target).closest("a");if(n.length&&n.parent().hasClass("tab"))if(i.hasClass("disabled"))t.preventDefault();else if(!n.attr("target")){this.$activeTabLink.removeClass("active");var s=this.$content;this.$activeTabLink=n,this.$content=a(M.escapeHash(n[0].hash)),this.$tabLinks=this.$el.children("li.tab").children("a"),this.$activeTabLink.addClass("active");var o=this.index;this.index=Math.max(this.$tabLinks.index(n),0),this.options.swipeable?this._tabsCarousel&&this._tabsCarousel.set(this.index,function(){"function"==typeof e.options.onShow&&e.options.onShow.call(e,e.$content[0])}):this.$content.length&&(this.$content[0].style.display="block",this.$content.addClass("active"),"function"==typeof this.options.onShow&&this.options.onShow.call(this,this.$content[0]),s.length&&!s.is(this.$content)&&(s[0].style.display="none",s.removeClass("active"))),this._setTabsAndTabWidth(),this._animateIndicator(o),t.preventDefault()}}},{key:"_createIndicator",value:function(){var t=this,e=document.createElement("li");e.classList.add("indicator"),this.el.appendChild(e),this._indicator=e,setTimeout(function(){t._indicator.style.left=t._calcLeftPos(t.$activeTabLink)+"px",t._indicator.style.right=t._calcRightPos(t.$activeTabLink)+"px"},0)}},{key:"_setupActiveTabLink",value:function(){this.$activeTabLink=a(this.$tabLinks.filter('[href="'+location.hash+'"]')),0===this.$activeTabLink.length&&(this.$activeTabLink=this.$el.children("li.tab").children("a.active").first()),0===this.$activeTabLink.length&&(this.$activeTabLink=this.$el.children("li.tab").children("a").first()),this.$tabLinks.removeClass("active"),this.$activeTabLink[0].classList.add("active"),this.index=Math.max(this.$tabLinks.index(this.$activeTabLink),0),this.$activeTabLink.length&&(this.$content=a(M.escapeHash(this.$activeTabLink[0].hash)),this.$content.addClass("active"))}},{key:"_setupSwipeableTabs",value:function(){var i=this;window.innerWidth>this.options.responsiveThreshold&&(this.options.swipeable=!1);var n=a();this.$tabLinks.each(function(t){var e=a(M.escapeHash(t.hash));e.addClass("carousel-item"),n=n.add(e)});var t=a('');n.first().before(t),t.append(n),n[0].style.display="";var e=this.$activeTabLink.closest(".tab").index();this._tabsCarousel=M.Carousel.init(t[0],{fullWidth:!0,noWrap:!0,onCycleTo:function(t){var e=i.index;i.index=a(t).index(),i.$activeTabLink.removeClass("active"),i.$activeTabLink=i.$tabLinks.eq(i.index),i.$activeTabLink.addClass("active"),i._animateIndicator(e),"function"==typeof i.options.onShow&&i.options.onShow.call(i,i.$content[0])}}),this._tabsCarousel.set(e)}},{key:"_teardownSwipeableTabs",value:function(){var t=this._tabsCarousel.$el;this._tabsCarousel.destroy(),t.after(t.children()),t.remove()}},{key:"_setupNormalTabs",value:function(){this.$tabLinks.not(this.$activeTabLink).each(function(t){if(t.hash){var e=a(M.escapeHash(t.hash));e.length&&(e[0].style.display="none")}})}},{key:"_teardownNormalTabs",value:function(){this.$tabLinks.each(function(t){if(t.hash){var e=a(M.escapeHash(t.hash));e.length&&(e[0].style.display="")}})}},{key:"_setTabsAndTabWidth",value:function(){this.tabsWidth=this.$el.width(),this.tabWidth=Math.max(this.tabsWidth,this.el.scrollWidth)/this.$tabLinks.length}},{key:"_calcRightPos",value:function(t){return Math.ceil(this.tabsWidth-t.position().left-t[0].getBoundingClientRect().width)}},{key:"_calcLeftPos",value:function(t){return Math.floor(t.position().left)}},{key:"updateTabIndicator",value:function(){this._setTabsAndTabWidth(),this._animateIndicator(this.index)}},{key:"_animateIndicator",value:function(t){var e=0,i=0;0<=this.index-t?e=90:i=90;var n={targets:this._indicator,left:{value:this._calcLeftPos(this.$activeTabLink),delay:e},right:{value:this._calcRightPos(this.$activeTabLink),delay:i},duration:this.options.duration,easing:"easeOutQuad"};s.remove(this._indicator),s(n)}},{key:"select",value:function(t){var e=this.$tabLinks.filter('[href="#'+t+'"]');e.length&&e.trigger("click")}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Tabs}},{key:"defaults",get:function(){return e}}]),n}();M.Tabs=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"tabs","M_Tabs")}(cash,M.anime),function(d,e){"use strict";var i={exitDelay:200,enterDelay:0,html:null,margin:5,inDuration:250,outDuration:200,position:"bottom",transitionMovement:10},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Tooltip=i).options=d.extend({},n.defaults,e),i.isOpen=!1,i.isHovered=!1,i.isFocused=!1,i._appendTooltipEl(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){d(this.tooltipEl).remove(),this._removeEventHandlers(),this.el.M_Tooltip=void 0}},{key:"_appendTooltipEl",value:function(){var t=document.createElement("div");t.classList.add("material-tooltip"),this.tooltipEl=t;var e=document.createElement("div");e.classList.add("tooltip-content"),e.innerHTML=this.options.html,t.appendChild(e),document.body.appendChild(t)}},{key:"_updateTooltipContent",value:function(){this.tooltipEl.querySelector(".tooltip-content").innerHTML=this.options.html}},{key:"_setupEventHandlers",value:function(){this._handleMouseEnterBound=this._handleMouseEnter.bind(this),this._handleMouseLeaveBound=this._handleMouseLeave.bind(this),this._handleFocusBound=this._handleFocus.bind(this),this._handleBlurBound=this._handleBlur.bind(this),this.el.addEventListener("mouseenter",this._handleMouseEnterBound),this.el.addEventListener("mouseleave",this._handleMouseLeaveBound),this.el.addEventListener("focus",this._handleFocusBound,!0),this.el.addEventListener("blur",this._handleBlurBound,!0)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("mouseenter",this._handleMouseEnterBound),this.el.removeEventListener("mouseleave",this._handleMouseLeaveBound),this.el.removeEventListener("focus",this._handleFocusBound,!0),this.el.removeEventListener("blur",this._handleBlurBound,!0)}},{key:"open",value:function(t){this.isOpen||(t=void 0===t||void 0,this.isOpen=!0,this.options=d.extend({},this.options,this._getAttributeOptions()),this._updateTooltipContent(),this._setEnterDelayTimeout(t))}},{key:"close",value:function(){this.isOpen&&(this.isHovered=!1,this.isFocused=!1,this.isOpen=!1,this._setExitDelayTimeout())}},{key:"_setExitDelayTimeout",value:function(){var t=this;clearTimeout(this._exitDelayTimeout),this._exitDelayTimeout=setTimeout(function(){t.isHovered||t.isFocused||t._animateOut()},this.options.exitDelay)}},{key:"_setEnterDelayTimeout",value:function(t){var e=this;clearTimeout(this._enterDelayTimeout),this._enterDelayTimeout=setTimeout(function(){(e.isHovered||e.isFocused||t)&&e._animateIn()},this.options.enterDelay)}},{key:"_positionTooltip",value:function(){var t,e=this.el,i=this.tooltipEl,n=e.offsetHeight,s=e.offsetWidth,o=i.offsetHeight,a=i.offsetWidth,r=this.options.margin,l=void 0,h=void 0;this.xMovement=0,this.yMovement=0,l=e.getBoundingClientRect().top+M.getDocumentScrollTop(),h=e.getBoundingClientRect().left+M.getDocumentScrollLeft(),"top"===this.options.position?(l+=-o-r,h+=s/2-a/2,this.yMovement=-this.options.transitionMovement):"right"===this.options.position?(l+=n/2-o/2,h+=s+r,this.xMovement=this.options.transitionMovement):"left"===this.options.position?(l+=n/2-o/2,h+=-a-r,this.xMovement=-this.options.transitionMovement):(l+=n+r,h+=s/2-a/2,this.yMovement=this.options.transitionMovement),t=this._repositionWithinScreen(h,l,a,o),d(i).css({top:t.y+"px",left:t.x+"px"})}},{key:"_repositionWithinScreen",value:function(t,e,i,n){var s=M.getDocumentScrollLeft(),o=M.getDocumentScrollTop(),a=t-s,r=e-o,l={left:a,top:r,width:i,height:n},h=this.options.margin+this.options.transitionMovement,d=M.checkWithinContainer(document.body,l,h);return d.left?a=h:d.right&&(a-=a+i-window.innerWidth),d.top?r=h:d.bottom&&(r-=r+n-window.innerHeight),{x:a+s,y:r+o}}},{key:"_animateIn",value:function(){this._positionTooltip(),this.tooltipEl.style.visibility="visible",e.remove(this.tooltipEl),e({targets:this.tooltipEl,opacity:1,translateX:this.xMovement,translateY:this.yMovement,duration:this.options.inDuration,easing:"easeOutCubic"})}},{key:"_animateOut",value:function(){e.remove(this.tooltipEl),e({targets:this.tooltipEl,opacity:0,translateX:0,translateY:0,duration:this.options.outDuration,easing:"easeOutCubic"})}},{key:"_handleMouseEnter",value:function(){this.isHovered=!0,this.isFocused=!1,this.open(!1)}},{key:"_handleMouseLeave",value:function(){this.isHovered=!1,this.isFocused=!1,this.close()}},{key:"_handleFocus",value:function(){M.tabPressed&&(this.isFocused=!0,this.open(!1))}},{key:"_handleBlur",value:function(){this.isFocused=!1,this.close()}},{key:"_getAttributeOptions",value:function(){var t={},e=this.el.getAttribute("data-tooltip"),i=this.el.getAttribute("data-position");return e&&(t.html=e),i&&(t.position=i),t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Tooltip}},{key:"defaults",get:function(){return i}}]),n}();M.Tooltip=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"tooltip","M_Tooltip")}(cash,M.anime),function(i){"use strict";var t=t||{},e=document.querySelectorAll.bind(document);function m(t){var e="";for(var i in t)t.hasOwnProperty(i)&&(e+=i+":"+t[i]+";");return e}var g={duration:750,show:function(t,e){if(2===t.button)return!1;var i=e||this,n=document.createElement("div");n.className="waves-ripple",i.appendChild(n);var s,o,a,r,l,h,d,u=(h={top:0,left:0},d=(s=i)&&s.ownerDocument,o=d.documentElement,void 0!==s.getBoundingClientRect&&(h=s.getBoundingClientRect()),a=null!==(l=r=d)&&l===l.window?r:9===r.nodeType&&r.defaultView,{top:h.top+a.pageYOffset-o.clientTop,left:h.left+a.pageXOffset-o.clientLeft}),c=t.pageY-u.top,p=t.pageX-u.left,v="scale("+i.clientWidth/100*10+")";"touches"in t&&(c=t.touches[0].pageY-u.top,p=t.touches[0].pageX-u.left),n.setAttribute("data-hold",Date.now()),n.setAttribute("data-scale",v),n.setAttribute("data-x",p),n.setAttribute("data-y",c);var f={top:c+"px",left:p+"px"};n.className=n.className+" waves-notransition",n.setAttribute("style",m(f)),n.className=n.className.replace("waves-notransition",""),f["-webkit-transform"]=v,f["-moz-transform"]=v,f["-ms-transform"]=v,f["-o-transform"]=v,f.transform=v,f.opacity="1",f["-webkit-transition-duration"]=g.duration+"ms",f["-moz-transition-duration"]=g.duration+"ms",f["-o-transition-duration"]=g.duration+"ms",f["transition-duration"]=g.duration+"ms",f["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",n.setAttribute("style",m(f))},hide:function(t){l.touchup(t);var e=this,i=(e.clientWidth,null),n=e.getElementsByClassName("waves-ripple");if(!(0i||1"+o+""+a+""+r+""),i.length&&e.prepend(i)}},{key:"_resetCurrentElement",value:function(){this.activeIndex=-1,this.$active.removeClass("active")}},{key:"_resetAutocomplete",value:function(){h(this.container).empty(),this._resetCurrentElement(),this.oldVal=null,this.isOpen=!1,this._mousedown=!1}},{key:"selectOption",value:function(t){var e=t.text().trim();this.el.value=e,this.$el.trigger("change"),this._resetAutocomplete(),this.close(),"function"==typeof this.options.onAutocomplete&&this.options.onAutocomplete.call(this,e)}},{key:"_renderDropdown",value:function(t,i){var n=this;this._resetAutocomplete();var e=[];for(var s in t)if(t.hasOwnProperty(s)&&-1!==s.toLowerCase().indexOf(i)){if(this.count>=this.options.limit)break;var o={data:t[s],key:s};e.push(o),this.count++}if(this.options.sortFunction){e.sort(function(t,e){return n.options.sortFunction(t.key.toLowerCase(),e.key.toLowerCase(),i.toLowerCase())})}for(var a=0;a");r.data?l.append(''+r.key+""):l.append(""+r.key+""),h(this.container).append(l),this._highlight(i,l)}}},{key:"open",value:function(){var t=this.el.value.toLowerCase();this._resetAutocomplete(),t.length>=this.options.minLength&&(this.isOpen=!0,this._renderDropdown(this.options.data,t)),this.dropdown.isOpen?this.dropdown.recalculateDimensions():this.dropdown.open()}},{key:"close",value:function(){this.dropdown.close()}},{key:"updateData",value:function(t){var e=this.el.value.toLowerCase();this.options.data=t,this.isOpen&&this._renderDropdown(t,e)}}],[{key:"init",value:function(t,e){return _get(s.__proto__||Object.getPrototypeOf(s),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Autocomplete}},{key:"defaults",get:function(){return e}}]),s}();t._keydown=!1,M.Autocomplete=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"autocomplete","M_Autocomplete")}(cash),function(d){M.updateTextFields=function(){d("input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], input[type=date], input[type=time], textarea").each(function(t,e){var i=d(this);0'),d("body").append(e));var i=t.css("font-family"),n=t.css("font-size"),s=t.css("line-height"),o=t.css("padding-top"),a=t.css("padding-right"),r=t.css("padding-bottom"),l=t.css("padding-left");n&&e.css("font-size",n),i&&e.css("font-family",i),s&&e.css("line-height",s),o&&e.css("padding-top",o),a&&e.css("padding-right",a),r&&e.css("padding-bottom",r),l&&e.css("padding-left",l),t.data("original-height")||t.data("original-height",t.height()),"off"===t.attr("wrap")&&e.css("overflow-wrap","normal").css("white-space","pre"),e.text(t[0].value+"\n");var h=e.html().replace(/\n/g,"
");e.html(h),0'),this.$slides.each(function(t,e){var i=s('
  • ');n.$indicators.append(i[0])}),this.$el.append(this.$indicators[0]),this.$indicators=this.$indicators.children("li.indicator-item"))}},{key:"_removeIndicators",value:function(){this.$el.find("ul.indicators").remove()}},{key:"set",value:function(t){var e=this;if(t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.activeIndex!=t){this.$active=this.$slides.eq(this.activeIndex);var i=this.$active.find(".caption");this.$active.removeClass("active"),o({targets:this.$active[0],opacity:0,duration:this.options.duration,easing:"easeOutQuad",complete:function(){e.$slides.not(".active").each(function(t){o({targets:t,opacity:0,translateX:0,translateY:0,duration:0,easing:"easeOutQuad"})})}}),this._animateCaptionIn(i[0],this.options.duration),this.options.indicators&&(this.$indicators.eq(this.activeIndex).removeClass("active"),this.$indicators.eq(t).addClass("active")),o({targets:this.$slides.eq(t)[0],opacity:1,duration:this.options.duration,easing:"easeOutQuad"}),o({targets:this.$slides.eq(t).find(".caption")[0],opacity:1,translateX:0,translateY:0,duration:this.options.duration,delay:this.options.duration,easing:"easeOutQuad"}),this.$slides.eq(t).addClass("active"),this.activeIndex=t,this.start()}}},{key:"pause",value:function(){clearInterval(this.interval)}},{key:"start",value:function(){clearInterval(this.interval),this.interval=setInterval(this._handleIntervalBound,this.options.duration+this.options.interval)}},{key:"next",value:function(){var t=this.activeIndex+1;t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.set(t)}},{key:"prev",value:function(){var t=this.activeIndex-1;t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.set(t)}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Slider}},{key:"defaults",get:function(){return e}}]),n}();M.Slider=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"slider","M_Slider")}(cash,M.anime),function(n,s){n(document).on("click",".card",function(t){if(n(this).children(".card-reveal").length){var i=n(t.target).closest(".card");void 0===i.data("initialOverflow")&&i.data("initialOverflow",void 0===i.css("overflow")?"":i.css("overflow"));var e=n(this).find(".card-reveal");n(t.target).is(n(".card-reveal .card-title"))||n(t.target).is(n(".card-reveal .card-title i"))?s({targets:e[0],translateY:0,duration:225,easing:"easeInOutQuad",complete:function(t){var e=t.animatables[0].target;n(e).css({display:"none"}),i.css("overflow",i.data("initialOverflow"))}}):(n(t.target).is(n(".card .activator"))||n(t.target).is(n(".card .activator i")))&&(i.css("overflow","hidden"),e.css({display:"block"}),s({targets:e[0],translateY:"-100%",duration:300,easing:"easeInOutQuad"}))}})}(cash,M.anime),function(h){"use strict";var e={data:[],placeholder:"",secondaryPlaceholder:"",autocompleteOptions:{},limit:1/0,onChipAdd:null,onChipSelect:null,onChipDelete:null},t=function(t){function l(t,e){_classCallCheck(this,l);var i=_possibleConstructorReturn(this,(l.__proto__||Object.getPrototypeOf(l)).call(this,l,t,e));return(i.el.M_Chips=i).options=h.extend({},l.defaults,e),i.$el.addClass("chips input-field"),i.chipsData=[],i.$chips=h(),i._setupInput(),i.hasAutocomplete=0"),this.$el.append(this.$input)),this.$input.addClass("input")}},{key:"_setupLabel",value:function(){this.$label=this.$el.find("label"),this.$label.length&&this.$label.setAttribute("for",this.$input.attr("id"))}},{key:"_setPlaceholder",value:function(){void 0!==this.chipsData&&!this.chipsData.length&&this.options.placeholder?h(this.$input).prop("placeholder",this.options.placeholder):(void 0===this.chipsData||this.chipsData.length)&&this.options.secondaryPlaceholder&&h(this.$input).prop("placeholder",this.options.secondaryPlaceholder)}},{key:"_isValid",value:function(t){if(t.hasOwnProperty("tag")&&""!==t.tag){for(var e=!1,i=0;i=this.options.limit)){var e=this._renderChip(t);this.$chips.add(e),this.chipsData.push(t),h(this.$input).before(e),this._setPlaceholder(),"function"==typeof this.options.onChipAdd&&this.options.onChipAdd.call(this,this.$el,e)}}},{key:"deleteChip",value:function(t){var e=this.$chips.eq(t);this.$chips.eq(t).remove(),this.$chips=this.$chips.filter(function(t){return 0<=h(t).index()}),this.chipsData.splice(t,1),this._setPlaceholder(),"function"==typeof this.options.onChipDelete&&this.options.onChipDelete.call(this,this.$el,e[0])}},{key:"selectChip",value:function(t){var e=this.$chips.eq(t);(this._selectedChip=e)[0].focus(),"function"==typeof this.options.onChipSelect&&this.options.onChipSelect.call(this,this.$el,e[0])}}],[{key:"init",value:function(t,e){return _get(l.__proto__||Object.getPrototypeOf(l),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Chips}},{key:"_handleChipsKeydown",value:function(t){l._keydown=!0;var e=h(t.target).closest(".chips"),i=t.target&&e.length;if(!h(t.target).is("input, textarea")&&i){var n=e[0].M_Chips;if(8===t.keyCode||46===t.keyCode){t.preventDefault();var s=n.chipsData.length;if(n._selectedChip){var o=n._selectedChip.index();n.deleteChip(o),n._selectedChip=null,s=Math.max(o-1,0)}n.chipsData.length&&n.selectChip(s)}else if(37===t.keyCode){if(n._selectedChip){var a=n._selectedChip.index()-1;if(a<0)return;n.selectChip(a)}}else if(39===t.keyCode&&n._selectedChip){var r=n._selectedChip.index()+1;r>=n.chipsData.length?n.$input[0].focus():n.selectChip(r)}}}},{key:"_handleChipsKeyup",value:function(t){l._keydown=!1}},{key:"_handleChipsBlur",value:function(t){l._keydown||(h(t.target).closest(".chips")[0].M_Chips._selectedChip=null)}},{key:"defaults",get:function(){return e}}]),l}();t._keydown=!1,M.Chips=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"chips","M_Chips"),h(document).ready(function(){h(document.body).on("click",".chip .close",function(){var t=h(this).closest(".chips");t.length&&t[0].M_Chips||h(this).closest(".chip").remove()})})}(cash),function(s){"use strict";var e={top:0,bottom:1/0,offset:0,onPositionChange:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Pushpin=i).options=s.extend({},n.defaults,e),i.originalOffset=i.el.offsetTop,n._pushpins.push(i),i._setupEventHandlers(),i._updatePosition(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this.el.style.top=null,this._removePinClasses(),this._removeEventHandlers();var t=n._pushpins.indexOf(this);n._pushpins.splice(t,1)}},{key:"_setupEventHandlers",value:function(){document.addEventListener("scroll",n._updateElements)}},{key:"_removeEventHandlers",value:function(){document.removeEventListener("scroll",n._updateElements)}},{key:"_updatePosition",value:function(){var t=M.getDocumentScrollTop()+this.options.offset;this.options.top<=t&&this.options.bottom>=t&&!this.el.classList.contains("pinned")&&(this._removePinClasses(),this.el.style.top=this.options.offset+"px",this.el.classList.add("pinned"),"function"==typeof this.options.onPositionChange&&this.options.onPositionChange.call(this,"pinned")),tthis.options.bottom&&!this.el.classList.contains("pin-bottom")&&(this._removePinClasses(),this.el.classList.add("pin-bottom"),this.el.style.top=this.options.bottom-this.originalOffset+"px","function"==typeof this.options.onPositionChange&&this.options.onPositionChange.call(this,"pin-bottom"))}},{key:"_removePinClasses",value:function(){this.el.classList.remove("pin-top"),this.el.classList.remove("pinned"),this.el.classList.remove("pin-bottom")}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Pushpin}},{key:"_updateElements",value:function(){for(var t in n._pushpins){n._pushpins[t]._updatePosition()}}},{key:"defaults",get:function(){return e}}]),n}();t._pushpins=[],M.Pushpin=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"pushpin","M_Pushpin")}(cash),function(r,s){"use strict";var e={direction:"top",hoverEnabled:!0,toolbarEnabled:!1};r.fn.reverse=[].reverse;var t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_FloatingActionButton=i).options=r.extend({},n.defaults,e),i.isOpen=!1,i.$anchor=i.$el.children("a").first(),i.$menu=i.$el.children("ul").first(),i.$floatingBtns=i.$el.find("ul .btn-floating"),i.$floatingBtnsReverse=i.$el.find("ul .btn-floating").reverse(),i.offsetY=0,i.offsetX=0,i.$el.addClass("direction-"+i.options.direction),"top"===i.options.direction?i.offsetY=40:"right"===i.options.direction?i.offsetX=-40:"bottom"===i.options.direction?i.offsetY=-40:i.offsetX=40,i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_FloatingActionButton=void 0}},{key:"_setupEventHandlers",value:function(){this._handleFABClickBound=this._handleFABClick.bind(this),this._handleOpenBound=this.open.bind(this),this._handleCloseBound=this.close.bind(this),this.options.hoverEnabled&&!this.options.toolbarEnabled?(this.el.addEventListener("mouseenter",this._handleOpenBound),this.el.addEventListener("mouseleave",this._handleCloseBound)):this.el.addEventListener("click",this._handleFABClickBound)}},{key:"_removeEventHandlers",value:function(){this.options.hoverEnabled&&!this.options.toolbarEnabled?(this.el.removeEventListener("mouseenter",this._handleOpenBound),this.el.removeEventListener("mouseleave",this._handleCloseBound)):this.el.removeEventListener("click",this._handleFABClickBound)}},{key:"_handleFABClick",value:function(){this.isOpen?this.close():this.open()}},{key:"_handleDocumentClick",value:function(t){r(t.target).closest(this.$menu).length||this.close()}},{key:"open",value:function(){this.isOpen||(this.options.toolbarEnabled?this._animateInToolbar():this._animateInFAB(),this.isOpen=!0)}},{key:"close",value:function(){this.isOpen&&(this.options.toolbarEnabled?(window.removeEventListener("scroll",this._handleCloseBound,!0),document.body.removeEventListener("click",this._handleDocumentClickBound,!0),this._animateOutToolbar()):this._animateOutFAB(),this.isOpen=!1)}},{key:"_animateInFAB",value:function(){var e=this;this.$el.addClass("active");var i=0;this.$floatingBtnsReverse.each(function(t){s({targets:t,opacity:1,scale:[.4,1],translateY:[e.offsetY,0],translateX:[e.offsetX,0],duration:275,delay:i,easing:"easeInOutQuad"}),i+=40})}},{key:"_animateOutFAB",value:function(){var e=this;this.$floatingBtnsReverse.each(function(t){s.remove(t),s({targets:t,opacity:0,scale:.4,translateY:e.offsetY,translateX:e.offsetX,duration:175,easing:"easeOutQuad",complete:function(){e.$el.removeClass("active")}})})}},{key:"_animateInToolbar",value:function(){var t,e=this,i=window.innerWidth,n=window.innerHeight,s=this.el.getBoundingClientRect(),o=r('
    '),a=this.$anchor.css("background-color");this.$anchor.append(o),this.offsetX=s.left-i/2+s.width/2,this.offsetY=n-s.bottom,t=i/o[0].clientWidth,this.btnBottom=s.bottom,this.btnLeft=s.left,this.btnWidth=s.width,this.$el.addClass("active"),this.$el.css({"text-align":"center",width:"100%",bottom:0,left:0,transform:"translateX("+this.offsetX+"px)",transition:"none"}),this.$anchor.css({transform:"translateY("+-this.offsetY+"px)",transition:"none"}),o.css({"background-color":a}),setTimeout(function(){e.$el.css({transform:"",transition:"transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s"}),e.$anchor.css({overflow:"visible",transform:"",transition:"transform .2s"}),setTimeout(function(){e.$el.css({overflow:"hidden","background-color":a}),o.css({transform:"scale("+t+")",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"}),e.$menu.children("li").children("a").css({opacity:1}),e._handleDocumentClickBound=e._handleDocumentClick.bind(e),window.addEventListener("scroll",e._handleCloseBound,!0),document.body.addEventListener("click",e._handleDocumentClickBound,!0)},100)},0)}},{key:"_animateOutToolbar",value:function(){var t=this,e=window.innerWidth,i=window.innerHeight,n=this.$el.find(".fab-backdrop"),s=this.$anchor.css("background-color");this.offsetX=this.btnLeft-e/2+this.btnWidth/2,this.offsetY=i-this.btnBottom,this.$el.removeClass("active"),this.$el.css({"background-color":"transparent",transition:"none"}),this.$anchor.css({transition:"none"}),n.css({transform:"scale(0)","background-color":s}),this.$menu.children("li").children("a").css({opacity:""}),setTimeout(function(){n.remove(),t.$el.css({"text-align":"",width:"",bottom:"",left:"",overflow:"","background-color":"",transform:"translate3d("+-t.offsetX+"px,0,0)"}),t.$anchor.css({overflow:"",transform:"translate3d(0,"+t.offsetY+"px,0)"}),setTimeout(function(){t.$el.css({transform:"translate3d(0,0,0)",transition:"transform .2s"}),t.$anchor.css({transform:"translate3d(0,0,0)",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"})},20)},200)}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_FloatingActionButton}},{key:"defaults",get:function(){return e}}]),n}();M.FloatingActionButton=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"floatingActionButton","M_FloatingActionButton")}(cash,M.anime),function(g){"use strict";var e={autoClose:!1,format:"mmm dd, yyyy",parse:null,defaultDate:null,setDefaultDate:!1,disableWeekends:!1,disableDayFn:null,firstDay:0,minDate:null,maxDate:null,yearRange:10,minYear:0,maxYear:9999,minMonth:void 0,maxMonth:void 0,startRange:null,endRange:null,isRTL:!1,showMonthAfterYear:!1,showDaysInNextAndPreviousMonths:!1,container:null,showClearBtn:!1,i18n:{cancel:"Cancel",clear:"Clear",done:"Ok",previousMonth:"‹",nextMonth:"›",months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysAbbrev:["S","M","T","W","T","F","S"]},events:[],onSelect:null,onOpen:null,onClose:null,onDraw:null},t=function(t){function B(t,e){_classCallCheck(this,B);var i=_possibleConstructorReturn(this,(B.__proto__||Object.getPrototypeOf(B)).call(this,B,t,e));(i.el.M_Datepicker=i).options=g.extend({},B.defaults,e),e&&e.hasOwnProperty("i18n")&&"object"==typeof e.i18n&&(i.options.i18n=g.extend({},B.defaults.i18n,e.i18n)),i.options.minDate&&i.options.minDate.setHours(0,0,0,0),i.options.maxDate&&i.options.maxDate.setHours(0,0,0,0),i.id=M.guid(),i._setupVariables(),i._insertHTMLIntoDOM(),i._setupModal(),i._setupEventHandlers(),i.options.defaultDate||(i.options.defaultDate=new Date(Date.parse(i.el.value)));var n=i.options.defaultDate;return B._isDate(n)?i.options.setDefaultDate?(i.setDate(n,!0),i.setInputValue()):i.gotoDate(n):i.gotoDate(new Date),i.isOpen=!1,i}return _inherits(B,Component),_createClass(B,[{key:"destroy",value:function(){this._removeEventHandlers(),this.modal.destroy(),g(this.modalEl).remove(),this.destroySelects(),this.el.M_Datepicker=void 0}},{key:"destroySelects",value:function(){var t=this.calendarEl.querySelector(".orig-select-year");t&&M.FormSelect.getInstance(t).destroy();var e=this.calendarEl.querySelector(".orig-select-month");e&&M.FormSelect.getInstance(e).destroy()}},{key:"_insertHTMLIntoDOM",value:function(){this.options.showClearBtn&&(g(this.clearBtn).css({visibility:""}),this.clearBtn.innerHTML=this.options.i18n.clear),this.doneBtn.innerHTML=this.options.i18n.done,this.cancelBtn.innerHTML=this.options.i18n.cancel,this.options.container?this.$modalEl.appendTo(this.options.container):this.$modalEl.insertBefore(this.el)}},{key:"_setupModal",value:function(){var t=this;this.modalEl.id="modal-"+this.id,this.modal=M.Modal.init(this.modalEl,{onCloseEnd:function(){t.isOpen=!1}})}},{key:"toString",value:function(t){var e=this;return t=t||this.options.format,B._isDate(this.date)?t.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g).map(function(t){return e.formats[t]?e.formats[t]():t}).join(""):""}},{key:"setDate",value:function(t,e){if(!t)return this.date=null,this._renderDateDisplay(),this.draw();if("string"==typeof t&&(t=new Date(Date.parse(t))),B._isDate(t)){var i=this.options.minDate,n=this.options.maxDate;B._isDate(i)&&tn.maxDate||n.disableWeekends&&B._isWeekend(y)||n.disableDayFn&&n.disableDayFn(y),isEmpty:C,isStartRange:x,isEndRange:L,isInRange:T,showDaysInNextAndPreviousMonths:n.showDaysInNextAndPreviousMonths};l.push(this.renderDay($)),7==++_&&(r.push(this.renderRow(l,n.isRTL,m)),_=0,m=!(l=[]))}return this.renderTable(n,r,i)}},{key:"renderDay",value:function(t){var e=[],i="false";if(t.isEmpty){if(!t.showDaysInNextAndPreviousMonths)return'';e.push("is-outside-current-month"),e.push("is-selection-disabled")}return t.isDisabled&&e.push("is-disabled"),t.isToday&&e.push("is-today"),t.isSelected&&(e.push("is-selected"),i="true"),t.hasEvent&&e.push("has-event"),t.isInRange&&e.push("is-inrange"),t.isStartRange&&e.push("is-startrange"),t.isEndRange&&e.push("is-endrange"),'"}},{key:"renderRow",value:function(t,e,i){return''+(e?t.reverse():t).join("")+""}},{key:"renderTable",value:function(t,e,i){return'
    '+this.renderHead(t)+this.renderBody(e)+"
    "}},{key:"renderHead",value:function(t){var e=void 0,i=[];for(e=0;e<7;e++)i.push(''+this.renderDayName(t,e,!0)+"");return""+(t.isRTL?i.reverse():i).join("")+""}},{key:"renderBody",value:function(t){return""+t.join("")+""}},{key:"renderTitle",value:function(t,e,i,n,s,o){var a,r,l=void 0,h=void 0,d=void 0,u=this.options,c=i===u.minYear,p=i===u.maxYear,v='
    ',f=!0,m=!0;for(d=[],l=0;l<12;l++)d.push('");for(a='",g.isArray(u.yearRange)?(l=u.yearRange[0],h=u.yearRange[1]+1):(l=i-u.yearRange,h=1+i+u.yearRange),d=[];l=u.minYear&&d.push('");r='";v+='',v+='
    ',u.showMonthAfterYear?v+=r+a:v+=a+r,v+="
    ",c&&(0===n||u.minMonth>=n)&&(f=!1),p&&(11===n||u.maxMonth<=n)&&(m=!1);return(v+='')+"
    "}},{key:"draw",value:function(t){if(this.isOpen||t){var e,i=this.options,n=i.minYear,s=i.maxYear,o=i.minMonth,a=i.maxMonth,r="";this._y<=n&&(this._y=n,!isNaN(o)&&this._m=s&&(this._y=s,!isNaN(a)&&this._m>a&&(this._m=a)),e="datepicker-title-"+Math.random().toString(36).replace(/[^a-z]+/g,"").substr(0,2);for(var l=0;l<1;l++)this._renderDateDisplay(),r+=this.renderTitle(this,l,this.calendars[l].year,this.calendars[l].month,this.calendars[0].year,e)+this.render(this.calendars[l].year,this.calendars[l].month,e);this.destroySelects(),this.calendarEl.innerHTML=r;var h=this.calendarEl.querySelector(".orig-select-year"),d=this.calendarEl.querySelector(".orig-select-month");M.FormSelect.init(h,{classes:"select-year",dropdownOptions:{container:document.body,constrainWidth:!1}}),M.FormSelect.init(d,{classes:"select-month",dropdownOptions:{container:document.body,constrainWidth:!1}}),h.addEventListener("change",this._handleYearChange.bind(this)),d.addEventListener("change",this._handleMonthChange.bind(this)),"function"==typeof this.options.onDraw&&this.options.onDraw(this)}}},{key:"_setupEventHandlers",value:function(){this._handleInputKeydownBound=this._handleInputKeydown.bind(this),this._handleInputClickBound=this._handleInputClick.bind(this),this._handleInputChangeBound=this._handleInputChange.bind(this),this._handleCalendarClickBound=this._handleCalendarClick.bind(this),this._finishSelectionBound=this._finishSelection.bind(this),this._handleMonthChange=this._handleMonthChange.bind(this),this._closeBound=this.close.bind(this),this.el.addEventListener("click",this._handleInputClickBound),this.el.addEventListener("keydown",this._handleInputKeydownBound),this.el.addEventListener("change",this._handleInputChangeBound),this.calendarEl.addEventListener("click",this._handleCalendarClickBound),this.doneBtn.addEventListener("click",this._finishSelectionBound),this.cancelBtn.addEventListener("click",this._closeBound),this.options.showClearBtn&&(this._handleClearClickBound=this._handleClearClick.bind(this),this.clearBtn.addEventListener("click",this._handleClearClickBound))}},{key:"_setupVariables",value:function(){var e=this;this.$modalEl=g(B._template),this.modalEl=this.$modalEl[0],this.calendarEl=this.modalEl.querySelector(".datepicker-calendar"),this.yearTextEl=this.modalEl.querySelector(".year-text"),this.dateTextEl=this.modalEl.querySelector(".date-text"),this.options.showClearBtn&&(this.clearBtn=this.modalEl.querySelector(".datepicker-clear")),this.doneBtn=this.modalEl.querySelector(".datepicker-done"),this.cancelBtn=this.modalEl.querySelector(".datepicker-cancel"),this.formats={d:function(){return e.date.getDate()},dd:function(){var t=e.date.getDate();return(t<10?"0":"")+t},ddd:function(){return e.options.i18n.weekdaysShort[e.date.getDay()]},dddd:function(){return e.options.i18n.weekdays[e.date.getDay()]},m:function(){return e.date.getMonth()+1},mm:function(){var t=e.date.getMonth()+1;return(t<10?"0":"")+t},mmm:function(){return e.options.i18n.monthsShort[e.date.getMonth()]},mmmm:function(){return e.options.i18n.months[e.date.getMonth()]},yy:function(){return(""+e.date.getFullYear()).slice(2)},yyyy:function(){return e.date.getFullYear()}}}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleInputClickBound),this.el.removeEventListener("keydown",this._handleInputKeydownBound),this.el.removeEventListener("change",this._handleInputChangeBound),this.calendarEl.removeEventListener("click",this._handleCalendarClickBound)}},{key:"_handleInputClick",value:function(){this.open()}},{key:"_handleInputKeydown",value:function(t){t.which===M.keys.ENTER&&(t.preventDefault(),this.open())}},{key:"_handleCalendarClick",value:function(t){if(this.isOpen){var e=g(t.target);e.hasClass("is-disabled")||(!e.hasClass("datepicker-day-button")||e.hasClass("is-empty")||e.parent().hasClass("is-disabled")?e.closest(".month-prev").length?this.prevMonth():e.closest(".month-next").length&&this.nextMonth():(this.setDate(new Date(t.target.getAttribute("data-year"),t.target.getAttribute("data-month"),t.target.getAttribute("data-day"))),this.options.autoClose&&this._finishSelection()))}}},{key:"_handleClearClick",value:function(){this.date=null,this.setInputValue(),this.close()}},{key:"_handleMonthChange",value:function(t){this.gotoMonth(t.target.value)}},{key:"_handleYearChange",value:function(t){this.gotoYear(t.target.value)}},{key:"gotoMonth",value:function(t){isNaN(t)||(this.calendars[0].month=parseInt(t,10),this.adjustCalendars())}},{key:"gotoYear",value:function(t){isNaN(t)||(this.calendars[0].year=parseInt(t,10),this.adjustCalendars())}},{key:"_handleInputChange",value:function(t){var e=void 0;t.firedBy!==this&&(e=this.options.parse?this.options.parse(this.el.value,this.options.format):new Date(Date.parse(this.el.value)),B._isDate(e)&&this.setDate(e))}},{key:"renderDayName",value:function(t,e,i){for(e+=t.firstDay;7<=e;)e-=7;return i?t.i18n.weekdaysAbbrev[e]:t.i18n.weekdays[e]}},{key:"_finishSelection",value:function(){this.setInputValue(),this.close()}},{key:"open",value:function(){if(!this.isOpen)return this.isOpen=!0,"function"==typeof this.options.onOpen&&this.options.onOpen.call(this),this.draw(),this.modal.open(),this}},{key:"close",value:function(){if(this.isOpen)return this.isOpen=!1,"function"==typeof this.options.onClose&&this.options.onClose.call(this),this.modal.close(),this}}],[{key:"init",value:function(t,e){return _get(B.__proto__||Object.getPrototypeOf(B),"init",this).call(this,this,t,e)}},{key:"_isDate",value:function(t){return/Date/.test(Object.prototype.toString.call(t))&&!isNaN(t.getTime())}},{key:"_isWeekend",value:function(t){var e=t.getDay();return 0===e||6===e}},{key:"_setToStartOfDay",value:function(t){B._isDate(t)&&t.setHours(0,0,0,0)}},{key:"_getDaysInMonth",value:function(t,e){return[31,B._isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]}},{key:"_isLeapYear",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:"_compareDates",value:function(t,e){return t.getTime()===e.getTime()}},{key:"_setToStartOfDay",value:function(t){B._isDate(t)&&t.setHours(0,0,0,0)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Datepicker}},{key:"defaults",get:function(){return e}}]),B}();t._template=['"].join(""),M.Datepicker=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"datepicker","M_Datepicker")}(cash),function(h){"use strict";var e={dialRadius:135,outerRadius:105,innerRadius:70,tickRadius:20,duration:350,container:null,defaultTime:"now",fromNow:0,showClearBtn:!1,i18n:{cancel:"Cancel",clear:"Clear",done:"Ok"},autoClose:!1,twelveHour:!0,vibrate:!0,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,onSelect:null},t=function(t){function f(t,e){_classCallCheck(this,f);var i=_possibleConstructorReturn(this,(f.__proto__||Object.getPrototypeOf(f)).call(this,f,t,e));return(i.el.M_Timepicker=i).options=h.extend({},f.defaults,e),i.id=M.guid(),i._insertHTMLIntoDOM(),i._setupModal(),i._setupVariables(),i._setupEventHandlers(),i._clockSetup(),i._pickerSetup(),i}return _inherits(f,Component),_createClass(f,[{key:"destroy",value:function(){this._removeEventHandlers(),this.modal.destroy(),h(this.modalEl).remove(),this.el.M_Timepicker=void 0}},{key:"_setupEventHandlers",value:function(){this._handleInputKeydownBound=this._handleInputKeydown.bind(this),this._handleInputClickBound=this._handleInputClick.bind(this),this._handleClockClickStartBound=this._handleClockClickStart.bind(this),this._handleDocumentClickMoveBound=this._handleDocumentClickMove.bind(this),this._handleDocumentClickEndBound=this._handleDocumentClickEnd.bind(this),this.el.addEventListener("click",this._handleInputClickBound),this.el.addEventListener("keydown",this._handleInputKeydownBound),this.plate.addEventListener("mousedown",this._handleClockClickStartBound),this.plate.addEventListener("touchstart",this._handleClockClickStartBound),h(this.spanHours).on("click",this.showView.bind(this,"hours")),h(this.spanMinutes).on("click",this.showView.bind(this,"minutes"))}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleInputClickBound),this.el.removeEventListener("keydown",this._handleInputKeydownBound)}},{key:"_handleInputClick",value:function(){this.open()}},{key:"_handleInputKeydown",value:function(t){t.which===M.keys.ENTER&&(t.preventDefault(),this.open())}},{key:"_handleClockClickStart",value:function(t){t.preventDefault();var e=this.plate.getBoundingClientRect(),i=e.left,n=e.top;this.x0=i+this.options.dialRadius,this.y0=n+this.options.dialRadius,this.moved=!1;var s=f._Pos(t);this.dx=s.x-this.x0,this.dy=s.y-this.y0,this.setHand(this.dx,this.dy,!1),document.addEventListener("mousemove",this._handleDocumentClickMoveBound),document.addEventListener("touchmove",this._handleDocumentClickMoveBound),document.addEventListener("mouseup",this._handleDocumentClickEndBound),document.addEventListener("touchend",this._handleDocumentClickEndBound)}},{key:"_handleDocumentClickMove",value:function(t){t.preventDefault();var e=f._Pos(t),i=e.x-this.x0,n=e.y-this.y0;this.moved=!0,this.setHand(i,n,!1,!0)}},{key:"_handleDocumentClickEnd",value:function(t){var e=this;t.preventDefault(),document.removeEventListener("mouseup",this._handleDocumentClickEndBound),document.removeEventListener("touchend",this._handleDocumentClickEndBound);var i=f._Pos(t),n=i.x-this.x0,s=i.y-this.y0;this.moved&&n===this.dx&&s===this.dy&&this.setHand(n,s),"hours"===this.currentView?this.showView("minutes",this.options.duration/2):this.options.autoClose&&(h(this.minutesView).addClass("timepicker-dial-out"),setTimeout(function(){e.done()},this.options.duration/2)),"function"==typeof this.options.onSelect&&this.options.onSelect.call(this,this.hours,this.minutes),document.removeEventListener("mousemove",this._handleDocumentClickMoveBound),document.removeEventListener("touchmove",this._handleDocumentClickMoveBound)}},{key:"_insertHTMLIntoDOM",value:function(){this.$modalEl=h(f._template),this.modalEl=this.$modalEl[0],this.modalEl.id="modal-"+this.id;var t=document.querySelector(this.options.container);this.options.container&&t?this.$modalEl.appendTo(t):this.$modalEl.insertBefore(this.el)}},{key:"_setupModal",value:function(){var t=this;this.modal=M.Modal.init(this.modalEl,{onOpenStart:this.options.onOpenStart,onOpenEnd:this.options.onOpenEnd,onCloseStart:this.options.onCloseStart,onCloseEnd:function(){"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t),t.isOpen=!1}})}},{key:"_setupVariables",value:function(){this.currentView="hours",this.vibrate=navigator.vibrate?"vibrate":navigator.webkitVibrate?"webkitVibrate":null,this._canvas=this.modalEl.querySelector(".timepicker-canvas"),this.plate=this.modalEl.querySelector(".timepicker-plate"),this.hoursView=this.modalEl.querySelector(".timepicker-hours"),this.minutesView=this.modalEl.querySelector(".timepicker-minutes"),this.spanHours=this.modalEl.querySelector(".timepicker-span-hours"),this.spanMinutes=this.modalEl.querySelector(".timepicker-span-minutes"),this.spanAmPm=this.modalEl.querySelector(".timepicker-span-am-pm"),this.footer=this.modalEl.querySelector(".timepicker-footer"),this.amOrPm="PM"}},{key:"_pickerSetup",value:function(){var t=h('").appendTo(this.footer).on("click",this.clear.bind(this));this.options.showClearBtn&&t.css({visibility:""});var e=h('
    ');h('").appendTo(e).on("click",this.close.bind(this)),h('").appendTo(e).on("click",this.done.bind(this)),e.appendTo(this.footer)}},{key:"_clockSetup",value:function(){this.options.twelveHour&&(this.$amBtn=h('
    AM
    '),this.$pmBtn=h('
    PM
    '),this.$amBtn.on("click",this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm),this.$pmBtn.on("click",this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm)),this._buildHoursView(),this._buildMinutesView(),this._buildSVGClock()}},{key:"_buildSVGClock",value:function(){var t=this.options.dialRadius,e=this.options.tickRadius,i=2*t,n=f._createSVGEl("svg");n.setAttribute("class","timepicker-svg"),n.setAttribute("width",i),n.setAttribute("height",i);var s=f._createSVGEl("g");s.setAttribute("transform","translate("+t+","+t+")");var o=f._createSVGEl("circle");o.setAttribute("class","timepicker-canvas-bearing"),o.setAttribute("cx",0),o.setAttribute("cy",0),o.setAttribute("r",4);var a=f._createSVGEl("line");a.setAttribute("x1",0),a.setAttribute("y1",0);var r=f._createSVGEl("circle");r.setAttribute("class","timepicker-canvas-bg"),r.setAttribute("r",e),s.appendChild(a),s.appendChild(r),s.appendChild(o),n.appendChild(s),this._canvas.appendChild(n),this.hand=a,this.bg=r,this.bearing=o,this.g=s}},{key:"_buildHoursView",value:function(){var t=h('
    ');if(this.options.twelveHour)for(var e=1;e<13;e+=1){var i=t.clone(),n=e/6*Math.PI,s=this.options.outerRadius;i.css({left:this.options.dialRadius+Math.sin(n)*s-this.options.tickRadius+"px",top:this.options.dialRadius-Math.cos(n)*s-this.options.tickRadius+"px"}),i.html(0===e?"00":e),this.hoursView.appendChild(i[0])}else for(var o=0;o<24;o+=1){var a=t.clone(),r=o/6*Math.PI,l=0'),e=0;e<60;e+=5){var i=t.clone(),n=e/30*Math.PI;i.css({left:this.options.dialRadius+Math.sin(n)*this.options.outerRadius-this.options.tickRadius+"px",top:this.options.dialRadius-Math.cos(n)*this.options.outerRadius-this.options.tickRadius+"px"}),i.html(f._addLeadingZero(e)),this.minutesView.appendChild(i[0])}}},{key:"_handleAmPmClick",value:function(t){var e=h(t.target);this.amOrPm=e.hasClass("am-btn")?"AM":"PM",this._updateAmPmView()}},{key:"_updateAmPmView",value:function(){this.options.twelveHour&&(this.$amBtn.toggleClass("text-primary","AM"===this.amOrPm),this.$pmBtn.toggleClass("text-primary","PM"===this.amOrPm))}},{key:"_updateTimeFromInput",value:function(){var t=((this.el.value||this.options.defaultTime||"")+"").split(":");if(this.options.twelveHour&&void 0!==t[1]&&(0','",""].join(""),M.Timepicker=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"timepicker","M_Timepicker")}(cash),function(s){"use strict";var e={},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_CharacterCounter=i).options=s.extend({},n.defaults,e),i.isInvalid=!1,i.isValidLength=!1,i._setupCounter(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.CharacterCounter=void 0,this._removeCounter()}},{key:"_setupEventHandlers",value:function(){this._handleUpdateCounterBound=this.updateCounter.bind(this),this.el.addEventListener("focus",this._handleUpdateCounterBound,!0),this.el.addEventListener("input",this._handleUpdateCounterBound,!0)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("focus",this._handleUpdateCounterBound,!0),this.el.removeEventListener("input",this._handleUpdateCounterBound,!0)}},{key:"_setupCounter",value:function(){this.counterEl=document.createElement("span"),s(this.counterEl).addClass("character-counter").css({float:"right","font-size":"12px",height:1}),this.$el.parent().append(this.counterEl)}},{key:"_removeCounter",value:function(){s(this.counterEl).remove()}},{key:"updateCounter",value:function(){var t=+this.$el.attr("data-length"),e=this.el.value.length;this.isValidLength=e<=t;var i=e;t&&(i+="/"+t,this._validateInput()),s(this.counterEl).html(i)}},{key:"_validateInput",value:function(){this.isValidLength&&this.isInvalid?(this.isInvalid=!1,this.$el.removeClass("invalid")):this.isValidLength||this.isInvalid||(this.isInvalid=!0,this.$el.removeClass("valid"),this.$el.addClass("invalid"))}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_CharacterCounter}},{key:"defaults",get:function(){return e}}]),n}();M.CharacterCounter=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"characterCounter","M_CharacterCounter")}(cash),function(b){"use strict";var e={duration:200,dist:-100,shift:0,padding:0,numVisible:5,fullWidth:!1,indicators:!1,noWrap:!1,onCycleTo:null},t=function(t){function i(t,e){_classCallCheck(this,i);var n=_possibleConstructorReturn(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,i,t,e));return(n.el.M_Carousel=n).options=b.extend({},i.defaults,e),n.hasMultipleSlides=1'),n.$el.find(".carousel-item").each(function(t,e){if(n.images.push(t),n.showIndicators){var i=b('
  • ');0===e&&i[0].classList.add("active"),n.$indicators.append(i)}}),n.showIndicators&&n.$el.append(n.$indicators),n.count=n.images.length,n.options.numVisible=Math.min(n.count,n.options.numVisible),n.xform="transform",["webkit","Moz","O","ms"].every(function(t){var e=t+"Transform";return void 0===document.body.style[e]||(n.xform=e,!1)}),n._setupEventHandlers(),n._scroll(n.offset),n}return _inherits(i,Component),_createClass(i,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Carousel=void 0}},{key:"_setupEventHandlers",value:function(){var i=this;this._handleCarouselTapBound=this._handleCarouselTap.bind(this),this._handleCarouselDragBound=this._handleCarouselDrag.bind(this),this._handleCarouselReleaseBound=this._handleCarouselRelease.bind(this),this._handleCarouselClickBound=this._handleCarouselClick.bind(this),void 0!==window.ontouchstart&&(this.el.addEventListener("touchstart",this._handleCarouselTapBound),this.el.addEventListener("touchmove",this._handleCarouselDragBound),this.el.addEventListener("touchend",this._handleCarouselReleaseBound)),this.el.addEventListener("mousedown",this._handleCarouselTapBound),this.el.addEventListener("mousemove",this._handleCarouselDragBound),this.el.addEventListener("mouseup",this._handleCarouselReleaseBound),this.el.addEventListener("mouseleave",this._handleCarouselReleaseBound),this.el.addEventListener("click",this._handleCarouselClickBound),this.showIndicators&&this.$indicators&&(this._handleIndicatorClickBound=this._handleIndicatorClick.bind(this),this.$indicators.find(".indicator-item").each(function(t,e){t.addEventListener("click",i._handleIndicatorClickBound)}));var t=M.throttle(this._handleResize,200);this._handleThrottledResizeBound=t.bind(this),window.addEventListener("resize",this._handleThrottledResizeBound)}},{key:"_removeEventHandlers",value:function(){var i=this;void 0!==window.ontouchstart&&(this.el.removeEventListener("touchstart",this._handleCarouselTapBound),this.el.removeEventListener("touchmove",this._handleCarouselDragBound),this.el.removeEventListener("touchend",this._handleCarouselReleaseBound)),this.el.removeEventListener("mousedown",this._handleCarouselTapBound),this.el.removeEventListener("mousemove",this._handleCarouselDragBound),this.el.removeEventListener("mouseup",this._handleCarouselReleaseBound),this.el.removeEventListener("mouseleave",this._handleCarouselReleaseBound),this.el.removeEventListener("click",this._handleCarouselClickBound),this.showIndicators&&this.$indicators&&this.$indicators.find(".indicator-item").each(function(t,e){t.removeEventListener("click",i._handleIndicatorClickBound)}),window.removeEventListener("resize",this._handleThrottledResizeBound)}},{key:"_handleCarouselTap",value:function(t){"mousedown"===t.type&&b(t.target).is("img")&&t.preventDefault(),this.pressed=!0,this.dragged=!1,this.verticalDragged=!1,this.reference=this._xpos(t),this.referenceY=this._ypos(t),this.velocity=this.amplitude=0,this.frame=this.offset,this.timestamp=Date.now(),clearInterval(this.ticker),this.ticker=setInterval(this._trackBound,100)}},{key:"_handleCarouselDrag",value:function(t){var e=void 0,i=void 0,n=void 0;if(this.pressed)if(e=this._xpos(t),i=this._ypos(t),n=this.reference-e,Math.abs(this.referenceY-i)<30&&!this.verticalDragged)(2=this.dim*(this.count-1)?this.target=this.dim*(this.count-1):this.target<0&&(this.target=0)),this.amplitude=this.target-this.offset,this.timestamp=Date.now(),requestAnimationFrame(this._autoScrollBound),this.dragged&&(t.preventDefault(),t.stopPropagation()),!1}},{key:"_handleCarouselClick",value:function(t){if(this.dragged)return t.preventDefault(),t.stopPropagation(),!1;if(!this.options.fullWidth){var e=b(t.target).closest(".carousel-item").index();0!==this._wrap(this.center)-e&&(t.preventDefault(),t.stopPropagation()),this._cycleTo(e)}}},{key:"_handleIndicatorClick",value:function(t){t.stopPropagation();var e=b(t.target).closest(".indicator-item");e.length&&this._cycleTo(e.index())}},{key:"_handleResize",value:function(t){this.options.fullWidth?(this.itemWidth=this.$el.find(".carousel-item").first().innerWidth(),this.imageHeight=this.$el.find(".carousel-item.active").height(),this.dim=2*this.itemWidth+this.options.padding,this.offset=2*this.center*this.itemWidth,this.target=this.offset,this._setCarouselHeight(!0)):this._scroll()}},{key:"_setCarouselHeight",value:function(t){var i=this,e=this.$el.find(".carousel-item.active").length?this.$el.find(".carousel-item.active").first():this.$el.find(".carousel-item").first(),n=e.find("img").first();if(n.length)if(n[0].complete){var s=n.height();if(0=this.count?t%this.count:t<0?this._wrap(this.count+t%this.count):t}},{key:"_track",value:function(){var t,e,i,n;e=(t=Date.now())-this.timestamp,this.timestamp=t,i=this.offset-this.frame,this.frame=this.offset,n=1e3*i/(1+e),this.velocity=.8*n+.2*this.velocity}},{key:"_autoScroll",value:function(){var t=void 0,e=void 0;this.amplitude&&(t=Date.now()-this.timestamp,2<(e=this.amplitude*Math.exp(-t/this.options.duration))||e<-2?(this._scroll(this.target-e),requestAnimationFrame(this._autoScrollBound)):this._scroll(this.target))}},{key:"_scroll",value:function(t){var e=this;this.$el.hasClass("scrolling")||this.el.classList.add("scrolling"),null!=this.scrollingTimeout&&window.clearTimeout(this.scrollingTimeout),this.scrollingTimeout=window.setTimeout(function(){e.$el.removeClass("scrolling")},this.options.duration);var i,n,s,o,a=void 0,r=void 0,l=void 0,h=void 0,d=void 0,u=void 0,c=this.center,p=1/this.options.numVisible;if(this.offset="number"==typeof t?t:this.offset,this.center=Math.floor((this.offset+this.dim/2)/this.dim),o=-(s=(n=this.offset-this.center*this.dim)<0?1:-1)*n*2/this.dim,i=this.count>>1,this.options.fullWidth?(l="translateX(0)",u=1):(l="translateX("+(this.el.clientWidth-this.itemWidth)/2+"px) ",l+="translateY("+(this.el.clientHeight-this.itemHeight)/2+"px)",u=1-p*o),this.showIndicators){var v=this.center%this.count,f=this.$indicators.find(".indicator-item.active");f.index()!==v&&(f.removeClass("active"),this.$indicators.find(".indicator-item").eq(v)[0].classList.add("active"))}if(!this.noWrap||0<=this.center&&this.center=this.count||e<0){if(this.noWrap)return;e=this._wrap(e)}this._cycleTo(e)}},{key:"prev",value:function(t){(void 0===t||isNaN(t))&&(t=1);var e=this.center-t;if(e>=this.count||e<0){if(this.noWrap)return;e=this._wrap(e)}this._cycleTo(e)}},{key:"set",value:function(t,e){if((void 0===t||isNaN(t))&&(t=0),t>this.count||t<0){if(this.noWrap)return;t=this._wrap(t)}this._cycleTo(t,e)}}],[{key:"init",value:function(t,e){return _get(i.__proto__||Object.getPrototypeOf(i),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Carousel}},{key:"defaults",get:function(){return e}}]),i}();M.Carousel=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"carousel","M_Carousel")}(cash),function(S){"use strict";var e={onOpen:void 0,onClose:void 0},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_TapTarget=i).options=S.extend({},n.defaults,e),i.isOpen=!1,i.$origin=S("#"+i.$el.attr("data-target")),i._setup(),i._calculatePositioning(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.TapTarget=void 0}},{key:"_setupEventHandlers",value:function(){this._handleDocumentClickBound=this._handleDocumentClick.bind(this),this._handleTargetClickBound=this._handleTargetClick.bind(this),this._handleOriginClickBound=this._handleOriginClick.bind(this),this.el.addEventListener("click",this._handleTargetClickBound),this.originEl.addEventListener("click",this._handleOriginClickBound);var t=M.throttle(this._handleResize,200);this._handleThrottledResizeBound=t.bind(this),window.addEventListener("resize",this._handleThrottledResizeBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleTargetClickBound),this.originEl.removeEventListener("click",this._handleOriginClickBound),window.removeEventListener("resize",this._handleThrottledResizeBound)}},{key:"_handleTargetClick",value:function(t){this.open()}},{key:"_handleOriginClick",value:function(t){this.close()}},{key:"_handleResize",value:function(t){this._calculatePositioning()}},{key:"_handleDocumentClick",value:function(t){S(t.target).closest(".tap-target-wrapper").length||(this.close(),t.preventDefault(),t.stopPropagation())}},{key:"_setup",value:function(){this.wrapper=this.$el.parent()[0],this.waveEl=S(this.wrapper).find(".tap-target-wave")[0],this.originEl=S(this.wrapper).find(".tap-target-origin")[0],this.contentEl=this.$el.find(".tap-target-content")[0],S(this.wrapper).hasClass(".tap-target-wrapper")||(this.wrapper=document.createElement("div"),this.wrapper.classList.add("tap-target-wrapper"),this.$el.before(S(this.wrapper)),this.wrapper.append(this.el)),this.contentEl||(this.contentEl=document.createElement("div"),this.contentEl.classList.add("tap-target-content"),this.$el.append(this.contentEl)),this.waveEl||(this.waveEl=document.createElement("div"),this.waveEl.classList.add("tap-target-wave"),this.originEl||(this.originEl=this.$origin.clone(!0,!0),this.originEl.addClass("tap-target-origin"),this.originEl.removeAttr("id"),this.originEl.removeAttr("style"),this.originEl=this.originEl[0],this.waveEl.append(this.originEl)),this.wrapper.append(this.waveEl))}},{key:"_calculatePositioning",value:function(){var t="fixed"===this.$origin.css("position");if(!t)for(var e=this.$origin.parents(),i=0;i'+t.getAttribute("label")+"")[0]),i.each(function(t){var e=n._appendOptionWithIcon(n.$el,t,"optgroup-option");n._addOptionToValueDict(t,e)})}}),this.$el.after(this.dropdownOptions),this.input=document.createElement("input"),d(this.input).addClass("select-dropdown dropdown-trigger"),this.input.setAttribute("type","text"),this.input.setAttribute("readonly","true"),this.input.setAttribute("data-target",this.dropdownOptions.id),this.el.disabled&&d(this.input).prop("disabled","true"),this.$el.before(this.input),this._setValueToInput();var t=d('');if(this.$el.before(t[0]),!this.el.disabled){var e=d.extend({},this.options.dropdownOptions);e.onOpenEnd=function(t){var e=d(n.dropdownOptions).find(".selected").first();if(e.length&&(M.keyDown=!0,n.dropdown.focusedIndex=e.index(),n.dropdown._focusFocusedItem(),M.keyDown=!1,n.dropdown.isScrollable)){var i=e[0].getBoundingClientRect().top-n.dropdownOptions.getBoundingClientRect().top;i-=n.dropdownOptions.clientHeight/2,n.dropdownOptions.scrollTop=i}},this.isMultiple&&(e.closeOnClick=!1),this.dropdown=M.Dropdown.init(this.input,e)}this._setSelectedStates()}},{key:"_addOptionToValueDict",value:function(t,e){var i=Object.keys(this._valueDict).length,n=this.dropdownOptions.id+i,s={};e.id=n,s.el=t,s.optionEl=e,this._valueDict[n]=s}},{key:"_removeDropdown",value:function(){d(this.wrapper).find(".caret").remove(),d(this.input).remove(),d(this.dropdownOptions).remove(),d(this.wrapper).before(this.$el),d(this.wrapper).remove()}},{key:"_appendOptionWithIcon",value:function(t,e,i){var n=e.disabled?"disabled ":"",s="optgroup-option"===i?"optgroup-option ":"",o=this.isMultiple?'":e.innerHTML,a=d("
  • "),r=d("");r.html(o),a.addClass(n+" "+s),a.append(r);var l=e.getAttribute("data-icon");if(l){var h=d('');a.prepend(h)}return d(this.dropdownOptions).append(a[0]),a[0]}},{key:"_toggleEntryFromArray",value:function(t){var e=!this._keysSelected.hasOwnProperty(t),i=d(this._valueDict[t].optionEl);return e?this._keysSelected[t]=!0:delete this._keysSelected[t],i.toggleClass("selected",e),i.find('input[type="checkbox"]').prop("checked",e),i.prop("selected",e),e}},{key:"_setValueToInput",value:function(){var i=[];if(this.$el.find("option").each(function(t){if(d(t).prop("selected")){var e=d(t).text();i.push(e)}}),!i.length){var t=this.$el.find("option:disabled").eq(0);t.length&&""===t[0].value&&i.push(t.text())}this.input.value=i.join(", ")}},{key:"_setSelectedStates",value:function(){for(var t in this._keysSelected={},this._valueDict){var e=this._valueDict[t],i=d(e.el).prop("selected");d(e.optionEl).find('input[type="checkbox"]').prop("checked",i),i?(this._activateOption(d(this.dropdownOptions),d(e.optionEl)),this._keysSelected[t]=!0):d(e.optionEl).removeClass("selected")}}},{key:"_activateOption",value:function(t,e){e&&(this.isMultiple||t.find("li.selected").removeClass("selected"),d(e).addClass("selected"))}},{key:"getSelectedValues",value:function(){var t=[];for(var e in this._keysSelected)t.push(this._valueDict[e].el.value);return t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_FormSelect}},{key:"defaults",get:function(){return e}}]),n}();M.FormSelect=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"formSelect","M_FormSelect")}(cash),function(s,e){"use strict";var i={},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Range=i).options=s.extend({},n.defaults,e),i._mousedown=!1,i._setupThumb(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this._removeThumb(),this.el.M_Range=void 0}},{key:"_setupEventHandlers",value:function(){this._handleRangeChangeBound=this._handleRangeChange.bind(this),this._handleRangeMousedownTouchstartBound=this._handleRangeMousedownTouchstart.bind(this),this._handleRangeInputMousemoveTouchmoveBound=this._handleRangeInputMousemoveTouchmove.bind(this),this._handleRangeMouseupTouchendBound=this._handleRangeMouseupTouchend.bind(this),this._handleRangeBlurMouseoutTouchleaveBound=this._handleRangeBlurMouseoutTouchleave.bind(this),this.el.addEventListener("change",this._handleRangeChangeBound),this.el.addEventListener("mousedown",this._handleRangeMousedownTouchstartBound),this.el.addEventListener("touchstart",this._handleRangeMousedownTouchstartBound),this.el.addEventListener("input",this._handleRangeInputMousemoveTouchmoveBound),this.el.addEventListener("mousemove",this._handleRangeInputMousemoveTouchmoveBound),this.el.addEventListener("touchmove",this._handleRangeInputMousemoveTouchmoveBound),this.el.addEventListener("mouseup",this._handleRangeMouseupTouchendBound),this.el.addEventListener("touchend",this._handleRangeMouseupTouchendBound),this.el.addEventListener("blur",this._handleRangeBlurMouseoutTouchleaveBound),this.el.addEventListener("mouseout",this._handleRangeBlurMouseoutTouchleaveBound),this.el.addEventListener("touchleave",this._handleRangeBlurMouseoutTouchleaveBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("change",this._handleRangeChangeBound),this.el.removeEventListener("mousedown",this._handleRangeMousedownTouchstartBound),this.el.removeEventListener("touchstart",this._handleRangeMousedownTouchstartBound),this.el.removeEventListener("input",this._handleRangeInputMousemoveTouchmoveBound),this.el.removeEventListener("mousemove",this._handleRangeInputMousemoveTouchmoveBound),this.el.removeEventListener("touchmove",this._handleRangeInputMousemoveTouchmoveBound),this.el.removeEventListener("mouseup",this._handleRangeMouseupTouchendBound),this.el.removeEventListener("touchend",this._handleRangeMouseupTouchendBound),this.el.removeEventListener("blur",this._handleRangeBlurMouseoutTouchleaveBound),this.el.removeEventListener("mouseout",this._handleRangeBlurMouseoutTouchleaveBound),this.el.removeEventListener("touchleave",this._handleRangeBlurMouseoutTouchleaveBound)}},{key:"_handleRangeChange",value:function(){s(this.value).html(this.$el.val()),s(this.thumb).hasClass("active")||this._showRangeBubble();var t=this._calcRangeOffset();s(this.thumb).addClass("active").css("left",t+"px")}},{key:"_handleRangeMousedownTouchstart",value:function(t){if(s(this.value).html(this.$el.val()),this._mousedown=!0,this.$el.addClass("active"),s(this.thumb).hasClass("active")||this._showRangeBubble(),"input"!==t.type){var e=this._calcRangeOffset();s(this.thumb).addClass("active").css("left",e+"px")}}},{key:"_handleRangeInputMousemoveTouchmove",value:function(){if(this._mousedown){s(this.thumb).hasClass("active")||this._showRangeBubble();var t=this._calcRangeOffset();s(this.thumb).addClass("active").css("left",t+"px"),s(this.value).html(this.$el.val())}}},{key:"_handleRangeMouseupTouchend",value:function(){this._mousedown=!1,this.$el.removeClass("active")}},{key:"_handleRangeBlurMouseoutTouchleave",value:function(){if(!this._mousedown){var t=7+parseInt(this.$el.css("padding-left"))+"px";s(this.thumb).hasClass("active")&&(e.remove(this.thumb),e({targets:this.thumb,height:0,width:0,top:10,easing:"easeOutQuad",marginLeft:t,duration:100})),s(this.thumb).removeClass("active")}}},{key:"_setupThumb",value:function(){this.thumb=document.createElement("span"),this.value=document.createElement("span"),s(this.thumb).addClass("thumb"),s(this.value).addClass("value"),s(this.thumb).append(this.value),this.$el.after(this.thumb)}},{key:"_removeThumb",value:function(){s(this.thumb).remove()}},{key:"_showRangeBubble",value:function(){var t=-7+parseInt(s(this.thumb).parent().css("padding-left"))+"px";e.remove(this.thumb),e({targets:this.thumb,height:30,width:30,top:-30,marginLeft:t,duration:300,easing:"easeOutQuint"})}},{key:"_calcRangeOffset",value:function(){var t=this.$el.width()-15,e=parseFloat(this.$el.attr("max"))||100,i=parseFloat(this.$el.attr("min"))||0;return(parseFloat(this.$el.val())-i)/(e-i)*t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Range}},{key:"defaults",get:function(){return i}}]),n}();M.Range=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"range","M_Range"),t.init(s("input[type=range]"))}(cash,M.anime); \ No newline at end of file diff --git a/src/materialize.scss b/src/materialize.scss new file mode 100644 index 00000000..b607e006 --- /dev/null +++ b/src/materialize.scss @@ -0,0 +1,42 @@ +@charset "UTF-8"; + +// Color +@import "../node_modules/materialize-css/sass/components/color-variables"; +@import "../node_modules/materialize-css/sass/components/color-classes"; + +// Variables; +@import "../node_modules/materialize-css/sass/components/variables"; + +// Reset +@import "../node_modules/materialize-css/sass/components/normalize"; + +// components +@import "../node_modules/materialize-css/sass/components/global"; +/* @import "components/badges"; +@import "components/icons-material-design"; */ +@import "../node_modules/materialize-css/sass/components/grid"; +/* @import "components/navbar"; */ +@import "../node_modules/materialize-css/sass/components/typography"; +@import "../node_modules/materialize-css/sass/components/preloader"; +/* @import "components/transitions"; +@import "components/cards"; +@import "components/toast"; +@import "components/tabs"; +@import "components/tooltip"; +@import "components/buttons"; +@import "components/dropdown"; +@import "components/waves"; +@import "components/modal"; +@import "components/collapsible"; +@import "components/chips"; +@import "components/materialbox"; +@import "components/forms/forms"; +@import "components/table_of_contents"; +@import "components/sidenav"; +@import "components/preloader"; +@import "components/slider"; +@import "components/carousel"; +@import "components/tapTarget"; +@import "components/pulse"; +@import "components/datepicker"; +@import "components/timepicker"; */ diff --git a/src/registerServiceWorker.js b/src/registerServiceWorker.js new file mode 100644 index 00000000..7c59aa3d --- /dev/null +++ b/src/registerServiceWorker.js @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2018-present, Evgeny Nadymov + * + * This source code is licensed under the GPL v.3.0 license found in the + * LICENSE file in the root directory of this source tree. + */ + +//import TdLibController from './Controllers/TdLibController'; + +// In production, we register a service worker to serve assets from local cache. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on the "N+1" visit to a page, since previously +// cached resources are updated in the background. + +// To learn more about the benefits of this model, read https://goo.gl/KwvDNy. +// This link also includes instructions on opting out of this behavior. + +const isLocalhost = + //false; + Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.1/8 is considered localhost for IPv4. + window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/) + ); + +export default async function register() { + console.log('[SW] Register'); + + if('serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location); + if(publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374 + return; + } + + const serviceWorkerName = + process.env.NODE_ENV === 'production' ? 'service-worker.js' : 'custom-service-worker.js'; + const swUrl = `${process.env.PUBLIC_URL}/${serviceWorkerName}`; + console.log(`[SW] Service worker url: ${swUrl}`); + + if(!isLocalhost) { + // Is not local host. Just register service worker + await registerValidSW(swUrl); + } else { + // This is running on localhost. Lets check if a service worker still exists or not. + await checkValidServiceWorker(swUrl); + } + } +} + +async function registerValidSW(swUrl) { + console.log('[SW] RegisterValidSW'); + try { + const registration = await navigator.serviceWorker.register(swUrl); + registration.onupdatefound = () => { + const installingWorker = registration.installing; + installingWorker.onstatechange = () => { + if(installingWorker.state === 'installed') { + if(navigator.serviceWorker.controller) { + // At this point, the old content will have been purged and + // the fresh content will have been added to the cache. + // It's the perfect time to display a "New content is + // available; please refresh." message in your web app. + console.log('[SW] New content is available; please refresh.'); + + ApplicationStore.emit('clientUpdateNewContentAvailable'); + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('[SW] Content is cached for offline use.'); + } + } + }; + }; + } catch (error) { + console.error('[SW] Error during service worker registration: ', error); + } +} + +async function checkValidServiceWorker(swUrl) { + console.log('[SW] CheckValidServiceWorker'); + // Check if the service worker can be found. If it can't reload the page. + try { + const response = await fetch(swUrl); + + // Ensure service worker exists, and that we really are getting a JS file. + if(response.status === 404 || response.headers.get('content-type').indexOf('javascript') === -1) { + // No service worker found. Probably a different app. Reload the page. + const registration = await navigator.serviceWorker.ready; + await registration.unregister(); + + window.location.reload(); + } else { + // Service worker found. Proceed as normal. + await registerValidSW(swUrl); + } + } catch(error) { + console.log('[SW] No internet connection found. App is running in offline mode.'); + } +} + +export async function unregister() { + if ('serviceWorker' in navigator) { + const registration = await navigator.serviceWorker.ready; + + await registration.unregister(); + } +} + +export async function update() { + if ('serviceWorker' in navigator) { + const registration = await navigator.serviceWorker.ready; + + await registration.update(); + } +} diff --git a/src/schema.tl b/src/schema.tl new file mode 100644 index 00000000..aea3bf99 --- /dev/null +++ b/src/schema.tl @@ -0,0 +1 @@ +Config.Schema.API = {"constructors":[{"id":"-1132882121","predicate":"boolFalse","params":[],"type":"Bool"},{"id":"-1720552011","predicate":"boolTrue","params":[],"type":"Bool"},{"id":"1072550713","predicate":"true","params":[],"type":"True"},{"id":"481674261","predicate":"vector","params":[],"type":"Vector t"},{"id":"-994444869","predicate":"error","params":[{"name":"code","type":"int"},{"name":"text","type":"string"}],"type":"Error"},{"id":"1450380236","predicate":"null","params":[],"type":"Null"},{"id":"2134579434","predicate":"inputPeerEmpty","params":[],"type":"InputPeer"},{"id":"2107670217","predicate":"inputPeerSelf","params":[],"type":"InputPeer"},{"id":"396093539","predicate":"inputPeerChat","params":[{"name":"chat_id","type":"int"}],"type":"InputPeer"},{"id":"-1182234929","predicate":"inputUserEmpty","params":[],"type":"InputUser"},{"id":"-138301121","predicate":"inputUserSelf","params":[],"type":"InputUser"},{"id":"-208488460","predicate":"inputPhoneContact","params":[{"name":"client_id","type":"long"},{"name":"phone","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"InputContact"},{"id":"-181407105","predicate":"inputFile","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"name","type":"string"},{"name":"md5_checksum","type":"string"}],"type":"InputFile"},{"id":"-1771768449","predicate":"inputMediaEmpty","params":[],"type":"InputMedia"},{"id":"505969924","predicate":"inputMediaUploadedPhoto","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"stickers","type":"flags.0?Vector"},{"name":"ttl_seconds","type":"flags.1?int"}],"type":"InputMedia"},{"id":"-1279654347","predicate":"inputMediaPhoto","params":[{"name":"flags","type":"#"},{"name":"id","type":"InputPhoto"},{"name":"ttl_seconds","type":"flags.0?int"}],"type":"InputMedia"},{"id":"-104578748","predicate":"inputMediaGeoPoint","params":[{"name":"geo_point","type":"InputGeoPoint"}],"type":"InputMedia"},{"id":"-122978821","predicate":"inputMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"}],"type":"InputMedia"},{"id":"480546647","predicate":"inputChatPhotoEmpty","params":[],"type":"InputChatPhoto"},{"id":"-1837345356","predicate":"inputChatUploadedPhoto","params":[{"name":"file","type":"InputFile"}],"type":"InputChatPhoto"},{"id":"-1991004873","predicate":"inputChatPhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"InputChatPhoto"},{"id":"-457104426","predicate":"inputGeoPointEmpty","params":[],"type":"InputGeoPoint"},{"id":"-206066487","predicate":"inputGeoPoint","params":[{"name":"lat","type":"double"},{"name":"long","type":"double"}],"type":"InputGeoPoint"},{"id":"483901197","predicate":"inputPhotoEmpty","params":[],"type":"InputPhoto"},{"id":"1001634122","predicate":"inputPhoto","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"}],"type":"InputPhoto"},{"id":"-539317279","predicate":"inputFileLocation","params":[{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"},{"name":"file_reference","type":"bytes"}],"type":"InputFileLocation"},{"id":"-1649296275","predicate":"peerUser","params":[{"name":"user_id","type":"int"}],"type":"Peer"},{"id":"-1160714821","predicate":"peerChat","params":[{"name":"chat_id","type":"int"}],"type":"Peer"},{"id":"-1432995067","predicate":"storage.fileUnknown","params":[],"type":"storage.FileType"},{"id":"1086091090","predicate":"storage.filePartial","params":[],"type":"storage.FileType"},{"id":"8322574","predicate":"storage.fileJpeg","params":[],"type":"storage.FileType"},{"id":"-891180321","predicate":"storage.fileGif","params":[],"type":"storage.FileType"},{"id":"172975040","predicate":"storage.filePng","params":[],"type":"storage.FileType"},{"id":"-1373745011","predicate":"storage.filePdf","params":[],"type":"storage.FileType"},{"id":"1384777335","predicate":"storage.fileMp3","params":[],"type":"storage.FileType"},{"id":"1258941372","predicate":"storage.fileMov","params":[],"type":"storage.FileType"},{"id":"-1278304028","predicate":"storage.fileMp4","params":[],"type":"storage.FileType"},{"id":"276907596","predicate":"storage.fileWebp","params":[],"type":"storage.FileType"},{"id":"537022650","predicate":"userEmpty","params":[{"name":"id","type":"int"}],"type":"User"},{"id":"1326562017","predicate":"userProfilePhotoEmpty","params":[],"type":"UserProfilePhoto"},{"id":"-321430132","predicate":"userProfilePhoto","params":[{"name":"photo_id","type":"long"},{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"},{"name":"dc_id","type":"int"}],"type":"UserProfilePhoto"},{"id":"164646985","predicate":"userStatusEmpty","params":[],"type":"UserStatus"},{"id":"-306628279","predicate":"userStatusOnline","params":[{"name":"expires","type":"int"}],"type":"UserStatus"},{"id":"9203775","predicate":"userStatusOffline","params":[{"name":"was_online","type":"int"}],"type":"UserStatus"},{"id":"-1683826688","predicate":"chatEmpty","params":[{"name":"id","type":"int"}],"type":"Chat"},{"id":"1004149726","predicate":"chat","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"kicked","type":"flags.1?true"},{"name":"left","type":"flags.2?true"},{"name":"deactivated","type":"flags.5?true"},{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"photo","type":"ChatPhoto"},{"name":"participants_count","type":"int"},{"name":"date","type":"int"},{"name":"version","type":"int"},{"name":"migrated_to","type":"flags.6?InputChannel"},{"name":"admin_rights","type":"flags.14?ChatAdminRights"},{"name":"default_banned_rights","type":"flags.18?ChatBannedRights"}],"type":"Chat"},{"id":"120753115","predicate":"chatForbidden","params":[{"name":"id","type":"int"},{"name":"title","type":"string"}],"type":"Chat"},{"id":"461151667","predicate":"chatFull","params":[{"name":"flags","type":"#"},{"name":"can_set_username","type":"flags.7?true"},{"name":"has_scheduled","type":"flags.8?true"},{"name":"id","type":"int"},{"name":"about","type":"string"},{"name":"participants","type":"ChatParticipants"},{"name":"chat_photo","type":"flags.2?Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"exported_invite","type":"ExportedChatInvite"},{"name":"bot_info","type":"flags.3?Vector"},{"name":"pinned_msg_id","type":"flags.6?int"},{"name":"folder_id","type":"flags.11?int"}],"type":"ChatFull"},{"id":"-925415106","predicate":"chatParticipant","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChatParticipant"},{"id":"-57668565","predicate":"chatParticipantsForbidden","params":[{"name":"flags","type":"#"},{"name":"chat_id","type":"int"},{"name":"self_participant","type":"flags.0?ChatParticipant"}],"type":"ChatParticipants"},{"id":"1061556205","predicate":"chatParticipants","params":[{"name":"chat_id","type":"int"},{"name":"participants","type":"Vector"},{"name":"version","type":"int"}],"type":"ChatParticipants"},{"id":"935395612","predicate":"chatPhotoEmpty","params":[],"type":"ChatPhoto"},{"id":"1197267925","predicate":"chatPhoto","params":[{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"},{"name":"dc_id","type":"int"}],"type":"ChatPhoto"},{"id":"-2082087340","predicate":"messageEmpty","params":[{"name":"id","type":"int"}],"type":"Message"},{"id":"1160515173","predicate":"message","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"from_scheduled","type":"flags.18?true"},{"name":"legacy","type":"flags.19?true"},{"name":"edit_hide","type":"flags.21?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?int"},{"name":"to_id","type":"Peer"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"date","type":"int"},{"name":"message","type":"string"},{"name":"media","type":"flags.9?MessageMedia"},{"name":"reply_markup","type":"flags.6?ReplyMarkup"},{"name":"entities","type":"flags.7?Vector"},{"name":"views","type":"flags.10?int"},{"name":"edit_date","type":"flags.15?int"},{"name":"post_author","type":"flags.16?string"},{"name":"grouped_id","type":"flags.17?long"},{"name":"restriction_reason","type":"flags.22?Vector"}],"type":"Message"},{"id":"-1642487306","predicate":"messageService","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"legacy","type":"flags.19?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?int"},{"name":"to_id","type":"Peer"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"date","type":"int"},{"name":"action","type":"MessageAction"}],"type":"Message"},{"id":"1038967584","predicate":"messageMediaEmpty","params":[],"type":"MessageMedia"},{"id":"1766936791","predicate":"messageMediaPhoto","params":[{"name":"flags","type":"#"},{"name":"photo","type":"flags.0?Photo"},{"name":"ttl_seconds","type":"flags.2?int"}],"type":"MessageMedia"},{"id":"1457575028","predicate":"messageMediaGeo","params":[{"name":"geo","type":"GeoPoint"}],"type":"MessageMedia"},{"id":"-873313984","predicate":"messageMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"},{"name":"user_id","type":"int"}],"type":"MessageMedia"},{"id":"-1618676578","predicate":"messageMediaUnsupported","params":[],"type":"MessageMedia"},{"id":"-1230047312","predicate":"messageActionEmpty","params":[],"type":"MessageAction"},{"id":"-1503425638","predicate":"messageActionChatCreate","params":[{"name":"title","type":"string"},{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":"-1247687078","predicate":"messageActionChatEditTitle","params":[{"name":"title","type":"string"}],"type":"MessageAction"},{"id":"2144015272","predicate":"messageActionChatEditPhoto","params":[{"name":"photo","type":"Photo"}],"type":"MessageAction"},{"id":"-1780220945","predicate":"messageActionChatDeletePhoto","params":[],"type":"MessageAction"},{"id":"1217033015","predicate":"messageActionChatAddUser","params":[{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":"-1297179892","predicate":"messageActionChatDeleteUser","params":[{"name":"user_id","type":"int"}],"type":"MessageAction"},{"id":"739712882","predicate":"dialog","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.2?true"},{"name":"unread_mark","type":"flags.3?true"},{"name":"peer","type":"Peer"},{"name":"top_message","type":"int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"unread_mentions_count","type":"int"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"pts","type":"flags.0?int"},{"name":"draft","type":"flags.1?DraftMessage"},{"name":"folder_id","type":"flags.4?int"}],"type":"Dialog"},{"id":"590459437","predicate":"photoEmpty","params":[{"name":"id","type":"long"}],"type":"Photo"},{"id":"-797637467","predicate":"photo","params":[{"name":"flags","type":"#"},{"name":"has_stickers","type":"flags.0?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"date","type":"int"},{"name":"sizes","type":"Vector"},{"name":"dc_id","type":"int"}],"type":"Photo"},{"id":"236446268","predicate":"photoSizeEmpty","params":[{"name":"type","type":"string"}],"type":"PhotoSize"},{"id":"2009052699","predicate":"photoSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"size","type":"int"}],"type":"PhotoSize"},{"id":"-374917894","predicate":"photoCachedSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"bytes","type":"bytes"}],"type":"PhotoSize"},{"id":"286776671","predicate":"geoPointEmpty","params":[],"type":"GeoPoint"},{"id":"43446532","predicate":"geoPoint","params":[{"name":"long","type":"double"},{"name":"lat","type":"double"},{"name":"access_hash","type":"long"}],"type":"GeoPoint"},{"id":"1577067778","predicate":"auth.sentCode","params":[{"name":"flags","type":"#"},{"name":"type","type":"auth.SentCodeType"},{"name":"phone_code_hash","type":"string"},{"name":"next_type","type":"flags.1?auth.CodeType"},{"name":"timeout","type":"flags.2?int"}],"type":"auth.SentCode"},{"id":"-855308010","predicate":"auth.authorization","params":[{"name":"flags","type":"#"},{"name":"tmp_sessions","type":"flags.0?int"},{"name":"user","type":"User"}],"type":"auth.Authorization"},{"id":"-543777747","predicate":"auth.exportedAuthorization","params":[{"name":"id","type":"int"},{"name":"bytes","type":"bytes"}],"type":"auth.ExportedAuthorization"},{"id":"-1195615476","predicate":"inputNotifyPeer","params":[{"name":"peer","type":"InputPeer"}],"type":"InputNotifyPeer"},{"id":"423314455","predicate":"inputNotifyUsers","params":[],"type":"InputNotifyPeer"},{"id":"1251338318","predicate":"inputNotifyChats","params":[],"type":"InputNotifyPeer"},{"id":"-1673717362","predicate":"inputPeerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?Bool"},{"name":"silent","type":"flags.1?Bool"},{"name":"mute_until","type":"flags.2?int"},{"name":"sound","type":"flags.3?string"}],"type":"InputPeerNotifySettings"},{"id":"-1353671392","predicate":"peerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?Bool"},{"name":"silent","type":"flags.1?Bool"},{"name":"mute_until","type":"flags.2?int"},{"name":"sound","type":"flags.3?string"}],"type":"PeerNotifySettings"},{"id":"-2122045747","predicate":"peerSettings","params":[{"name":"flags","type":"#"},{"name":"report_spam","type":"flags.0?true"},{"name":"add_contact","type":"flags.1?true"},{"name":"block_contact","type":"flags.2?true"},{"name":"share_contact","type":"flags.3?true"},{"name":"need_contacts_exception","type":"flags.4?true"},{"name":"report_geo","type":"flags.5?true"}],"type":"PeerSettings"},{"id":"-1539849235","predicate":"wallPaper","params":[{"name":"id","type":"long"},{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"default","type":"flags.1?true"},{"name":"pattern","type":"flags.3?true"},{"name":"dark","type":"flags.4?true"},{"name":"access_hash","type":"long"},{"name":"slug","type":"string"},{"name":"document","type":"Document"},{"name":"settings","type":"flags.2?WallPaperSettings"}],"type":"WallPaper"},{"id":"1490799288","predicate":"inputReportReasonSpam","params":[],"type":"ReportReason"},{"id":"505595789","predicate":"inputReportReasonViolence","params":[],"type":"ReportReason"},{"id":"777640226","predicate":"inputReportReasonPornography","params":[],"type":"ReportReason"},{"id":"-1376497949","predicate":"inputReportReasonChildAbuse","params":[],"type":"ReportReason"},{"id":"-512463606","predicate":"inputReportReasonOther","params":[{"name":"text","type":"string"}],"type":"ReportReason"},{"id":"-302941166","predicate":"userFull","params":[{"name":"flags","type":"#"},{"name":"blocked","type":"flags.0?true"},{"name":"phone_calls_available","type":"flags.4?true"},{"name":"phone_calls_private","type":"flags.5?true"},{"name":"can_pin_message","type":"flags.7?true"},{"name":"has_scheduled","type":"flags.12?true"},{"name":"user","type":"User"},{"name":"about","type":"flags.1?string"},{"name":"settings","type":"PeerSettings"},{"name":"profile_photo","type":"flags.2?Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"bot_info","type":"flags.3?BotInfo"},{"name":"pinned_msg_id","type":"flags.6?int"},{"name":"common_chats_count","type":"int"},{"name":"folder_id","type":"flags.11?int"}],"type":"UserFull"},{"id":"-116274796","predicate":"contact","params":[{"name":"user_id","type":"int"},{"name":"mutual","type":"Bool"}],"type":"Contact"},{"id":"-805141448","predicate":"importedContact","params":[{"name":"user_id","type":"int"},{"name":"client_id","type":"long"}],"type":"ImportedContact"},{"id":"1444661369","predicate":"contactBlocked","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"ContactBlocked"},{"id":"-748155807","predicate":"contactStatus","params":[{"name":"user_id","type":"int"},{"name":"status","type":"UserStatus"}],"type":"ContactStatus"},{"id":"-1219778094","predicate":"contacts.contactsNotModified","params":[],"type":"contacts.Contacts"},{"id":"-353862078","predicate":"contacts.contacts","params":[{"name":"contacts","type":"Vector"},{"name":"saved_count","type":"int"},{"name":"users","type":"Vector"}],"type":"contacts.Contacts"},{"id":"2010127419","predicate":"contacts.importedContacts","params":[{"name":"imported","type":"Vector"},{"name":"popular_invites","type":"Vector"},{"name":"retry_contacts","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.ImportedContacts"},{"id":"471043349","predicate":"contacts.blocked","params":[{"name":"blocked","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":"-1878523231","predicate":"contacts.blockedSlice","params":[{"name":"count","type":"int"},{"name":"blocked","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":"364538944","predicate":"messages.dialogs","params":[{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Dialogs"},{"id":"1910543603","predicate":"messages.dialogsSlice","params":[{"name":"count","type":"int"},{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Dialogs"},{"id":"-1938715001","predicate":"messages.messages","params":[{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"-923939298","predicate":"messages.messagesSlice","params":[{"name":"flags","type":"#"},{"name":"inexact","type":"flags.1?true"},{"name":"count","type":"int"},{"name":"next_rate","type":"flags.0?int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"1694474197","predicate":"messages.chats","params":[{"name":"chats","type":"Vector"}],"type":"messages.Chats"},{"id":"-438840932","predicate":"messages.chatFull","params":[{"name":"full_chat","type":"ChatFull"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.ChatFull"},{"id":"-1269012015","predicate":"messages.affectedHistory","params":[{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"offset","type":"int"}],"type":"messages.AffectedHistory"},{"id":"1474492012","predicate":"inputMessagesFilterEmpty","params":[],"type":"MessagesFilter"},{"id":"-1777752804","predicate":"inputMessagesFilterPhotos","params":[],"type":"MessagesFilter"},{"id":"-1614803355","predicate":"inputMessagesFilterVideo","params":[],"type":"MessagesFilter"},{"id":"1458172132","predicate":"inputMessagesFilterPhotoVideo","params":[],"type":"MessagesFilter"},{"id":"-1629621880","predicate":"inputMessagesFilterDocument","params":[],"type":"MessagesFilter"},{"id":"2129714567","predicate":"inputMessagesFilterUrl","params":[],"type":"MessagesFilter"},{"id":"-3644025","predicate":"inputMessagesFilterGif","params":[],"type":"MessagesFilter"},{"id":"522914557","predicate":"updateNewMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1318109142","predicate":"updateMessageID","params":[{"name":"id","type":"int"},{"name":"random_id","type":"long"}],"type":"Update"},{"id":"-1576161051","predicate":"updateDeleteMessages","params":[{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1548249383","predicate":"updateUserTyping","params":[{"name":"user_id","type":"int"},{"name":"action","type":"SendMessageAction"}],"type":"Update"},{"id":"-1704596961","predicate":"updateChatUserTyping","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"action","type":"SendMessageAction"}],"type":"Update"},{"id":"125178264","predicate":"updateChatParticipants","params":[{"name":"participants","type":"ChatParticipants"}],"type":"Update"},{"id":"469489699","predicate":"updateUserStatus","params":[{"name":"user_id","type":"int"},{"name":"status","type":"UserStatus"}],"type":"Update"},{"id":"-1489818765","predicate":"updateUserName","params":[{"name":"user_id","type":"int"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"username","type":"string"}],"type":"Update"},{"id":"-1791935732","predicate":"updateUserPhoto","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"},{"name":"photo","type":"UserProfilePhoto"},{"name":"previous","type":"Bool"}],"type":"Update"},{"id":"-1519637954","predicate":"updates.state","params":[{"name":"pts","type":"int"},{"name":"qts","type":"int"},{"name":"date","type":"int"},{"name":"seq","type":"int"},{"name":"unread_count","type":"int"}],"type":"updates.State"},{"id":"1567990072","predicate":"updates.differenceEmpty","params":[{"name":"date","type":"int"},{"name":"seq","type":"int"}],"type":"updates.Difference"},{"id":"16030880","predicate":"updates.difference","params":[{"name":"new_messages","type":"Vector"},{"name":"new_encrypted_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"state","type":"updates.State"}],"type":"updates.Difference"},{"id":"-1459938943","predicate":"updates.differenceSlice","params":[{"name":"new_messages","type":"Vector"},{"name":"new_encrypted_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"intermediate_state","type":"updates.State"}],"type":"updates.Difference"},{"id":"-484987010","predicate":"updatesTooLong","params":[],"type":"Updates"},{"id":"-1857044719","predicate":"updateShortMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"id","type":"int"},{"name":"user_id","type":"int"},{"name":"message","type":"string"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"377562760","predicate":"updateShortChatMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"id","type":"int"},{"name":"from_id","type":"int"},{"name":"chat_id","type":"int"},{"name":"message","type":"string"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"2027216577","predicate":"updateShort","params":[{"name":"update","type":"Update"},{"name":"date","type":"int"}],"type":"Updates"},{"id":"1918567619","predicate":"updatesCombined","params":[{"name":"updates","type":"Vector"},{"name":"users","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"date","type":"int"},{"name":"seq_start","type":"int"},{"name":"seq","type":"int"}],"type":"Updates"},{"id":"1957577280","predicate":"updates","params":[{"name":"updates","type":"Vector"},{"name":"users","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"date","type":"int"},{"name":"seq","type":"int"}],"type":"Updates"},{"id":"-1916114267","predicate":"photos.photos","params":[{"name":"photos","type":"Vector"},{"name":"users","type":"Vector"}],"type":"photos.Photos"},{"id":"352657236","predicate":"photos.photosSlice","params":[{"name":"count","type":"int"},{"name":"photos","type":"Vector"},{"name":"users","type":"Vector"}],"type":"photos.Photos"},{"id":"539045032","predicate":"photos.photo","params":[{"name":"photo","type":"Photo"},{"name":"users","type":"Vector"}],"type":"photos.Photo"},{"id":"157948117","predicate":"upload.file","params":[{"name":"type","type":"storage.FileType"},{"name":"mtime","type":"int"},{"name":"bytes","type":"bytes"}],"type":"upload.File"},{"id":"414687501","predicate":"dcOption","params":[{"name":"flags","type":"#"},{"name":"ipv6","type":"flags.0?true"},{"name":"media_only","type":"flags.1?true"},{"name":"tcpo_only","type":"flags.2?true"},{"name":"cdn","type":"flags.3?true"},{"name":"static","type":"flags.4?true"},{"name":"id","type":"int"},{"name":"ip_address","type":"string"},{"name":"port","type":"int"},{"name":"secret","type":"flags.10?bytes"}],"type":"DcOption"},{"id":"856375399","predicate":"config","params":[{"name":"flags","type":"#"},{"name":"phonecalls_enabled","type":"flags.1?true"},{"name":"default_p2p_contacts","type":"flags.3?true"},{"name":"preload_featured_stickers","type":"flags.4?true"},{"name":"ignore_phone_entities","type":"flags.5?true"},{"name":"revoke_pm_inbox","type":"flags.6?true"},{"name":"blocked_mode","type":"flags.8?true"},{"name":"pfs_enabled","type":"flags.13?true"},{"name":"date","type":"int"},{"name":"expires","type":"int"},{"name":"test_mode","type":"Bool"},{"name":"this_dc","type":"int"},{"name":"dc_options","type":"Vector"},{"name":"dc_txt_domain_name","type":"string"},{"name":"chat_size_max","type":"int"},{"name":"megagroup_size_max","type":"int"},{"name":"forwarded_count_max","type":"int"},{"name":"online_update_period_ms","type":"int"},{"name":"offline_blur_timeout_ms","type":"int"},{"name":"offline_idle_timeout_ms","type":"int"},{"name":"online_cloud_timeout_ms","type":"int"},{"name":"notify_cloud_delay_ms","type":"int"},{"name":"notify_default_delay_ms","type":"int"},{"name":"push_chat_period_ms","type":"int"},{"name":"push_chat_limit","type":"int"},{"name":"saved_gifs_limit","type":"int"},{"name":"edit_time_limit","type":"int"},{"name":"revoke_time_limit","type":"int"},{"name":"revoke_pm_time_limit","type":"int"},{"name":"rating_e_decay","type":"int"},{"name":"stickers_recent_limit","type":"int"},{"name":"stickers_faved_limit","type":"int"},{"name":"channels_read_media_period","type":"int"},{"name":"tmp_sessions","type":"flags.0?int"},{"name":"pinned_dialogs_count_max","type":"int"},{"name":"pinned_infolder_count_max","type":"int"},{"name":"call_receive_timeout_ms","type":"int"},{"name":"call_ring_timeout_ms","type":"int"},{"name":"call_connect_timeout_ms","type":"int"},{"name":"call_packet_timeout_ms","type":"int"},{"name":"me_url_prefix","type":"string"},{"name":"autoupdate_url_prefix","type":"flags.7?string"},{"name":"gif_search_username","type":"flags.9?string"},{"name":"venue_search_username","type":"flags.10?string"},{"name":"img_search_username","type":"flags.11?string"},{"name":"static_maps_provider","type":"flags.12?string"},{"name":"caption_length_max","type":"int"},{"name":"message_length_max","type":"int"},{"name":"webfile_dc_id","type":"int"},{"name":"suggested_lang_code","type":"flags.2?string"},{"name":"lang_pack_version","type":"flags.2?int"},{"name":"base_lang_pack_version","type":"flags.2?int"}],"type":"Config"},{"id":"-1910892683","predicate":"nearestDc","params":[{"name":"country","type":"string"},{"name":"this_dc","type":"int"},{"name":"nearest_dc","type":"int"}],"type":"NearestDc"},{"id":"497489295","predicate":"help.appUpdate","params":[{"name":"flags","type":"#"},{"name":"can_not_skip","type":"flags.0?true"},{"name":"id","type":"int"},{"name":"version","type":"string"},{"name":"text","type":"string"},{"name":"entities","type":"Vector"},{"name":"document","type":"flags.1?Document"},{"name":"url","type":"flags.2?string"}],"type":"help.AppUpdate"},{"id":"-1000708810","predicate":"help.noAppUpdate","params":[],"type":"help.AppUpdate"},{"id":"415997816","predicate":"help.inviteText","params":[{"name":"message","type":"string"}],"type":"help.InviteText"},{"id":"314359194","predicate":"updateNewEncryptedMessage","params":[{"name":"message","type":"EncryptedMessage"},{"name":"qts","type":"int"}],"type":"Update"},{"id":"386986326","predicate":"updateEncryptedChatTyping","params":[{"name":"chat_id","type":"int"}],"type":"Update"},{"id":"-1264392051","predicate":"updateEncryption","params":[{"name":"chat","type":"EncryptedChat"},{"name":"date","type":"int"}],"type":"Update"},{"id":"956179895","predicate":"updateEncryptedMessagesRead","params":[{"name":"chat_id","type":"int"},{"name":"max_date","type":"int"},{"name":"date","type":"int"}],"type":"Update"},{"id":"-1417756512","predicate":"encryptedChatEmpty","params":[{"name":"id","type":"int"}],"type":"EncryptedChat"},{"id":"1006044124","predicate":"encryptedChatWaiting","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"}],"type":"EncryptedChat"},{"id":"-931638658","predicate":"encryptedChatRequested","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a","type":"bytes"}],"type":"EncryptedChat"},{"id":"-94974410","predicate":"encryptedChat","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_or_b","type":"bytes"},{"name":"key_fingerprint","type":"long"}],"type":"EncryptedChat"},{"id":"332848423","predicate":"encryptedChatDiscarded","params":[{"name":"id","type":"int"}],"type":"EncryptedChat"},{"id":"-247351839","predicate":"inputEncryptedChat","params":[{"name":"chat_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputEncryptedChat"},{"id":"-1038136962","predicate":"encryptedFileEmpty","params":[],"type":"EncryptedFile"},{"id":"1248893260","predicate":"encryptedFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"size","type":"int"},{"name":"dc_id","type":"int"},{"name":"key_fingerprint","type":"int"}],"type":"EncryptedFile"},{"id":"406307684","predicate":"inputEncryptedFileEmpty","params":[],"type":"InputEncryptedFile"},{"id":"1690108678","predicate":"inputEncryptedFileUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"md5_checksum","type":"string"},{"name":"key_fingerprint","type":"int"}],"type":"InputEncryptedFile"},{"id":"1511503333","predicate":"inputEncryptedFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputEncryptedFile"},{"id":"-182231723","predicate":"inputEncryptedFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputFileLocation"},{"id":"-317144808","predicate":"encryptedMessage","params":[{"name":"random_id","type":"long"},{"name":"chat_id","type":"int"},{"name":"date","type":"int"},{"name":"bytes","type":"bytes"},{"name":"file","type":"EncryptedFile"}],"type":"EncryptedMessage"},{"id":"594758406","predicate":"encryptedMessageService","params":[{"name":"random_id","type":"long"},{"name":"chat_id","type":"int"},{"name":"date","type":"int"},{"name":"bytes","type":"bytes"}],"type":"EncryptedMessage"},{"id":"-1058912715","predicate":"messages.dhConfigNotModified","params":[{"name":"random","type":"bytes"}],"type":"messages.DhConfig"},{"id":"740433629","predicate":"messages.dhConfig","params":[{"name":"g","type":"int"},{"name":"p","type":"bytes"},{"name":"version","type":"int"},{"name":"random","type":"bytes"}],"type":"messages.DhConfig"},{"id":"1443858741","predicate":"messages.sentEncryptedMessage","params":[{"name":"date","type":"int"}],"type":"messages.SentEncryptedMessage"},{"id":"-1802240206","predicate":"messages.sentEncryptedFile","params":[{"name":"date","type":"int"},{"name":"file","type":"EncryptedFile"}],"type":"messages.SentEncryptedMessage"},{"id":"-95482955","predicate":"inputFileBig","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"name","type":"string"}],"type":"InputFile"},{"id":"767652808","predicate":"inputEncryptedFileBigUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"key_fingerprint","type":"int"}],"type":"InputEncryptedFile"},{"id":"-364179876","predicate":"updateChatParticipantAdd","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"1851755554","predicate":"updateChatParticipantDelete","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-1906403213","predicate":"updateDcOptions","params":[{"name":"dc_options","type":"Vector"}],"type":"Update"},{"id":"1530447553","predicate":"inputMediaUploadedDocument","params":[{"name":"flags","type":"#"},{"name":"nosound_video","type":"flags.3?true"},{"name":"file","type":"InputFile"},{"name":"thumb","type":"flags.2?InputFile"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"},{"name":"stickers","type":"flags.0?Vector"},{"name":"ttl_seconds","type":"flags.1?int"}],"type":"InputMedia"},{"id":"598418386","predicate":"inputMediaDocument","params":[{"name":"flags","type":"#"},{"name":"id","type":"InputDocument"},{"name":"ttl_seconds","type":"flags.0?int"}],"type":"InputMedia"},{"id":"-1666158377","predicate":"messageMediaDocument","params":[{"name":"flags","type":"#"},{"name":"document","type":"flags.0?Document"},{"name":"ttl_seconds","type":"flags.2?int"}],"type":"MessageMedia"},{"id":"1928391342","predicate":"inputDocumentEmpty","params":[],"type":"InputDocument"},{"id":"448771445","predicate":"inputDocument","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"}],"type":"InputDocument"},{"id":"-1160743548","predicate":"inputDocumentFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"thumb_size","type":"string"}],"type":"InputFileLocation"},{"id":"922273905","predicate":"documentEmpty","params":[{"name":"id","type":"long"}],"type":"Document"},{"id":"-1683841855","predicate":"document","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"date","type":"int"},{"name":"mime_type","type":"string"},{"name":"size","type":"int"},{"name":"thumbs","type":"flags.0?Vector"},{"name":"dc_id","type":"int"},{"name":"attributes","type":"Vector"}],"type":"Document"},{"id":"398898678","predicate":"help.support","params":[{"name":"phone_number","type":"string"},{"name":"user","type":"User"}],"type":"help.Support"},{"id":"-1613493288","predicate":"notifyPeer","params":[{"name":"peer","type":"Peer"}],"type":"NotifyPeer"},{"id":"-1261946036","predicate":"notifyUsers","params":[],"type":"NotifyPeer"},{"id":"-1073230141","predicate":"notifyChats","params":[],"type":"NotifyPeer"},{"id":"-2131957734","predicate":"updateUserBlocked","params":[{"name":"user_id","type":"int"},{"name":"blocked","type":"Bool"}],"type":"Update"},{"id":"-1094555409","predicate":"updateNotifySettings","params":[{"name":"peer","type":"NotifyPeer"},{"name":"notify_settings","type":"PeerNotifySettings"}],"type":"Update"},{"id":"381645902","predicate":"sendMessageTypingAction","params":[],"type":"SendMessageAction"},{"id":"-44119819","predicate":"sendMessageCancelAction","params":[],"type":"SendMessageAction"},{"id":"-1584933265","predicate":"sendMessageRecordVideoAction","params":[],"type":"SendMessageAction"},{"id":"-378127636","predicate":"sendMessageUploadVideoAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-718310409","predicate":"sendMessageRecordAudioAction","params":[],"type":"SendMessageAction"},{"id":"-212740181","predicate":"sendMessageUploadAudioAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-774682074","predicate":"sendMessageUploadPhotoAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-1441998364","predicate":"sendMessageUploadDocumentAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"393186209","predicate":"sendMessageGeoLocationAction","params":[],"type":"SendMessageAction"},{"id":"1653390447","predicate":"sendMessageChooseContactAction","params":[],"type":"SendMessageAction"},{"id":"-1290580579","predicate":"contacts.found","params":[{"name":"my_results","type":"Vector"},{"name":"results","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Found"},{"id":"-337352679","predicate":"updateServiceNotification","params":[{"name":"flags","type":"#"},{"name":"popup","type":"flags.0?true"},{"name":"inbox_date","type":"flags.1?int"},{"name":"type","type":"string"},{"name":"message","type":"string"},{"name":"media","type":"MessageMedia"},{"name":"entities","type":"Vector"}],"type":"Update"},{"id":"-496024847","predicate":"userStatusRecently","params":[],"type":"UserStatus"},{"id":"129960444","predicate":"userStatusLastWeek","params":[],"type":"UserStatus"},{"id":"2011940674","predicate":"userStatusLastMonth","params":[],"type":"UserStatus"},{"id":"-298113238","predicate":"updatePrivacy","params":[{"name":"key","type":"PrivacyKey"},{"name":"rules","type":"Vector"}],"type":"Update"},{"id":"1335282456","predicate":"inputPrivacyKeyStatusTimestamp","params":[],"type":"InputPrivacyKey"},{"id":"-1137792208","predicate":"privacyKeyStatusTimestamp","params":[],"type":"PrivacyKey"},{"id":"218751099","predicate":"inputPrivacyValueAllowContacts","params":[],"type":"InputPrivacyRule"},{"id":"407582158","predicate":"inputPrivacyValueAllowAll","params":[],"type":"InputPrivacyRule"},{"id":"320652927","predicate":"inputPrivacyValueAllowUsers","params":[{"name":"users","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"195371015","predicate":"inputPrivacyValueDisallowContacts","params":[],"type":"InputPrivacyRule"},{"id":"-697604407","predicate":"inputPrivacyValueDisallowAll","params":[],"type":"InputPrivacyRule"},{"id":"-1877932953","predicate":"inputPrivacyValueDisallowUsers","params":[{"name":"users","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"-123988","predicate":"privacyValueAllowContacts","params":[],"type":"PrivacyRule"},{"id":"1698855810","predicate":"privacyValueAllowAll","params":[],"type":"PrivacyRule"},{"id":"1297858060","predicate":"privacyValueAllowUsers","params":[{"name":"users","type":"Vector"}],"type":"PrivacyRule"},{"id":"-125240806","predicate":"privacyValueDisallowContacts","params":[],"type":"PrivacyRule"},{"id":"-1955338397","predicate":"privacyValueDisallowAll","params":[],"type":"PrivacyRule"},{"id":"209668535","predicate":"privacyValueDisallowUsers","params":[{"name":"users","type":"Vector"}],"type":"PrivacyRule"},{"id":"1352683077","predicate":"account.privacyRules","params":[{"name":"rules","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"account.PrivacyRules"},{"id":"-1194283041","predicate":"accountDaysTTL","params":[{"name":"days","type":"int"}],"type":"AccountDaysTTL"},{"id":"314130811","predicate":"updateUserPhone","params":[{"name":"user_id","type":"int"},{"name":"phone","type":"string"}],"type":"Update"},{"id":"1815593308","predicate":"documentAttributeImageSize","params":[{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"DocumentAttribute"},{"id":"297109817","predicate":"documentAttributeAnimated","params":[],"type":"DocumentAttribute"},{"id":"1662637586","predicate":"documentAttributeSticker","params":[{"name":"flags","type":"#"},{"name":"mask","type":"flags.1?true"},{"name":"alt","type":"string"},{"name":"stickerset","type":"InputStickerSet"},{"name":"mask_coords","type":"flags.0?MaskCoords"}],"type":"DocumentAttribute"},{"id":"250621158","predicate":"documentAttributeVideo","params":[{"name":"flags","type":"#"},{"name":"round_message","type":"flags.0?true"},{"name":"supports_streaming","type":"flags.1?true"},{"name":"duration","type":"int"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"DocumentAttribute"},{"id":"-1739392570","predicate":"documentAttributeAudio","params":[{"name":"flags","type":"#"},{"name":"voice","type":"flags.10?true"},{"name":"duration","type":"int"},{"name":"title","type":"flags.0?string"},{"name":"performer","type":"flags.1?string"},{"name":"waveform","type":"flags.2?bytes"}],"type":"DocumentAttribute"},{"id":"358154344","predicate":"documentAttributeFilename","params":[{"name":"file_name","type":"string"}],"type":"DocumentAttribute"},{"id":"-244016606","predicate":"messages.stickersNotModified","params":[],"type":"messages.Stickers"},{"id":"-463889475","predicate":"messages.stickers","params":[{"name":"hash","type":"int"},{"name":"stickers","type":"Vector"}],"type":"messages.Stickers"},{"id":"313694676","predicate":"stickerPack","params":[{"name":"emoticon","type":"string"},{"name":"documents","type":"Vector"}],"type":"StickerPack"},{"id":"-395967805","predicate":"messages.allStickersNotModified","params":[],"type":"messages.AllStickers"},{"id":"-302170017","predicate":"messages.allStickers","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.AllStickers"},{"id":"-1667805217","predicate":"updateReadHistoryInbox","params":[{"name":"flags","type":"#"},{"name":"folder_id","type":"flags.0?int"},{"name":"peer","type":"Peer"},{"name":"max_id","type":"int"},{"name":"still_unread_count","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"791617983","predicate":"updateReadHistoryOutbox","params":[{"name":"peer","type":"Peer"},{"name":"max_id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-2066640507","predicate":"messages.affectedMessages","params":[{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"messages.AffectedMessages"},{"id":"2139689491","predicate":"updateWebPage","params":[{"name":"webpage","type":"WebPage"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-350980120","predicate":"webPageEmpty","params":[{"name":"id","type":"long"}],"type":"WebPage"},{"id":"-981018084","predicate":"webPagePending","params":[{"name":"id","type":"long"},{"name":"date","type":"int"}],"type":"WebPage"},{"id":"-94051982","predicate":"webPage","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"url","type":"string"},{"name":"display_url","type":"string"},{"name":"hash","type":"int"},{"name":"type","type":"flags.0?string"},{"name":"site_name","type":"flags.1?string"},{"name":"title","type":"flags.2?string"},{"name":"description","type":"flags.3?string"},{"name":"photo","type":"flags.4?Photo"},{"name":"embed_url","type":"flags.5?string"},{"name":"embed_type","type":"flags.5?string"},{"name":"embed_width","type":"flags.6?int"},{"name":"embed_height","type":"flags.6?int"},{"name":"duration","type":"flags.7?int"},{"name":"author","type":"flags.8?string"},{"name":"document","type":"flags.9?Document"},{"name":"documents","type":"flags.11?Vector"},{"name":"cached_page","type":"flags.10?Page"}],"type":"WebPage"},{"id":"-1557277184","predicate":"messageMediaWebPage","params":[{"name":"webpage","type":"WebPage"}],"type":"MessageMedia"},{"id":"-1392388579","predicate":"authorization","params":[{"name":"flags","type":"#"},{"name":"current","type":"flags.0?true"},{"name":"official_app","type":"flags.1?true"},{"name":"password_pending","type":"flags.2?true"},{"name":"hash","type":"long"},{"name":"device_model","type":"string"},{"name":"platform","type":"string"},{"name":"system_version","type":"string"},{"name":"api_id","type":"int"},{"name":"app_name","type":"string"},{"name":"app_version","type":"string"},{"name":"date_created","type":"int"},{"name":"date_active","type":"int"},{"name":"ip","type":"string"},{"name":"country","type":"string"},{"name":"region","type":"string"}],"type":"Authorization"},{"id":"307276766","predicate":"account.authorizations","params":[{"name":"authorizations","type":"Vector"}],"type":"account.Authorizations"},{"id":"-1390001672","predicate":"account.password","params":[{"name":"flags","type":"#"},{"name":"has_recovery","type":"flags.0?true"},{"name":"has_secure_values","type":"flags.1?true"},{"name":"has_password","type":"flags.2?true"},{"name":"current_algo","type":"flags.2?PasswordKdfAlgo"},{"name":"srp_B","type":"flags.2?bytes"},{"name":"srp_id","type":"flags.2?long"},{"name":"hint","type":"flags.3?string"},{"name":"email_unconfirmed_pattern","type":"flags.4?string"},{"name":"new_algo","type":"PasswordKdfAlgo"},{"name":"new_secure_algo","type":"SecurePasswordKdfAlgo"},{"name":"secure_random","type":"bytes"}],"type":"account.Password"},{"id":"-1705233435","predicate":"account.passwordSettings","params":[{"name":"flags","type":"#"},{"name":"email","type":"flags.0?string"},{"name":"secure_settings","type":"flags.1?SecureSecretSettings"}],"type":"account.PasswordSettings"},{"id":"-1036572727","predicate":"account.passwordInputSettings","params":[{"name":"flags","type":"#"},{"name":"new_algo","type":"flags.0?PasswordKdfAlgo"},{"name":"new_password_hash","type":"flags.0?bytes"},{"name":"hint","type":"flags.0?string"},{"name":"email","type":"flags.1?string"},{"name":"new_secure_settings","type":"flags.2?SecureSecretSettings"}],"type":"account.PasswordInputSettings"},{"id":"326715557","predicate":"auth.passwordRecovery","params":[{"name":"email_pattern","type":"string"}],"type":"auth.PasswordRecovery"},{"id":"-1052959727","predicate":"inputMediaVenue","params":[{"name":"geo_point","type":"InputGeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"venue_type","type":"string"}],"type":"InputMedia"},{"id":"784356159","predicate":"messageMediaVenue","params":[{"name":"geo","type":"GeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"venue_type","type":"string"}],"type":"MessageMedia"},{"id":"-1551583367","predicate":"receivedNotifyMessage","params":[{"name":"id","type":"int"},{"name":"flags","type":"int"}],"type":"ReceivedNotifyMessage"},{"id":"1776236393","predicate":"chatInviteEmpty","params":[],"type":"ExportedChatInvite"},{"id":"-64092740","predicate":"chatInviteExported","params":[{"name":"link","type":"string"}],"type":"ExportedChatInvite"},{"id":"1516793212","predicate":"chatInviteAlready","params":[{"name":"chat","type":"Chat"}],"type":"ChatInvite"},{"id":"-540871282","predicate":"chatInvite","params":[{"name":"flags","type":"#"},{"name":"channel","type":"flags.0?true"},{"name":"broadcast","type":"flags.1?true"},{"name":"public","type":"flags.2?true"},{"name":"megagroup","type":"flags.3?true"},{"name":"title","type":"string"},{"name":"photo","type":"Photo"},{"name":"participants_count","type":"int"},{"name":"participants","type":"flags.4?Vector"}],"type":"ChatInvite"},{"id":"-123931160","predicate":"messageActionChatJoinedByLink","params":[{"name":"inviter_id","type":"int"}],"type":"MessageAction"},{"id":"1757493555","predicate":"updateReadMessagesContents","params":[{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-4838507","predicate":"inputStickerSetEmpty","params":[],"type":"InputStickerSet"},{"id":"-1645763991","predicate":"inputStickerSetID","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputStickerSet"},{"id":"-2044933984","predicate":"inputStickerSetShortName","params":[{"name":"short_name","type":"string"}],"type":"InputStickerSet"},{"id":"-290164953","predicate":"stickerSet","params":[{"name":"flags","type":"#"},{"name":"archived","type":"flags.1?true"},{"name":"official","type":"flags.2?true"},{"name":"masks","type":"flags.3?true"},{"name":"animated","type":"flags.5?true"},{"name":"installed_date","type":"flags.0?int"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"title","type":"string"},{"name":"short_name","type":"string"},{"name":"thumb","type":"flags.4?PhotoSize"},{"name":"thumb_dc_id","type":"flags.4?int"},{"name":"count","type":"int"},{"name":"hash","type":"int"}],"type":"StickerSet"},{"id":"-1240849242","predicate":"messages.stickerSet","params":[{"name":"set","type":"StickerSet"},{"name":"packs","type":"Vector"},{"name":"documents","type":"Vector"}],"type":"messages.StickerSet"},{"id":"-1820043071","predicate":"user","params":[{"name":"flags","type":"#"},{"name":"self","type":"flags.10?true"},{"name":"contact","type":"flags.11?true"},{"name":"mutual_contact","type":"flags.12?true"},{"name":"deleted","type":"flags.13?true"},{"name":"bot","type":"flags.14?true"},{"name":"bot_chat_history","type":"flags.15?true"},{"name":"bot_nochats","type":"flags.16?true"},{"name":"verified","type":"flags.17?true"},{"name":"restricted","type":"flags.18?true"},{"name":"min","type":"flags.20?true"},{"name":"bot_inline_geo","type":"flags.21?true"},{"name":"support","type":"flags.23?true"},{"name":"scam","type":"flags.24?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"flags.0?long"},{"name":"first_name","type":"flags.1?string"},{"name":"last_name","type":"flags.2?string"},{"name":"username","type":"flags.3?string"},{"name":"phone","type":"flags.4?string"},{"name":"photo","type":"flags.5?UserProfilePhoto"},{"name":"status","type":"flags.6?UserStatus"},{"name":"bot_info_version","type":"flags.14?int"},{"name":"restriction_reason","type":"flags.18?Vector"},{"name":"bot_inline_placeholder","type":"flags.19?string"},{"name":"lang_code","type":"flags.22?string"}],"type":"User"},{"id":"-1032140601","predicate":"botCommand","params":[{"name":"command","type":"string"},{"name":"description","type":"string"}],"type":"BotCommand"},{"id":"-1729618630","predicate":"botInfo","params":[{"name":"user_id","type":"int"},{"name":"description","type":"string"},{"name":"commands","type":"Vector"}],"type":"BotInfo"},{"id":"-1560655744","predicate":"keyboardButton","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"2002815875","predicate":"keyboardButtonRow","params":[{"name":"buttons","type":"Vector"}],"type":"KeyboardButtonRow"},{"id":"-1606526075","predicate":"replyKeyboardHide","params":[{"name":"flags","type":"#"},{"name":"selective","type":"flags.2?true"}],"type":"ReplyMarkup"},{"id":"-200242528","predicate":"replyKeyboardForceReply","params":[{"name":"flags","type":"#"},{"name":"single_use","type":"flags.1?true"},{"name":"selective","type":"flags.2?true"}],"type":"ReplyMarkup"},{"id":"889353612","predicate":"replyKeyboardMarkup","params":[{"name":"flags","type":"#"},{"name":"resize","type":"flags.0?true"},{"name":"single_use","type":"flags.1?true"},{"name":"selective","type":"flags.2?true"},{"name":"rows","type":"Vector"}],"type":"ReplyMarkup"},{"id":"2072935910","predicate":"inputPeerUser","params":[{"name":"user_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputPeer"},{"id":"-668391402","predicate":"inputUser","params":[{"name":"user_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputUser"},{"id":"-1148011883","predicate":"messageEntityUnknown","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-100378723","predicate":"messageEntityMention","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1868782349","predicate":"messageEntityHashtag","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1827637959","predicate":"messageEntityBotCommand","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1859134776","predicate":"messageEntityUrl","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1692693954","predicate":"messageEntityEmail","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-1117713463","predicate":"messageEntityBold","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-2106619040","predicate":"messageEntityItalic","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"681706865","predicate":"messageEntityCode","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1938967520","predicate":"messageEntityPre","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"language","type":"string"}],"type":"MessageEntity"},{"id":"1990644519","predicate":"messageEntityTextUrl","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"url","type":"string"}],"type":"MessageEntity"},{"id":"301019932","predicate":"updateShortSentMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"media","type":"flags.9?MessageMedia"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"-292807034","predicate":"inputChannelEmpty","params":[],"type":"InputChannel"},{"id":"-1343524562","predicate":"inputChannel","params":[{"name":"channel_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputChannel"},{"id":"-1109531342","predicate":"peerChannel","params":[{"name":"channel_id","type":"int"}],"type":"Peer"},{"id":"548253432","predicate":"inputPeerChannel","params":[{"name":"channel_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputPeer"},{"id":"-753232354","predicate":"channel","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"left","type":"flags.2?true"},{"name":"broadcast","type":"flags.5?true"},{"name":"verified","type":"flags.7?true"},{"name":"megagroup","type":"flags.8?true"},{"name":"restricted","type":"flags.9?true"},{"name":"signatures","type":"flags.11?true"},{"name":"min","type":"flags.12?true"},{"name":"scam","type":"flags.19?true"},{"name":"has_link","type":"flags.20?true"},{"name":"has_geo","type":"flags.21?true"},{"name":"slowmode_enabled","type":"flags.22?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"flags.13?long"},{"name":"title","type":"string"},{"name":"username","type":"flags.6?string"},{"name":"photo","type":"ChatPhoto"},{"name":"date","type":"int"},{"name":"version","type":"int"},{"name":"restriction_reason","type":"flags.9?Vector"},{"name":"admin_rights","type":"flags.14?ChatAdminRights"},{"name":"banned_rights","type":"flags.15?ChatBannedRights"},{"name":"default_banned_rights","type":"flags.18?ChatBannedRights"},{"name":"participants_count","type":"flags.17?int"}],"type":"Chat"},{"id":"681420594","predicate":"channelForbidden","params":[{"name":"flags","type":"#"},{"name":"broadcast","type":"flags.5?true"},{"name":"megagroup","type":"flags.8?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"title","type":"string"},{"name":"until_date","type":"flags.16?int"}],"type":"Chat"},{"id":"2131196633","predicate":"contacts.resolvedPeer","params":[{"name":"peer","type":"Peer"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.ResolvedPeer"},{"id":"763976820","predicate":"channelFull","params":[{"name":"flags","type":"#"},{"name":"can_view_participants","type":"flags.3?true"},{"name":"can_set_username","type":"flags.6?true"},{"name":"can_set_stickers","type":"flags.7?true"},{"name":"hidden_prehistory","type":"flags.10?true"},{"name":"can_view_stats","type":"flags.12?true"},{"name":"can_set_location","type":"flags.16?true"},{"name":"has_scheduled","type":"flags.19?true"},{"name":"id","type":"int"},{"name":"about","type":"string"},{"name":"participants_count","type":"flags.0?int"},{"name":"admins_count","type":"flags.1?int"},{"name":"kicked_count","type":"flags.2?int"},{"name":"banned_count","type":"flags.2?int"},{"name":"online_count","type":"flags.13?int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"chat_photo","type":"Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"exported_invite","type":"ExportedChatInvite"},{"name":"bot_info","type":"Vector"},{"name":"migrated_from_chat_id","type":"flags.4?int"},{"name":"migrated_from_max_id","type":"flags.4?int"},{"name":"pinned_msg_id","type":"flags.5?int"},{"name":"stickerset","type":"flags.8?StickerSet"},{"name":"available_min_id","type":"flags.9?int"},{"name":"folder_id","type":"flags.11?int"},{"name":"linked_chat_id","type":"flags.14?int"},{"name":"location","type":"flags.15?ChannelLocation"},{"name":"slowmode_seconds","type":"flags.17?int"},{"name":"slowmode_next_send_date","type":"flags.18?int"},{"name":"pts","type":"int"}],"type":"ChatFull"},{"id":"182649427","predicate":"messageRange","params":[{"name":"min_id","type":"int"},{"name":"max_id","type":"int"}],"type":"MessageRange"},{"id":"-1725551049","predicate":"messages.channelMessages","params":[{"name":"flags","type":"#"},{"name":"inexact","type":"flags.1?true"},{"name":"pts","type":"int"},{"name":"count","type":"int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"-1781355374","predicate":"messageActionChannelCreate","params":[{"name":"title","type":"string"}],"type":"MessageAction"},{"id":"-352032773","predicate":"updateChannelTooLong","params":[{"name":"flags","type":"#"},{"name":"channel_id","type":"int"},{"name":"pts","type":"flags.0?int"}],"type":"Update"},{"id":"-1227598250","predicate":"updateChannel","params":[{"name":"channel_id","type":"int"}],"type":"Update"},{"id":"1656358105","predicate":"updateNewChannelMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"856380452","predicate":"updateReadChannelInbox","params":[{"name":"flags","type":"#"},{"name":"folder_id","type":"flags.0?int"},{"name":"channel_id","type":"int"},{"name":"max_id","type":"int"},{"name":"still_unread_count","type":"int"},{"name":"pts","type":"int"}],"type":"Update"},{"id":"-1015733815","predicate":"updateDeleteChannelMessages","params":[{"name":"channel_id","type":"int"},{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1734268085","predicate":"updateChannelMessageViews","params":[{"name":"channel_id","type":"int"},{"name":"id","type":"int"},{"name":"views","type":"int"}],"type":"Update"},{"id":"1041346555","predicate":"updates.channelDifferenceEmpty","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"}],"type":"updates.ChannelDifference"},{"id":"-1531132162","predicate":"updates.channelDifferenceTooLong","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"timeout","type":"flags.1?int"},{"name":"dialog","type":"Dialog"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"updates.ChannelDifference"},{"id":"543450958","predicate":"updates.channelDifference","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"},{"name":"new_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"updates.ChannelDifference"},{"id":"-1798033689","predicate":"channelMessagesFilterEmpty","params":[],"type":"ChannelMessagesFilter"},{"id":"-847783593","predicate":"channelMessagesFilter","params":[{"name":"flags","type":"#"},{"name":"exclude_new_messages","type":"flags.1?true"},{"name":"ranges","type":"Vector"}],"type":"ChannelMessagesFilter"},{"id":"367766557","predicate":"channelParticipant","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1557620115","predicate":"channelParticipantSelf","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-2138237532","predicate":"channelParticipantCreator","params":[{"name":"flags","type":"#"},{"name":"user_id","type":"int"},{"name":"rank","type":"flags.0?string"}],"type":"ChannelParticipant"},{"id":"-566281095","predicate":"channelParticipantsRecent","params":[],"type":"ChannelParticipantsFilter"},{"id":"-1268741783","predicate":"channelParticipantsAdmins","params":[],"type":"ChannelParticipantsFilter"},{"id":"-1548400251","predicate":"channelParticipantsKicked","params":[{"name":"q","type":"string"}],"type":"ChannelParticipantsFilter"},{"id":"-177282392","predicate":"channels.channelParticipants","params":[{"name":"count","type":"int"},{"name":"participants","type":"Vector"},{"name":"users","type":"Vector"}],"type":"channels.ChannelParticipants"},{"id":"-791039645","predicate":"channels.channelParticipant","params":[{"name":"participant","type":"ChannelParticipant"},{"name":"users","type":"Vector"}],"type":"channels.ChannelParticipant"},{"id":"-636267638","predicate":"chatParticipantCreator","params":[{"name":"user_id","type":"int"}],"type":"ChatParticipant"},{"id":"-489233354","predicate":"chatParticipantAdmin","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChatParticipant"},{"id":"-1232070311","predicate":"updateChatParticipantAdmin","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"is_admin","type":"Bool"},{"name":"version","type":"int"}],"type":"Update"},{"id":"1371385889","predicate":"messageActionChatMigrateTo","params":[{"name":"channel_id","type":"int"}],"type":"MessageAction"},{"id":"-1336546578","predicate":"messageActionChannelMigrateFrom","params":[{"name":"title","type":"string"},{"name":"chat_id","type":"int"}],"type":"MessageAction"},{"id":"-1328445861","predicate":"channelParticipantsBots","params":[],"type":"ChannelParticipantsFilter"},{"id":"2013922064","predicate":"help.termsOfService","params":[{"name":"flags","type":"#"},{"name":"popup","type":"flags.0?true"},{"name":"id","type":"DataJSON"},{"name":"text","type":"string"},{"name":"entities","type":"Vector"},{"name":"min_age_confirm","type":"flags.1?int"}],"type":"help.TermsOfService"},{"id":"1753886890","predicate":"updateNewStickerSet","params":[{"name":"stickerset","type":"messages.StickerSet"}],"type":"Update"},{"id":"196268545","predicate":"updateStickerSetsOrder","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Update"},{"id":"1135492588","predicate":"updateStickerSets","params":[],"type":"Update"},{"id":"372165663","predicate":"foundGif","params":[{"name":"url","type":"string"},{"name":"thumb_url","type":"string"},{"name":"content_url","type":"string"},{"name":"content_type","type":"string"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"FoundGif"},{"id":"-1670052855","predicate":"foundGifCached","params":[{"name":"url","type":"string"},{"name":"photo","type":"Photo"},{"name":"document","type":"Document"}],"type":"FoundGif"},{"id":"1212395773","predicate":"inputMediaGifExternal","params":[{"name":"url","type":"string"},{"name":"q","type":"string"}],"type":"InputMedia"},{"id":"1158290442","predicate":"messages.foundGifs","params":[{"name":"next_offset","type":"int"},{"name":"results","type":"Vector"}],"type":"messages.FoundGifs"},{"id":"-402498398","predicate":"messages.savedGifsNotModified","params":[],"type":"messages.SavedGifs"},{"id":"772213157","predicate":"messages.savedGifs","params":[{"name":"hash","type":"int"},{"name":"gifs","type":"Vector"}],"type":"messages.SavedGifs"},{"id":"-1821035490","predicate":"updateSavedGifs","params":[],"type":"Update"},{"id":"864077702","predicate":"inputBotInlineMessageMediaAuto","params":[{"name":"flags","type":"#"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"1036876423","predicate":"inputBotInlineMessageText","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-2000710887","predicate":"inputBotInlineResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"url","type":"flags.3?string"},{"name":"thumb","type":"flags.4?InputWebDocument"},{"name":"content","type":"flags.5?InputWebDocument"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"1984755728","predicate":"botInlineMessageMediaAuto","params":[{"name":"flags","type":"#"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1937807902","predicate":"botInlineMessageText","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"295067450","predicate":"botInlineResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"url","type":"flags.3?string"},{"name":"thumb","type":"flags.4?WebDocument"},{"name":"content","type":"flags.5?WebDocument"},{"name":"send_message","type":"BotInlineMessage"}],"type":"BotInlineResult"},{"id":"-1803769784","predicate":"messages.botResults","params":[{"name":"flags","type":"#"},{"name":"gallery","type":"flags.0?true"},{"name":"query_id","type":"long"},{"name":"next_offset","type":"flags.1?string"},{"name":"switch_pm","type":"flags.2?InlineBotSwitchPM"},{"name":"results","type":"Vector"},{"name":"cache_time","type":"int"},{"name":"users","type":"Vector"}],"type":"messages.BotResults"},{"id":"1417832080","predicate":"updateBotInlineQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"query","type":"string"},{"name":"geo","type":"flags.0?GeoPoint"},{"name":"offset","type":"string"}],"type":"Update"},{"id":"239663460","predicate":"updateBotInlineSend","params":[{"name":"flags","type":"#"},{"name":"user_id","type":"int"},{"name":"query","type":"string"},{"name":"geo","type":"flags.0?GeoPoint"},{"name":"id","type":"string"},{"name":"msg_id","type":"flags.1?InputBotInlineMessageID"}],"type":"Update"},{"id":"1358283666","predicate":"inputMessagesFilterVoice","params":[],"type":"MessagesFilter"},{"id":"928101534","predicate":"inputMessagesFilterMusic","params":[],"type":"MessagesFilter"},{"id":"-1107622874","predicate":"inputPrivacyKeyChatInvite","params":[],"type":"InputPrivacyKey"},{"id":"1343122938","predicate":"privacyKeyChatInvite","params":[],"type":"PrivacyKey"},{"id":"1571494644","predicate":"exportedMessageLink","params":[{"name":"link","type":"string"},{"name":"html","type":"string"}],"type":"ExportedMessageLink"},{"id":"-332168592","predicate":"messageFwdHeader","params":[{"name":"flags","type":"#"},{"name":"from_id","type":"flags.0?int"},{"name":"from_name","type":"flags.5?string"},{"name":"date","type":"int"},{"name":"channel_id","type":"flags.1?int"},{"name":"channel_post","type":"flags.2?int"},{"name":"post_author","type":"flags.3?string"},{"name":"saved_from_peer","type":"flags.4?Peer"},{"name":"saved_from_msg_id","type":"flags.4?int"}],"type":"MessageFwdHeader"},{"id":"457133559","predicate":"updateEditChannelMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1738988427","predicate":"updateChannelPinnedMessage","params":[{"name":"channel_id","type":"int"},{"name":"id","type":"int"}],"type":"Update"},{"id":"-1799538451","predicate":"messageActionPinMessage","params":[],"type":"MessageAction"},{"id":"1923290508","predicate":"auth.codeTypeSms","params":[],"type":"auth.CodeType"},{"id":"1948046307","predicate":"auth.codeTypeCall","params":[],"type":"auth.CodeType"},{"id":"577556219","predicate":"auth.codeTypeFlashCall","params":[],"type":"auth.CodeType"},{"id":"1035688326","predicate":"auth.sentCodeTypeApp","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"-1073693790","predicate":"auth.sentCodeTypeSms","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"1398007207","predicate":"auth.sentCodeTypeCall","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"-1425815847","predicate":"auth.sentCodeTypeFlashCall","params":[{"name":"pattern","type":"string"}],"type":"auth.SentCodeType"},{"id":"629866245","predicate":"keyboardButtonUrl","params":[{"name":"text","type":"string"},{"name":"url","type":"string"}],"type":"KeyboardButton"},{"id":"1748655686","predicate":"keyboardButtonCallback","params":[{"name":"text","type":"string"},{"name":"data","type":"bytes"}],"type":"KeyboardButton"},{"id":"-1318425559","predicate":"keyboardButtonRequestPhone","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"-59151553","predicate":"keyboardButtonRequestGeoLocation","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"90744648","predicate":"keyboardButtonSwitchInline","params":[{"name":"flags","type":"#"},{"name":"same_peer","type":"flags.0?true"},{"name":"text","type":"string"},{"name":"query","type":"string"}],"type":"KeyboardButton"},{"id":"1218642516","predicate":"replyInlineMarkup","params":[{"name":"rows","type":"Vector"}],"type":"ReplyMarkup"},{"id":"911761060","predicate":"messages.botCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"alert","type":"flags.1?true"},{"name":"has_url","type":"flags.3?true"},{"name":"native_ui","type":"flags.4?true"},{"name":"message","type":"flags.0?string"},{"name":"url","type":"flags.2?string"},{"name":"cache_time","type":"int"}],"type":"messages.BotCallbackAnswer"},{"id":"-415938591","predicate":"updateBotCallbackQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"peer","type":"Peer"},{"name":"msg_id","type":"int"},{"name":"chat_instance","type":"long"},{"name":"data","type":"flags.0?bytes"},{"name":"game_short_name","type":"flags.1?string"}],"type":"Update"},{"id":"649453030","predicate":"messages.messageEditData","params":[{"name":"flags","type":"#"},{"name":"caption","type":"flags.0?true"}],"type":"messages.MessageEditData"},{"id":"-469536605","predicate":"updateEditMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1045340827","predicate":"inputBotInlineMessageMediaGeo","params":[{"name":"flags","type":"#"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"period","type":"int"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"1098628881","predicate":"inputBotInlineMessageMediaVenue","params":[{"name":"flags","type":"#"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"venue_type","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-1494368259","predicate":"inputBotInlineMessageMediaContact","params":[{"name":"flags","type":"#"},{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-1222451611","predicate":"botInlineMessageMediaGeo","params":[{"name":"flags","type":"#"},{"name":"geo","type":"GeoPoint"},{"name":"period","type":"int"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1970903652","predicate":"botInlineMessageMediaVenue","params":[{"name":"flags","type":"#"},{"name":"geo","type":"GeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"venue_type","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"416402882","predicate":"botInlineMessageMediaContact","params":[{"name":"flags","type":"#"},{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1462213465","predicate":"inputBotInlineResultPhoto","params":[{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"photo","type":"InputPhoto"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"-459324","predicate":"inputBotInlineResultDocument","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"document","type":"InputDocument"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"400266251","predicate":"botInlineMediaResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"photo","type":"flags.0?Photo"},{"name":"document","type":"flags.1?Document"},{"name":"title","type":"flags.2?string"},{"name":"description","type":"flags.3?string"},{"name":"send_message","type":"BotInlineMessage"}],"type":"BotInlineResult"},{"id":"-1995686519","predicate":"inputBotInlineMessageID","params":[{"name":"dc_id","type":"int"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputBotInlineMessageID"},{"id":"-103646630","predicate":"updateInlineBotCallbackQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"msg_id","type":"InputBotInlineMessageID"},{"name":"chat_instance","type":"long"},{"name":"data","type":"flags.0?bytes"},{"name":"game_short_name","type":"flags.1?string"}],"type":"Update"},{"id":"1008755359","predicate":"inlineBotSwitchPM","params":[{"name":"text","type":"string"},{"name":"start_param","type":"string"}],"type":"InlineBotSwitchPM"},{"id":"863093588","predicate":"messages.peerDialogs","params":[{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"state","type":"updates.State"}],"type":"messages.PeerDialogs"},{"id":"-305282981","predicate":"topPeer","params":[{"name":"peer","type":"Peer"},{"name":"rating","type":"double"}],"type":"TopPeer"},{"id":"-1419371685","predicate":"topPeerCategoryBotsPM","params":[],"type":"TopPeerCategory"},{"id":"344356834","predicate":"topPeerCategoryBotsInline","params":[],"type":"TopPeerCategory"},{"id":"104314861","predicate":"topPeerCategoryCorrespondents","params":[],"type":"TopPeerCategory"},{"id":"-1122524854","predicate":"topPeerCategoryGroups","params":[],"type":"TopPeerCategory"},{"id":"371037736","predicate":"topPeerCategoryChannels","params":[],"type":"TopPeerCategory"},{"id":"-75283823","predicate":"topPeerCategoryPeers","params":[{"name":"category","type":"TopPeerCategory"},{"name":"count","type":"int"},{"name":"peers","type":"Vector"}],"type":"TopPeerCategoryPeers"},{"id":"-567906571","predicate":"contacts.topPeersNotModified","params":[],"type":"contacts.TopPeers"},{"id":"1891070632","predicate":"contacts.topPeers","params":[{"name":"categories","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.TopPeers"},{"id":"892193368","predicate":"messageEntityMentionName","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"user_id","type":"int"}],"type":"MessageEntity"},{"id":"546203849","predicate":"inputMessageEntityMentionName","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"MessageEntity"},{"id":"975236280","predicate":"inputMessagesFilterChatPhotos","params":[],"type":"MessagesFilter"},{"id":"634833351","predicate":"updateReadChannelOutbox","params":[{"name":"channel_id","type":"int"},{"name":"max_id","type":"int"}],"type":"Update"},{"id":"-299124375","predicate":"updateDraftMessage","params":[{"name":"peer","type":"Peer"},{"name":"draft","type":"DraftMessage"}],"type":"Update"},{"id":"453805082","predicate":"draftMessageEmpty","params":[{"name":"flags","type":"#"},{"name":"date","type":"flags.0?int"}],"type":"DraftMessage"},{"id":"-40996577","predicate":"draftMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"},{"name":"date","type":"int"}],"type":"DraftMessage"},{"id":"-1615153660","predicate":"messageActionHistoryClear","params":[],"type":"MessageAction"},{"id":"82699215","predicate":"messages.featuredStickersNotModified","params":[],"type":"messages.FeaturedStickers"},{"id":"-123893531","predicate":"messages.featuredStickers","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"},{"name":"unread","type":"Vector"}],"type":"messages.FeaturedStickers"},{"id":"1461528386","predicate":"updateReadFeaturedStickers","params":[],"type":"Update"},{"id":"186120336","predicate":"messages.recentStickersNotModified","params":[],"type":"messages.RecentStickers"},{"id":"586395571","predicate":"messages.recentStickers","params":[{"name":"hash","type":"int"},{"name":"packs","type":"Vector"},{"name":"stickers","type":"Vector"},{"name":"dates","type":"Vector"}],"type":"messages.RecentStickers"},{"id":"-1706939360","predicate":"updateRecentStickers","params":[],"type":"Update"},{"id":"1338747336","predicate":"messages.archivedStickers","params":[{"name":"count","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.ArchivedStickers"},{"id":"946083368","predicate":"messages.stickerSetInstallResultSuccess","params":[],"type":"messages.StickerSetInstallResult"},{"id":"904138920","predicate":"messages.stickerSetInstallResultArchive","params":[{"name":"sets","type":"Vector"}],"type":"messages.StickerSetInstallResult"},{"id":"1678812626","predicate":"stickerSetCovered","params":[{"name":"set","type":"StickerSet"},{"name":"cover","type":"Document"}],"type":"StickerSetCovered"},{"id":"-1574314746","predicate":"updateConfig","params":[],"type":"Update"},{"id":"861169551","predicate":"updatePtsChanged","params":[],"type":"Update"},{"id":"-440664550","predicate":"inputMediaPhotoExternal","params":[{"name":"flags","type":"#"},{"name":"url","type":"string"},{"name":"ttl_seconds","type":"flags.0?int"}],"type":"InputMedia"},{"id":"-78455655","predicate":"inputMediaDocumentExternal","params":[{"name":"flags","type":"#"},{"name":"url","type":"string"},{"name":"ttl_seconds","type":"flags.0?int"}],"type":"InputMedia"},{"id":"872932635","predicate":"stickerSetMultiCovered","params":[{"name":"set","type":"StickerSet"},{"name":"covers","type":"Vector"}],"type":"StickerSetCovered"},{"id":"-1361650766","predicate":"maskCoords","params":[{"name":"n","type":"int"},{"name":"x","type":"double"},{"name":"y","type":"double"},{"name":"zoom","type":"double"}],"type":"MaskCoords"},{"id":"-1744710921","predicate":"documentAttributeHasStickers","params":[],"type":"DocumentAttribute"},{"id":"1251549527","predicate":"inputStickeredMediaPhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"InputStickeredMedia"},{"id":"70813275","predicate":"inputStickeredMediaDocument","params":[{"name":"id","type":"InputDocument"}],"type":"InputStickeredMedia"},{"id":"-1107729093","predicate":"game","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"short_name","type":"string"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"Photo"},{"name":"document","type":"flags.0?Document"}],"type":"Game"},{"id":"1336154098","predicate":"inputBotInlineResultGame","params":[{"name":"id","type":"string"},{"name":"short_name","type":"string"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"1262639204","predicate":"inputBotInlineMessageGame","params":[{"name":"flags","type":"#"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-38694904","predicate":"messageMediaGame","params":[{"name":"game","type":"Game"}],"type":"MessageMedia"},{"id":"-750828557","predicate":"inputMediaGame","params":[{"name":"id","type":"InputGame"}],"type":"InputMedia"},{"id":"53231223","predicate":"inputGameID","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputGame"},{"id":"-1020139510","predicate":"inputGameShortName","params":[{"name":"bot_id","type":"InputUser"},{"name":"short_name","type":"string"}],"type":"InputGame"},{"id":"1358175439","predicate":"keyboardButtonGame","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"-1834538890","predicate":"messageActionGameScore","params":[{"name":"game_id","type":"long"},{"name":"score","type":"int"}],"type":"MessageAction"},{"id":"1493171408","predicate":"highScore","params":[{"name":"pos","type":"int"},{"name":"user_id","type":"int"},{"name":"score","type":"int"}],"type":"HighScore"},{"id":"-1707344487","predicate":"messages.highScores","params":[{"name":"scores","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.HighScores"},{"id":"1258196845","predicate":"updates.differenceTooLong","params":[{"name":"pts","type":"int"}],"type":"updates.Difference"},{"id":"1081547008","predicate":"updateChannelWebPage","params":[{"name":"channel_id","type":"int"},{"name":"webpage","type":"WebPage"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1663561404","predicate":"messages.chatsSlice","params":[{"name":"count","type":"int"},{"name":"chats","type":"Vector"}],"type":"messages.Chats"},{"id":"-599948721","predicate":"textEmpty","params":[],"type":"RichText"},{"id":"1950782688","predicate":"textPlain","params":[{"name":"text","type":"string"}],"type":"RichText"},{"id":"1730456516","predicate":"textBold","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-653089380","predicate":"textItalic","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-1054465340","predicate":"textUnderline","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-1678197867","predicate":"textStrike","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"1816074681","predicate":"textFixed","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"1009288385","predicate":"textUrl","params":[{"name":"text","type":"RichText"},{"name":"url","type":"string"},{"name":"webpage_id","type":"long"}],"type":"RichText"},{"id":"-564523562","predicate":"textEmail","params":[{"name":"text","type":"RichText"},{"name":"email","type":"string"}],"type":"RichText"},{"id":"2120376535","predicate":"textConcat","params":[{"name":"texts","type":"Vector"}],"type":"RichText"},{"id":"324435594","predicate":"pageBlockUnsupported","params":[],"type":"PageBlock"},{"id":"1890305021","predicate":"pageBlockTitle","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1879401953","predicate":"pageBlockSubtitle","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1162877472","predicate":"pageBlockAuthorDate","params":[{"name":"author","type":"RichText"},{"name":"published_date","type":"int"}],"type":"PageBlock"},{"id":"-1076861716","predicate":"pageBlockHeader","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-248793375","predicate":"pageBlockSubheader","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"1182402406","predicate":"pageBlockParagraph","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1066346178","predicate":"pageBlockPreformatted","params":[{"name":"text","type":"RichText"},{"name":"language","type":"string"}],"type":"PageBlock"},{"id":"1216809369","predicate":"pageBlockFooter","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-618614392","predicate":"pageBlockDivider","params":[],"type":"PageBlock"},{"id":"-837994576","predicate":"pageBlockAnchor","params":[{"name":"name","type":"string"}],"type":"PageBlock"},{"id":"-454524911","predicate":"pageBlockList","params":[{"name":"items","type":"Vector"}],"type":"PageBlock"},{"id":"641563686","predicate":"pageBlockBlockquote","params":[{"name":"text","type":"RichText"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"1329878739","predicate":"pageBlockPullquote","params":[{"name":"text","type":"RichText"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"391759200","predicate":"pageBlockPhoto","params":[{"name":"flags","type":"#"},{"name":"photo_id","type":"long"},{"name":"caption","type":"PageCaption"},{"name":"url","type":"flags.0?string"},{"name":"webpage_id","type":"flags.0?long"}],"type":"PageBlock"},{"id":"2089805750","predicate":"pageBlockVideo","params":[{"name":"flags","type":"#"},{"name":"autoplay","type":"flags.0?true"},{"name":"loop","type":"flags.1?true"},{"name":"video_id","type":"long"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"972174080","predicate":"pageBlockCover","params":[{"name":"cover","type":"PageBlock"}],"type":"PageBlock"},{"id":"-1468953147","predicate":"pageBlockEmbed","params":[{"name":"flags","type":"#"},{"name":"full_width","type":"flags.0?true"},{"name":"allow_scrolling","type":"flags.3?true"},{"name":"url","type":"flags.1?string"},{"name":"html","type":"flags.2?string"},{"name":"poster_photo_id","type":"flags.4?long"},{"name":"w","type":"flags.5?int"},{"name":"h","type":"flags.5?int"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"-229005301","predicate":"pageBlockEmbedPost","params":[{"name":"url","type":"string"},{"name":"webpage_id","type":"long"},{"name":"author_photo_id","type":"long"},{"name":"author","type":"string"},{"name":"date","type":"int"},{"name":"blocks","type":"Vector"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"1705048653","predicate":"pageBlockCollage","params":[{"name":"items","type":"Vector"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"52401552","predicate":"pageBlockSlideshow","params":[{"name":"items","type":"Vector"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"-2054908813","predicate":"webPageNotModified","params":[],"type":"WebPage"},{"id":"-88417185","predicate":"inputPrivacyKeyPhoneCall","params":[],"type":"InputPrivacyKey"},{"id":"1030105979","predicate":"privacyKeyPhoneCall","params":[],"type":"PrivacyKey"},{"id":"-580219064","predicate":"sendMessageGamePlayAction","params":[],"type":"SendMessageAction"},{"id":"-2048646399","predicate":"phoneCallDiscardReasonMissed","params":[],"type":"PhoneCallDiscardReason"},{"id":"-527056480","predicate":"phoneCallDiscardReasonDisconnect","params":[],"type":"PhoneCallDiscardReason"},{"id":"1471006352","predicate":"phoneCallDiscardReasonHangup","params":[],"type":"PhoneCallDiscardReason"},{"id":"-84416311","predicate":"phoneCallDiscardReasonBusy","params":[],"type":"PhoneCallDiscardReason"},{"id":"1852826908","predicate":"updateDialogPinned","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.0?true"},{"name":"folder_id","type":"flags.1?int"},{"name":"peer","type":"DialogPeer"}],"type":"Update"},{"id":"-99664734","predicate":"updatePinnedDialogs","params":[{"name":"flags","type":"#"},{"name":"folder_id","type":"flags.1?int"},{"name":"order","type":"flags.0?Vector"}],"type":"Update"},{"id":"2104790276","predicate":"dataJSON","params":[{"name":"data","type":"string"}],"type":"DataJSON"},{"id":"-2095595325","predicate":"updateBotWebhookJSON","params":[{"name":"data","type":"DataJSON"}],"type":"Update"},{"id":"-1684914010","predicate":"updateBotWebhookJSONQuery","params":[{"name":"query_id","type":"long"},{"name":"data","type":"DataJSON"},{"name":"timeout","type":"int"}],"type":"Update"},{"id":"-886477832","predicate":"labeledPrice","params":[{"name":"label","type":"string"},{"name":"amount","type":"long"}],"type":"LabeledPrice"},{"id":"-1022713000","predicate":"invoice","params":[{"name":"flags","type":"#"},{"name":"test","type":"flags.0?true"},{"name":"name_requested","type":"flags.1?true"},{"name":"phone_requested","type":"flags.2?true"},{"name":"email_requested","type":"flags.3?true"},{"name":"shipping_address_requested","type":"flags.4?true"},{"name":"flexible","type":"flags.5?true"},{"name":"phone_to_provider","type":"flags.6?true"},{"name":"email_to_provider","type":"flags.7?true"},{"name":"currency","type":"string"},{"name":"prices","type":"Vector"}],"type":"Invoice"},{"id":"-186607933","predicate":"inputMediaInvoice","params":[{"name":"flags","type":"#"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"flags.0?InputWebDocument"},{"name":"invoice","type":"Invoice"},{"name":"payload","type":"bytes"},{"name":"provider","type":"string"},{"name":"provider_data","type":"DataJSON"},{"name":"start_param","type":"string"}],"type":"InputMedia"},{"id":"-368917890","predicate":"paymentCharge","params":[{"name":"id","type":"string"},{"name":"provider_charge_id","type":"string"}],"type":"PaymentCharge"},{"id":"-1892568281","predicate":"messageActionPaymentSentMe","params":[{"name":"flags","type":"#"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"},{"name":"payload","type":"bytes"},{"name":"info","type":"flags.0?PaymentRequestedInfo"},{"name":"shipping_option_id","type":"flags.1?string"},{"name":"charge","type":"PaymentCharge"}],"type":"MessageAction"},{"id":"-2074799289","predicate":"messageMediaInvoice","params":[{"name":"flags","type":"#"},{"name":"shipping_address_requested","type":"flags.1?true"},{"name":"test","type":"flags.3?true"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"flags.0?WebDocument"},{"name":"receipt_msg_id","type":"flags.2?int"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"},{"name":"start_param","type":"string"}],"type":"MessageMedia"},{"id":"512535275","predicate":"postAddress","params":[{"name":"street_line1","type":"string"},{"name":"street_line2","type":"string"},{"name":"city","type":"string"},{"name":"state","type":"string"},{"name":"country_iso2","type":"string"},{"name":"post_code","type":"string"}],"type":"PostAddress"},{"id":"-1868808300","predicate":"paymentRequestedInfo","params":[{"name":"flags","type":"#"},{"name":"name","type":"flags.0?string"},{"name":"phone","type":"flags.1?string"},{"name":"email","type":"flags.2?string"},{"name":"shipping_address","type":"flags.3?PostAddress"}],"type":"PaymentRequestedInfo"},{"id":"-1344716869","predicate":"keyboardButtonBuy","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"1080663248","predicate":"messageActionPaymentSent","params":[{"name":"currency","type":"string"},{"name":"total_amount","type":"long"}],"type":"MessageAction"},{"id":"-842892769","predicate":"paymentSavedCredentialsCard","params":[{"name":"id","type":"string"},{"name":"title","type":"string"}],"type":"PaymentSavedCredentials"},{"id":"475467473","predicate":"webDocument","params":[{"name":"url","type":"string"},{"name":"access_hash","type":"long"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"}],"type":"WebDocument"},{"id":"-1678949555","predicate":"inputWebDocument","params":[{"name":"url","type":"string"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"}],"type":"InputWebDocument"},{"id":"-1036396922","predicate":"inputWebFileLocation","params":[{"name":"url","type":"string"},{"name":"access_hash","type":"long"}],"type":"InputWebFileLocation"},{"id":"568808380","predicate":"upload.webFile","params":[{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"file_type","type":"storage.FileType"},{"name":"mtime","type":"int"},{"name":"bytes","type":"bytes"}],"type":"upload.WebFile"},{"id":"1062645411","predicate":"payments.paymentForm","params":[{"name":"flags","type":"#"},{"name":"can_save_credentials","type":"flags.2?true"},{"name":"password_missing","type":"flags.3?true"},{"name":"bot_id","type":"int"},{"name":"invoice","type":"Invoice"},{"name":"provider_id","type":"int"},{"name":"url","type":"string"},{"name":"native_provider","type":"flags.4?string"},{"name":"native_params","type":"flags.4?DataJSON"},{"name":"saved_info","type":"flags.0?PaymentRequestedInfo"},{"name":"saved_credentials","type":"flags.1?PaymentSavedCredentials"},{"name":"users","type":"Vector"}],"type":"payments.PaymentForm"},{"id":"-784000893","predicate":"payments.validatedRequestedInfo","params":[{"name":"flags","type":"#"},{"name":"id","type":"flags.0?string"},{"name":"shipping_options","type":"flags.1?Vector"}],"type":"payments.ValidatedRequestedInfo"},{"id":"1314881805","predicate":"payments.paymentResult","params":[{"name":"updates","type":"Updates"}],"type":"payments.PaymentResult"},{"id":"1342771681","predicate":"payments.paymentReceipt","params":[{"name":"flags","type":"#"},{"name":"date","type":"int"},{"name":"bot_id","type":"int"},{"name":"invoice","type":"Invoice"},{"name":"provider_id","type":"int"},{"name":"info","type":"flags.0?PaymentRequestedInfo"},{"name":"shipping","type":"flags.1?ShippingOption"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"},{"name":"credentials_title","type":"string"},{"name":"users","type":"Vector"}],"type":"payments.PaymentReceipt"},{"id":"-74456004","predicate":"payments.savedInfo","params":[{"name":"flags","type":"#"},{"name":"has_saved_credentials","type":"flags.1?true"},{"name":"saved_info","type":"flags.0?PaymentRequestedInfo"}],"type":"payments.SavedInfo"},{"id":"-1056001329","predicate":"inputPaymentCredentialsSaved","params":[{"name":"id","type":"string"},{"name":"tmp_password","type":"bytes"}],"type":"InputPaymentCredentials"},{"id":"873977640","predicate":"inputPaymentCredentials","params":[{"name":"flags","type":"#"},{"name":"save","type":"flags.0?true"},{"name":"data","type":"DataJSON"}],"type":"InputPaymentCredentials"},{"id":"-614138572","predicate":"account.tmpPassword","params":[{"name":"tmp_password","type":"bytes"},{"name":"valid_until","type":"int"}],"type":"account.TmpPassword"},{"id":"-1239335713","predicate":"shippingOption","params":[{"name":"id","type":"string"},{"name":"title","type":"string"},{"name":"prices","type":"Vector"}],"type":"ShippingOption"},{"id":"-523384512","predicate":"updateBotShippingQuery","params":[{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"payload","type":"bytes"},{"name":"shipping_address","type":"PostAddress"}],"type":"Update"},{"id":"1563376297","predicate":"updateBotPrecheckoutQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"payload","type":"bytes"},{"name":"info","type":"flags.0?PaymentRequestedInfo"},{"name":"shipping_option_id","type":"flags.1?string"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"}],"type":"Update"},{"id":"-6249322","predicate":"inputStickerSetItem","params":[{"name":"flags","type":"#"},{"name":"document","type":"InputDocument"},{"name":"emoji","type":"string"},{"name":"mask_coords","type":"flags.0?MaskCoords"}],"type":"InputStickerSetItem"},{"id":"-1425052898","predicate":"updatePhoneCall","params":[{"name":"phone_call","type":"PhoneCall"}],"type":"Update"},{"id":"506920429","predicate":"inputPhoneCall","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputPhoneCall"},{"id":"1399245077","predicate":"phoneCallEmpty","params":[{"name":"id","type":"long"}],"type":"PhoneCall"},{"id":"462375633","predicate":"phoneCallWaiting","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"protocol","type":"PhoneCallProtocol"},{"name":"receive_date","type":"flags.0?int"}],"type":"PhoneCall"},{"id":"-2014659757","predicate":"phoneCallRequested","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_hash","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"PhoneCall"},{"id":"-1719909046","predicate":"phoneCallAccepted","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_b","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"PhoneCall"},{"id":"-2025673089","predicate":"phoneCall","params":[{"name":"flags","type":"#"},{"name":"p2p_allowed","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_or_b","type":"bytes"},{"name":"key_fingerprint","type":"long"},{"name":"protocol","type":"PhoneCallProtocol"},{"name":"connections","type":"Vector"},{"name":"start_date","type":"int"}],"type":"PhoneCall"},{"id":"1355435489","predicate":"phoneCallDiscarded","params":[{"name":"flags","type":"#"},{"name":"need_rating","type":"flags.2?true"},{"name":"need_debug","type":"flags.3?true"},{"name":"video","type":"flags.5?true"},{"name":"id","type":"long"},{"name":"reason","type":"flags.0?PhoneCallDiscardReason"},{"name":"duration","type":"flags.1?int"}],"type":"PhoneCall"},{"id":"-1655957568","predicate":"phoneConnection","params":[{"name":"id","type":"long"},{"name":"ip","type":"string"},{"name":"ipv6","type":"string"},{"name":"port","type":"int"},{"name":"peer_tag","type":"bytes"}],"type":"PhoneConnection"},{"id":"-1564789301","predicate":"phoneCallProtocol","params":[{"name":"flags","type":"#"},{"name":"udp_p2p","type":"flags.0?true"},{"name":"udp_reflector","type":"flags.1?true"},{"name":"min_layer","type":"int"},{"name":"max_layer","type":"int"}],"type":"PhoneCallProtocol"},{"id":"-326966976","predicate":"phone.phoneCall","params":[{"name":"phone_call","type":"PhoneCall"},{"name":"users","type":"Vector"}],"type":"phone.PhoneCall"},{"id":"-2134272152","predicate":"inputMessagesFilterPhoneCalls","params":[{"name":"flags","type":"#"},{"name":"missed","type":"flags.0?true"}],"type":"MessagesFilter"},{"id":"-2132731265","predicate":"messageActionPhoneCall","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.2?true"},{"name":"call_id","type":"long"},{"name":"reason","type":"flags.0?PhoneCallDiscardReason"},{"name":"duration","type":"flags.1?int"}],"type":"MessageAction"},{"id":"2054952868","predicate":"inputMessagesFilterRoundVoice","params":[],"type":"MessagesFilter"},{"id":"-1253451181","predicate":"inputMessagesFilterRoundVideo","params":[],"type":"MessagesFilter"},{"id":"-1997373508","predicate":"sendMessageRecordRoundAction","params":[],"type":"SendMessageAction"},{"id":"608050278","predicate":"sendMessageUploadRoundAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-242427324","predicate":"upload.fileCdnRedirect","params":[{"name":"dc_id","type":"int"},{"name":"file_token","type":"bytes"},{"name":"encryption_key","type":"bytes"},{"name":"encryption_iv","type":"bytes"},{"name":"file_hashes","type":"Vector"}],"type":"upload.File"},{"id":"-290921362","predicate":"upload.cdnFileReuploadNeeded","params":[{"name":"request_token","type":"bytes"}],"type":"upload.CdnFile"},{"id":"-1449145777","predicate":"upload.cdnFile","params":[{"name":"bytes","type":"bytes"}],"type":"upload.CdnFile"},{"id":"-914167110","predicate":"cdnPublicKey","params":[{"name":"dc_id","type":"int"},{"name":"public_key","type":"string"}],"type":"CdnPublicKey"},{"id":"1462101002","predicate":"cdnConfig","params":[{"name":"public_keys","type":"Vector"}],"type":"CdnConfig"},{"id":"-283684427","predicate":"pageBlockChannel","params":[{"name":"channel","type":"Chat"}],"type":"PageBlock"},{"id":"-892239370","predicate":"langPackString","params":[{"name":"key","type":"string"},{"name":"value","type":"string"}],"type":"LangPackString"},{"id":"1816636575","predicate":"langPackStringPluralized","params":[{"name":"flags","type":"#"},{"name":"key","type":"string"},{"name":"zero_value","type":"flags.0?string"},{"name":"one_value","type":"flags.1?string"},{"name":"two_value","type":"flags.2?string"},{"name":"few_value","type":"flags.3?string"},{"name":"many_value","type":"flags.4?string"},{"name":"other_value","type":"string"}],"type":"LangPackString"},{"id":"695856818","predicate":"langPackStringDeleted","params":[{"name":"key","type":"string"}],"type":"LangPackString"},{"id":"-209337866","predicate":"langPackDifference","params":[{"name":"lang_code","type":"string"},{"name":"from_version","type":"int"},{"name":"version","type":"int"},{"name":"strings","type":"Vector"}],"type":"LangPackDifference"},{"id":"-288727837","predicate":"langPackLanguage","params":[{"name":"flags","type":"#"},{"name":"official","type":"flags.0?true"},{"name":"rtl","type":"flags.2?true"},{"name":"beta","type":"flags.3?true"},{"name":"name","type":"string"},{"name":"native_name","type":"string"},{"name":"lang_code","type":"string"},{"name":"base_lang_code","type":"flags.1?string"},{"name":"plural_code","type":"string"},{"name":"strings_count","type":"int"},{"name":"translated_count","type":"int"},{"name":"translations_url","type":"string"}],"type":"LangPackLanguage"},{"id":"1180041828","predicate":"updateLangPackTooLong","params":[{"name":"lang_code","type":"string"}],"type":"Update"},{"id":"1442983757","predicate":"updateLangPack","params":[{"name":"difference","type":"LangPackDifference"}],"type":"Update"},{"id":"-859915345","predicate":"channelParticipantAdmin","params":[{"name":"flags","type":"#"},{"name":"can_edit","type":"flags.0?true"},{"name":"self","type":"flags.1?true"},{"name":"user_id","type":"int"},{"name":"inviter_id","type":"flags.1?int"},{"name":"promoted_by","type":"int"},{"name":"date","type":"int"},{"name":"admin_rights","type":"ChatAdminRights"},{"name":"rank","type":"flags.2?string"}],"type":"ChannelParticipant"},{"id":"470789295","predicate":"channelParticipantBanned","params":[{"name":"flags","type":"#"},{"name":"left","type":"flags.0?true"},{"name":"user_id","type":"int"},{"name":"kicked_by","type":"int"},{"name":"date","type":"int"},{"name":"banned_rights","type":"ChatBannedRights"}],"type":"ChannelParticipant"},{"id":"338142689","predicate":"channelParticipantsBanned","params":[{"name":"q","type":"string"}],"type":"ChannelParticipantsFilter"},{"id":"106343499","predicate":"channelParticipantsSearch","params":[{"name":"q","type":"string"}],"type":"ChannelParticipantsFilter"},{"id":"-421545947","predicate":"channelAdminLogEventActionChangeTitle","params":[{"name":"prev_value","type":"string"},{"name":"new_value","type":"string"}],"type":"ChannelAdminLogEventAction"},{"id":"1427671598","predicate":"channelAdminLogEventActionChangeAbout","params":[{"name":"prev_value","type":"string"},{"name":"new_value","type":"string"}],"type":"ChannelAdminLogEventAction"},{"id":"1783299128","predicate":"channelAdminLogEventActionChangeUsername","params":[{"name":"prev_value","type":"string"},{"name":"new_value","type":"string"}],"type":"ChannelAdminLogEventAction"},{"id":"1129042607","predicate":"channelAdminLogEventActionChangePhoto","params":[{"name":"prev_photo","type":"Photo"},{"name":"new_photo","type":"Photo"}],"type":"ChannelAdminLogEventAction"},{"id":"460916654","predicate":"channelAdminLogEventActionToggleInvites","params":[{"name":"new_value","type":"Bool"}],"type":"ChannelAdminLogEventAction"},{"id":"648939889","predicate":"channelAdminLogEventActionToggleSignatures","params":[{"name":"new_value","type":"Bool"}],"type":"ChannelAdminLogEventAction"},{"id":"-370660328","predicate":"channelAdminLogEventActionUpdatePinned","params":[{"name":"message","type":"Message"}],"type":"ChannelAdminLogEventAction"},{"id":"1889215493","predicate":"channelAdminLogEventActionEditMessage","params":[{"name":"prev_message","type":"Message"},{"name":"new_message","type":"Message"}],"type":"ChannelAdminLogEventAction"},{"id":"1121994683","predicate":"channelAdminLogEventActionDeleteMessage","params":[{"name":"message","type":"Message"}],"type":"ChannelAdminLogEventAction"},{"id":"405815507","predicate":"channelAdminLogEventActionParticipantJoin","params":[],"type":"ChannelAdminLogEventAction"},{"id":"-124291086","predicate":"channelAdminLogEventActionParticipantLeave","params":[],"type":"ChannelAdminLogEventAction"},{"id":"-484690728","predicate":"channelAdminLogEventActionParticipantInvite","params":[{"name":"participant","type":"ChannelParticipant"}],"type":"ChannelAdminLogEventAction"},{"id":"-422036098","predicate":"channelAdminLogEventActionParticipantToggleBan","params":[{"name":"prev_participant","type":"ChannelParticipant"},{"name":"new_participant","type":"ChannelParticipant"}],"type":"ChannelAdminLogEventAction"},{"id":"-714643696","predicate":"channelAdminLogEventActionParticipantToggleAdmin","params":[{"name":"prev_participant","type":"ChannelParticipant"},{"name":"new_participant","type":"ChannelParticipant"}],"type":"ChannelAdminLogEventAction"},{"id":"995769920","predicate":"channelAdminLogEvent","params":[{"name":"id","type":"long"},{"name":"date","type":"int"},{"name":"user_id","type":"int"},{"name":"action","type":"ChannelAdminLogEventAction"}],"type":"ChannelAdminLogEvent"},{"id":"-309659827","predicate":"channels.adminLogResults","params":[{"name":"events","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"channels.AdminLogResults"},{"id":"-368018716","predicate":"channelAdminLogEventsFilter","params":[{"name":"flags","type":"#"},{"name":"join","type":"flags.0?true"},{"name":"leave","type":"flags.1?true"},{"name":"invite","type":"flags.2?true"},{"name":"ban","type":"flags.3?true"},{"name":"unban","type":"flags.4?true"},{"name":"kick","type":"flags.5?true"},{"name":"unkick","type":"flags.6?true"},{"name":"promote","type":"flags.7?true"},{"name":"demote","type":"flags.8?true"},{"name":"info","type":"flags.9?true"},{"name":"settings","type":"flags.10?true"},{"name":"pinned","type":"flags.11?true"},{"name":"edit","type":"flags.12?true"},{"name":"delete","type":"flags.13?true"}],"type":"ChannelAdminLogEventsFilter"},{"id":"511092620","predicate":"topPeerCategoryPhoneCalls","params":[],"type":"TopPeerCategory"},{"id":"-2143067670","predicate":"pageBlockAudio","params":[{"name":"audio_id","type":"long"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"1558266229","predicate":"popularContact","params":[{"name":"client_id","type":"long"},{"name":"importers","type":"int"}],"type":"PopularContact"},{"id":"1200788123","predicate":"messageActionScreenshotTaken","params":[],"type":"MessageAction"},{"id":"-1634752813","predicate":"messages.favedStickersNotModified","params":[],"type":"messages.FavedStickers"},{"id":"-209768682","predicate":"messages.favedStickers","params":[{"name":"hash","type":"int"},{"name":"packs","type":"Vector"},{"name":"stickers","type":"Vector"}],"type":"messages.FavedStickers"},{"id":"-451831443","predicate":"updateFavedStickers","params":[],"type":"Update"},{"id":"-1987495099","predicate":"updateChannelReadMessagesContents","params":[{"name":"channel_id","type":"int"},{"name":"messages","type":"Vector"}],"type":"Update"},{"id":"-1040652646","predicate":"inputMessagesFilterMyMentions","params":[],"type":"MessagesFilter"},{"id":"1887741886","predicate":"updateContactsReset","params":[],"type":"Update"},{"id":"-1312568665","predicate":"channelAdminLogEventActionChangeStickerSet","params":[{"name":"prev_stickerset","type":"InputStickerSet"},{"name":"new_stickerset","type":"InputStickerSet"}],"type":"ChannelAdminLogEventAction"},{"id":"-85549226","predicate":"messageActionCustomAction","params":[{"name":"message","type":"string"}],"type":"MessageAction"},{"id":"178373535","predicate":"inputPaymentCredentialsApplePay","params":[{"name":"payment_data","type":"DataJSON"}],"type":"InputPaymentCredentials"},{"id":"-905587442","predicate":"inputPaymentCredentialsAndroidPay","params":[{"name":"payment_token","type":"DataJSON"},{"name":"google_transaction_id","type":"string"}],"type":"InputPaymentCredentials"},{"id":"-419271411","predicate":"inputMessagesFilterGeo","params":[],"type":"MessagesFilter"},{"id":"-530392189","predicate":"inputMessagesFilterContacts","params":[],"type":"MessagesFilter"},{"id":"1893427255","predicate":"updateChannelAvailableMessages","params":[{"name":"channel_id","type":"int"},{"name":"available_min_id","type":"int"}],"type":"Update"},{"id":"1599903217","predicate":"channelAdminLogEventActionTogglePreHistoryHidden","params":[{"name":"new_value","type":"Bool"}],"type":"ChannelAdminLogEventAction"},{"id":"-833715459","predicate":"inputMediaGeoLive","params":[{"name":"flags","type":"#"},{"name":"stopped","type":"flags.0?true"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"period","type":"flags.1?int"}],"type":"InputMedia"},{"id":"2084316681","predicate":"messageMediaGeoLive","params":[{"name":"geo","type":"GeoPoint"},{"name":"period","type":"int"}],"type":"MessageMedia"},{"id":"1189204285","predicate":"recentMeUrlUnknown","params":[{"name":"url","type":"string"}],"type":"RecentMeUrl"},{"id":"-1917045962","predicate":"recentMeUrlUser","params":[{"name":"url","type":"string"},{"name":"user_id","type":"int"}],"type":"RecentMeUrl"},{"id":"-1608834311","predicate":"recentMeUrlChat","params":[{"name":"url","type":"string"},{"name":"chat_id","type":"int"}],"type":"RecentMeUrl"},{"id":"-347535331","predicate":"recentMeUrlChatInvite","params":[{"name":"url","type":"string"},{"name":"chat_invite","type":"ChatInvite"}],"type":"RecentMeUrl"},{"id":"-1140172836","predicate":"recentMeUrlStickerSet","params":[{"name":"url","type":"string"},{"name":"set","type":"StickerSetCovered"}],"type":"RecentMeUrl"},{"id":"235081943","predicate":"help.recentMeUrls","params":[{"name":"urls","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"help.RecentMeUrls"},{"id":"-266911767","predicate":"channels.channelParticipantsNotModified","params":[],"type":"channels.ChannelParticipants"},{"id":"1951620897","predicate":"messages.messagesNotModified","params":[{"name":"count","type":"int"}],"type":"messages.Messages"},{"id":"482797855","predicate":"inputSingleMedia","params":[{"name":"flags","type":"#"},{"name":"media","type":"InputMedia"},{"name":"random_id","type":"long"},{"name":"message","type":"string"},{"name":"entities","type":"flags.0?Vector"}],"type":"InputSingleMedia"},{"id":"-892779534","predicate":"webAuthorization","params":[{"name":"hash","type":"long"},{"name":"bot_id","type":"int"},{"name":"domain","type":"string"},{"name":"browser","type":"string"},{"name":"platform","type":"string"},{"name":"date_created","type":"int"},{"name":"date_active","type":"int"},{"name":"ip","type":"string"},{"name":"region","type":"string"}],"type":"WebAuthorization"},{"id":"-313079300","predicate":"account.webAuthorizations","params":[{"name":"authorizations","type":"Vector"},{"name":"users","type":"Vector"}],"type":"account.WebAuthorizations"},{"id":"-1502174430","predicate":"inputMessageID","params":[{"name":"id","type":"int"}],"type":"InputMessage"},{"id":"-1160215659","predicate":"inputMessageReplyTo","params":[{"name":"id","type":"int"}],"type":"InputMessage"},{"id":"-2037963464","predicate":"inputMessagePinned","params":[],"type":"InputMessage"},{"id":"-1687559349","predicate":"messageEntityPhone","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1280209983","predicate":"messageEntityCashtag","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-1410748418","predicate":"messageActionBotAllowed","params":[{"name":"domain","type":"string"}],"type":"MessageAction"},{"id":"-55902537","predicate":"inputDialogPeer","params":[{"name":"peer","type":"InputPeer"}],"type":"InputDialogPeer"},{"id":"-445792507","predicate":"dialogPeer","params":[{"name":"peer","type":"Peer"}],"type":"DialogPeer"},{"id":"223655517","predicate":"messages.foundStickerSetsNotModified","params":[],"type":"messages.FoundStickerSets"},{"id":"1359533640","predicate":"messages.foundStickerSets","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.FoundStickerSets"},{"id":"1648543603","predicate":"fileHash","params":[{"name":"offset","type":"int"},{"name":"limit","type":"int"},{"name":"hash","type":"bytes"}],"type":"FileHash"},{"id":"-104284986","predicate":"webDocumentNoProxy","params":[{"name":"url","type":"string"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"}],"type":"WebDocument"},{"id":"1968737087","predicate":"inputClientProxy","params":[{"name":"address","type":"string"},{"name":"port","type":"int"}],"type":"InputClientProxy"},{"id":"-526508104","predicate":"help.proxyDataEmpty","params":[{"name":"expires","type":"int"}],"type":"help.ProxyData"},{"id":"737668643","predicate":"help.proxyDataPromo","params":[{"name":"expires","type":"int"},{"name":"peer","type":"Peer"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"help.ProxyData"},{"id":"-483352705","predicate":"help.termsOfServiceUpdateEmpty","params":[{"name":"expires","type":"int"}],"type":"help.TermsOfServiceUpdate"},{"id":"686618977","predicate":"help.termsOfServiceUpdate","params":[{"name":"expires","type":"int"},{"name":"terms_of_service","type":"help.TermsOfService"}],"type":"help.TermsOfServiceUpdate"},{"id":"859091184","predicate":"inputSecureFileUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"md5_checksum","type":"string"},{"name":"file_hash","type":"bytes"},{"name":"secret","type":"bytes"}],"type":"InputSecureFile"},{"id":"1399317950","predicate":"inputSecureFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputSecureFile"},{"id":"-876089816","predicate":"inputSecureFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputFileLocation"},{"id":"1679398724","predicate":"secureFileEmpty","params":[],"type":"SecureFile"},{"id":"-534283678","predicate":"secureFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"size","type":"int"},{"name":"dc_id","type":"int"},{"name":"date","type":"int"},{"name":"file_hash","type":"bytes"},{"name":"secret","type":"bytes"}],"type":"SecureFile"},{"id":"-1964327229","predicate":"secureData","params":[{"name":"data","type":"bytes"},{"name":"data_hash","type":"bytes"},{"name":"secret","type":"bytes"}],"type":"SecureData"},{"id":"2103482845","predicate":"securePlainPhone","params":[{"name":"phone","type":"string"}],"type":"SecurePlainData"},{"id":"569137759","predicate":"securePlainEmail","params":[{"name":"email","type":"string"}],"type":"SecurePlainData"},{"id":"-1658158621","predicate":"secureValueTypePersonalDetails","params":[],"type":"SecureValueType"},{"id":"1034709504","predicate":"secureValueTypePassport","params":[],"type":"SecureValueType"},{"id":"115615172","predicate":"secureValueTypeDriverLicense","params":[],"type":"SecureValueType"},{"id":"-1596951477","predicate":"secureValueTypeIdentityCard","params":[],"type":"SecureValueType"},{"id":"-1717268701","predicate":"secureValueTypeInternalPassport","params":[],"type":"SecureValueType"},{"id":"-874308058","predicate":"secureValueTypeAddress","params":[],"type":"SecureValueType"},{"id":"-63531698","predicate":"secureValueTypeUtilityBill","params":[],"type":"SecureValueType"},{"id":"-1995211763","predicate":"secureValueTypeBankStatement","params":[],"type":"SecureValueType"},{"id":"-1954007928","predicate":"secureValueTypeRentalAgreement","params":[],"type":"SecureValueType"},{"id":"-1713143702","predicate":"secureValueTypePassportRegistration","params":[],"type":"SecureValueType"},{"id":"-368907213","predicate":"secureValueTypeTemporaryRegistration","params":[],"type":"SecureValueType"},{"id":"-1289704741","predicate":"secureValueTypePhone","params":[],"type":"SecureValueType"},{"id":"-1908627474","predicate":"secureValueTypeEmail","params":[],"type":"SecureValueType"},{"id":"411017418","predicate":"secureValue","params":[{"name":"flags","type":"#"},{"name":"type","type":"SecureValueType"},{"name":"data","type":"flags.0?SecureData"},{"name":"front_side","type":"flags.1?SecureFile"},{"name":"reverse_side","type":"flags.2?SecureFile"},{"name":"selfie","type":"flags.3?SecureFile"},{"name":"translation","type":"flags.6?Vector"},{"name":"files","type":"flags.4?Vector"},{"name":"plain_data","type":"flags.5?SecurePlainData"},{"name":"hash","type":"bytes"}],"type":"SecureValue"},{"id":"-618540889","predicate":"inputSecureValue","params":[{"name":"flags","type":"#"},{"name":"type","type":"SecureValueType"},{"name":"data","type":"flags.0?SecureData"},{"name":"front_side","type":"flags.1?InputSecureFile"},{"name":"reverse_side","type":"flags.2?InputSecureFile"},{"name":"selfie","type":"flags.3?InputSecureFile"},{"name":"translation","type":"flags.6?Vector"},{"name":"files","type":"flags.4?Vector"},{"name":"plain_data","type":"flags.5?SecurePlainData"}],"type":"InputSecureValue"},{"id":"-316748368","predicate":"secureValueHash","params":[{"name":"type","type":"SecureValueType"},{"name":"hash","type":"bytes"}],"type":"SecureValueHash"},{"id":"-391902247","predicate":"secureValueErrorData","params":[{"name":"type","type":"SecureValueType"},{"name":"data_hash","type":"bytes"},{"name":"field","type":"string"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"12467706","predicate":"secureValueErrorFrontSide","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"-2037765467","predicate":"secureValueErrorReverseSide","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"-449327402","predicate":"secureValueErrorSelfie","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"2054162547","predicate":"secureValueErrorFile","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"1717706985","predicate":"secureValueErrorFiles","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"Vector"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"871426631","predicate":"secureCredentialsEncrypted","params":[{"name":"data","type":"bytes"},{"name":"hash","type":"bytes"},{"name":"secret","type":"bytes"}],"type":"SecureCredentialsEncrypted"},{"id":"-1389486888","predicate":"account.authorizationForm","params":[{"name":"flags","type":"#"},{"name":"required_types","type":"Vector"},{"name":"values","type":"Vector"},{"name":"errors","type":"Vector"},{"name":"users","type":"Vector"},{"name":"privacy_policy_url","type":"flags.0?string"}],"type":"account.AuthorizationForm"},{"id":"-2128640689","predicate":"account.sentEmailCode","params":[{"name":"email_pattern","type":"string"},{"name":"length","type":"int"}],"type":"account.SentEmailCode"},{"id":"455635795","predicate":"messageActionSecureValuesSentMe","params":[{"name":"values","type":"Vector"},{"name":"credentials","type":"SecureCredentialsEncrypted"}],"type":"MessageAction"},{"id":"-648257196","predicate":"messageActionSecureValuesSent","params":[{"name":"types","type":"Vector"}],"type":"MessageAction"},{"id":"1722786150","predicate":"help.deepLinkInfoEmpty","params":[],"type":"help.DeepLinkInfo"},{"id":"1783556146","predicate":"help.deepLinkInfo","params":[{"name":"flags","type":"#"},{"name":"update_app","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"}],"type":"help.DeepLinkInfo"},{"id":"289586518","predicate":"savedPhoneContact","params":[{"name":"phone","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"date","type":"int"}],"type":"SavedContact"},{"id":"1304052993","predicate":"account.takeout","params":[{"name":"id","type":"long"}],"type":"account.Takeout"},{"id":"700340377","predicate":"inputTakeoutFileLocation","params":[],"type":"InputFileLocation"},{"id":"-513517117","predicate":"updateDialogUnreadMark","params":[{"name":"flags","type":"#"},{"name":"unread","type":"flags.0?true"},{"name":"peer","type":"DialogPeer"}],"type":"Update"},{"id":"-253500010","predicate":"messages.dialogsNotModified","params":[{"name":"count","type":"int"}],"type":"messages.Dialogs"},{"id":"-1625153079","predicate":"inputWebFileGeoPointLocation","params":[{"name":"geo_point","type":"InputGeoPoint"},{"name":"access_hash","type":"long"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"zoom","type":"int"},{"name":"scale","type":"int"}],"type":"InputWebFileLocation"},{"id":"-1255369827","predicate":"contacts.topPeersDisabled","params":[],"type":"contacts.TopPeers"},{"id":"-1685456582","predicate":"inputReportReasonCopyright","params":[],"type":"ReportReason"},{"id":"-732254058","predicate":"passwordKdfAlgoUnknown","params":[],"type":"PasswordKdfAlgo"},{"id":"4883767","predicate":"securePasswordKdfAlgoUnknown","params":[],"type":"SecurePasswordKdfAlgo"},{"id":"-1141711456","predicate":"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000","params":[{"name":"salt","type":"bytes"}],"type":"SecurePasswordKdfAlgo"},{"id":"-2042159726","predicate":"securePasswordKdfAlgoSHA512","params":[{"name":"salt","type":"bytes"}],"type":"SecurePasswordKdfAlgo"},{"id":"354925740","predicate":"secureSecretSettings","params":[{"name":"secure_algo","type":"SecurePasswordKdfAlgo"},{"name":"secure_secret","type":"bytes"},{"name":"secure_secret_id","type":"long"}],"type":"SecureSecretSettings"},{"id":"982592842","predicate":"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow","params":[{"name":"salt1","type":"bytes"},{"name":"salt2","type":"bytes"},{"name":"g","type":"int"},{"name":"p","type":"bytes"}],"type":"PasswordKdfAlgo"},{"id":"-1736378792","predicate":"inputCheckPasswordEmpty","params":[],"type":"InputCheckPasswordSRP"},{"id":"-763367294","predicate":"inputCheckPasswordSRP","params":[{"name":"srp_id","type":"long"},{"name":"A","type":"bytes"},{"name":"M1","type":"bytes"}],"type":"InputCheckPasswordSRP"},{"id":"-2036501105","predicate":"secureValueError","params":[{"name":"type","type":"SecureValueType"},{"name":"hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"-1592506512","predicate":"secureValueErrorTranslationFile","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"bytes"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"878931416","predicate":"secureValueErrorTranslationFiles","params":[{"name":"type","type":"SecureValueType"},{"name":"file_hash","type":"Vector"},{"name":"text","type":"string"}],"type":"SecureValueError"},{"id":"-2103600678","predicate":"secureRequiredType","params":[{"name":"flags","type":"#"},{"name":"native_names","type":"flags.0?true"},{"name":"selfie_required","type":"flags.1?true"},{"name":"translation_required","type":"flags.2?true"},{"name":"type","type":"SecureValueType"}],"type":"SecureRequiredType"},{"id":"41187252","predicate":"secureRequiredTypeOneOf","params":[{"name":"types","type":"Vector"}],"type":"SecureRequiredType"},{"id":"-1078332329","predicate":"help.passportConfigNotModified","params":[],"type":"help.PassportConfig"},{"id":"-1600596305","predicate":"help.passportConfig","params":[{"name":"hash","type":"int"},{"name":"countries_langs","type":"DataJSON"}],"type":"help.PassportConfig"},{"id":"488313413","predicate":"inputAppEvent","params":[{"name":"time","type":"double"},{"name":"type","type":"string"},{"name":"peer","type":"long"},{"name":"data","type":"JSONValue"}],"type":"InputAppEvent"},{"id":"-1059185703","predicate":"jsonObjectValue","params":[{"name":"key","type":"string"},{"name":"value","type":"JSONValue"}],"type":"JSONObjectValue"},{"id":"1064139624","predicate":"jsonNull","params":[],"type":"JSONValue"},{"id":"-952869270","predicate":"jsonBool","params":[{"name":"value","type":"Bool"}],"type":"JSONValue"},{"id":"736157604","predicate":"jsonNumber","params":[{"name":"value","type":"double"}],"type":"JSONValue"},{"id":"-1222740358","predicate":"jsonString","params":[{"name":"value","type":"string"}],"type":"JSONValue"},{"id":"-146520221","predicate":"jsonArray","params":[{"name":"value","type":"Vector"}],"type":"JSONValue"},{"id":"-1715350371","predicate":"jsonObject","params":[{"name":"value","type":"Vector"}],"type":"JSONValue"},{"id":"1279515160","predicate":"updateUserPinnedMessage","params":[{"name":"user_id","type":"int"},{"name":"id","type":"int"}],"type":"Update"},{"id":"-519195831","predicate":"updateChatPinnedMessage","params":[{"name":"chat_id","type":"int"},{"name":"id","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-1311015810","predicate":"inputNotifyBroadcasts","params":[],"type":"InputNotifyPeer"},{"id":"-703403793","predicate":"notifyBroadcasts","params":[],"type":"NotifyPeer"},{"id":"-311786236","predicate":"textSubscript","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-939827711","predicate":"textSuperscript","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"55281185","predicate":"textMarked","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"483104362","predicate":"textPhone","params":[{"name":"text","type":"RichText"},{"name":"phone","type":"string"}],"type":"RichText"},{"id":"136105807","predicate":"textImage","params":[{"name":"document_id","type":"long"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"RichText"},{"id":"504660880","predicate":"pageBlockKicker","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"878078826","predicate":"pageTableCell","params":[{"name":"flags","type":"#"},{"name":"header","type":"flags.0?true"},{"name":"align_center","type":"flags.3?true"},{"name":"align_right","type":"flags.4?true"},{"name":"valign_middle","type":"flags.5?true"},{"name":"valign_bottom","type":"flags.6?true"},{"name":"text","type":"flags.7?RichText"},{"name":"colspan","type":"flags.1?int"},{"name":"rowspan","type":"flags.2?int"}],"type":"PageTableCell"},{"id":"-524237339","predicate":"pageTableRow","params":[{"name":"cells","type":"Vector"}],"type":"PageTableRow"},{"id":"-1085412734","predicate":"pageBlockTable","params":[{"name":"flags","type":"#"},{"name":"bordered","type":"flags.0?true"},{"name":"striped","type":"flags.1?true"},{"name":"title","type":"RichText"},{"name":"rows","type":"Vector"}],"type":"PageBlock"},{"id":"1869903447","predicate":"pageCaption","params":[{"name":"text","type":"RichText"},{"name":"credit","type":"RichText"}],"type":"PageCaption"},{"id":"-1188055347","predicate":"pageListItemText","params":[{"name":"text","type":"RichText"}],"type":"PageListItem"},{"id":"635466748","predicate":"pageListItemBlocks","params":[{"name":"blocks","type":"Vector"}],"type":"PageListItem"},{"id":"1577484359","predicate":"pageListOrderedItemText","params":[{"name":"num","type":"string"},{"name":"text","type":"RichText"}],"type":"PageListOrderedItem"},{"id":"-1730311882","predicate":"pageListOrderedItemBlocks","params":[{"name":"num","type":"string"},{"name":"blocks","type":"Vector"}],"type":"PageListOrderedItem"},{"id":"-1702174239","predicate":"pageBlockOrderedList","params":[{"name":"items","type":"Vector"}],"type":"PageBlock"},{"id":"1987480557","predicate":"pageBlockDetails","params":[{"name":"flags","type":"#"},{"name":"open","type":"flags.0?true"},{"name":"blocks","type":"Vector"},{"name":"title","type":"RichText"}],"type":"PageBlock"},{"id":"-1282352120","predicate":"pageRelatedArticle","params":[{"name":"flags","type":"#"},{"name":"url","type":"string"},{"name":"webpage_id","type":"long"},{"name":"title","type":"flags.0?string"},{"name":"description","type":"flags.1?string"},{"name":"photo_id","type":"flags.2?long"},{"name":"author","type":"flags.3?string"},{"name":"published_date","type":"flags.4?int"}],"type":"PageRelatedArticle"},{"id":"370236054","predicate":"pageBlockRelatedArticles","params":[{"name":"title","type":"RichText"},{"name":"articles","type":"Vector"}],"type":"PageBlock"},{"id":"-1538310410","predicate":"pageBlockMap","params":[{"name":"geo","type":"GeoPoint"},{"name":"zoom","type":"int"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"caption","type":"PageCaption"}],"type":"PageBlock"},{"id":"-1366746132","predicate":"page","params":[{"name":"flags","type":"#"},{"name":"part","type":"flags.0?true"},{"name":"rtl","type":"flags.1?true"},{"name":"v2","type":"flags.2?true"},{"name":"url","type":"string"},{"name":"blocks","type":"Vector"},{"name":"photos","type":"Vector"},{"name":"documents","type":"Vector"}],"type":"Page"},{"id":"-610373422","predicate":"inputPrivacyKeyPhoneP2P","params":[],"type":"InputPrivacyKey"},{"id":"961092808","predicate":"privacyKeyPhoneP2P","params":[],"type":"PrivacyKey"},{"id":"894777186","predicate":"textAnchor","params":[{"name":"text","type":"RichText"},{"name":"name","type":"string"}],"type":"RichText"},{"id":"-1945767479","predicate":"help.supportName","params":[{"name":"name","type":"string"}],"type":"help.SupportName"},{"id":"-206688531","predicate":"help.userInfoEmpty","params":[],"type":"help.UserInfo"},{"id":"32192344","predicate":"help.userInfo","params":[{"name":"message","type":"string"},{"name":"entities","type":"Vector"},{"name":"author","type":"string"},{"name":"date","type":"int"}],"type":"help.UserInfo"},{"id":"-202219658","predicate":"messageActionContactSignUp","params":[],"type":"MessageAction"},{"id":"-1398708869","predicate":"updateMessagePoll","params":[{"name":"flags","type":"#"},{"name":"poll_id","type":"long"},{"name":"poll","type":"flags.0?Poll"},{"name":"results","type":"PollResults"}],"type":"Update"},{"id":"1823064809","predicate":"pollAnswer","params":[{"name":"text","type":"string"},{"name":"option","type":"bytes"}],"type":"PollAnswer"},{"id":"-716006138","predicate":"poll","params":[{"name":"id","type":"long"},{"name":"flags","type":"#"},{"name":"closed","type":"flags.0?true"},{"name":"question","type":"string"},{"name":"answers","type":"Vector"}],"type":"Poll"},{"id":"997055186","predicate":"pollAnswerVoters","params":[{"name":"flags","type":"#"},{"name":"chosen","type":"flags.0?true"},{"name":"option","type":"bytes"},{"name":"voters","type":"int"}],"type":"PollAnswerVoters"},{"id":"1465219162","predicate":"pollResults","params":[{"name":"flags","type":"#"},{"name":"min","type":"flags.0?true"},{"name":"results","type":"flags.1?Vector"},{"name":"total_voters","type":"flags.2?int"}],"type":"PollResults"},{"id":"112424539","predicate":"inputMediaPoll","params":[{"name":"poll","type":"Poll"}],"type":"InputMedia"},{"id":"1272375192","predicate":"messageMediaPoll","params":[{"name":"poll","type":"Poll"},{"name":"results","type":"PollResults"}],"type":"MessageMedia"},{"id":"-264117680","predicate":"chatOnlines","params":[{"name":"onlines","type":"int"}],"type":"ChatOnlines"},{"id":"1202287072","predicate":"statsURL","params":[{"name":"url","type":"string"}],"type":"StatsURL"},{"id":"-525288402","predicate":"photoStrippedSize","params":[{"name":"type","type":"string"},{"name":"bytes","type":"bytes"}],"type":"PhotoSize"},{"id":"1605510357","predicate":"chatAdminRights","params":[{"name":"flags","type":"#"},{"name":"change_info","type":"flags.0?true"},{"name":"post_messages","type":"flags.1?true"},{"name":"edit_messages","type":"flags.2?true"},{"name":"delete_messages","type":"flags.3?true"},{"name":"ban_users","type":"flags.4?true"},{"name":"invite_users","type":"flags.5?true"},{"name":"pin_messages","type":"flags.7?true"},{"name":"add_admins","type":"flags.9?true"}],"type":"ChatAdminRights"},{"id":"-1626209256","predicate":"chatBannedRights","params":[{"name":"flags","type":"#"},{"name":"view_messages","type":"flags.0?true"},{"name":"send_messages","type":"flags.1?true"},{"name":"send_media","type":"flags.2?true"},{"name":"send_stickers","type":"flags.3?true"},{"name":"send_gifs","type":"flags.4?true"},{"name":"send_games","type":"flags.5?true"},{"name":"send_inline","type":"flags.6?true"},{"name":"embed_links","type":"flags.7?true"},{"name":"send_polls","type":"flags.8?true"},{"name":"change_info","type":"flags.10?true"},{"name":"invite_users","type":"flags.15?true"},{"name":"pin_messages","type":"flags.17?true"},{"name":"until_date","type":"int"}],"type":"ChatBannedRights"},{"id":"1421875280","predicate":"updateChatDefaultBannedRights","params":[{"name":"peer","type":"Peer"},{"name":"default_banned_rights","type":"ChatBannedRights"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-433014407","predicate":"inputWallPaper","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputWallPaper"},{"id":"1913199744","predicate":"inputWallPaperSlug","params":[{"name":"slug","type":"string"}],"type":"InputWallPaper"},{"id":"-1150621555","predicate":"channelParticipantsContacts","params":[{"name":"q","type":"string"}],"type":"ChannelParticipantsFilter"},{"id":"771095562","predicate":"channelAdminLogEventActionDefaultBannedRights","params":[{"name":"prev_banned_rights","type":"ChatBannedRights"},{"name":"new_banned_rights","type":"ChatBannedRights"}],"type":"ChannelAdminLogEventAction"},{"id":"-1895328189","predicate":"channelAdminLogEventActionStopPoll","params":[{"name":"message","type":"Message"}],"type":"ChannelAdminLogEventAction"},{"id":"471437699","predicate":"account.wallPapersNotModified","params":[],"type":"account.WallPapers"},{"id":"1881892265","predicate":"account.wallPapers","params":[{"name":"hash","type":"int"},{"name":"wallpapers","type":"Vector"}],"type":"account.WallPapers"},{"id":"-557924733","predicate":"codeSettings","params":[{"name":"flags","type":"#"},{"name":"allow_flashcall","type":"flags.0?true"},{"name":"current_number","type":"flags.1?true"},{"name":"allow_app_hash","type":"flags.4?true"}],"type":"CodeSettings"},{"id":"-1590738760","predicate":"wallPaperSettings","params":[{"name":"flags","type":"#"},{"name":"blur","type":"flags.1?true"},{"name":"motion","type":"flags.2?true"},{"name":"background_color","type":"flags.0?int"},{"name":"intensity","type":"flags.3?int"}],"type":"WallPaperSettings"},{"id":"-767099577","predicate":"autoDownloadSettings","params":[{"name":"flags","type":"#"},{"name":"disabled","type":"flags.0?true"},{"name":"video_preload_large","type":"flags.1?true"},{"name":"audio_preload_next","type":"flags.2?true"},{"name":"phonecalls_less_data","type":"flags.3?true"},{"name":"photo_size_max","type":"int"},{"name":"video_size_max","type":"int"},{"name":"file_size_max","type":"int"}],"type":"AutoDownloadSettings"},{"id":"1674235686","predicate":"account.autoDownloadSettings","params":[{"name":"low","type":"AutoDownloadSettings"},{"name":"medium","type":"AutoDownloadSettings"},{"name":"high","type":"AutoDownloadSettings"}],"type":"account.AutoDownloadSettings"},{"id":"-709641735","predicate":"emojiKeyword","params":[{"name":"keyword","type":"string"},{"name":"emoticons","type":"Vector"}],"type":"EmojiKeyword"},{"id":"594408994","predicate":"emojiKeywordDeleted","params":[{"name":"keyword","type":"string"},{"name":"emoticons","type":"Vector"}],"type":"EmojiKeyword"},{"id":"1556570557","predicate":"emojiKeywordsDifference","params":[{"name":"lang_code","type":"string"},{"name":"from_version","type":"int"},{"name":"version","type":"int"},{"name":"keywords","type":"Vector"}],"type":"EmojiKeywordsDifference"},{"id":"-1519029347","predicate":"emojiURL","params":[{"name":"url","type":"string"}],"type":"EmojiURL"},{"id":"-1275374751","predicate":"emojiLanguage","params":[{"name":"lang_code","type":"string"}],"type":"EmojiLanguage"},{"id":"-1529000952","predicate":"inputPrivacyKeyForwards","params":[],"type":"InputPrivacyKey"},{"id":"1777096355","predicate":"privacyKeyForwards","params":[],"type":"PrivacyKey"},{"id":"1461304012","predicate":"inputPrivacyKeyProfilePhoto","params":[],"type":"InputPrivacyKey"},{"id":"-1777000467","predicate":"privacyKeyProfilePhoto","params":[],"type":"PrivacyKey"},{"id":"-1132476723","predicate":"fileLocationToBeDeprecated","params":[{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"}],"type":"FileLocation"},{"id":"1075322878","predicate":"inputPhotoFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"thumb_size","type":"string"}],"type":"InputFileLocation"},{"id":"-667654413","predicate":"inputPhotoLegacyFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"}],"type":"InputFileLocation"},{"id":"668375447","predicate":"inputPeerPhotoFileLocation","params":[{"name":"flags","type":"#"},{"name":"big","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"}],"type":"InputFileLocation"},{"id":"230353641","predicate":"inputStickerSetThumb","params":[{"name":"stickerset","type":"InputStickerSet"},{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"}],"type":"InputFileLocation"},{"id":"-11252123","predicate":"folder","params":[{"name":"flags","type":"#"},{"name":"autofill_new_broadcasts","type":"flags.0?true"},{"name":"autofill_public_groups","type":"flags.1?true"},{"name":"autofill_new_correspondents","type":"flags.2?true"},{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"photo","type":"flags.3?ChatPhoto"}],"type":"Folder"},{"id":"1908216652","predicate":"dialogFolder","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.2?true"},{"name":"folder","type":"Folder"},{"name":"peer","type":"Peer"},{"name":"top_message","type":"int"},{"name":"unread_muted_peers_count","type":"int"},{"name":"unread_unmuted_peers_count","type":"int"},{"name":"unread_muted_messages_count","type":"int"},{"name":"unread_unmuted_messages_count","type":"int"}],"type":"Dialog"},{"id":"1684014375","predicate":"inputDialogPeerFolder","params":[{"name":"folder_id","type":"int"}],"type":"InputDialogPeer"},{"id":"1363483106","predicate":"dialogPeerFolder","params":[{"name":"folder_id","type":"int"}],"type":"DialogPeer"},{"id":"-70073706","predicate":"inputFolderPeer","params":[{"name":"peer","type":"InputPeer"},{"name":"folder_id","type":"int"}],"type":"InputFolderPeer"},{"id":"-373643672","predicate":"folderPeer","params":[{"name":"peer","type":"Peer"},{"name":"folder_id","type":"int"}],"type":"FolderPeer"},{"id":"422972864","predicate":"updateFolderPeers","params":[{"name":"folder_peers","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"756118935","predicate":"inputUserFromMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"user_id","type":"int"}],"type":"InputUser"},{"id":"707290417","predicate":"inputChannelFromMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"channel_id","type":"int"}],"type":"InputChannel"},{"id":"398123750","predicate":"inputPeerUserFromMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"user_id","type":"int"}],"type":"InputPeer"},{"id":"-1667893317","predicate":"inputPeerChannelFromMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"channel_id","type":"int"}],"type":"InputPeer"},{"id":"55761658","predicate":"inputPrivacyKeyPhoneNumber","params":[],"type":"InputPrivacyKey"},{"id":"-778378131","predicate":"privacyKeyPhoneNumber","params":[],"type":"PrivacyKey"},{"id":"-1472172887","predicate":"topPeerCategoryForwardUsers","params":[],"type":"TopPeerCategory"},{"id":"-68239120","predicate":"topPeerCategoryForwardChats","params":[],"type":"TopPeerCategory"},{"id":"-1569748965","predicate":"channelAdminLogEventActionChangeLinkedChat","params":[{"name":"prev_value","type":"int"},{"name":"new_value","type":"int"}],"type":"ChannelAdminLogEventAction"},{"id":"-398136321","predicate":"messages.searchCounter","params":[{"name":"flags","type":"#"},{"name":"inexact","type":"flags.1?true"},{"name":"filter","type":"MessagesFilter"},{"name":"count","type":"int"}],"type":"messages.SearchCounter"},{"id":"280464681","predicate":"keyboardButtonUrlAuth","params":[{"name":"flags","type":"#"},{"name":"text","type":"string"},{"name":"fwd_text","type":"flags.0?string"},{"name":"url","type":"string"},{"name":"button_id","type":"int"}],"type":"KeyboardButton"},{"id":"-802258988","predicate":"inputKeyboardButtonUrlAuth","params":[{"name":"flags","type":"#"},{"name":"request_write_access","type":"flags.0?true"},{"name":"text","type":"string"},{"name":"fwd_text","type":"flags.1?string"},{"name":"url","type":"string"},{"name":"bot","type":"InputUser"}],"type":"KeyboardButton"},{"id":"-1831650802","predicate":"urlAuthResultRequest","params":[{"name":"flags","type":"#"},{"name":"request_write_access","type":"flags.0?true"},{"name":"bot","type":"User"},{"name":"domain","type":"string"}],"type":"UrlAuthResult"},{"id":"-1886646706","predicate":"urlAuthResultAccepted","params":[{"name":"url","type":"string"}],"type":"UrlAuthResult"},{"id":"-1445536993","predicate":"urlAuthResultDefault","params":[],"type":"UrlAuthResult"},{"id":"1283572154","predicate":"inputPrivacyValueAllowChatParticipants","params":[{"name":"chats","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"-668769361","predicate":"inputPrivacyValueDisallowChatParticipants","params":[{"name":"chats","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"415136107","predicate":"privacyValueAllowChatParticipants","params":[{"name":"chats","type":"Vector"}],"type":"PrivacyRule"},{"id":"-1397881200","predicate":"privacyValueDisallowChatParticipants","params":[{"name":"chats","type":"Vector"}],"type":"PrivacyRule"},{"id":"-1672577397","predicate":"messageEntityUnderline","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-1090087980","predicate":"messageEntityStrike","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"34469328","predicate":"messageEntityBlockquote","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1786671974","predicate":"updatePeerSettings","params":[{"name":"peer","type":"Peer"},{"name":"settings","type":"PeerSettings"}],"type":"Update"},{"id":"-1078612597","predicate":"channelLocationEmpty","params":[],"type":"ChannelLocation"},{"id":"547062491","predicate":"channelLocation","params":[{"name":"geo_point","type":"GeoPoint"},{"name":"address","type":"string"}],"type":"ChannelLocation"},{"id":"-901375139","predicate":"peerLocated","params":[{"name":"peer","type":"Peer"},{"name":"expires","type":"int"},{"name":"distance","type":"int"}],"type":"PeerLocated"},{"id":"-1263546448","predicate":"updatePeerLocated","params":[{"name":"peers","type":"Vector"}],"type":"Update"},{"id":"241923758","predicate":"channelAdminLogEventActionChangeLocation","params":[{"name":"prev_value","type":"ChannelLocation"},{"name":"new_value","type":"ChannelLocation"}],"type":"ChannelAdminLogEventAction"},{"id":"-606798099","predicate":"inputReportReasonGeoIrrelevant","params":[],"type":"ReportReason"},{"id":"1401984889","predicate":"channelAdminLogEventActionToggleSlowMode","params":[{"name":"prev_value","type":"int"},{"name":"new_value","type":"int"}],"type":"ChannelAdminLogEventAction"},{"id":"1148485274","predicate":"auth.authorizationSignUpRequired","params":[{"name":"flags","type":"#"},{"name":"terms_of_service","type":"flags.0?help.TermsOfService"}],"type":"auth.Authorization"},{"id":"-666824391","predicate":"payments.paymentVerificationNeeded","params":[{"name":"url","type":"string"}],"type":"payments.PaymentResult"},{"id":"42402760","predicate":"inputStickerSetAnimatedEmoji","params":[],"type":"InputStickerSet"},{"id":"967122427","predicate":"updateNewScheduledMessage","params":[{"name":"message","type":"Message"}],"type":"Update"},{"id":"-1870238482","predicate":"updateDeleteScheduledMessages","params":[{"name":"peer","type":"Peer"},{"name":"messages","type":"Vector"}],"type":"Update"},{"id":"-797791052","predicate":"restrictionReason","params":[{"name":"platform","type":"string"},{"name":"reason","type":"string"},{"name":"text","type":"string"}],"type":"RestrictionReason"},{"id":"1012306921","predicate":"inputTheme","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputTheme"},{"id":"-175567375","predicate":"inputThemeSlug","params":[{"name":"slug","type":"string"}],"type":"InputTheme"},{"id":"1211967244","predicate":"themeDocumentNotModified","params":[],"type":"Theme"},{"id":"-136770336","predicate":"theme","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"default","type":"flags.1?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"slug","type":"string"},{"name":"title","type":"string"},{"name":"document","type":"flags.2?Document"},{"name":"installs_count","type":"int"}],"type":"Theme"},{"id":"-199313886","predicate":"account.themesNotModified","params":[],"type":"account.Themes"},{"id":"2137482273","predicate":"account.themes","params":[{"name":"hash","type":"int"},{"name":"themes","type":"Vector"}],"type":"account.Themes"},{"id":"-2112423005","predicate":"updateTheme","params":[{"name":"theme","type":"Theme"}],"type":"Update"},{"id":"-786326563","predicate":"inputPrivacyKeyAddedByPhone","params":[],"type":"InputPrivacyKey"},{"id":"1124062251","predicate":"privacyKeyAddedByPhone","params":[],"type":"PrivacyKey"}],"methods":[{"id":"-878758099","method":"invokeAfterMsg","params":[{"name":"msg_id","type":"long"},{"name":"query","type":"!X"}],"type":"X"},{"id":"1036301552","method":"invokeAfterMsgs","params":[{"name":"msg_ids","type":"Vector"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1502141361","method":"auth.sendCode","params":[{"name":"phone_number","type":"string"},{"name":"api_id","type":"int"},{"name":"api_hash","type":"string"},{"name":"settings","type":"CodeSettings"}],"type":"auth.SentCode"},{"id":"-2131827673","method":"auth.signUp","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"auth.Authorization"},{"id":"-1126886015","method":"auth.signIn","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"auth.Authorization"},{"id":"1461180992","method":"auth.logOut","params":[],"type":"Bool"},{"id":"-1616179942","method":"auth.resetAuthorizations","params":[],"type":"Bool"},{"id":"-440401971","method":"auth.exportAuthorization","params":[{"name":"dc_id","type":"int"}],"type":"auth.ExportedAuthorization"},{"id":"-470837741","method":"auth.importAuthorization","params":[{"name":"id","type":"int"},{"name":"bytes","type":"bytes"}],"type":"auth.Authorization"},{"id":"-841733627","method":"auth.bindTempAuthKey","params":[{"name":"perm_auth_key_id","type":"long"},{"name":"nonce","type":"long"},{"name":"expires_at","type":"int"},{"name":"encrypted_message","type":"bytes"}],"type":"Bool"},{"id":"1754754159","method":"account.registerDevice","params":[{"name":"flags","type":"#"},{"name":"no_muted","type":"flags.0?true"},{"name":"token_type","type":"int"},{"name":"token","type":"string"},{"name":"app_sandbox","type":"Bool"},{"name":"secret","type":"bytes"},{"name":"other_uids","type":"Vector"}],"type":"Bool"},{"id":"813089983","method":"account.unregisterDevice","params":[{"name":"token_type","type":"int"},{"name":"token","type":"string"},{"name":"other_uids","type":"Vector"}],"type":"Bool"},{"id":"-2067899501","method":"account.updateNotifySettings","params":[{"name":"peer","type":"InputNotifyPeer"},{"name":"settings","type":"InputPeerNotifySettings"}],"type":"Bool"},{"id":"313765169","method":"account.getNotifySettings","params":[{"name":"peer","type":"InputNotifyPeer"}],"type":"PeerNotifySettings"},{"id":"-612493497","method":"account.resetNotifySettings","params":[],"type":"Bool"},{"id":"2018596725","method":"account.updateProfile","params":[{"name":"flags","type":"#"},{"name":"first_name","type":"flags.0?string"},{"name":"last_name","type":"flags.1?string"},{"name":"about","type":"flags.2?string"}],"type":"User"},{"id":"1713919532","method":"account.updateStatus","params":[{"name":"offline","type":"Bool"}],"type":"Bool"},{"id":"-1430579357","method":"account.getWallPapers","params":[{"name":"hash","type":"int"}],"type":"account.WallPapers"},{"id":"-1374118561","method":"account.reportPeer","params":[{"name":"peer","type":"InputPeer"},{"name":"reason","type":"ReportReason"}],"type":"Bool"},{"id":"227648840","method":"users.getUsers","params":[{"name":"id","type":"Vector"}],"type":"Vector"},{"id":"-902781519","method":"users.getFullUser","params":[{"name":"id","type":"InputUser"}],"type":"UserFull"},{"id":"749357634","method":"contacts.getContactIDs","params":[{"name":"hash","type":"int"}],"type":"Vector"},{"id":"-995929106","method":"contacts.getStatuses","params":[],"type":"Vector"},{"id":"-1071414113","method":"contacts.getContacts","params":[{"name":"hash","type":"int"}],"type":"contacts.Contacts"},{"id":"746589157","method":"contacts.importContacts","params":[{"name":"contacts","type":"Vector"}],"type":"contacts.ImportedContacts"},{"id":"157945344","method":"contacts.deleteContacts","params":[{"name":"id","type":"Vector"}],"type":"Updates"},{"id":"269745566","method":"contacts.deleteByPhones","params":[{"name":"phones","type":"Vector"}],"type":"Bool"},{"id":"858475004","method":"contacts.block","params":[{"name":"id","type":"InputUser"}],"type":"Bool"},{"id":"-448724803","method":"contacts.unblock","params":[{"name":"id","type":"InputUser"}],"type":"Bool"},{"id":"-176409329","method":"contacts.getBlocked","params":[{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"contacts.Blocked"},{"id":"1673946374","method":"messages.getMessages","params":[{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"-1594999949","method":"messages.getDialogs","params":[{"name":"flags","type":"#"},{"name":"exclude_pinned","type":"flags.0?true"},{"name":"folder_id","type":"flags.1?int"},{"name":"offset_date","type":"int"},{"name":"offset_id","type":"int"},{"name":"offset_peer","type":"InputPeer"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"messages.Dialogs"},{"id":"-591691168","method":"messages.getHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"offset_date","type":"int"},{"name":"add_offset","type":"int"},{"name":"limit","type":"int"},{"name":"max_id","type":"int"},{"name":"min_id","type":"int"},{"name":"hash","type":"int"}],"type":"messages.Messages"},{"id":"-2045448344","method":"messages.search","params":[{"name":"flags","type":"#"},{"name":"peer","type":"InputPeer"},{"name":"q","type":"string"},{"name":"from_id","type":"flags.0?InputUser"},{"name":"filter","type":"MessagesFilter"},{"name":"min_date","type":"int"},{"name":"max_date","type":"int"},{"name":"offset_id","type":"int"},{"name":"add_offset","type":"int"},{"name":"limit","type":"int"},{"name":"max_id","type":"int"},{"name":"min_id","type":"int"},{"name":"hash","type":"int"}],"type":"messages.Messages"},{"id":"238054714","method":"messages.readHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"max_id","type":"int"}],"type":"messages.AffectedMessages"},{"id":"469850889","method":"messages.deleteHistory","params":[{"name":"flags","type":"#"},{"name":"just_clear","type":"flags.0?true"},{"name":"revoke","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"max_id","type":"int"}],"type":"messages.AffectedHistory"},{"id":"-443640366","method":"messages.deleteMessages","params":[{"name":"flags","type":"#"},{"name":"revoke","type":"flags.0?true"},{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"94983360","method":"messages.receivedMessages","params":[{"name":"max_id","type":"int"}],"type":"Vector"},{"id":"-1551737264","method":"messages.setTyping","params":[{"name":"peer","type":"InputPeer"},{"name":"action","type":"SendMessageAction"}],"type":"Bool"},{"id":"1376532592","method":"messages.sendMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"message","type":"string"},{"name":"random_id","type":"long"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"881978281","method":"messages.sendMedia","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"media","type":"InputMedia"},{"name":"message","type":"string"},{"name":"random_id","type":"long"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"-637606386","method":"messages.forwardMessages","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"with_my_score","type":"flags.8?true"},{"name":"grouped","type":"flags.9?true"},{"name":"from_peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"random_id","type":"Vector"},{"name":"to_peer","type":"InputPeer"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"-820669733","method":"messages.reportSpam","params":[{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"913498268","method":"messages.getPeerSettings","params":[{"name":"peer","type":"InputPeer"}],"type":"PeerSettings"},{"id":"-1115507112","method":"messages.report","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"reason","type":"ReportReason"}],"type":"Bool"},{"id":"1013621127","method":"messages.getChats","params":[{"name":"id","type":"Vector"}],"type":"messages.Chats"},{"id":"998448230","method":"messages.getFullChat","params":[{"name":"chat_id","type":"int"}],"type":"messages.ChatFull"},{"id":"-599447467","method":"messages.editChatTitle","params":[{"name":"chat_id","type":"int"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-900957736","method":"messages.editChatPhoto","params":[{"name":"chat_id","type":"int"},{"name":"photo","type":"InputChatPhoto"}],"type":"Updates"},{"id":"-106911223","method":"messages.addChatUser","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"fwd_limit","type":"int"}],"type":"Updates"},{"id":"-530505962","method":"messages.deleteChatUser","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"Updates"},{"id":"164303470","method":"messages.createChat","params":[{"name":"users","type":"Vector"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-304838614","method":"updates.getState","params":[],"type":"updates.State"},{"id":"630429265","method":"updates.getDifference","params":[{"name":"flags","type":"#"},{"name":"pts","type":"int"},{"name":"pts_total_limit","type":"flags.0?int"},{"name":"date","type":"int"},{"name":"qts","type":"int"}],"type":"updates.Difference"},{"id":"-256159406","method":"photos.updateProfilePhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"UserProfilePhoto"},{"id":"1328726168","method":"photos.uploadProfilePhoto","params":[{"name":"file","type":"InputFile"}],"type":"photos.Photo"},{"id":"-2016444625","method":"photos.deletePhotos","params":[{"name":"id","type":"Vector"}],"type":"Vector"},{"id":"-1291540959","method":"upload.saveFilePart","params":[{"name":"file_id","type":"long"},{"name":"file_part","type":"int"},{"name":"bytes","type":"bytes"}],"type":"Bool"},{"id":"-1319462148","method":"upload.getFile","params":[{"name":"flags","type":"#"},{"name":"precise","type":"flags.0?true"},{"name":"location","type":"InputFileLocation"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.File"},{"id":"-990308245","method":"help.getConfig","params":[],"type":"Config"},{"id":"531836966","method":"help.getNearestDc","params":[],"type":"NearestDc"},{"id":"1378703997","method":"help.getAppUpdate","params":[{"name":"source","type":"string"}],"type":"help.AppUpdate"},{"id":"1295590211","method":"help.getInviteText","params":[],"type":"help.InviteText"},{"id":"-1848823128","method":"photos.getUserPhotos","params":[{"name":"user_id","type":"InputUser"},{"name":"offset","type":"int"},{"name":"max_id","type":"long"},{"name":"limit","type":"int"}],"type":"photos.Photos"},{"id":"651135312","method":"messages.getDhConfig","params":[{"name":"version","type":"int"},{"name":"random_length","type":"int"}],"type":"messages.DhConfig"},{"id":"-162681021","method":"messages.requestEncryption","params":[{"name":"user_id","type":"InputUser"},{"name":"random_id","type":"int"},{"name":"g_a","type":"bytes"}],"type":"EncryptedChat"},{"id":"1035731989","method":"messages.acceptEncryption","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"g_b","type":"bytes"},{"name":"key_fingerprint","type":"long"}],"type":"EncryptedChat"},{"id":"-304536635","method":"messages.discardEncryption","params":[{"name":"chat_id","type":"int"}],"type":"Bool"},{"id":"2031374829","method":"messages.setEncryptedTyping","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"typing","type":"Bool"}],"type":"Bool"},{"id":"2135648522","method":"messages.readEncryptedHistory","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"max_date","type":"int"}],"type":"Bool"},{"id":"-1451792525","method":"messages.sendEncrypted","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"}],"type":"messages.SentEncryptedMessage"},{"id":"-1701831834","method":"messages.sendEncryptedFile","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"},{"name":"file","type":"InputEncryptedFile"}],"type":"messages.SentEncryptedMessage"},{"id":"852769188","method":"messages.sendEncryptedService","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"}],"type":"messages.SentEncryptedMessage"},{"id":"1436924774","method":"messages.receivedQueue","params":[{"name":"max_qts","type":"int"}],"type":"Vector"},{"id":"1259113487","method":"messages.reportEncryptedSpam","params":[{"name":"peer","type":"InputEncryptedChat"}],"type":"Bool"},{"id":"-562337987","method":"upload.saveBigFilePart","params":[{"name":"file_id","type":"long"},{"name":"file_part","type":"int"},{"name":"file_total_parts","type":"int"},{"name":"bytes","type":"bytes"}],"type":"Bool"},{"id":"2018609336","method":"initConnection","params":[{"name":"flags","type":"#"},{"name":"api_id","type":"int"},{"name":"device_model","type":"string"},{"name":"system_version","type":"string"},{"name":"app_version","type":"string"},{"name":"system_lang_code","type":"string"},{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"},{"name":"proxy","type":"flags.0?InputClientProxy"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1663104819","method":"help.getSupport","params":[],"type":"help.Support"},{"id":"916930423","method":"messages.readMessageContents","params":[{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"655677548","method":"account.checkUsername","params":[{"name":"username","type":"string"}],"type":"Bool"},{"id":"1040964988","method":"account.updateUsername","params":[{"name":"username","type":"string"}],"type":"User"},{"id":"301470424","method":"contacts.search","params":[{"name":"q","type":"string"},{"name":"limit","type":"int"}],"type":"contacts.Found"},{"id":"-623130288","method":"account.getPrivacy","params":[{"name":"key","type":"InputPrivacyKey"}],"type":"account.PrivacyRules"},{"id":"-906486552","method":"account.setPrivacy","params":[{"name":"key","type":"InputPrivacyKey"},{"name":"rules","type":"Vector"}],"type":"account.PrivacyRules"},{"id":"1099779595","method":"account.deleteAccount","params":[{"name":"reason","type":"string"}],"type":"Bool"},{"id":"150761757","method":"account.getAccountTTL","params":[],"type":"AccountDaysTTL"},{"id":"608323678","method":"account.setAccountTTL","params":[{"name":"ttl","type":"AccountDaysTTL"}],"type":"Bool"},{"id":"-627372787","method":"invokeWithLayer","params":[{"name":"layer","type":"int"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-113456221","method":"contacts.resolveUsername","params":[{"name":"username","type":"string"}],"type":"contacts.ResolvedPeer"},{"id":"-2108208411","method":"account.sendChangePhoneCode","params":[{"name":"phone_number","type":"string"},{"name":"settings","type":"CodeSettings"}],"type":"auth.SentCode"},{"id":"1891839707","method":"account.changePhone","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"User"},{"id":"71126828","method":"messages.getStickers","params":[{"name":"emoticon","type":"string"},{"name":"hash","type":"int"}],"type":"messages.Stickers"},{"id":"479598769","method":"messages.getAllStickers","params":[{"name":"hash","type":"int"}],"type":"messages.AllStickers"},{"id":"954152242","method":"account.updateDeviceLocked","params":[{"name":"period","type":"int"}],"type":"Bool"},{"id":"1738800940","method":"auth.importBotAuthorization","params":[{"name":"flags","type":"int"},{"name":"api_id","type":"int"},{"name":"api_hash","type":"string"},{"name":"bot_auth_token","type":"string"}],"type":"auth.Authorization"},{"id":"-1956073268","method":"messages.getWebPagePreview","params":[{"name":"flags","type":"#"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"}],"type":"MessageMedia"},{"id":"-484392616","method":"account.getAuthorizations","params":[],"type":"account.Authorizations"},{"id":"-545786948","method":"account.resetAuthorization","params":[{"name":"hash","type":"long"}],"type":"Bool"},{"id":"1418342645","method":"account.getPassword","params":[],"type":"account.Password"},{"id":"-1663767815","method":"account.getPasswordSettings","params":[{"name":"password","type":"InputCheckPasswordSRP"}],"type":"account.PasswordSettings"},{"id":"-1516564433","method":"account.updatePasswordSettings","params":[{"name":"password","type":"InputCheckPasswordSRP"},{"name":"new_settings","type":"account.PasswordInputSettings"}],"type":"Bool"},{"id":"-779399914","method":"auth.checkPassword","params":[{"name":"password","type":"InputCheckPasswordSRP"}],"type":"auth.Authorization"},{"id":"-661144474","method":"auth.requestPasswordRecovery","params":[],"type":"auth.PasswordRecovery"},{"id":"1319464594","method":"auth.recoverPassword","params":[{"name":"code","type":"string"}],"type":"auth.Authorization"},{"id":"-1080796745","method":"invokeWithoutUpdates","params":[{"name":"query","type":"!X"}],"type":"X"},{"id":"234312524","method":"messages.exportChatInvite","params":[{"name":"peer","type":"InputPeer"}],"type":"ExportedChatInvite"},{"id":"1051570619","method":"messages.checkChatInvite","params":[{"name":"hash","type":"string"}],"type":"ChatInvite"},{"id":"1817183516","method":"messages.importChatInvite","params":[{"name":"hash","type":"string"}],"type":"Updates"},{"id":"639215886","method":"messages.getStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"}],"type":"messages.StickerSet"},{"id":"-946871200","method":"messages.installStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"},{"name":"archived","type":"Bool"}],"type":"messages.StickerSetInstallResult"},{"id":"-110209570","method":"messages.uninstallStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"}],"type":"Bool"},{"id":"-421563528","method":"messages.startBot","params":[{"name":"bot","type":"InputUser"},{"name":"peer","type":"InputPeer"},{"name":"random_id","type":"long"},{"name":"start_param","type":"string"}],"type":"Updates"},{"id":"-1877938321","method":"help.getAppChangelog","params":[{"name":"prev_app_version","type":"string"}],"type":"Updates"},{"id":"-993483427","method":"messages.getMessagesViews","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"increment","type":"Bool"}],"type":"Vector"},{"id":"-871347913","method":"channels.readHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"max_id","type":"int"}],"type":"Bool"},{"id":"-2067661490","method":"channels.deleteMessages","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"-787622117","method":"channels.deleteUserHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"}],"type":"messages.AffectedHistory"},{"id":"-32999408","method":"channels.reportSpam","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"-1383294429","method":"channels.getMessages","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"306054633","method":"channels.getParticipants","params":[{"name":"channel","type":"InputChannel"},{"name":"filter","type":"ChannelParticipantsFilter"},{"name":"offset","type":"int"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"channels.ChannelParticipants"},{"id":"1416484774","method":"channels.getParticipant","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"}],"type":"channels.ChannelParticipant"},{"id":"176122811","method":"channels.getChannels","params":[{"name":"id","type":"Vector"}],"type":"messages.Chats"},{"id":"141781513","method":"channels.getFullChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"messages.ChatFull"},{"id":"1029681423","method":"channels.createChannel","params":[{"name":"flags","type":"#"},{"name":"broadcast","type":"flags.0?true"},{"name":"megagroup","type":"flags.1?true"},{"name":"title","type":"string"},{"name":"about","type":"string"},{"name":"geo_point","type":"flags.2?InputGeoPoint"},{"name":"address","type":"flags.2?string"}],"type":"Updates"},{"id":"-751007486","method":"channels.editAdmin","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"admin_rights","type":"ChatAdminRights"},{"name":"rank","type":"string"}],"type":"Updates"},{"id":"1450044624","method":"channels.editTitle","params":[{"name":"channel","type":"InputChannel"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-248621111","method":"channels.editPhoto","params":[{"name":"channel","type":"InputChannel"},{"name":"photo","type":"InputChatPhoto"}],"type":"Updates"},{"id":"283557164","method":"channels.checkUsername","params":[{"name":"channel","type":"InputChannel"},{"name":"username","type":"string"}],"type":"Bool"},{"id":"890549214","method":"channels.updateUsername","params":[{"name":"channel","type":"InputChannel"},{"name":"username","type":"string"}],"type":"Bool"},{"id":"615851205","method":"channels.joinChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"-130635115","method":"channels.leaveChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"429865580","method":"channels.inviteToChannel","params":[{"name":"channel","type":"InputChannel"},{"name":"users","type":"Vector"}],"type":"Updates"},{"id":"-1072619549","method":"channels.deleteChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"51854712","method":"updates.getChannelDifference","params":[{"name":"flags","type":"#"},{"name":"force","type":"flags.0?true"},{"name":"channel","type":"InputChannel"},{"name":"filter","type":"ChannelMessagesFilter"},{"name":"pts","type":"int"},{"name":"limit","type":"int"}],"type":"updates.ChannelDifference"},{"id":"-1444503762","method":"messages.editChatAdmin","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"is_admin","type":"Bool"}],"type":"Bool"},{"id":"363051235","method":"messages.migrateChat","params":[{"name":"chat_id","type":"int"}],"type":"Updates"},{"id":"-1083038300","method":"messages.searchGlobal","params":[{"name":"flags","type":"#"},{"name":"folder_id","type":"flags.0?int"},{"name":"q","type":"string"},{"name":"offset_rate","type":"int"},{"name":"offset_peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Messages"},{"id":"2016638777","method":"messages.reorderStickerSets","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Bool"},{"id":"864953444","method":"messages.getDocumentByHash","params":[{"name":"sha256","type":"bytes"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"}],"type":"Document"},{"id":"-1080395925","method":"messages.searchGifs","params":[{"name":"q","type":"string"},{"name":"offset","type":"int"}],"type":"messages.FoundGifs"},{"id":"-2084618926","method":"messages.getSavedGifs","params":[{"name":"hash","type":"int"}],"type":"messages.SavedGifs"},{"id":"846868683","method":"messages.saveGif","params":[{"name":"id","type":"InputDocument"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"1364105629","method":"messages.getInlineBotResults","params":[{"name":"flags","type":"#"},{"name":"bot","type":"InputUser"},{"name":"peer","type":"InputPeer"},{"name":"geo_point","type":"flags.0?InputGeoPoint"},{"name":"query","type":"string"},{"name":"offset","type":"string"}],"type":"messages.BotResults"},{"id":"-346119674","method":"messages.setInlineBotResults","params":[{"name":"flags","type":"#"},{"name":"gallery","type":"flags.0?true"},{"name":"private","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"results","type":"Vector"},{"name":"cache_time","type":"int"},{"name":"next_offset","type":"flags.2?string"},{"name":"switch_pm","type":"flags.3?InlineBotSwitchPM"}],"type":"Bool"},{"id":"570955184","method":"messages.sendInlineBotResult","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"hide_via","type":"flags.11?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"random_id","type":"long"},{"name":"query_id","type":"long"},{"name":"id","type":"string"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"-826838685","method":"channels.exportMessageLink","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"int"},{"name":"grouped","type":"Bool"}],"type":"ExportedMessageLink"},{"id":"527021574","method":"channels.toggleSignatures","params":[{"name":"channel","type":"InputChannel"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"1056025023","method":"auth.resendCode","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"}],"type":"auth.SentCode"},{"id":"520357240","method":"auth.cancelCode","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"}],"type":"Bool"},{"id":"-39416522","method":"messages.getMessageEditData","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"}],"type":"messages.MessageEditData"},{"id":"1224152952","method":"messages.editMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"message","type":"flags.11?string"},{"name":"media","type":"flags.14?InputMedia"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"},{"name":"schedule_date","type":"flags.15?int"}],"type":"Updates"},{"id":"-2091549254","method":"messages.editInlineBotMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"id","type":"InputBotInlineMessageID"},{"name":"message","type":"flags.11?string"},{"name":"media","type":"flags.14?InputMedia"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"}],"type":"Bool"},{"id":"-2130010132","method":"messages.getBotCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"game","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"data","type":"flags.0?bytes"}],"type":"messages.BotCallbackAnswer"},{"id":"-712043766","method":"messages.setBotCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"alert","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"message","type":"flags.0?string"},{"name":"url","type":"flags.2?string"},{"name":"cache_time","type":"int"}],"type":"Bool"},{"id":"-728224331","method":"contacts.getTopPeers","params":[{"name":"flags","type":"#"},{"name":"correspondents","type":"flags.0?true"},{"name":"bots_pm","type":"flags.1?true"},{"name":"bots_inline","type":"flags.2?true"},{"name":"phone_calls","type":"flags.3?true"},{"name":"forward_users","type":"flags.4?true"},{"name":"forward_chats","type":"flags.5?true"},{"name":"groups","type":"flags.10?true"},{"name":"channels","type":"flags.15?true"},{"name":"offset","type":"int"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"contacts.TopPeers"},{"id":"451113900","method":"contacts.resetTopPeerRating","params":[{"name":"category","type":"TopPeerCategory"},{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"-462373635","method":"messages.getPeerDialogs","params":[{"name":"peers","type":"Vector"}],"type":"messages.PeerDialogs"},{"id":"-1137057461","method":"messages.saveDraft","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"peer","type":"InputPeer"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"}],"type":"Bool"},{"id":"1782549861","method":"messages.getAllDrafts","params":[],"type":"Updates"},{"id":"766298703","method":"messages.getFeaturedStickers","params":[{"name":"hash","type":"int"}],"type":"messages.FeaturedStickers"},{"id":"1527873830","method":"messages.readFeaturedStickers","params":[{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"1587647177","method":"messages.getRecentStickers","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"},{"name":"hash","type":"int"}],"type":"messages.RecentStickers"},{"id":"958863608","method":"messages.saveRecentSticker","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"},{"name":"id","type":"InputDocument"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"-1986437075","method":"messages.clearRecentStickers","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"}],"type":"Bool"},{"id":"1475442322","method":"messages.getArchivedStickers","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"offset_id","type":"long"},{"name":"limit","type":"int"}],"type":"messages.ArchivedStickers"},{"id":"457157256","method":"account.sendConfirmPhoneCode","params":[{"name":"hash","type":"string"},{"name":"settings","type":"CodeSettings"}],"type":"auth.SentCode"},{"id":"1596029123","method":"account.confirmPhone","params":[{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"Bool"},{"id":"-122669393","method":"channels.getAdminedPublicChannels","params":[{"name":"flags","type":"#"},{"name":"by_location","type":"flags.0?true"},{"name":"check_limit","type":"flags.1?true"}],"type":"messages.Chats"},{"id":"1706608543","method":"messages.getMaskStickers","params":[{"name":"hash","type":"int"}],"type":"messages.AllStickers"},{"id":"-866424884","method":"messages.getAttachedStickers","params":[{"name":"media","type":"InputStickeredMedia"}],"type":"Vector"},{"id":"-1907842680","method":"auth.dropTempAuthKeys","params":[{"name":"except_auth_keys","type":"Vector"}],"type":"Bool"},{"id":"-1896289088","method":"messages.setGameScore","params":[{"name":"flags","type":"#"},{"name":"edit_message","type":"flags.0?true"},{"name":"force","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"score","type":"int"}],"type":"Updates"},{"id":"363700068","method":"messages.setInlineGameScore","params":[{"name":"flags","type":"#"},{"name":"edit_message","type":"flags.0?true"},{"name":"force","type":"flags.1?true"},{"name":"id","type":"InputBotInlineMessageID"},{"name":"user_id","type":"InputUser"},{"name":"score","type":"int"}],"type":"Bool"},{"id":"-400399203","method":"messages.getGameHighScores","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"messages.HighScores"},{"id":"258170395","method":"messages.getInlineGameHighScores","params":[{"name":"id","type":"InputBotInlineMessageID"},{"name":"user_id","type":"InputUser"}],"type":"messages.HighScores"},{"id":"218777796","method":"messages.getCommonChats","params":[{"name":"user_id","type":"InputUser"},{"name":"max_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Chats"},{"id":"-341307408","method":"messages.getAllChats","params":[{"name":"except_ids","type":"Vector"}],"type":"messages.Chats"},{"id":"-333262899","method":"help.setBotUpdatesStatus","params":[{"name":"pending_updates_count","type":"int"},{"name":"message","type":"string"}],"type":"Bool"},{"id":"852135825","method":"messages.getWebPage","params":[{"name":"url","type":"string"},{"name":"hash","type":"int"}],"type":"WebPage"},{"id":"-1489903017","method":"messages.toggleDialogPin","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.0?true"},{"name":"peer","type":"InputDialogPeer"}],"type":"Bool"},{"id":"991616823","method":"messages.reorderPinnedDialogs","params":[{"name":"flags","type":"#"},{"name":"force","type":"flags.0?true"},{"name":"folder_id","type":"int"},{"name":"order","type":"Vector"}],"type":"Bool"},{"id":"-692498958","method":"messages.getPinnedDialogs","params":[{"name":"folder_id","type":"int"}],"type":"messages.PeerDialogs"},{"id":"-1440257555","method":"bots.sendCustomRequest","params":[{"name":"custom_method","type":"string"},{"name":"params","type":"DataJSON"}],"type":"DataJSON"},{"id":"-434028723","method":"bots.answerWebhookJSONQuery","params":[{"name":"query_id","type":"long"},{"name":"data","type":"DataJSON"}],"type":"Bool"},{"id":"619086221","method":"upload.getWebFile","params":[{"name":"location","type":"InputWebFileLocation"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.WebFile"},{"id":"-1712285883","method":"payments.getPaymentForm","params":[{"name":"msg_id","type":"int"}],"type":"payments.PaymentForm"},{"id":"-1601001088","method":"payments.getPaymentReceipt","params":[{"name":"msg_id","type":"int"}],"type":"payments.PaymentReceipt"},{"id":"1997180532","method":"payments.validateRequestedInfo","params":[{"name":"flags","type":"#"},{"name":"save","type":"flags.0?true"},{"name":"msg_id","type":"int"},{"name":"info","type":"PaymentRequestedInfo"}],"type":"payments.ValidatedRequestedInfo"},{"id":"730364339","method":"payments.sendPaymentForm","params":[{"name":"flags","type":"#"},{"name":"msg_id","type":"int"},{"name":"requested_info_id","type":"flags.0?string"},{"name":"shipping_option_id","type":"flags.1?string"},{"name":"credentials","type":"InputPaymentCredentials"}],"type":"payments.PaymentResult"},{"id":"1151208273","method":"account.getTmpPassword","params":[{"name":"password","type":"InputCheckPasswordSRP"},{"name":"period","type":"int"}],"type":"account.TmpPassword"},{"id":"578650699","method":"payments.getSavedInfo","params":[],"type":"payments.SavedInfo"},{"id":"-667062079","method":"payments.clearSavedInfo","params":[{"name":"flags","type":"#"},{"name":"credentials","type":"flags.0?true"},{"name":"info","type":"flags.1?true"}],"type":"Bool"},{"id":"-436833542","method":"messages.setBotShippingResults","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"error","type":"flags.0?string"},{"name":"shipping_options","type":"flags.1?Vector"}],"type":"Bool"},{"id":"163765653","method":"messages.setBotPrecheckoutResults","params":[{"name":"flags","type":"#"},{"name":"success","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"error","type":"flags.0?string"}],"type":"Bool"},{"id":"-1680314774","method":"stickers.createStickerSet","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"user_id","type":"InputUser"},{"name":"title","type":"string"},{"name":"short_name","type":"string"},{"name":"stickers","type":"Vector"}],"type":"messages.StickerSet"},{"id":"-143257775","method":"stickers.removeStickerFromSet","params":[{"name":"sticker","type":"InputDocument"}],"type":"messages.StickerSet"},{"id":"-4795190","method":"stickers.changeStickerPosition","params":[{"name":"sticker","type":"InputDocument"},{"name":"position","type":"int"}],"type":"messages.StickerSet"},{"id":"-2041315650","method":"stickers.addStickerToSet","params":[{"name":"stickerset","type":"InputStickerSet"},{"name":"sticker","type":"InputStickerSetItem"}],"type":"messages.StickerSet"},{"id":"1369162417","method":"messages.uploadMedia","params":[{"name":"peer","type":"InputPeer"},{"name":"media","type":"InputMedia"}],"type":"MessageMedia"},{"id":"1430593449","method":"phone.getCallConfig","params":[],"type":"DataJSON"},{"id":"1124046573","method":"phone.requestCall","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.0?true"},{"name":"user_id","type":"InputUser"},{"name":"random_id","type":"int"},{"name":"g_a_hash","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"1003664544","method":"phone.acceptCall","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"g_b","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"788404002","method":"phone.confirmCall","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"g_a","type":"bytes"},{"name":"key_fingerprint","type":"long"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"399855457","method":"phone.receivedCall","params":[{"name":"peer","type":"InputPhoneCall"}],"type":"Bool"},{"id":"-1295269440","method":"phone.discardCall","params":[{"name":"flags","type":"#"},{"name":"video","type":"flags.0?true"},{"name":"peer","type":"InputPhoneCall"},{"name":"duration","type":"int"},{"name":"reason","type":"PhoneCallDiscardReason"},{"name":"connection_id","type":"long"}],"type":"Updates"},{"id":"1508562471","method":"phone.setCallRating","params":[{"name":"flags","type":"#"},{"name":"user_initiative","type":"flags.0?true"},{"name":"peer","type":"InputPhoneCall"},{"name":"rating","type":"int"},{"name":"comment","type":"string"}],"type":"Updates"},{"id":"662363518","method":"phone.saveCallDebug","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"debug","type":"DataJSON"}],"type":"Bool"},{"id":"536919235","method":"upload.getCdnFile","params":[{"name":"file_token","type":"bytes"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.CdnFile"},{"id":"-1691921240","method":"upload.reuploadCdnFile","params":[{"name":"file_token","type":"bytes"},{"name":"request_token","type":"bytes"}],"type":"Vector"},{"id":"1375900482","method":"help.getCdnConfig","params":[],"type":"CdnConfig"},{"id":"-219008246","method":"langpack.getLangPack","params":[{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"}],"type":"LangPackDifference"},{"id":"-269862909","method":"langpack.getStrings","params":[{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"},{"name":"keys","type":"Vector"}],"type":"Vector"},{"id":"-845657435","method":"langpack.getDifference","params":[{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"},{"name":"from_version","type":"int"}],"type":"LangPackDifference"},{"id":"1120311183","method":"langpack.getLanguages","params":[{"name":"lang_pack","type":"string"}],"type":"Vector"},{"id":"1920559378","method":"channels.editBanned","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"banned_rights","type":"ChatBannedRights"}],"type":"Updates"},{"id":"870184064","method":"channels.getAdminLog","params":[{"name":"flags","type":"#"},{"name":"channel","type":"InputChannel"},{"name":"q","type":"string"},{"name":"events_filter","type":"flags.0?ChannelAdminLogEventsFilter"},{"name":"admins","type":"flags.1?Vector"},{"name":"max_id","type":"long"},{"name":"min_id","type":"long"},{"name":"limit","type":"int"}],"type":"channels.AdminLogResults"},{"id":"1302676017","method":"upload.getCdnFileHashes","params":[{"name":"file_token","type":"bytes"},{"name":"offset","type":"int"}],"type":"Vector"},{"id":"-914493408","method":"messages.sendScreenshotNotification","params":[{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"int"},{"name":"random_id","type":"long"}],"type":"Updates"},{"id":"-359881479","method":"channels.setStickers","params":[{"name":"channel","type":"InputChannel"},{"name":"stickerset","type":"InputStickerSet"}],"type":"Bool"},{"id":"567151374","method":"messages.getFavedStickers","params":[{"name":"hash","type":"int"}],"type":"messages.FavedStickers"},{"id":"-1174420133","method":"messages.faveSticker","params":[{"name":"id","type":"InputDocument"},{"name":"unfave","type":"Bool"}],"type":"Bool"},{"id":"-357180360","method":"channels.readMessageContents","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"-2020263951","method":"contacts.resetSaved","params":[],"type":"Bool"},{"id":"1180140658","method":"messages.getUnreadMentions","params":[{"name":"peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"add_offset","type":"int"},{"name":"limit","type":"int"},{"name":"max_id","type":"int"},{"name":"min_id","type":"int"}],"type":"messages.Messages"},{"id":"-1355375294","method":"channels.deleteHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"max_id","type":"int"}],"type":"Bool"},{"id":"1036054804","method":"help.getRecentMeUrls","params":[{"name":"referer","type":"string"}],"type":"help.RecentMeUrls"},{"id":"-356796084","method":"channels.togglePreHistoryHidden","params":[{"name":"channel","type":"InputChannel"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"251759059","method":"messages.readMentions","params":[{"name":"peer","type":"InputPeer"}],"type":"messages.AffectedHistory"},{"id":"-1144759543","method":"messages.getRecentLocations","params":[{"name":"peer","type":"InputPeer"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"messages.Messages"},{"id":"-872345397","method":"messages.sendMultiMedia","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"multi_media","type":"Vector"},{"name":"schedule_date","type":"flags.10?int"}],"type":"Updates"},{"id":"1347929239","method":"messages.uploadEncryptedFile","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"file","type":"InputEncryptedFile"}],"type":"EncryptedFile"},{"id":"405695855","method":"account.getWebAuthorizations","params":[],"type":"account.WebAuthorizations"},{"id":"755087855","method":"account.resetWebAuthorization","params":[{"name":"hash","type":"long"}],"type":"Bool"},{"id":"1747789204","method":"account.resetWebAuthorizations","params":[],"type":"Bool"},{"id":"-1028140917","method":"messages.searchStickerSets","params":[{"name":"flags","type":"#"},{"name":"exclude_featured","type":"flags.0?true"},{"name":"q","type":"string"},{"name":"hash","type":"int"}],"type":"messages.FoundStickerSets"},{"id":"-956147407","method":"upload.getFileHashes","params":[{"name":"location","type":"InputFileLocation"},{"name":"offset","type":"int"}],"type":"Vector"},{"id":"1031231713","method":"help.getProxyData","params":[],"type":"help.ProxyData"},{"id":"749019089","method":"help.getTermsOfServiceUpdate","params":[],"type":"help.TermsOfServiceUpdate"},{"id":"-294455398","method":"help.acceptTermsOfService","params":[{"name":"id","type":"DataJSON"}],"type":"Bool"},{"id":"-1299661699","method":"account.getAllSecureValues","params":[],"type":"Vector"},{"id":"1936088002","method":"account.getSecureValue","params":[{"name":"types","type":"Vector"}],"type":"Vector"},{"id":"-1986010339","method":"account.saveSecureValue","params":[{"name":"value","type":"InputSecureValue"},{"name":"secure_secret_id","type":"long"}],"type":"SecureValue"},{"id":"-1199522741","method":"account.deleteSecureValue","params":[{"name":"types","type":"Vector"}],"type":"Bool"},{"id":"-1865902923","method":"users.setSecureValueErrors","params":[{"name":"id","type":"InputUser"},{"name":"errors","type":"Vector"}],"type":"Bool"},{"id":"-1200903967","method":"account.getAuthorizationForm","params":[{"name":"bot_id","type":"int"},{"name":"scope","type":"string"},{"name":"public_key","type":"string"}],"type":"account.AuthorizationForm"},{"id":"-419267436","method":"account.acceptAuthorization","params":[{"name":"bot_id","type":"int"},{"name":"scope","type":"string"},{"name":"public_key","type":"string"},{"name":"value_hashes","type":"Vector"},{"name":"credentials","type":"SecureCredentialsEncrypted"}],"type":"Bool"},{"id":"-1516022023","method":"account.sendVerifyPhoneCode","params":[{"name":"phone_number","type":"string"},{"name":"settings","type":"CodeSettings"}],"type":"auth.SentCode"},{"id":"1305716726","method":"account.verifyPhone","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"Bool"},{"id":"1880182943","method":"account.sendVerifyEmailCode","params":[{"name":"email","type":"string"}],"type":"account.SentEmailCode"},{"id":"-323339813","method":"account.verifyEmail","params":[{"name":"email","type":"string"},{"name":"code","type":"string"}],"type":"Bool"},{"id":"1072547679","method":"help.getDeepLinkInfo","params":[{"name":"path","type":"string"}],"type":"help.DeepLinkInfo"},{"id":"-2098076769","method":"contacts.getSaved","params":[],"type":"Vector"},{"id":"-2092831552","method":"channels.getLeftChannels","params":[{"name":"offset","type":"int"}],"type":"messages.Chats"},{"id":"-262453244","method":"account.initTakeoutSession","params":[{"name":"flags","type":"#"},{"name":"contacts","type":"flags.0?true"},{"name":"message_users","type":"flags.1?true"},{"name":"message_chats","type":"flags.2?true"},{"name":"message_megagroups","type":"flags.3?true"},{"name":"message_channels","type":"flags.4?true"},{"name":"files","type":"flags.5?true"},{"name":"file_max_size","type":"flags.5?int"}],"type":"account.Takeout"},{"id":"489050862","method":"account.finishTakeoutSession","params":[{"name":"flags","type":"#"},{"name":"success","type":"flags.0?true"}],"type":"Bool"},{"id":"486505992","method":"messages.getSplitRanges","params":[],"type":"Vector"},{"id":"911373810","method":"invokeWithMessagesRange","params":[{"name":"range","type":"MessageRange"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1398145746","method":"invokeWithTakeout","params":[{"name":"takeout_id","type":"long"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1031349873","method":"messages.markDialogUnread","params":[{"name":"flags","type":"#"},{"name":"unread","type":"flags.0?true"},{"name":"peer","type":"InputDialogPeer"}],"type":"Bool"},{"id":"585256482","method":"messages.getDialogUnreadMarks","params":[],"type":"Vector"},{"id":"-2062238246","method":"contacts.toggleTopPeers","params":[{"name":"enabled","type":"Bool"}],"type":"Bool"},{"id":"2119757468","method":"messages.clearAllDrafts","params":[],"type":"Bool"},{"id":"-1735311088","method":"help.getAppConfig","params":[],"type":"JSONValue"},{"id":"1862465352","method":"help.saveAppLog","params":[{"name":"events","type":"Vector"}],"type":"Bool"},{"id":"-966677240","method":"help.getPassportConfig","params":[{"name":"hash","type":"int"}],"type":"help.PassportConfig"},{"id":"1784243458","method":"langpack.getLanguage","params":[{"name":"lang_pack","type":"string"},{"name":"lang_code","type":"string"}],"type":"LangPackLanguage"},{"id":"-760547348","method":"messages.updatePinnedMessage","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"}],"type":"Updates"},{"id":"-1881204448","method":"account.confirmPasswordEmail","params":[{"name":"code","type":"string"}],"type":"Bool"},{"id":"2055154197","method":"account.resendPasswordEmail","params":[],"type":"Bool"},{"id":"-1043606090","method":"account.cancelPasswordEmail","params":[],"type":"Bool"},{"id":"-748624084","method":"help.getSupportName","params":[],"type":"help.SupportName"},{"id":"59377875","method":"help.getUserInfo","params":[{"name":"user_id","type":"InputUser"}],"type":"help.UserInfo"},{"id":"1723407216","method":"help.editUserInfo","params":[{"name":"user_id","type":"InputUser"},{"name":"message","type":"string"},{"name":"entities","type":"Vector"}],"type":"help.UserInfo"},{"id":"-1626880216","method":"account.getContactSignUpNotification","params":[],"type":"Bool"},{"id":"-806076575","method":"account.setContactSignUpNotification","params":[{"name":"silent","type":"Bool"}],"type":"Bool"},{"id":"1398240377","method":"account.getNotifyExceptions","params":[{"name":"flags","type":"#"},{"name":"compare_sound","type":"flags.1?true"},{"name":"peer","type":"flags.0?InputNotifyPeer"}],"type":"Updates"},{"id":"283795844","method":"messages.sendVote","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"options","type":"Vector"}],"type":"Updates"},{"id":"1941660731","method":"messages.getPollResults","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"}],"type":"Updates"},{"id":"1848369232","method":"messages.getOnlines","params":[{"name":"peer","type":"InputPeer"}],"type":"ChatOnlines"},{"id":"-2127811866","method":"messages.getStatsURL","params":[{"name":"flags","type":"#"},{"name":"dark","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"params","type":"string"}],"type":"StatsURL"},{"id":"-554301545","method":"messages.editChatAbout","params":[{"name":"peer","type":"InputPeer"},{"name":"about","type":"string"}],"type":"Bool"},{"id":"-1517917375","method":"messages.editChatDefaultBannedRights","params":[{"name":"peer","type":"InputPeer"},{"name":"banned_rights","type":"ChatBannedRights"}],"type":"Updates"},{"id":"-57811990","method":"account.getWallPaper","params":[{"name":"wallpaper","type":"InputWallPaper"}],"type":"WallPaper"},{"id":"-578472351","method":"account.uploadWallPaper","params":[{"name":"file","type":"InputFile"},{"name":"mime_type","type":"string"},{"name":"settings","type":"WallPaperSettings"}],"type":"WallPaper"},{"id":"1817860919","method":"account.saveWallPaper","params":[{"name":"wallpaper","type":"InputWallPaper"},{"name":"unsave","type":"Bool"},{"name":"settings","type":"WallPaperSettings"}],"type":"Bool"},{"id":"-18000023","method":"account.installWallPaper","params":[{"name":"wallpaper","type":"InputWallPaper"},{"name":"settings","type":"WallPaperSettings"}],"type":"Bool"},{"id":"-1153722364","method":"account.resetWallPapers","params":[],"type":"Bool"},{"id":"1457130303","method":"account.getAutoDownloadSettings","params":[],"type":"account.AutoDownloadSettings"},{"id":"1995661875","method":"account.saveAutoDownloadSettings","params":[{"name":"flags","type":"#"},{"name":"low","type":"flags.0?true"},{"name":"high","type":"flags.1?true"},{"name":"settings","type":"AutoDownloadSettings"}],"type":"Bool"},{"id":"899735650","method":"messages.getEmojiKeywords","params":[{"name":"lang_code","type":"string"}],"type":"EmojiKeywordsDifference"},{"id":"352892591","method":"messages.getEmojiKeywordsDifference","params":[{"name":"lang_code","type":"string"},{"name":"from_version","type":"int"}],"type":"EmojiKeywordsDifference"},{"id":"1318675378","method":"messages.getEmojiKeywordsLanguages","params":[{"name":"lang_codes","type":"Vector"}],"type":"Vector"},{"id":"-709817306","method":"messages.getEmojiURL","params":[{"name":"lang_code","type":"string"}],"type":"EmojiURL"},{"id":"1749536939","method":"folders.editPeerFolders","params":[{"name":"folder_peers","type":"Vector"}],"type":"Updates"},{"id":"472471681","method":"folders.deleteFolder","params":[{"name":"folder_id","type":"int"}],"type":"Updates"},{"id":"1932455680","method":"messages.getSearchCounters","params":[{"name":"peer","type":"InputPeer"},{"name":"filters","type":"Vector"}],"type":"Vector"},{"id":"-170208392","method":"channels.getGroupsForDiscussion","params":[],"type":"messages.Chats"},{"id":"1079520178","method":"channels.setDiscussionGroup","params":[{"name":"broadcast","type":"InputChannel"},{"name":"group","type":"InputChannel"}],"type":"Bool"},{"id":"-482388461","method":"messages.requestUrlAuth","params":[{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"button_id","type":"int"}],"type":"UrlAuthResult"},{"id":"-148247912","method":"messages.acceptUrlAuth","params":[{"name":"flags","type":"#"},{"name":"write_allowed","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"button_id","type":"int"}],"type":"UrlAuthResult"},{"id":"1336717624","method":"messages.hidePeerSettingsBar","params":[{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"-386636848","method":"contacts.addContact","params":[{"name":"flags","type":"#"},{"name":"add_phone_privacy_exception","type":"flags.0?true"},{"name":"id","type":"InputUser"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"phone","type":"string"}],"type":"Updates"},{"id":"-130964977","method":"contacts.acceptContact","params":[{"name":"id","type":"InputUser"}],"type":"Updates"},{"id":"-1892102881","method":"channels.editCreator","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"password","type":"InputCheckPasswordSRP"}],"type":"Updates"},{"id":"171270230","method":"contacts.getLocated","params":[{"name":"geo_point","type":"InputGeoPoint"}],"type":"Updates"},{"id":"1491484525","method":"channels.editLocation","params":[{"name":"channel","type":"InputChannel"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"address","type":"string"}],"type":"Bool"},{"id":"-304832784","method":"channels.toggleSlowMode","params":[{"name":"channel","type":"InputChannel"},{"name":"seconds","type":"int"}],"type":"Updates"},{"id":"-490575781","method":"messages.getScheduledHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"hash","type":"int"}],"type":"messages.Messages"},{"id":"-1111817116","method":"messages.getScheduledMessages","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"-1120369398","method":"messages.sendScheduledMessages","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"}],"type":"Updates"},{"id":"1504586518","method":"messages.deleteScheduledMessages","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"}],"type":"Updates"},{"id":"473805619","method":"account.uploadTheme","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"thumb","type":"flags.0?InputFile"},{"name":"file_name","type":"string"},{"name":"mime_type","type":"string"}],"type":"Document"},{"id":"729808255","method":"account.createTheme","params":[{"name":"slug","type":"string"},{"name":"title","type":"string"},{"name":"document","type":"InputDocument"}],"type":"Theme"},{"id":"999203330","method":"account.updateTheme","params":[{"name":"flags","type":"#"},{"name":"format","type":"string"},{"name":"theme","type":"InputTheme"},{"name":"slug","type":"flags.0?string"},{"name":"title","type":"flags.1?string"},{"name":"document","type":"flags.2?InputDocument"}],"type":"Theme"},{"id":"-229175188","method":"account.saveTheme","params":[{"name":"theme","type":"InputTheme"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"2061776695","method":"account.installTheme","params":[{"name":"flags","type":"#"},{"name":"dark","type":"flags.0?true"},{"name":"format","type":"flags.1?string"},{"name":"theme","type":"flags.1?InputTheme"}],"type":"Bool"},{"id":"-1919060949","method":"account.getTheme","params":[{"name":"format","type":"string"},{"name":"theme","type":"InputTheme"},{"name":"document_id","type":"long"}],"type":"Theme"},{"id":"676939512","method":"account.getThemes","params":[{"name":"format","type":"string"},{"name":"hash","type":"int"}],"type":"account.Themes"}]}; diff --git a/src/scss/components/_badges.scss b/src/scss/components/_badges.scss new file mode 100644 index 00000000..ffed87dc --- /dev/null +++ b/src/scss/components/_badges.scss @@ -0,0 +1,55 @@ +// Badges +span.badge { + min-width: 3rem; + padding: 0 6px; + margin-left: 14px; + text-align: center; + font-size: 1rem; + line-height: $badge-height; + height: $badge-height; + color: color('grey', 'darken-1'); + float: right; + box-sizing: border-box; + + &.new { + font-weight: 300; + font-size: 0.8rem; + color: #fff; + background-color: $badge-bg-color; + border-radius: 2px; + } + &.new:after { + content: " new"; + } + + &[data-badge-caption]::after { + content: " " attr(data-badge-caption); + } +} + +// Special cases +nav ul a span.badge { + display: inline-block; + float: none; + margin-left: 4px; + line-height: $badge-height; + height: $badge-height; + -webkit-font-smoothing: auto; +} + +// Line height centering +.collection-item span.badge { + margin-top: calc(#{$collection-line-height / 2} - #{$badge-height / 2}); +} +.collapsible span.badge { + margin-left: auto; +} +.sidenav span.badge { + margin-top: calc(#{$sidenav-line-height / 2} - #{$badge-height / 2}); +} + +table span.badge { + display: inline-block; + float: none; + margin-left: auto; +} diff --git a/src/scss/components/_buttons.scss b/src/scss/components/_buttons.scss new file mode 100644 index 00000000..44b80c8d --- /dev/null +++ b/src/scss/components/_buttons.scss @@ -0,0 +1,322 @@ +// shared styles +.btn, +.btn-flat { + border: $button-border; + border-radius: $button-radius; + display: inline-block; + height: $button-height; + line-height: $button-height; + padding: $button-padding; + text-transform: uppercase; + vertical-align: middle; + -webkit-tap-highlight-color: transparent; // Gets rid of tap active state +} + +// Disabled shared style +.btn.disabled, +.btn-floating.disabled, +.btn-large.disabled, +.btn-small.disabled, +.btn-flat.disabled, +.btn:disabled, +.btn-floating:disabled, +.btn-large:disabled, +.btn-small:disabled, +.btn-flat:disabled, +.btn[disabled], +.btn-floating[disabled], +.btn-large[disabled], +.btn-small[disabled], +.btn-flat[disabled] { + pointer-events: none; + background-color: $button-disabled-background !important; + box-shadow: none; + color: $button-disabled-color !important; + cursor: default; + &:hover { + background-color: $button-disabled-background !important; + color: $button-disabled-color !important; + } +} + +// Shared icon styles +.btn, +.btn-floating, +.btn-large, +.btn-small, +.btn-flat { + font-size: $button-font-size; + outline: 0; + i { + font-size: $button-icon-font-size; + line-height: inherit; + } +} + +// Shared focus button style +.btn, +.btn-floating { + &:focus { + background-color: darken($button-raised-background, 10%); + } +} + +// Raised Button +.btn { + text-decoration: none; + color: $button-raised-color; + background-color: $button-raised-background; + text-align: center; + letter-spacing: .5px; + @extend .z-depth-1; + transition: background-color .2s ease-out; + cursor: pointer; + &:hover { + background-color: $button-raised-background-hover; + @extend .z-depth-1-half; + } +} + +// Floating button +.btn-floating { + &:hover { + background-color: $button-floating-background-hover; + @extend .z-depth-1-half; + } + &:before { + border-radius: 0; + } + &.btn-large { + &.halfway-fab { + bottom: -$button-floating-large-size / 2; + } + width: $button-floating-large-size; + height: $button-floating-large-size; + padding: 0; + i { + line-height: $button-floating-large-size; + } + } + + &.btn-small { + &.halfway-fab { + bottom: -$button-floating-small-size / 2; + } + width: $button-floating-small-size; + height: $button-floating-small-size; + i { + line-height: $button-floating-small-size; + } + } + + &.halfway-fab { + &.left { + right: auto; + left: 24px; + } + position: absolute; + right: 24px; + bottom: -$button-floating-size / 2; + } + display: inline-block; + color: $button-floating-color; + position: relative; + overflow: hidden; + z-index: 1; + width: $button-floating-size; + height: $button-floating-size; + line-height: $button-floating-size; + padding: 0; + background-color: $button-floating-background; + border-radius: $button-floating-radius; + @extend .z-depth-1; + transition: background-color .3s; + cursor: pointer; + vertical-align: middle; + i { + width: inherit; + display: inline-block; + text-align: center; + color: $button-floating-color; + font-size: $button-large-icon-font-size; + line-height: $button-floating-size; + } +} + +// button fix +button.btn-floating { + border: $button-border; +} + +// Fixed Action Button +.fixed-action-btn { + &.active { + ul { + visibility: visible; + } + } + + // Directions + &.direction-left, + &.direction-right { + padding: 0 0 0 15px; + ul { + text-align: right; + right: 64px; + top: 50%; + transform: translateY(-50%); + height: 100%; + left: auto; + /*width 100% only goes to width of button container */ + width: 500px; + li { + display: inline-block; + margin: 7.5px 15px 0 0; + } + } + } + &.direction-right { + padding: 0 15px 0 0; + ul { + text-align: left; + direction: rtl; + left: 64px; + right: auto; + li { + margin: 7.5px 0 0 15px; + } + } + } + &.direction-bottom { + padding: 0 0 15px 0; + ul { + top: 64px; + bottom: auto; + display: flex; + flex-direction: column-reverse; + li { + margin: 15px 0 0 0; + } + } + } + &.toolbar { + &.active { + &>a i { + opacity: 0; + } + } + padding: 0; + height: $button-floating-large-size; + ul { + display: flex; + top: 0; + bottom: 0; + z-index: 1; + li { + flex: 1; + display: inline-block; + margin: 0; + height: 100%; + transition: none; + a { + display: block; + overflow: hidden; + position: relative; + width: 100%; + height: 100%; + background-color: transparent; + box-shadow: none; + color: #fff; + line-height: $button-floating-large-size; + z-index: 1; + i { + line-height: inherit; + } + } + } + } + } + position: fixed; + right: 23px; + bottom: 23px; + padding-top: 15px; + margin-bottom: 0; + z-index: 997; + ul { + left: 0; + right: 0; + text-align: center; + position: absolute; + bottom: 64px; + margin: 0; + visibility: hidden; + li { + margin-bottom: 15px; + } + a.btn-floating { + opacity: 0; + } + } + .fab-backdrop { + position: absolute; + top: 0; + left: 0; + z-index: -1; + width: $button-floating-size; + height: $button-floating-size; + background-color: $button-floating-background; + border-radius: $button-floating-radius; + transform: scale(0); + } +} + +// Flat button +.btn-flat { + box-shadow: none; + background-color: transparent; + color: $button-flat-color; + cursor: pointer; + transition: background-color .2s; + &:focus, + &:hover { + box-shadow: none; + } + &:focus { + background-color: rgba(0, 0, 0, .1); + } + &.disabled, + &.btn-flat[disabled] { + background-color: transparent !important; + color: $button-flat-disabled-color !important; + cursor: default; + } +} + +// Large button +.btn-large { + @extend .btn; + height: $button-large-height; + line-height: $button-large-height; + font-size: $button-large-font-size; + padding: 0 28px; + + i { + font-size: $button-large-icon-font-size; + } +} + +// Small button +.btn-small { + @extend .btn; + height: $button-small-height; + line-height: $button-small-height; + font-size: $button-small-font-size; + i { + font-size: $button-small-icon-font-size; + } +} + +// Block button +.btn-block { + display: block; +} diff --git a/src/scss/components/_cards.scss b/src/scss/components/_cards.scss new file mode 100644 index 00000000..fcbf28ec --- /dev/null +++ b/src/scss/components/_cards.scss @@ -0,0 +1,195 @@ + + +.card-panel { + transition: box-shadow .25s; + padding: $card-padding; + margin: $element-top-margin 0 $element-bottom-margin 0; + border-radius: 2px; + @extend .z-depth-1; + background-color: $card-bg-color; +} + +.card { + position: relative; + margin: $element-top-margin 0 $element-bottom-margin 0; + background-color: $card-bg-color; + transition: box-shadow .25s; + border-radius: 2px; + @extend .z-depth-1; + + + .card-title { + font-size: 24px; + font-weight: 300; + &.activator { + cursor: pointer; + } + } + + // Card Sizes + &.small, &.medium, &.large { + position: relative; + + .card-image { + max-height: 60%; + overflow: hidden; + } + .card-image + .card-content { + max-height: 40%; + } + .card-content { + max-height: 100%; + overflow: hidden; + } + .card-action { + position: absolute; + bottom: 0; + left: 0; + right: 0; + } + } + + &.small { + height: 300px; + } + + &.medium { + height: 400px; + } + + &.large { + height: 500px; + } + + // Horizontal Cards + &.horizontal { + &.small, &.medium, &.large { + .card-image { + height: 100%; + max-height: none; + overflow: visible; + + img { + height: 100%; + } + } + } + + display: flex; + + .card-image { + max-width: 50%; + img { + border-radius: 2px 0 0 2px; + max-width: 100%; + width: auto; + } + } + + .card-stacked { + display: flex; + flex-direction: column; + flex: 1; + position: relative; + + .card-content { + flex-grow: 1; + } + } + } + + // Sticky Action Section + &.sticky-action { + .card-action { + z-index: 2; + } + + .card-reveal { + z-index: 1; + padding-bottom: 64px; + } + } + + + + + .card-image { + position: relative; + + // Image background for content + img { + display: block; + border-radius: 2px 2px 0 0; + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100%; + } + + .card-title { + color: $card-bg-color; + position: absolute; + bottom: 0; + left: 0; + max-width: 100%; + padding: $card-padding; + } + } + + .card-content { + padding: $card-padding; + border-radius: 0 0 2px 2px; + + p { + margin: 0; + } + .card-title { + display: block; + line-height: 32px; + margin-bottom: 8px; + + i { + line-height: 32px; + } + } + } + + .card-action { + &:last-child { + border-radius: 0 0 2px 2px; + } + background-color: inherit; // Use inherit to inherit color classes + border-top: 1px solid rgba(160,160,160,.2); + position: relative; + padding: 16px $card-padding; + + a:not(.btn):not(.btn-large):not(.btn-floating) { + color: $card-link-color; + margin-right: $card-padding; + transition: color .3s ease; + text-transform: uppercase; + + &:hover { color: $card-link-color-light; } + } + } + + .card-reveal { + padding: $card-padding; + position: absolute; + background-color: $card-bg-color; + width: 100%; + overflow-y: auto; + left: 0; + top: 100%; + height: 100%; + z-index: 3; + display: none; + + .card-title { + cursor: pointer; + display: block; + } + } +} diff --git a/src/scss/components/_carousel.scss b/src/scss/components/_carousel.scss new file mode 100644 index 00000000..cc36d4b3 --- /dev/null +++ b/src/scss/components/_carousel.scss @@ -0,0 +1,90 @@ +.carousel { + &.carousel-slider { + top: 0; + left: 0; + + .carousel-fixed-item { + &.with-indicators { + bottom: 68px; + } + + position: absolute; + left: 0; + right: 0; + bottom: 20px; + z-index: 1; + } + + .carousel-item { + width: 100%; + height: 100%; + min-height: $carousel-height; + position: absolute; + top: 0; + left: 0; + + h2 { + font-size: 24px; + font-weight: 500; + line-height: 32px; + } + + p { + font-size: 15px; + } + } + } + + overflow: hidden; + position: relative; + width: 100%; + height: $carousel-height; + perspective: 500px; + transform-style: preserve-3d; + transform-origin: 0% 50%; + + .carousel-item { + visibility: hidden; + width: $carousel-item-width; + height: $carousel-item-height; + position: absolute; + top: 0; + left: 0; + + & > img { + width: 100%; + } + } + + .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0; + + .indicator-item { + &.active { + background-color: #fff; + } + + display: inline-block; + position: relative; + cursor: pointer; + height: 8px; + width: 8px; + margin: 24px 4px; + background-color: rgba(255,255,255,.5); + + transition: background-color .3s; + border-radius: 50%; + } + } + + // Materialbox compatibility + &.scrolling .carousel-item .materialboxed, + .carousel-item:not(.active) .materialboxed { + pointer-events: none; + } +} diff --git a/src/scss/components/_chips.scss b/src/scss/components/_chips.scss new file mode 100644 index 00000000..27744a8b --- /dev/null +++ b/src/scss/components/_chips.scss @@ -0,0 +1,90 @@ +.chip { + &:focus { + outline: none; + background-color: $chip-selected-color; + color: #fff; + } + + display: inline-block; + height: 32px; + font-size: 13px; + font-weight: 500; + color: rgba(0,0,0,.6); + line-height: 32px; + padding: 0 12px; + border-radius: 16px; + background-color: $chip-bg-color; + margin-bottom: $chip-margin; + margin-right: $chip-margin; + + > img { + float: left; + margin: 0 8px 0 -12px; + height: 32px; + width: 32px; + border-radius: 50%; + } + + .close { + cursor: pointer; + float: right; + font-size: 16px; + line-height: 32px; + padding-left: 8px; + } +} + +.chips { + border: none; + border-bottom: 1px solid $chip-border-color; + box-shadow: none; + margin: $input-margin; + min-height: 45px; + outline: none; + transition: all .3s; + + &.focus { + border-bottom: 1px solid $chip-selected-color; + box-shadow: 0 1px 0 0 $chip-selected-color; + } + + &:hover { + cursor: text; + } + + .input { + background: none; + border: 0; + color: rgba(0,0,0,.6); + display: inline-block; + font-size: $input-font-size; + height: $input-height; + line-height: 32px; + outline: 0; + margin: 0; + padding: 0 !important; + width: 120px !important; + } + + .input:focus { + border: 0 !important; + box-shadow: none !important; + } + + // Autocomplete + .autocomplete-content { + margin-top: 0; + margin-bottom: 0; + } +} + +// Form prefix +.prefix ~ .chips { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} +.chips:empty ~ label { + font-size: 0.8rem; + transform: translateY(-140%); +} diff --git a/src/scss/components/_collapsible.scss b/src/scss/components/_collapsible.scss new file mode 100644 index 00000000..024324fd --- /dev/null +++ b/src/scss/components/_collapsible.scss @@ -0,0 +1,91 @@ +.collapsible { + border-top: 1px solid $collapsible-border-color; + border-right: 1px solid $collapsible-border-color; + border-left: 1px solid $collapsible-border-color; + margin: $element-top-margin 0 $element-bottom-margin 0; + @extend .z-depth-1; +} + +.collapsible-header { + &:focus { + outline: 0 + } + + display: flex; + cursor: pointer; + -webkit-tap-highlight-color: transparent; + line-height: 1.5; + padding: 1rem; + background-color: $collapsible-header-color; + border-bottom: 1px solid $collapsible-border-color; + + i { + width: 2rem; + font-size: 1.6rem; + display: inline-block; + text-align: center; + margin-right: 1rem; + } +} +.keyboard-focused .collapsible-header:focus { + background-color: #eee; +} + +.collapsible-body { + display: none; + border-bottom: 1px solid $collapsible-border-color; + box-sizing: border-box; + padding: 2rem; +} + +// Sidenav collapsible styling +.sidenav, +.sidenav.fixed { + + .collapsible { + border: none; + box-shadow: none; + + li { padding: 0; } + } + + .collapsible-header { + background-color: transparent; + border: none; + line-height: inherit; + height: inherit; + padding: 0 $sidenav-padding; + + &:hover { background-color: rgba(0,0,0,.05); } + i { line-height: inherit; } + } + + .collapsible-body { + border: 0; + background-color: $collapsible-header-color; + + li a { + padding: 0 (7.5px + $sidenav-padding) + 0 (15px + $sidenav-padding); + } + } + +} + +// Popout Collapsible + +.collapsible.popout { + border: none; + box-shadow: none; + > li { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + // transform: scaleX(.92); + margin: 0 24px; + transition: margin .35s cubic-bezier(0.250, 0.460, 0.450, 0.940); + } + > li.active { + box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); + margin: 16px 0; + // transform: scaleX(1); + } +} diff --git a/src/scss/components/_color-classes.scss b/src/scss/components/_color-classes.scss new file mode 100644 index 00000000..155cecd1 --- /dev/null +++ b/src/scss/components/_color-classes.scss @@ -0,0 +1,32 @@ +// Color Classes + +@each $color_name, $color in $colors { + @each $color_type, $color_value in $color { + @if $color_type == "base" { + .#{$color_name} { + background-color: $color_value !important; + } + .#{$color_name}-text { + color: $color_value !important; + } + } + @else if $color_name != "shades" { + .#{$color_name}.#{$color_type} { + background-color: $color_value !important; + } + .#{$color_name}-text.text-#{$color_type} { + color: $color_value !important; + } + } + } +} + +// Shade classes +@each $color, $color_value in $shades { + .#{$color} { + background-color: $color_value !important; + } + .#{$color}-text { + color: $color_value !important; + } +} diff --git a/src/scss/components/_color-variables.scss b/src/scss/components/_color-variables.scss new file mode 100644 index 00000000..062f6a56 --- /dev/null +++ b/src/scss/components/_color-variables.scss @@ -0,0 +1,370 @@ +// Google Color Palette defined: http://www.google.com/design/spec/style/color.html + +$materialize-red: ( + "base": #e51c23, + "lighten-5": #fdeaeb, + "lighten-4": #f8c1c3, + "lighten-3": #f3989b, + "lighten-2": #ee6e73, + "lighten-1": #ea454b, + "darken-1": #d0181e, + "darken-2": #b9151b, + "darken-3": #a21318, + "darken-4": #8b1014, +); + +$red: ( + "base": #F44336, + "lighten-5": #FFEBEE, + "lighten-4": #FFCDD2, + "lighten-3": #EF9A9A, + "lighten-2": #E57373, + "lighten-1": #EF5350, + "darken-1": #E53935, + "darken-2": #D32F2F, + "darken-3": #C62828, + "darken-4": #B71C1C, + "accent-1": #FF8A80, + "accent-2": #FF5252, + "accent-3": #FF1744, + "accent-4": #D50000 +); + +$pink: ( + "base": #e91e63, + "lighten-5": #fce4ec, + "lighten-4": #f8bbd0, + "lighten-3": #f48fb1, + "lighten-2": #f06292, + "lighten-1": #ec407a, + "darken-1": #d81b60, + "darken-2": #c2185b, + "darken-3": #ad1457, + "darken-4": #880e4f, + "accent-1": #ff80ab, + "accent-2": #ff4081, + "accent-3": #f50057, + "accent-4": #c51162 +); + +$purple: ( + "base": #9c27b0, + "lighten-5": #f3e5f5, + "lighten-4": #e1bee7, + "lighten-3": #ce93d8, + "lighten-2": #ba68c8, + "lighten-1": #ab47bc, + "darken-1": #8e24aa, + "darken-2": #7b1fa2, + "darken-3": #6a1b9a, + "darken-4": #4a148c, + "accent-1": #ea80fc, + "accent-2": #e040fb, + "accent-3": #d500f9, + "accent-4": #aa00ff +); + +$deep-purple: ( + "base": #673ab7, + "lighten-5": #ede7f6, + "lighten-4": #d1c4e9, + "lighten-3": #b39ddb, + "lighten-2": #9575cd, + "lighten-1": #7e57c2, + "darken-1": #5e35b1, + "darken-2": #512da8, + "darken-3": #4527a0, + "darken-4": #311b92, + "accent-1": #b388ff, + "accent-2": #7c4dff, + "accent-3": #651fff, + "accent-4": #6200ea +); + +$indigo: ( + "base": #3f51b5, + "lighten-5": #e8eaf6, + "lighten-4": #c5cae9, + "lighten-3": #9fa8da, + "lighten-2": #7986cb, + "lighten-1": #5c6bc0, + "darken-1": #3949ab, + "darken-2": #303f9f, + "darken-3": #283593, + "darken-4": #1a237e, + "accent-1": #8c9eff, + "accent-2": #536dfe, + "accent-3": #3d5afe, + "accent-4": #304ffe +); + +$blue: ( + "base": #2196F3, + "lighten-5": #E3F2FD, + "lighten-4": #BBDEFB, + "lighten-3": #90CAF9, + "lighten-2": #64B5F6, + "lighten-1": #42A5F5, + "darken-1": #1E88E5, + "darken-2": #1976D2, + "darken-3": #1565C0, + "darken-4": #0D47A1, + "accent-1": #82B1FF, + "accent-2": #448AFF, + "accent-3": #2979FF, + "accent-4": #2962FF +); + +$light-blue: ( + "base": #03a9f4, + "lighten-5": #e1f5fe, + "lighten-4": #b3e5fc, + "lighten-3": #81d4fa, + "lighten-2": #4fc3f7, + "lighten-1": #29b6f6, + "darken-1": #039be5, + "darken-2": #0288d1, + "darken-3": #0277bd, + "darken-4": #01579b, + "accent-1": #80d8ff, + "accent-2": #40c4ff, + "accent-3": #00b0ff, + "accent-4": #0091ea +); + +$cyan: ( + "base": #00bcd4, + "lighten-5": #e0f7fa, + "lighten-4": #b2ebf2, + "lighten-3": #80deea, + "lighten-2": #4dd0e1, + "lighten-1": #26c6da, + "darken-1": #00acc1, + "darken-2": #0097a7, + "darken-3": #00838f, + "darken-4": #006064, + "accent-1": #84ffff, + "accent-2": #18ffff, + "accent-3": #00e5ff, + "accent-4": #00b8d4 +); + +$teal: ( + "base": #009688, + "lighten-5": #e0f2f1, + "lighten-4": #b2dfdb, + "lighten-3": #80cbc4, + "lighten-2": #4db6ac, + "lighten-1": #26a69a, + "darken-1": #00897b, + "darken-2": #00796b, + "darken-3": #00695c, + "darken-4": #004d40, + "accent-1": #a7ffeb, + "accent-2": #64ffda, + "accent-3": #1de9b6, + "accent-4": #00bfa5 +); + +$green: ( + "base": #4CAF50, + "lighten-5": #E8F5E9, + "lighten-4": #C8E6C9, + "lighten-3": #A5D6A7, + "lighten-2": #81C784, + "lighten-1": #66BB6A, + "darken-1": #43A047, + "darken-2": #388E3C, + "darken-3": #2E7D32, + "darken-4": #1B5E20, + "accent-1": #B9F6CA, + "accent-2": #69F0AE, + "accent-3": #00E676, + "accent-4": #00C853 +); + +$light-green: ( + "base": #8bc34a, + "lighten-5": #f1f8e9, + "lighten-4": #dcedc8, + "lighten-3": #c5e1a5, + "lighten-2": #aed581, + "lighten-1": #9ccc65, + "darken-1": #7cb342, + "darken-2": #689f38, + "darken-3": #558b2f, + "darken-4": #33691e, + "accent-1": #ccff90, + "accent-2": #b2ff59, + "accent-3": #76ff03, + "accent-4": #64dd17 +); + +$lime: ( + "base": #cddc39, + "lighten-5": #f9fbe7, + "lighten-4": #f0f4c3, + "lighten-3": #e6ee9c, + "lighten-2": #dce775, + "lighten-1": #d4e157, + "darken-1": #c0ca33, + "darken-2": #afb42b, + "darken-3": #9e9d24, + "darken-4": #827717, + "accent-1": #f4ff81, + "accent-2": #eeff41, + "accent-3": #c6ff00, + "accent-4": #aeea00 +); + +$yellow: ( + "base": #ffeb3b, + "lighten-5": #fffde7, + "lighten-4": #fff9c4, + "lighten-3": #fff59d, + "lighten-2": #fff176, + "lighten-1": #ffee58, + "darken-1": #fdd835, + "darken-2": #fbc02d, + "darken-3": #f9a825, + "darken-4": #f57f17, + "accent-1": #ffff8d, + "accent-2": #ffff00, + "accent-3": #ffea00, + "accent-4": #ffd600 +); + +$amber: ( + "base": #ffc107, + "lighten-5": #fff8e1, + "lighten-4": #ffecb3, + "lighten-3": #ffe082, + "lighten-2": #ffd54f, + "lighten-1": #ffca28, + "darken-1": #ffb300, + "darken-2": #ffa000, + "darken-3": #ff8f00, + "darken-4": #ff6f00, + "accent-1": #ffe57f, + "accent-2": #ffd740, + "accent-3": #ffc400, + "accent-4": #ffab00 +); + +$orange: ( + "base": #ff9800, + "lighten-5": #fff3e0, + "lighten-4": #ffe0b2, + "lighten-3": #ffcc80, + "lighten-2": #ffb74d, + "lighten-1": #ffa726, + "darken-1": #fb8c00, + "darken-2": #f57c00, + "darken-3": #ef6c00, + "darken-4": #e65100, + "accent-1": #ffd180, + "accent-2": #ffab40, + "accent-3": #ff9100, + "accent-4": #ff6d00 +); + +$deep-orange: ( + "base": #ff5722, + "lighten-5": #fbe9e7, + "lighten-4": #ffccbc, + "lighten-3": #ffab91, + "lighten-2": #ff8a65, + "lighten-1": #ff7043, + "darken-1": #f4511e, + "darken-2": #e64a19, + "darken-3": #d84315, + "darken-4": #bf360c, + "accent-1": #ff9e80, + "accent-2": #ff6e40, + "accent-3": #ff3d00, + "accent-4": #dd2c00 +); + +$brown: ( + "base": #795548, + "lighten-5": #efebe9, + "lighten-4": #d7ccc8, + "lighten-3": #bcaaa4, + "lighten-2": #a1887f, + "lighten-1": #8d6e63, + "darken-1": #6d4c41, + "darken-2": #5d4037, + "darken-3": #4e342e, + "darken-4": #3e2723 +); + +$blue-grey: ( + "base": #607d8b, + "lighten-5": #eceff1, + "lighten-4": #cfd8dc, + "lighten-3": #b0bec5, + "lighten-2": #90a4ae, + "lighten-1": #78909c, + "darken-1": #546e7a, + "darken-2": #455a64, + "darken-3": #37474f, + "darken-4": #263238 +); + +$grey: ( + "base": #9e9e9e, + "lighten-5": #fafafa, + "lighten-4": #f5f5f5, + "lighten-3": #eeeeee, + "lighten-2": #e0e0e0, + "lighten-1": #bdbdbd, + "darken-1": #757575, + "darken-2": #616161, + "darken-3": #424242, + "darken-4": #212121 +); + +$shades: ( + "black": #000000, + "white": #FFFFFF, + "transparent": transparent +); + +$colors: ( + "materialize-red": $materialize-red, + "red": $red, + "pink": $pink, + "purple": $purple, + "deep-purple": $deep-purple, + "indigo": $indigo, + "blue": $blue, + "light-blue": $light-blue, + "cyan": $cyan, + "teal": $teal, + "green": $green, + "light-green": $light-green, + "lime": $lime, + "yellow": $yellow, + "amber": $amber, + "orange": $orange, + "deep-orange": $deep-orange, + "brown": $brown, + "blue-grey": $blue-grey, + "grey": $grey, + "shades": $shades +) !default; + + +// usage: color("name_of_color", "type_of_color") +// to avoid to repeating map-get($colors, ...) + +@function color($color, $type) { + @if map-has-key($colors, $color) { + $curr_color: map-get($colors, $color); + @if map-has-key($curr_color, $type) { + @return map-get($curr_color, $type); + } + } + @warn "Unknown `#{$color}` - `#{$type}` in $colors."; + @return null; +} diff --git a/src/scss/components/_datepicker.scss b/src/scss/components/_datepicker.scss new file mode 100644 index 00000000..d2c920b2 --- /dev/null +++ b/src/scss/components/_datepicker.scss @@ -0,0 +1,191 @@ +/* Modal */ +.datepicker-modal { + max-width: 325px; + min-width: 300px; + max-height: none; +} + +.datepicker-container.modal-content { + display: flex; + flex-direction: column; + padding: 0; +} + +.datepicker-controls { + display: flex; + justify-content: space-between; + width: 280px; + margin: 0 auto; + + .selects-container { + display: flex; + } + + .select-wrapper { + input { + &:focus { + border-bottom: none; + } + border-bottom: none; + text-align: center; + margin: 0; + } + + .caret { + display: none; + } + } + + .select-year input { + width: 50px; + } + + .select-month input { + width: 70px; + } +} + +.month-prev, .month-next { + margin-top: 4px; + cursor: pointer; + background-color: transparent; + border: none; +} + + +/* Date Display */ +.datepicker-date-display { + flex: 1 auto; + background-color: $secondary-color; + color: #fff; + padding: 20px 22px; + font-weight: 500; + + .year-text { + display: block; + font-size: 1.5rem; + line-height: 25px; + color: $datepicker-year; + } + + .date-text { + display: block; + font-size: 2.8rem; + line-height: 47px; + font-weight: 500; + } +} + + +/* Calendar */ +.datepicker-calendar-container { + flex: 2.5 auto; +} + +.datepicker-table { + width: 280px; + font-size: 1rem; + margin: 0 auto; + + thead { + border-bottom: none; + } + + th { + padding: 10px 5px; + text-align: center; + } + + tr { + border: none; + } + + abbr { + text-decoration: none; + color: $datepicker-calendar-header-color; + } + + td { + &.is-today { + color: $secondary-color; + } + + &.is-selected { + background-color: $secondary-color; + color: #fff; + } + + &.is-outside-current-month, + &.is-disabled { + color: $datepicker-disabled-day-color; + pointer-events: none; + } + + border-radius: 50%; + padding: 0; + } +} + +.datepicker-day-button { + &:focus { + background-color: $datepicker-day-focus; + } + + background-color: transparent; + border: none; + line-height: 38px; + display: block; + width: 100%; + border-radius: 50%; + padding: 0 5px; + cursor: pointer; + color: inherit; +} + + +/* Footer */ +.datepicker-footer { + width: 280px; + margin: 0 auto; + padding-bottom: 5px; + display: flex; + justify-content: space-between; +} + +.datepicker-cancel, +.datepicker-clear, +.datepicker-today, +.datepicker-done { + color: $secondary-color; + padding: 0 1rem; +} + +.datepicker-clear { + color: $error-color; +} + + +/* Media Queries */ +@media #{$medium-and-up} { + .datepicker-modal { + max-width: 625px; + } + + .datepicker-container.modal-content { + flex-direction: row; + } + + .datepicker-date-display { + flex: 0 1 270px; + } + + .datepicker-controls, + .datepicker-table, + .datepicker-footer { + width: 320px; + } + + .datepicker-day-button { + line-height: 44px; + } +} diff --git a/src/scss/components/_dropdown.scss b/src/scss/components/_dropdown.scss new file mode 100644 index 00000000..0caae65d --- /dev/null +++ b/src/scss/components/_dropdown.scss @@ -0,0 +1,85 @@ +.dropdown-content { + &:focus { + outline: 0; + } + + + @extend .z-depth-1; + background-color: $dropdown-bg-color; + margin: 0; + display: none; + min-width: 100px; + overflow-y: auto; + opacity: 0; + position: absolute; + left: 0; + top: 0; + z-index: 9999; // TODO: Check if this doesn't break other things + transform-origin: 0 0; + + + li { + &:hover, &.active { + background-color: $dropdown-hover-bg-color; + } + + &:focus { + outline: none; + } + + &.divider { + min-height: 0; + height: 1px; + } + + & > a, & > span { + font-size: 16px; + color: $dropdown-color; + display: block; + line-height: 22px; + padding: (($dropdown-item-height - 22) / 2) 16px; + } + + & > span > label { + top: 1px; + left: 0; + height: 18px; + } + + // Icon alignment override + & > a > i { + height: inherit; + line-height: inherit; + float: left; + margin: 0 24px 0 0; + width: 24px; + } + + + clear: both; + color: $off-black; + cursor: pointer; + min-height: $dropdown-item-height; + line-height: 1.5rem; + width: 100%; + text-align: left; + } +} + +body.keyboard-focused { + .dropdown-content li:focus { + background-color: darken($dropdown-hover-bg-color, 8%); + } +} + +// Input field specificity bugfix +.input-field.col .dropdown-content [type="checkbox"] + label { + top: 1px; + left: 0; + height: 18px; + transform: none; +} + +.dropdown-trigger { + cursor: pointer; +} \ No newline at end of file diff --git a/src/scss/components/_global.scss b/src/scss/components/_global.scss new file mode 100644 index 00000000..39f33db0 --- /dev/null +++ b/src/scss/components/_global.scss @@ -0,0 +1,769 @@ +//Default styles + +html { + box-sizing: border-box; +} +*, *:before, *:after { + box-sizing: inherit; +} + +body { + // display: flex; + // min-height: 100vh; + // flex-direction: column; +} + +main { + // flex: 1 0 auto; +} + +button, +input, +optgroup, +select, +textarea { + font-family: $font-stack; +} + +ul { + &:not(.browser-default) { + padding-left: 0; + list-style-type: none; + + & > li { + list-style-type: none; + } + } +} + +a { + color: $link-color; + text-decoration: none; + + // Gets rid of tap active state + -webkit-tap-highlight-color: transparent; +} + + +// Positioning +.valign-wrapper { + display: flex; + align-items: center; +} + + +// classic clearfix +.clearfix { + clear: both; +} + + +// Z-levels +.z-depth-0 { + box-shadow: none !important; +} + +/* 2dp elevation modified*/ +.z-depth-1 { + box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), + 0 3px 1px -2px rgba(0,0,0,0.12), + 0 1px 5px 0 rgba(0,0,0,0.2); +} +.z-depth-1-half { + box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2); +} + +/* 6dp elevation modified*/ +.z-depth-2 { + box-shadow: 0 4px 5px 0 rgba(0,0,0,0.14), + 0 1px 10px 0 rgba(0,0,0,0.12), + 0 2px 4px -1px rgba(0,0,0,0.3); +} + +/* 12dp elevation modified*/ +.z-depth-3 { + box-shadow: 0 8px 17px 2px rgba(0,0,0,0.14), + 0 3px 14px 2px rgba(0,0,0,0.12), + 0 5px 5px -3px rgba(0, 0, 0, 0.2); +} + +/* 16dp elevation */ +.z-depth-4 { + box-shadow: 0 16px 24px 2px rgba(0,0,0,0.14), + 0 6px 30px 5px rgba(0,0,0,0.12), + 0 8px 10px -7px rgba(0,0,0,0.2); +} + +/* 24dp elevation */ +.z-depth-5 { + box-shadow: 0 24px 38px 3px rgba(0,0,0,0.14), + 0 9px 46px 8px rgba(0,0,0,0.12), + 0 11px 15px -7px rgba(0,0,0,0.2); +} + +.hoverable { + transition: box-shadow .25s; + + &:hover { + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); + } +} + +// Dividers + +.divider { + height: 1px; + overflow: hidden; + background-color: color("grey", "lighten-2"); +} + + +// Blockquote + +blockquote { + margin: 20px 0; + padding-left: 1.5rem; + border-left: 5px solid $primary-color; +} + +// Icon Styles + +i { + line-height: inherit; + + &.left { + float: left; + margin-right: 15px; + } + &.right { + float: right; + margin-left: 15px; + } + &.tiny { + font-size: 1rem; + } + &.small { + font-size: 2rem; + } + &.medium { + font-size: 4rem; + } + &.large { + font-size: 6rem; + } +} + +// Images +img.responsive-img, +video.responsive-video { + max-width: 100%; + height: auto; +} + + +// Pagination + +.pagination { + + li { + display: inline-block; + border-radius: 2px; + text-align: center; + vertical-align: top; + height: 30px; + + a { + color: #444; + display: inline-block; + font-size: 1.2rem; + padding: 0 10px; + line-height: 30px; + } + + &.active a { color: #fff; } + + &.active { background-color: $primary-color; } + + &.disabled a { + cursor: default; + color: #999; + } + + i { + font-size: 2rem; + } + } + + + li.pages ul li { + display: inline-block; + float: none; + } +} +@media #{$medium-and-down} { + .pagination { + width: 100%; + + li.prev, + li.next { + width: 10%; + } + + li.pages { + width: 80%; + overflow: hidden; + white-space: nowrap; + } + } +} + +// Breadcrumbs +.breadcrumb { + font-size: 18px; + color: rgba(255,255,255, .7); + + i, + [class^="mdi-"], [class*="mdi-"], + i.material-icons { + display: inline-block; + float: left; + font-size: 24px; + } + + &:before { + content: '\E5CC'; + color: rgba(255,255,255, .7); + vertical-align: top; + display: inline-block; + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 25px; + margin: 0 10px 0 8px; + -webkit-font-smoothing: antialiased; + } + + &:first-child:before { + display: none; + } + + &:last-child { + color: #fff; + } +} + +// Parallax +.parallax-container { + position: relative; + overflow: hidden; + height: 500px; + + .parallax { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: -1; + + img { + opacity: 0; + position: absolute; + left: 50%; + bottom: 0; + min-width: 100%; + min-height: 100%; + transform: translate3d(0,0,0); + transform: translateX(-50%); + } + } +} + +// Pushpin +.pin-top, .pin-bottom { + position: relative; +} +.pinned { + position: fixed !important; +} + +/********************* + Transition Classes +**********************/ + +ul.staggered-list li { + opacity: 0; +} + +.fade-in { + opacity: 0; + transform-origin: 0 50%; +} + + +/********************* + Media Query Classes +**********************/ +.hide-on-small-only, .hide-on-small-and-down { + @media #{$small-and-down} { + display: none !important; + } +} +.hide-on-med-and-down { + @media #{$medium-and-down} { + display: none !important; + } +} +.hide-on-med-and-up { + @media #{$medium-and-up} { + display: none !important; + } +} +.hide-on-med-only { + @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) { + display: none !important; + } +} +.hide-on-large-only { + @media #{$large-and-up} { + display: none !important; + } +} +.hide-on-extra-large-only { + @media #{$extra-large-and-up} { + display: none !important; + } +} +.show-on-extra-large { + @media #{$extra-large-and-up} { + display: block !important; + } +} +.show-on-large { + @media #{$large-and-up} { + display: block !important; + } +} +.show-on-medium { + @media only screen and (min-width: $small-screen) and (max-width: $medium-screen) { + display: block !important; + } +} +.show-on-small { + @media #{$small-and-down} { + display: block !important; + } +} +.show-on-medium-and-up { + @media #{$medium-and-up} { + display: block !important; + } +} +.show-on-medium-and-down { + @media #{$medium-and-down} { + display: block !important; + } +} + + +// Center text on mobile +.center-on-small-only { + @media #{$small-and-down} { + text-align: center; + } +} + +// Footer +.page-footer { + padding-top: 20px; + color: $footer-font-color; + background-color: $footer-bg-color; + + .footer-copyright { + overflow: hidden; + min-height: 50px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 0px; + color: $footer-copyright-font-color; + background-color: $footer-copyright-bg-color; + } +} + +// Tables +table, th, td { + border: none; +} + +table { + width:100%; + display: table; + border-collapse: collapse; + border-spacing: 0; + + &.striped { + tr { + border-bottom: none; + } + + > tbody { + > tr:nth-child(odd) { + background-color: $table-striped-color; + } + + > tr > td { + border-radius: 0; + } + } + } + + &.highlight > tbody > tr { + transition: background-color .25s ease; + &:hover { + background-color: $table-striped-color; + } + } + + &.centered { + thead tr th, tbody tr td { + text-align: center; + } + } +} + +tr { + border-bottom: 1px solid $table-border-color; +} + +td, th{ + padding: 15px 5px; + display: table-cell; + text-align: left; + vertical-align: middle; + border-radius: 2px; +} + +// Responsive Table +@media #{$medium-and-down} { + + table.responsive-table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + display: block; + position: relative; + + td:empty:before { + content: '\00a0'; + } + + th, + td { + margin: 0; + vertical-align: top; + } + + th { text-align: left; } + thead { + display: block; + float: left; + + tr { + display: block; + padding: 0 10px 0 0; + + th::before { + content: "\00a0"; + } + } + } + tbody { + display: block; + width: auto; + position: relative; + overflow-x: auto; + white-space: nowrap; + + tr { + display: inline-block; + vertical-align: top; + } + } + th { + display: block; + text-align: right; + } + td { + display: block; + min-height: 1.25em; + text-align: left; + } + tr { + border-bottom: none; + padding: 0 10px; + } + + /* sort out borders */ + thead { + border: 0; + border-right: 1px solid $table-border-color; + } + } + +} + + +// Collections +.collection { + margin: $element-top-margin 0 $element-bottom-margin 0; + border: 1px solid $collection-border-color; + border-radius: 2px; + overflow: hidden; + position: relative; + + .collection-item { + background-color: $collection-bg-color; + line-height: $collection-line-height; + padding: 10px 20px; + margin: 0; + border-bottom: 1px solid $collection-border-color; + + // Avatar Collection + &.avatar { + min-height: 84px; + padding-left: 72px; + position: relative; + + // Don't style circles inside preloader classes. + &:not(.circle-clipper) > .circle, + :not(.circle-clipper) > .circle { + position: absolute; + width: 42px; + height: 42px; + overflow: hidden; + left: 15px; + display: inline-block; + vertical-align: middle; + } + i.circle { + font-size: 18px; + line-height: 42px; + color: #fff; + background-color: #999; + text-align: center; + } + + + .title { + font-size: 16px; + } + + p { + margin: 0; + } + + .secondary-content { + position: absolute; + top: 16px; + right: 16px; + } + + } + + + &:last-child { + border-bottom: none; + } + + &.active { + background-color: $collection-active-bg-color; + color: $collection-active-color; + + .secondary-content { + color: #fff; + } + } + } + a.collection-item{ + display: block; + transition: .25s; + color: $collection-link-color; + &:not(.active) { + &:hover { + background-color: $collection-hover-bg-color; + } + } + } + + &.with-header { + .collection-header { + background-color: $collection-bg-color; + border-bottom: 1px solid $collection-border-color; + padding: 10px 20px; + } + .collection-item { + padding-left: 30px; + } + .collection-item.avatar { + padding-left: 72px; + } + } + +} +// Made less specific to allow easier overriding +.secondary-content { + float: right; + color: $secondary-color; +} +.collapsible .collection { + margin: 0; + border: none; +} + + + +// Responsive Videos +.video-container { + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden; + + iframe, object, embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} + +// Progress Bar +.progress { + position: relative; + height: 4px; + display: block; + width: 100%; + background-color: lighten($progress-bar-color, 40%); + border-radius: 2px; + margin: $element-top-margin 0 $element-bottom-margin 0; + overflow: hidden; + .determinate { + position: absolute; + top: 0; + left: 0; + bottom: 0; + background-color: $progress-bar-color; + transition: width .3s linear; + } + .indeterminate { + background-color: $progress-bar-color; + &:before { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left:0; + bottom: 0; + will-change: left, right; + // Custom bezier + animation: indeterminate 2.1s cubic-bezier(0.650, 0.815, 0.735, 0.395) infinite; + + } + &:after { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left:0; + bottom: 0; + will-change: left, right; + // Custom bezier + animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.840, 0.440, 1.000) infinite; + animation-delay: 1.15s; + } + } +} +@keyframes indeterminate { + 0% { + left: -35%; + right:100%; + } + 60% { + left: 100%; + right: -90%; + } + 100% { + left: 100%; + right: -90%; + } +} + +@keyframes indeterminate-short { + 0% { + left: -200%; + right: 100%; + } + 60% { + left: 107%; + right: -8%; + } + 100% { + left: 107%; + right: -8%; + } +} + + +/******************* + Utility Classes +*******************/ + +.hide { + display: none !important; +} + +// Text Align +.left-align { + text-align: left; +} +.right-align { + text-align: right +} +.center, .center-align { + text-align: center; +} + +.left { + float: left !important; +} +.right { + float: right !important; +} + +// No Text Select +.no-select { + user-select: none; +} + +.circle { + border-radius: 50%; +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +.truncate { + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.no-padding { + padding: 0 !important; +} diff --git a/src/scss/components/_grid.scss b/src/scss/components/_grid.scss new file mode 100644 index 00000000..8892f050 --- /dev/null +++ b/src/scss/components/_grid.scss @@ -0,0 +1,156 @@ +.container { + margin: 0 auto; + max-width: 1280px; + width: 90%; +} +@media #{$medium-and-up} { + .container { + width: 85%; + } +} +@media #{$large-and-up} { + .container { + width: 70%; + } +} +.col .row { + margin-left: (-1 * $gutter-width / 2); + margin-right: (-1 * $gutter-width / 2); +} + +.section { + padding-top: 1rem; + padding-bottom: 1rem; + + &.no-pad { + padding: 0; + } + &.no-pad-bot { + padding-bottom: 0; + } + &.no-pad-top { + padding-top: 0; + } +} + + +// Mixins to eliminate code repitition +@mixin reset-offset { + margin-left: auto; + left: auto; + right: auto; +} +@mixin grid-classes($size, $i, $perc) { + &.offset-#{$size}#{$i} { + margin-left: $perc; + } + &.pull-#{$size}#{$i} { + right: $perc; + } + &.push-#{$size}#{$i} { + left: $perc; + } +} + + +.row { + margin-left: auto; + margin-right: auto; + margin-bottom: 20px; + + // Clear floating children + &:after { + content: ""; + display: table; + clear: both; + } + + .col { + float: left; + box-sizing: border-box; + padding: 0 $gutter-width / 2; + min-height: 1px; + + &[class*="push-"], + &[class*="pull-"] { + position: relative; + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.s#{$i} { + width: $perc; + @include reset-offset; + } + $i: $i + 1; + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + @include grid-classes("s", $i, $perc); + $i: $i + 1; + } + + @media #{$medium-and-up} { + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.m#{$i} { + width: $perc; + @include reset-offset; + } + $i: $i + 1 + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + @include grid-classes("m", $i, $perc); + $i: $i + 1; + } + } + + @media #{$large-and-up} { + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.l#{$i} { + width: $perc; + @include reset-offset; + } + $i: $i + 1; + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + @include grid-classes("l", $i, $perc); + $i: $i + 1; + } + } + + @media #{$extra-large-and-up} { + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + &.xl#{$i} { + width: $perc; + @include reset-offset; + } + $i: $i + 1; + } + + $i: 1; + @while $i <= $num-cols { + $perc: unquote((100 / ($num-cols / $i)) + "%"); + @include grid-classes("xl", $i, $perc); + $i: $i + 1; + } + } + } +} diff --git a/src/scss/components/_icons-material-design.scss b/src/scss/components/_icons-material-design.scss new file mode 100644 index 00000000..2aa6a4ae --- /dev/null +++ b/src/scss/components/_icons-material-design.scss @@ -0,0 +1,5 @@ +/* This is needed for some mobile phones to display the Google Icon font properly */ +.material-icons { + text-rendering: optimizeLegibility; + font-feature-settings: 'liga'; +} diff --git a/src/scss/components/_materialbox.scss b/src/scss/components/_materialbox.scss new file mode 100644 index 00000000..30276672 --- /dev/null +++ b/src/scss/components/_materialbox.scss @@ -0,0 +1,43 @@ +.materialboxed { + &:hover { + &:not(.active) { + opacity: .8; + } + } + + display: block; + cursor: zoom-in; + position: relative; + transition: opacity .4s; + -webkit-backface-visibility: hidden; + + &.active { + cursor: zoom-out; + } +} + +#materialbox-overlay { + position:fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: #292929; + z-index: 1000; + will-change: opacity; +} + +.materialbox-caption { + position: fixed; + display: none; + color: #fff; + line-height: 50px; + bottom: 0; + left: 0; + width: 100%; + text-align: center; + padding: 0% 15%; + height: 50px; + z-index: 1000; + -webkit-font-smoothing: antialiased; +} \ No newline at end of file diff --git a/src/scss/components/_modal.scss b/src/scss/components/_modal.scss new file mode 100644 index 00000000..38cf3ce8 --- /dev/null +++ b/src/scss/components/_modal.scss @@ -0,0 +1,94 @@ +.modal { + &:focus { + outline: none; + } + + @extend .z-depth-5; + + display: none; + position: fixed; + left: 0; + right: 0; + background-color: #fafafa; + padding: 0; + max-height: 70%; + width: 55%; + margin: auto; + overflow-y: auto; + + border-radius: 2px; + will-change: top, opacity; + + @media #{$medium-and-down} { + width: 80%; + } + + h1,h2,h3,h4 { + margin-top: 0; + } + + .modal-content { + padding: 24px; + } + .modal-close { + cursor: pointer; + } + + .modal-footer { + border-radius: 0 0 2px 2px; + background-color: #fafafa; + padding: 4px 6px; + height: 56px; + width: 100%; + text-align: right; + + .btn, .btn-flat { + margin: 6px 0; + } + } +} +.modal-overlay { + position: fixed; + z-index: 999; + top: -25%; + left: 0; + bottom: 0; + right: 0; + height: 125%; + width: 100%; + background: #000; + display: none; + + will-change: opacity; +} + +// Modal with fixed action footer +.modal.modal-fixed-footer { + padding: 0; + height: 70%; + + .modal-content { + position: absolute; + height: calc(100% - 56px); + max-height: 100%; + width: 100%; + overflow-y: auto; + } + + .modal-footer { + border-top: 1px solid rgba(0,0,0,.1); + position: absolute; + bottom: 0; + } +} + +// Modal Bottom Sheet Style +.modal.bottom-sheet { + top: auto; + bottom: -100%; + margin: 0; + width: 100%; + max-height: 45%; + border-radius: 0; + will-change: bottom, opacity; +} diff --git a/src/scss/components/_navbar.scss b/src/scss/components/_navbar.scss new file mode 100644 index 00000000..0317bb26 --- /dev/null +++ b/src/scss/components/_navbar.scss @@ -0,0 +1,208 @@ +nav { + &.nav-extended { + height: auto; + + .nav-wrapper { + min-height: $navbar-height-mobile; + height: auto; + } + + .nav-content { + position: relative; + line-height: normal; + } + } + + color: $navbar-font-color; + @extend .z-depth-1; + background-color: $primary-color; + width: 100%; + height: $navbar-height-mobile; + line-height: $navbar-line-height-mobile; + + a { color: $navbar-font-color; } + + i, + [class^="mdi-"], [class*="mdi-"], + i.material-icons { + display: block; + font-size: 24px; + height: $navbar-height-mobile; + line-height: $navbar-line-height-mobile; + } + + .nav-wrapper { + position: relative; + height: 100%; + } + + @media #{$large-and-up} { + a.sidenav-trigger { display: none; } + } + + + // Collapse button + .sidenav-trigger { + float: left; + position: relative; + z-index: 1; + height: $navbar-height-mobile; + margin: 0 18px; + + i { + height: $navbar-height-mobile; + line-height: $navbar-line-height-mobile; + } + } + + + // Logo + .brand-logo { + position: absolute; + color: $navbar-font-color; + display: inline-block; + font-size: $navbar-brand-font-size; + padding: 0; + + &.center { + left: 50%; + transform: translateX(-50%); + } + + @media #{$medium-and-down} { + left: 50%; + transform: translateX(-50%); + + &.left, &.right { + padding: 0; + transform: none; + } + + &.left { left: 0.5rem; } + &.right { + right: 0.5rem; + left: auto; + } + } + + &.right { + right: 0.5rem; + padding: 0; + } + + i, + [class^="mdi-"], [class*="mdi-"], + i.material-icons { + float: left; + margin-right: 15px; + } + } + + + // Title + .nav-title { + display: inline-block; + font-size: 32px; + padding: 28px 0; + } + + + // Navbar Links + ul { + margin: 0; + + li { + transition: background-color .3s; + float: left; + padding: 0; + + &.active { + background-color: rgba(0,0,0,.1); + } + } + a { + transition: background-color .3s; + font-size: $navbar-font-size; + color: $navbar-font-color; + display: block; + padding: 0 15px; + cursor: pointer; + + &.btn, &.btn-large, &.btn-flat, &.btn-floating { + margin-top: -2px; + margin-left: 15px; + margin-right: 15px; + + & > .material-icons { + height: inherit; + line-height: inherit; + } + } + + &:hover { + background-color: rgba(0,0,0,.1); + } + } + + &.left { + float: left; + } + } + + // Navbar Search Form + form { + height: 100%; + } + + .input-field { + margin: 0; + height: 100%; + + input { + height: 100%; + font-size: 1.2rem; + border: none; + padding-left: 2rem; + + &:focus, &[type=text]:valid, &[type=password]:valid, + &[type=email]:valid, &[type=url]:valid, &[type=date]:valid { + border: none; + box-shadow: none; + } + } + + label { + top: 0; + left: 0; + + i { + color: rgba(255,255,255,.7); + transition: color .3s; + } + &.active i { color: $navbar-font-color; } + } + } +} + +// Fixed Navbar +.navbar-fixed { + position: relative; + height: $navbar-height-mobile; + z-index: 997; + + nav { + position: fixed; + } +} +@media #{$medium-and-up} { + nav.nav-extended .nav-wrapper { + min-height: $navbar-height; + } + nav, nav .nav-wrapper i, nav a.sidenav-trigger, nav a.sidenav-trigger i { + height: $navbar-height; + line-height: $navbar-line-height; + } + .navbar-fixed { + height: $navbar-height; + } +} diff --git a/src/scss/components/_normalize.scss b/src/scss/components/_normalize.scss new file mode 100644 index 00000000..fa4e73dd --- /dev/null +++ b/src/scss/components/_normalize.scss @@ -0,0 +1,447 @@ +/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers (opinionated). + */ + +body { + margin: 0; +} + +/** + * Add the correct display in IE 9-. + */ + +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ + +figcaption, +figure, +main { /* 1 */ + display: block; +} + +/** + * Add the correct margin in IE 8. + */ + +figure { + margin: 1em 40px; +} + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ + +a { + background-color: transparent; /* 1 */ + -webkit-text-decoration-skip: objects; /* 2 */ +} + +/** + * 1. Remove the bottom border in Chrome 57- and Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ + +b, +strong { + font-weight: inherit; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font style in Android 4.3-. + */ + +dfn { + font-style: italic; +} + +/** + * Add the correct background and color in IE 9-. + */ + +mark { + background-color: #ff0; + color: #000; +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +audio, +video { + display: inline-block; +} + +/** + * Add the correct display in iOS 4-7. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Remove the border on images inside links in IE 10-. + */ + +img { + border-style: none; +} + +/** + * Hide the overflow in IE. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ + +button, +html [type="button"], /* 1 */ +[type="reset"], +[type="submit"] { + -webkit-appearance: button; /* 2 */ +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Remove the default vertical scrollbar in IE. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ + +details, /* 1 */ +menu { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Scripting + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +canvas { + display: inline-block; +} + +/** + * Add the correct display in IE. + */ + +template { + display: none; +} + +/* Hidden + ========================================================================== */ + +/** + * Add the correct display in IE 10-. + */ + +[hidden] { + display: none; +} diff --git a/src/scss/components/_preloader.scss b/src/scss/components/_preloader.scss new file mode 100644 index 00000000..cfe29939 --- /dev/null +++ b/src/scss/components/_preloader.scss @@ -0,0 +1,334 @@ +/* + @license + Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + Code distributed by Google as part of the polymer project is also + subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ + +/**************************/ +/* STYLES FOR THE SPINNER */ +/**************************/ + +/* + * Constants: + * STROKEWIDTH = 3px + * ARCSIZE = 270 degrees (amount of circle the arc takes up) + * ARCTIME = 1333ms (time it takes to expand and contract arc) + * ARCSTARTROT = 216 degrees (how much the start location of the arc + * should rotate each time, 216 gives us a + * 5 pointed star shape (it's 360/5 * 3). + * For a 7 pointed star, we might do + * 360/7 * 3 = 154.286) + * CONTAINERWIDTH = 28px + * SHRINK_TIME = 400ms + */ + + +.preloader-wrapper { + display: inline-block; + position: relative; + width: 50px; + height: 50px; + + &.small { + width: 36px; + height: 36px; + } + + &.big { + width: 64px; + height: 64px; + } + + &.active { + /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */ + -webkit-animation: container-rotate 1568ms linear infinite; + animation: container-rotate 1568ms linear infinite; + } +} + +@-webkit-keyframes container-rotate { + to { -webkit-transform: rotate(360deg) } +} + +@keyframes container-rotate { + to { transform: rotate(360deg) } +} + +.spinner-layer { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + border-color: $spinner-default-color; +} + +.spinner-blue, +.spinner-blue-only { + border-color: #4285f4; +} + +.spinner-red, +.spinner-red-only { + border-color: #db4437; +} + +.spinner-yellow, +.spinner-yellow-only { + border-color: #f4b400; +} + +.spinner-green, +.spinner-green-only { + border-color: #0f9d58; +} + +/** + * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee): + * + * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't + * guarantee that the animation will start _exactly_ after that value. So we avoid using + * animation-delay and instead set custom keyframes for each color (as redundant as it + * seems). + * + * We write out each animation in full (instead of separating animation-name, + * animation-duration, etc.) because under the polyfill, Safari does not recognize those + * specific properties properly, treats them as -webkit-animation, and overrides the + * other animation rules. See https://github.com/Polymer/platform/issues/53. + */ +.active .spinner-layer.spinner-blue { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .spinner-layer.spinner-red { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .spinner-layer.spinner-yellow { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .spinner-layer.spinner-green { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .spinner-layer, +.active .spinner-layer.spinner-blue-only, +.active .spinner-layer.spinner-red-only, +.active .spinner-layer.spinner-yellow-only, +.active .spinner-layer.spinner-green-only { + /* durations: 4 * ARCTIME */ + opacity: 1; + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +@-webkit-keyframes fill-unfill-rotate { + 12.5% { -webkit-transform: rotate(135deg); } /* 0.5 * ARCSIZE */ + 25% { -webkit-transform: rotate(270deg); } /* 1 * ARCSIZE */ + 37.5% { -webkit-transform: rotate(405deg); } /* 1.5 * ARCSIZE */ + 50% { -webkit-transform: rotate(540deg); } /* 2 * ARCSIZE */ + 62.5% { -webkit-transform: rotate(675deg); } /* 2.5 * ARCSIZE */ + 75% { -webkit-transform: rotate(810deg); } /* 3 * ARCSIZE */ + 87.5% { -webkit-transform: rotate(945deg); } /* 3.5 * ARCSIZE */ + to { -webkit-transform: rotate(1080deg); } /* 4 * ARCSIZE */ +} + +@keyframes fill-unfill-rotate { + 12.5% { transform: rotate(135deg); } /* 0.5 * ARCSIZE */ + 25% { transform: rotate(270deg); } /* 1 * ARCSIZE */ + 37.5% { transform: rotate(405deg); } /* 1.5 * ARCSIZE */ + 50% { transform: rotate(540deg); } /* 2 * ARCSIZE */ + 62.5% { transform: rotate(675deg); } /* 2.5 * ARCSIZE */ + 75% { transform: rotate(810deg); } /* 3 * ARCSIZE */ + 87.5% { transform: rotate(945deg); } /* 3.5 * ARCSIZE */ + to { transform: rotate(1080deg); } /* 4 * ARCSIZE */ +} + +@-webkit-keyframes blue-fade-in-out { + from { opacity: 1; } + 25% { opacity: 1; } + 26% { opacity: 0; } + 89% { opacity: 0; } + 90% { opacity: 1; } + 100% { opacity: 1; } +} + +@keyframes blue-fade-in-out { + from { opacity: 1; } + 25% { opacity: 1; } + 26% { opacity: 0; } + 89% { opacity: 0; } + 90% { opacity: 1; } + 100% { opacity: 1; } +} + +@-webkit-keyframes red-fade-in-out { + from { opacity: 0; } + 15% { opacity: 0; } + 25% { opacity: 1; } + 50% { opacity: 1; } + 51% { opacity: 0; } +} + +@keyframes red-fade-in-out { + from { opacity: 0; } + 15% { opacity: 0; } + 25% { opacity: 1; } + 50% { opacity: 1; } + 51% { opacity: 0; } +} + +@-webkit-keyframes yellow-fade-in-out { + from { opacity: 0; } + 40% { opacity: 0; } + 50% { opacity: 1; } + 75% { opacity: 1; } + 76% { opacity: 0; } +} + +@keyframes yellow-fade-in-out { + from { opacity: 0; } + 40% { opacity: 0; } + 50% { opacity: 1; } + 75% { opacity: 1; } + 76% { opacity: 0; } +} + +@-webkit-keyframes green-fade-in-out { + from { opacity: 0; } + 65% { opacity: 0; } + 75% { opacity: 1; } + 90% { opacity: 1; } + 100% { opacity: 0; } +} + +@keyframes green-fade-in-out { + from { opacity: 0; } + 65% { opacity: 0; } + 75% { opacity: 1; } + 90% { opacity: 1; } + 100% { opacity: 0; } +} + +/** + * Patch the gap that appear between the two adjacent div.circle-clipper while the + * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11). + */ +.gap-patch { + position: absolute; + top: 0; + left: 45%; + width: 10%; + height: 100%; + overflow: hidden; + border-color: inherit; +} + +.gap-patch .circle { + width: 1000%; + left: -450%; +} + +.circle-clipper { + display: inline-block; + position: relative; + width: 50%; + height: 100%; + overflow: hidden; + border-color: inherit; + + .circle { + width: 200%; + height: 100%; + border-width: 3px; /* STROKEWIDTH */ + border-style: solid; + border-color: inherit; + border-bottom-color: transparent !important; + border-radius: 50%; + -webkit-animation: none; + animation: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + } + + &.left .circle { + left: 0; + border-right-color: transparent !important; + -webkit-transform: rotate(129deg); + transform: rotate(129deg); + } + &.right .circle { + left: -100%; + border-left-color: transparent !important; + -webkit-transform: rotate(-129deg); + transform: rotate(-129deg); + } +} + + + +.active .circle-clipper.left .circle { + /* duration: ARCTIME */ + -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +.active .circle-clipper.right .circle { + /* duration: ARCTIME */ + -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; + animation: right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both; +} + +@-webkit-keyframes left-spin { + from { -webkit-transform: rotate(130deg); } + 50% { -webkit-transform: rotate(-5deg); } + to { -webkit-transform: rotate(130deg); } +} + +@keyframes left-spin { + from { transform: rotate(130deg); } + 50% { transform: rotate(-5deg); } + to { transform: rotate(130deg); } +} + +@-webkit-keyframes right-spin { + from { -webkit-transform: rotate(-130deg); } + 50% { -webkit-transform: rotate(5deg); } + to { -webkit-transform: rotate(-130deg); } +} + +@keyframes right-spin { + from { transform: rotate(-130deg); } + 50% { transform: rotate(5deg); } + to { transform: rotate(-130deg); } +} + +#spinnerContainer.cooldown { + /* duration: SHRINK_TIME */ + -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1); + animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1); +} + +@-webkit-keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} + +@keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} diff --git a/src/scss/components/_pulse.scss b/src/scss/components/_pulse.scss new file mode 100644 index 00000000..a690f367 --- /dev/null +++ b/src/scss/components/_pulse.scss @@ -0,0 +1,34 @@ +.pulse { + &::before { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: inherit; + border-radius: inherit; + transition: opacity .3s, transform .3s; + animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + z-index: -1; + } + + overflow: visible; + position: relative; +} + +@keyframes pulse-animation { + 0% { + opacity: 1; + transform: scale(1); + } + 50% { + opacity: 0; + transform: scale(1.5); + } + 100% { + opacity: 0; + transform: scale(1.5); + } +} diff --git a/src/scss/components/_sidenav.scss b/src/scss/components/_sidenav.scss new file mode 100644 index 00000000..98a71d8a --- /dev/null +++ b/src/scss/components/_sidenav.scss @@ -0,0 +1,216 @@ +.sidenav { + position: fixed; + width: $sidenav-width; + left: 0; + top: 0; + margin: 0; + transform: translateX(-100%); + height: 100%; + height: calc(100% + 60px); + height: -moz-calc(100%); //Temporary Firefox Fix + padding-bottom: 60px; + background-color: $sidenav-bg-color; + z-index: 999; + overflow-y: auto; + will-change: transform; + backface-visibility: hidden; + transform: translateX(-105%); + + @extend .z-depth-1; + + // Right Align + &.right-aligned { + right: 0; + transform: translateX(105%); + left: auto; + transform: translateX(100%); + } + + .collapsible { + margin: 0; + } + + + li { + float: none; + line-height: $sidenav-line-height; + + &.active { background-color: rgba(0,0,0,.05); } + } + + li > a { + color: $sidenav-font-color; + display: block; + font-size: $sidenav-font-size; + font-weight: 500; + height: $sidenav-item-height; + line-height: $sidenav-line-height; + padding: 0 ($sidenav-padding * 2); + + &:hover { background-color: rgba(0,0,0,.05);} + + &.btn, &.btn-large, &.btn-flat, &.btn-floating { + margin: 10px 15px; + } + + &.btn, + &.btn-large, + &.btn-floating { color: $button-raised-color; } + &.btn-flat { color: $button-flat-color; } + + &.btn:hover, + &.btn-large:hover { background-color: lighten($button-raised-background, 5%); } + &.btn-floating:hover { background-color: $button-raised-background; } + + & > i, + & > [class^="mdi-"], li > a > [class*="mdi-"], + & > i.material-icons { + float: left; + height: $sidenav-item-height; + line-height: $sidenav-line-height; + margin: 0 ($sidenav-padding * 2) 0 0; + width: $sidenav-item-height / 2; + color: rgba(0,0,0,.54); + } + } + + + .divider { + margin: ($sidenav-padding / 2) 0 0 0; + } + + .subheader { + &:hover { + background-color: transparent; + } + + cursor: initial; + pointer-events: none; + color: rgba(0,0,0,.54); + font-size: $sidenav-font-size; + font-weight: 500; + line-height: $sidenav-line-height; + } + + .user-view { + position: relative; + padding: ($sidenav-padding * 2) ($sidenav-padding * 2) 0; + margin-bottom: $sidenav-padding / 2; + + & > a { + &:hover { background-color: transparent; } + height: auto; + padding: 0; + } + + .background { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; + } + + .circle, .name, .email { + display: block; + } + + .circle { + height: 64px; + width: 64px; + } + + .name, + .email { + font-size: $sidenav-font-size; + line-height: $sidenav-line-height / 2; + } + + .name { + margin-top: 16px; + font-weight: 500; + } + + .email { + padding-bottom: 16px; + font-weight: 400; + } + } +} + + +// Touch interaction +.drag-target { + // Right Align + &.right-aligned { + right: 0; + } + + height: 100%; + width: 10px; + position: fixed; + top: 0; + z-index: 998; +} + + +// Fixed Sidenav shown +.sidenav.sidenav-fixed { + // Right Align + &.right-aligned { + right: 0; + left: auto; + } + + left: 0; + transform: translateX(0); + position: fixed; +} + +// Fixed Sidenav hide on smaller +@media #{$medium-and-down} { + .sidenav { + &.sidenav-fixed { + transform: translateX(-105%); + + &.right-aligned { + transform: translateX(105%); + } + } + + > a { + padding: 0 $sidenav-padding; + } + + .user-view { + padding: $sidenav-padding $sidenav-padding 0; + } + } +} + + +.sidenav .collapsible-body > ul:not(.collapsible) > li.active, +.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active { + background-color: $primary-color; + a { + color: $sidenav-bg-color; + } +} +.sidenav .collapsible-body { + padding: 0; +} + + +.sidenav-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + opacity: 0; + height: 120vh; + background-color: rgba(0,0,0,.5); + z-index: 997; + display: none; +} diff --git a/src/scss/components/_slider.scss b/src/scss/components/_slider.scss new file mode 100644 index 00000000..5d7c27ed --- /dev/null +++ b/src/scss/components/_slider.scss @@ -0,0 +1,92 @@ +.slider { + position: relative; + height: 400px; + width: 100%; + + // Fullscreen slider + &.fullscreen { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + + ul.slides { + height: 100%; + } + + ul.indicators { + z-index: 2; + bottom: 30px; + } + } + + .slides { + background-color: $slider-bg-color; + margin: 0; + height: 400px; + + li { + opacity: 0; + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: inherit; + overflow: hidden; + + img { + height: 100%; + width: 100%; + background-size: cover; + background-position: center; + } + + .caption { + color: #fff; + position: absolute; + top: 15%; + left: 15%; + width: 70%; + opacity: 0; + + p { color: $slider-bg-color-light; } + } + + &.active { + z-index: 2; + } + } + } + + + .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0; + + .indicator-item { + display: inline-block; + position: relative; + cursor: pointer; + height: 16px; + width: 16px; + margin: 0 12px; + background-color: $slider-bg-color-light; + + transition: background-color .3s; + border-radius: 50%; + + &.active { + background-color: $slider-indicator-color; + } + } + } + +} \ No newline at end of file diff --git a/src/scss/components/_table_of_contents.scss b/src/scss/components/_table_of_contents.scss new file mode 100644 index 00000000..638009d9 --- /dev/null +++ b/src/scss/components/_table_of_contents.scss @@ -0,0 +1,33 @@ +/*************** + Nav List +***************/ +.table-of-contents { + &.fixed { + position: fixed; + } + + li { + padding: 2px 0; + } + a { + display: inline-block; + font-weight: 300; + color: #757575; + padding-left: 16px; + height: 1.5rem; + line-height: 1.5rem; + letter-spacing: .4; + display: inline-block; + + &:hover { + color: lighten(#757575, 20%); + padding-left: 15px; + border-left: 1px solid $primary-color; + } + &.active { + font-weight: 500; + padding-left: 14px; + border-left: 2px solid $primary-color; + } + } +} diff --git a/src/scss/components/_tabs.scss b/src/scss/components/_tabs.scss new file mode 100644 index 00000000..072d4b6c --- /dev/null +++ b/src/scss/components/_tabs.scss @@ -0,0 +1,99 @@ +.tabs { + &.tabs-transparent { + background-color: transparent; + + .tab a, + .tab.disabled a, + .tab.disabled a:hover { + color: rgba(255,255,255,0.7); + } + + .tab a:hover, + .tab a.active { + color: #fff; + } + + .indicator { + background-color: #fff; + } + } + + &.tabs-fixed-width { + display: flex; + + .tab { + flex-grow: 1; + } + } + + position: relative; + overflow-x: auto; + overflow-y: hidden; + height: 48px; + width: 100%; + background-color: $tabs-bg-color; + margin: 0 auto; + white-space: nowrap; + + .tab { + display: inline-block; + text-align: center; + line-height: 48px; + height: 48px; + padding: 0; + margin: 0; + text-transform: uppercase; + + a { + &:focus, + &:focus.active { + background-color: transparentize($tabs-underline-color, .8); + outline: none; + } + + &:hover, + &.active { + background-color: transparent; + color: $tabs-text-color; + } + + color: rgba($tabs-text-color, .7); + display: block; + width: 100%; + height: 100%; + padding: 0 24px; + font-size: 14px; + text-overflow: ellipsis; + overflow: hidden; + transition: color .28s ease, background-color .28s ease; + } + + &.disabled a, + &.disabled a:hover { + color: rgba($tabs-text-color, .4); + cursor: default; + } + } + .indicator { + position: absolute; + bottom: 0; + height: 2px; + background-color: $tabs-underline-color; + will-change: left, right; + } +} + +// Fixed Sidenav hide on smaller +@media #{$medium-and-down} { + .tabs { + display: flex; + + .tab { + flex-grow: 1; + + a { + padding: 0 12px; + } + } + } +} diff --git a/src/scss/components/_tapTarget.scss b/src/scss/components/_tapTarget.scss new file mode 100644 index 00000000..49aecd56 --- /dev/null +++ b/src/scss/components/_tapTarget.scss @@ -0,0 +1,103 @@ +.tap-target-wrapper { + width: 800px; + height: 800px; + position: fixed; + z-index: 1000; + visibility: hidden; + transition: visibility 0s .3s; +} + +.tap-target-wrapper.open { + visibility: visible; + transition: visibility 0s; + + .tap-target { + transform: scale(1); + opacity: .95; + transition: + transform .3s cubic-bezier(.42,0,.58,1), + opacity .3s cubic-bezier(.42,0,.58,1); + } + + .tap-target-wave::before { + transform: scale(1); + } + .tap-target-wave::after { + visibility: visible; + animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + transition: + opacity .3s, + transform .3s, + visibility 0s 1s; + } +} + +.tap-target { + position: absolute; + font-size: 1rem; + border-radius: 50%; + background-color: $primary-color; + box-shadow: 0 20px 20px 0 rgba(0,0,0,0.14), 0 10px 50px 0 rgba(0,0,0,0.12), 0 30px 10px -20px rgba(0,0,0,0.2); + width: 100%; + height: 100%; + opacity: 0; + transform: scale(0); + transition: + transform .3s cubic-bezier(.42,0,.58,1), + opacity .3s cubic-bezier(.42,0,.58,1); +} + +.tap-target-content { + position: relative; + display: table-cell; +} + +.tap-target-wave { + &::before, + &::after { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #ffffff; + } + &::before { + transform: scale(0); + transition: transform .3s; + } + &::after { + visibility: hidden; + transition: + opacity .3s, + transform .3s, + visibility 0s; + z-index: -1; + } + + position: absolute; + border-radius: 50%; + z-index: 10001; +} + +.tap-target-origin { + &:not(.btn), + &:not(.btn):hover { + background: none; + } + + top: 50%; + left: 50%; + transform: translate(-50%,-50%); + + z-index: 10002; + position: absolute !important; +} + +@media only screen and (max-width: 600px) { + .tap-target, .tap-target-wrapper { + width: 600px; + height: 600px; + } +} diff --git a/src/scss/components/_timepicker.scss b/src/scss/components/_timepicker.scss new file mode 100644 index 00000000..fa602fbb --- /dev/null +++ b/src/scss/components/_timepicker.scss @@ -0,0 +1,183 @@ +/* Timepicker Containers */ +.timepicker-modal { + max-width: 325px; + max-height: none; +} + +.timepicker-container.modal-content { + display: flex; + flex-direction: column; + padding: 0; +} + +.text-primary { + color: rgba(255, 255, 255, 1); +} + + +/* Clock Digital Display */ +.timepicker-digital-display { + flex: 1 auto; + background-color: $secondary-color; + padding: 10px; + font-weight: 300; +} + +.timepicker-text-container { + font-size: 4rem; + font-weight: bold; + text-align: center; + color: rgba(255, 255, 255, 0.6); + font-weight: 400; + position: relative; + user-select: none; +} + +.timepicker-span-hours, +.timepicker-span-minutes, +.timepicker-span-am-pm div { + cursor: pointer; +} + +.timepicker-span-hours { + margin-right: 3px; +} + +.timepicker-span-minutes { + margin-left: 3px; +} + +.timepicker-display-am-pm { + font-size: 1.3rem; + position: absolute; + right: 1rem; + bottom: 1rem; + font-weight: 400; +} + + +/* Analog Clock Display */ +.timepicker-analog-display { + flex: 2.5 auto; +} + +.timepicker-plate { + background-color: $timepicker-clock-plate-bg; + border-radius: 50%; + width: 270px; + height: 270px; + overflow: visible; + position: relative; + margin: auto; + margin-top: 25px; + margin-bottom: 5px; + user-select: none; +} + +.timepicker-canvas, +.timepicker-dial { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; +} +.timepicker-minutes { + visibility: hidden; +} + +.timepicker-tick { + border-radius: 50%; + color: $timepicker-clock-color; + line-height: 40px; + text-align: center; + width: 40px; + height: 40px; + position: absolute; + cursor: pointer; + font-size: 15px; +} + +.timepicker-tick.active, +.timepicker-tick:hover { + background-color: transparentize($secondary-color, .75); +} +.timepicker-dial { + transition: transform 350ms, opacity 350ms; +} +.timepicker-dial-out { + &.timepicker-hours { + transform: scale(1.1, 1.1); + } + + &.timepicker-minutes { + transform: scale(.8, .8); + } + + opacity: 0; +} +.timepicker-canvas { + transition: opacity 175ms; + + line { + stroke: $secondary-color; + stroke-width: 4; + stroke-linecap: round; + } +} +.timepicker-canvas-out { + opacity: 0.25; +} +.timepicker-canvas-bearing { + stroke: none; + fill: $secondary-color; +} +.timepicker-canvas-bg { + stroke: none; + fill: $secondary-color; +} + + +/* Footer */ +.timepicker-footer { + margin: 0 auto; + padding: 5px 1rem; + display: flex; + justify-content: space-between; +} + +.timepicker-clear { + color: $error-color; +} + +.timepicker-close { + color: $secondary-color; +} + +.timepicker-clear, +.timepicker-close { + padding: 0 20px; +} + +/* Media Queries */ +@media #{$medium-and-up} { + .timepicker-modal { + max-width: 600px; + } + + .timepicker-container.modal-content { + flex-direction: row; + } + + .timepicker-text-container { + top: 32%; + } + + .timepicker-display-am-pm { + position: relative; + right: auto; + bottom: auto; + text-align: center; + margin-top: 1.2rem; + } +} diff --git a/src/scss/components/_toast.scss b/src/scss/components/_toast.scss new file mode 100644 index 00000000..412400ff --- /dev/null +++ b/src/scss/components/_toast.scss @@ -0,0 +1,58 @@ +#toast-container { + display:block; + position: fixed; + z-index: 10000; + + @media #{$small-and-down} { + min-width: 100%; + bottom: 0%; + } + @media #{$medium-only} { + left: 5%; + bottom: 7%; + max-width: 90%; + } + @media #{$large-and-up} { + top: 10%; + right: 7%; + max-width: 86%; + } +} + +.toast { + @extend .z-depth-1; + border-radius: 2px; + top: 35px; + width: auto; + margin-top: 10px; + position: relative; + max-width:100%; + height: auto; + min-height: $toast-height; + line-height: 1.5em; + background-color: $toast-color; + padding: 10px 25px; + font-size: 1.1rem; + font-weight: 300; + color: $toast-text-color; + display: flex; + align-items: center; + justify-content: space-between; + cursor: default; + + .toast-action { + color: $toast-action-color; + font-weight: 500; + margin-right: -25px; + margin-left: 3rem; + } + + &.rounded{ + border-radius: 24px; + } + + @media #{$small-and-down} { + width: 100%; + border-radius: 0; + } +} diff --git a/src/scss/components/_tooltip.scss b/src/scss/components/_tooltip.scss new file mode 100644 index 00000000..5ec4299b --- /dev/null +++ b/src/scss/components/_tooltip.scss @@ -0,0 +1,32 @@ +.material-tooltip { + padding: 10px 8px; + font-size: 1rem; + z-index: 2000; + background-color: transparent; + border-radius: 2px; + color: #fff; + min-height: 36px; + line-height: 120%; + opacity: 0; + position: absolute; + text-align: center; + max-width: calc(100% - 4px); + overflow: hidden; + left: 0; + top: 0; + pointer-events: none; + visibility: hidden; + background-color: #323232; +} + +.backdrop { + position: absolute; + opacity: 0; + height: 7px; + width: 14px; + border-radius: 0 0 50% 50%; + background-color: #323232; + z-index: -1; + transform-origin: 50% 0%; + visibility: hidden; +} diff --git a/src/scss/components/_transitions.scss b/src/scss/components/_transitions.scss new file mode 100644 index 00000000..cb9f60db --- /dev/null +++ b/src/scss/components/_transitions.scss @@ -0,0 +1,13 @@ +// Scale transition +.scale-transition { + &.scale-out { + transform: scale(0); + transition: transform .2s !important; + } + + &.scale-in { + transform: scale(1); + } + + transition: transform .3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; +} \ No newline at end of file diff --git a/src/scss/components/_typography.scss b/src/scss/components/_typography.scss new file mode 100644 index 00000000..b9b93b3e --- /dev/null +++ b/src/scss/components/_typography.scss @@ -0,0 +1,60 @@ + +a { + text-decoration: none; +} + +html{ + line-height: 1.5; + + @media only screen and (min-width: 0) { + font-size: 14px; + } + + @media only screen and (min-width: $medium-screen) { + font-size: 14.5px; + } + + @media only screen and (min-width: $large-screen) { + font-size: 15px; + } + + font-family: $font-stack; + font-weight: normal; + color: $off-black; +} +h1, h2, h3, h4, h5, h6 { + font-weight: 400; + line-height: 1.3; +} + +// Header Styles +h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; } +h1 { font-size: $h1-fontsize; line-height: 110%; margin: ($h1-fontsize / 1.5) 0 ($h1-fontsize / 2.5) 0;} +h2 { font-size: $h2-fontsize; line-height: 110%; margin: ($h2-fontsize / 1.5) 0 ($h2-fontsize / 2.5) 0;} +h3 { font-size: $h3-fontsize; line-height: 110%; margin: ($h3-fontsize / 1.5) 0 ($h3-fontsize / 2.5) 0;} +h4 { font-size: $h4-fontsize; line-height: 110%; margin: ($h4-fontsize / 1.5) 0 ($h4-fontsize / 2.5) 0;} +h5 { font-size: $h5-fontsize; line-height: 110%; margin: ($h5-fontsize / 1.5) 0 ($h5-fontsize / 2.5) 0;} +h6 { font-size: $h6-fontsize; line-height: 110%; margin: ($h6-fontsize / 1.5) 0 ($h6-fontsize / 2.5) 0;} + +// Text Styles +em { font-style: italic; } +strong { font-weight: 500; } +small { font-size: 75%; } +.light { font-weight: 300; } +.thin { font-weight: 200; } + + +.flow-text{ + $i: 0; + @while $i <= $intervals { + @media only screen and (min-width : 360 + ($i * $interval-size)) { + font-size: 1.2rem * (1 + (.02 * $i)); + } + $i: $i + 1; + } + + // Handle below 360px screen + @media only screen and (max-width: 360px) { + font-size: 1.2rem; + } +} diff --git a/src/scss/components/_variables.scss b/src/scss/components/_variables.scss new file mode 100644 index 00000000..4c59c127 --- /dev/null +++ b/src/scss/components/_variables.scss @@ -0,0 +1,349 @@ +// ========================================================================== +// Materialize variables +// ========================================================================== +// +// Table of Contents: +// +// 1. Colors +// 2. Badges +// 3. Buttons +// 4. Cards +// 5. Carousel +// 6. Collapsible +// 7. Chips +// 8. Date + Time Picker +// 9. Dropdown +// 10. Forms +// 11. Global +// 12. Grid +// 13. Navigation Bar +// 14. Side Navigation +// 15. Photo Slider +// 16. Spinners | Loaders +// 17. Tabs +// 18. Tables +// 19. Toasts +// 20. Typography +// 21. Footer +// 22. Flow Text +// 23. Collections +// 24. Progress Bar + + + +// 1. Colors +// ========================================================================== + +$primary-color: color("materialize-red", "lighten-2") !default; +$primary-color-light: lighten($primary-color, 15%) !default; +$primary-color-dark: darken($primary-color, 15%) !default; + +$secondary-color: color("teal", "lighten-1") !default; +$success-color: color("green", "base") !default; +$error-color: color("red", "base") !default; +$link-color: color("light-blue", "darken-1") !default; + + +// 2. Badges +// ========================================================================== + +$badge-bg-color: $secondary-color !default; +$badge-height: 22px !default; + + +// 3. Buttons +// ========================================================================== + +// Shared styles +$button-border: none !default; +$button-background-focus: lighten($secondary-color, 4%) !default; +$button-font-size: 14px !default; +$button-icon-font-size: 1.3rem !default; +$button-height: 36px !default; +$button-padding: 0 16px !default; +$button-radius: 2px !default; + +// Disabled styles +$button-disabled-background: #DFDFDF !default; +$button-disabled-color: #9F9F9F !default; + +// Raised buttons +$button-raised-background: $secondary-color !default; +$button-raised-background-hover: lighten($button-raised-background, 5%) !default; +$button-raised-color: #fff !default; + +// Large buttons +$button-large-font-size: 15px !default; +$button-large-icon-font-size: 1.6rem !default; +$button-large-height: $button-height * 1.5 !default; +$button-floating-large-size: 56px !default; + +// Small buttons +$button-small-font-size: 13px !default; +$button-small-icon-font-size: 1.2rem !default; +$button-small-height: $button-height * .9 !default; +$button-floating-small-size: $button-height * .9 !default; + +// Flat buttons +$button-flat-color: #343434 !default; +$button-flat-disabled-color: lighten(#999, 10%) !default; + +// Floating buttons +$button-floating-background: $secondary-color !default; +$button-floating-background-hover: $button-floating-background !default; +$button-floating-color: #fff !default; +$button-floating-size: 40px !default; +$button-floating-radius: 50% !default; + + +// 4. Cards +// ========================================================================== + +$card-padding: 24px !default; +$card-bg-color: #fff !default; +$card-link-color: color("orange", "accent-2") !default; +$card-link-color-light: lighten($card-link-color, 20%) !default; + + +// 5. Carousel +// ========================================================================== + +$carousel-height: 400px !default; +$carousel-item-height: $carousel-height / 2 !default; +$carousel-item-width: $carousel-item-height !default; + + +// 6. Collapsible +// ========================================================================== + +$collapsible-height: 3rem !default; +$collapsible-line-height: $collapsible-height !default; +$collapsible-header-color: #fff !default; +$collapsible-border-color: #ddd !default; + + +// 7. Chips +// ========================================================================== + +$chip-bg-color: #e4e4e4 !default; +$chip-border-color: #9e9e9e !default; +$chip-selected-color: #26a69a !default; +$chip-margin: 5px !default; + + +// 8. Date + Time Picker +// ========================================================================== + +$datepicker-display-font-size: 2.8rem; +$datepicker-calendar-header-color: #999; +$datepicker-weekday-color: rgba(0, 0, 0, .87) !default; +$datepicker-weekday-bg: darken($secondary-color, 7%) !default; +$datepicker-date-bg: $secondary-color !default; +$datepicker-year: rgba(255, 255, 255, .7) !default; +$datepicker-focus: rgba(0,0,0, .05) !default; +$datepicker-selected: $secondary-color !default; +$datepicker-selected-outfocus: desaturate(lighten($secondary-color, 35%), 15%) !default; +$datepicker-day-focus: transparentize(desaturate($secondary-color, 5%), .75) !default; +$datepicker-disabled-day-color: rgba(0, 0, 0, .3) !default; + +$timepicker-clock-color: rgba(0, 0, 0, .87) !default; +$timepicker-clock-plate-bg: #eee !default; + + +// 9. Dropdown +// ========================================================================== + +$dropdown-bg-color: #fff !default; +$dropdown-hover-bg-color: #eee !default; +$dropdown-color: $secondary-color !default; +$dropdown-item-height: 50px !default; + + +// 10. Forms +// ========================================================================== + +// Text Inputs + Textarea +$input-height: 3rem !default; +$input-border-color: color("grey", "base") !default; +$input-border: 1px solid $input-border-color !default; +$input-background: #fff !default; +$input-error-color: $error-color !default; +$input-success-color: $success-color !default; +$input-focus-color: $secondary-color !default; +$input-font-size: 16px !default; +$input-margin-bottom: 8px; +$input-margin: 0 0 $input-margin-bottom 0 !default; +$input-padding: 0 !default; +$label-font-size: .8rem !default; +$input-disabled-color: rgba(0,0,0, .42) !default; +$input-disabled-solid-color: #949494 !default; +$input-disabled-border: 1px dotted $input-disabled-color !default; +$input-invalid-border: 1px solid $input-error-color !default; +$input-icon-size: 2rem; +$placeholder-text-color: lighten($input-border-color, 20%) !default; + +// Radio Buttons +$radio-fill-color: $secondary-color !default; +$radio-empty-color: #5a5a5a !default; +$radio-border: 2px solid $radio-fill-color !default; + +// Range +$range-height: 14px !default; +$range-width: 14px !default; +$track-height: 3px !default; + +// Select +$select-border: 1px solid #f2f2f2 !default; +$select-background: rgba(255, 255, 255, 0.90) !default; +$select-focus: 1px solid lighten($secondary-color, 47%) !default; +$select-option-hover: rgba(0,0,0,.08) !default; +$select-option-focus: rgba(0,0,0,.08) !default; +$select-option-selected: rgba(0,0,0,.03) !default; +$select-padding: 5px !default; +$select-radius: 2px !default; +$select-disabled-color: rgba(0,0,0,.3) !default; + +// Switches +$switch-bg-color: $secondary-color !default; +$switch-checked-lever-bg: desaturate(lighten($switch-bg-color, 25%), 25%) !default; +$switch-unchecked-bg: #F1F1F1 !default; +$switch-unchecked-lever-bg: rgba(0,0,0,.38) !default; +$switch-radius: 15px !default; + + +// 11. Global +// ========================================================================== + +// Media Query Ranges +$small-screen-up: 601px !default; +$medium-screen-up: 993px !default; +$large-screen-up: 1201px !default; +$small-screen: 600px !default; +$medium-screen: 992px !default; +$large-screen: 1200px !default; + +$medium-and-up: "only screen and (min-width : #{$small-screen-up})" !default; +$large-and-up: "only screen and (min-width : #{$medium-screen-up})" !default; +$extra-large-and-up: "only screen and (min-width : #{$large-screen-up})" !default; +$small-and-down: "only screen and (max-width : #{$small-screen})" !default; +$medium-and-down: "only screen and (max-width : #{$medium-screen})" !default; +$medium-only: "only screen and (min-width : #{$small-screen-up}) and (max-width : #{$medium-screen})" !default; + + +// 12. Grid +// ========================================================================== + +$num-cols: 12 !default; +$gutter-width: 1.5rem !default; +$element-top-margin: $gutter-width/3 !default; +$element-bottom-margin: ($gutter-width*2)/3 !default; + + +// 13. Navigation Bar +// ========================================================================== + +$navbar-height: 64px !default; +$navbar-line-height: $navbar-height !default; +$navbar-height-mobile: 56px !default; +$navbar-line-height-mobile: $navbar-height-mobile !default; +$navbar-font-size: 1rem !default; +$navbar-font-color: #fff !default; +$navbar-brand-font-size: 2.1rem !default; + +// 14. Side Navigation +// ========================================================================== + +$sidenav-width: 300px !default; +$sidenav-font-size: 14px !default; +$sidenav-font-color: rgba(0,0,0,.87) !default; +$sidenav-bg-color: #fff !default; +$sidenav-padding: 16px !default; +$sidenav-item-height: 48px !default; +$sidenav-line-height: $sidenav-item-height !default; + + +// 15. Photo Slider +// ========================================================================== + +$slider-bg-color: color('grey', 'base') !default; +$slider-bg-color-light: color('grey', 'lighten-2') !default; +$slider-indicator-color: color('green', 'base') !default; + + +// 16. Spinners | Loaders +// ========================================================================== + +$spinner-default-color: $secondary-color !default; + + +// 17. Tabs +// ========================================================================== + +$tabs-underline-color: $primary-color-light !default; +$tabs-text-color: $primary-color !default; +$tabs-bg-color: #fff !default; + + +// 18. Tables +// ========================================================================== + +$table-border-color: rgba(0,0,0,.12) !default; +$table-striped-color: rgba(242, 242, 242, 0.5) !default; + + +// 19. Toasts +// ========================================================================== + +$toast-height: 48px !default; +$toast-color: #323232 !default; +$toast-text-color: #fff !default; +$toast-action-color: #eeff41; + + +// 20. Typography +// ========================================================================== + +$font-stack: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif !default; +$off-black: rgba(0, 0, 0, 0.87) !default; +// Header Styles +$h1-fontsize: 4.2rem !default; +$h2-fontsize: 3.56rem !default; +$h3-fontsize: 2.92rem !default; +$h4-fontsize: 2.28rem !default; +$h5-fontsize: 1.64rem !default; +$h6-fontsize: 1.15rem !default; + + +// 21. Footer +// ========================================================================== + +$footer-font-color: #fff !default; +$footer-bg-color: $primary-color !default; +$footer-copyright-font-color: rgba(255,255,255,.8) !default; +$footer-copyright-bg-color: rgba(51,51,51,.08) !default; + + +// 22. Flow Text +// ========================================================================== + +$range : $large-screen - $small-screen !default; +$intervals: 20 !default; +$interval-size: $range / $intervals !default; + + +// 23. Collections +// ========================================================================== + +$collection-border-color: #e0e0e0 !default; +$collection-bg-color: #fff !default; +$collection-active-bg-color: $secondary-color !default; +$collection-active-color: lighten($secondary-color, 55%) !default; +$collection-hover-bg-color: #ddd !default; +$collection-link-color: $secondary-color !default; +$collection-line-height: 1.5rem !default; + + +// 24. Progress Bar +// ========================================================================== + +$progress-bar-color: $secondary-color !default; diff --git a/src/scss/components/_waves.scss b/src/scss/components/_waves.scss new file mode 100644 index 00000000..b36c7181 --- /dev/null +++ b/src/scss/components/_waves.scss @@ -0,0 +1,114 @@ + +/*! + * Waves v0.6.0 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */ + + +.waves-effect { + position: relative; + cursor: pointer; + display: inline-block; + overflow: hidden; + user-select: none; + -webkit-tap-highlight-color: transparent; + vertical-align: middle; + z-index: 1; + transition: .3s ease-out; + + .waves-ripple { + position: absolute; + border-radius: 50%; + width: 20px; + height: 20px; + margin-top:-10px; + margin-left:-10px; + opacity: 0; + + background: rgba(0,0,0,0.2); + transition: all 0.7s ease-out; + transition-property: transform, opacity; + transform: scale(0); + pointer-events: none; + } + + // Waves Colors + &.waves-light .waves-ripple { + background-color: rgba(255, 255, 255, 0.45); + } + &.waves-red .waves-ripple { + background-color: rgba(244, 67, 54, .70); + } + &.waves-yellow .waves-ripple { + background-color: rgba(255, 235, 59, .70); + } + &.waves-orange .waves-ripple { + background-color: rgba(255, 152, 0, .70); + } + &.waves-purple .waves-ripple { + background-color: rgba(156, 39, 176, 0.70); + } + &.waves-green .waves-ripple { + background-color: rgba(76, 175, 80, 0.70); + } + &.waves-teal .waves-ripple { + background-color: rgba(0, 150, 136, 0.70); + } + + // Style input button bug. + input[type="button"], input[type="reset"], input[type="submit"] { + border: 0; + font-style: normal; + font-size: inherit; + text-transform: inherit; + background: none; + } + + img { + position: relative; + z-index: -1; + } +} + +.waves-notransition { + transition: none #{"!important"}; +} + +.waves-circle { + transform: translateZ(0); + -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); +} + +.waves-input-wrapper { + border-radius: 0.2em; + vertical-align: bottom; + + .waves-button-input { + position: relative; + top: 0; + left: 0; + z-index: 1; + } +} + +.waves-circle { + text-align: center; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; + border-radius: 50%; + -webkit-mask-image: none; +} + +.waves-block { + display: block; +} + +/* Firefox Bug: link not triggered */ +.waves-effect .waves-ripple { + z-index: -1; +} \ No newline at end of file diff --git a/src/scss/components/forms/_checkboxes.scss b/src/scss/components/forms/_checkboxes.scss new file mode 100644 index 00000000..ddc7d961 --- /dev/null +++ b/src/scss/components/forms/_checkboxes.scss @@ -0,0 +1,200 @@ +/* Checkboxes + ========================================================================== */ + +/* Remove default checkbox */ +[type="checkbox"]:not(:checked), +[type="checkbox"]:checked { + position: absolute; + opacity: 0; + pointer-events: none; +} + +// Checkbox Styles +[type="checkbox"] { + // Text Label Style + + span:not(.lever) { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + user-select: none; + } + + /* checkbox aspect */ + + span:not(.lever):before, + &:not(.filled-in) + span:not(.lever):after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; + z-index: 0; + border: 2px solid $radio-empty-color; + border-radius: 1px; + margin-top: 3px; + transition: .2s; + } + + &:not(.filled-in) + span:not(.lever):after { + border: 0; + transform: scale(0); + } + + &:not(:checked):disabled + span:not(.lever):before { + border: none; + background-color: $input-disabled-color; + } + + // Focused styles + &.tabbed:focus + span:not(.lever):after { + transform: scale(1); + border: 0; + border-radius: 50%; + box-shadow: 0 0 0 10px rgba(0,0,0,.1); + background-color: rgba(0,0,0,.1); + } +} + +[type="checkbox"]:checked { + + span:not(.lever):before { + top: -4px; + left: -5px; + width: 12px; + height: 22px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: $radio-border; + border-bottom: $radio-border; + transform: rotate(40deg); + backface-visibility: hidden; + transform-origin: 100% 100%; + } + + &:disabled + span:before { + border-right: 2px solid $input-disabled-color; + border-bottom: 2px solid $input-disabled-color; + } +} + +/* Indeterminate checkbox */ +[type="checkbox"]:indeterminate { + + span:not(.lever):before { + top: -11px; + left: -12px; + width: 10px; + height: 22px; + border-top: none; + border-left: none; + border-right: $radio-border; + border-bottom: none; + transform: rotate(90deg); + backface-visibility: hidden; + transform-origin: 100% 100%; + } + + // Disabled indeterminate + &:disabled + span:not(.lever):before { + border-right: 2px solid $input-disabled-color; + background-color: transparent; + } +} + +// Filled in Style +[type="checkbox"].filled-in { + // General + + span:not(.lever):after { + border-radius: 2px; + } + + + span:not(.lever):before, + + span:not(.lever):after { + content: ''; + left: 0; + position: absolute; + /* .1s delay is for check animation */ + transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + z-index: 1; + } + + // Unchecked style + &:not(:checked) + span:not(.lever):before { + width: 0; + height: 0; + border: 3px solid transparent; + left: 6px; + top: 10px; + transform: rotateZ(37deg); + transform-origin: 100% 100%; + } + + &:not(:checked) + span:not(.lever):after { + height: 20px; + width: 20px; + background-color: transparent; + border: 2px solid $radio-empty-color; + top: 0px; + z-index: 0; + } + + // Checked style + &:checked { + + span:not(.lever):before { + top: 0; + left: 1px; + width: 8px; + height: 13px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: 2px solid $input-background; + border-bottom: 2px solid $input-background; + transform: rotateZ(37deg); + transform-origin: 100% 100%; + } + + + span:not(.lever):after { + top: 0; + width: 20px; + height: 20px; + border: 2px solid $secondary-color; + background-color: $secondary-color; + z-index: 0; + } + } + + // Focused styles + &.tabbed:focus + span:not(.lever):after { + border-radius: 2px; + border-color: $radio-empty-color; + background-color: rgba(0,0,0,.1); + } + + &.tabbed:checked:focus + span:not(.lever):after { + border-radius: 2px; + background-color: $secondary-color; + border-color: $secondary-color; + } + + // Disabled style + &:disabled:not(:checked) + span:not(.lever):before { + background-color: transparent; + border: 2px solid transparent; + } + + &:disabled:not(:checked) + span:not(.lever):after { + border-color: transparent; + background-color: $input-disabled-solid-color; + } + + &:disabled:checked + span:not(.lever):before { + background-color: transparent; + } + + &:disabled:checked + span:not(.lever):after { + background-color: $input-disabled-solid-color; + border-color: $input-disabled-solid-color; + } +} diff --git a/src/scss/components/forms/_file-input.scss b/src/scss/components/forms/_file-input.scss new file mode 100644 index 00000000..e0f7ef73 --- /dev/null +++ b/src/scss/components/forms/_file-input.scss @@ -0,0 +1,44 @@ +/* File Input + ========================================================================== */ + +.file-field { + position: relative; + + .file-path-wrapper { + overflow: hidden; + padding-left: 10px; + } + + input.file-path { width: 100%; } + + .btn { + float: left; + height: $input-height; + line-height: $input-height; + } + + span { + cursor: pointer; + } + + input[type=file] { + + // Needed to override webkit button + &::-webkit-file-upload-button { + display: none; + } + + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + width: 100%; + margin: 0; + padding: 0; + font-size: 20px; + cursor: pointer; + opacity: 0; + filter: alpha(opacity=0); + } +} diff --git a/src/scss/components/forms/_forms.scss b/src/scss/components/forms/_forms.scss new file mode 100644 index 00000000..4c19f4c8 --- /dev/null +++ b/src/scss/components/forms/_forms.scss @@ -0,0 +1,22 @@ +// Remove Focus Boxes +select:focus { + outline: $select-focus; +} + +button:focus { + outline: none; + background-color: $button-background-focus; +} + +label { + font-size: $label-font-size; + color: $input-border-color; +} + +@import 'input-fields'; +@import 'radio-buttons'; +@import 'checkboxes'; +@import 'switches'; +@import 'select'; +@import 'file-input'; +@import 'range'; diff --git a/src/scss/components/forms/_input-fields.scss b/src/scss/components/forms/_input-fields.scss new file mode 100644 index 00000000..f18c2f80 --- /dev/null +++ b/src/scss/components/forms/_input-fields.scss @@ -0,0 +1,354 @@ +/* Text Inputs + Textarea + ========================================================================== */ + +/* Style Placeholders */ + +::placeholder { + color: $placeholder-text-color; +} + +/* Text inputs */ + +input:not([type]), +input[type=text]:not(.browser-default), +input[type=password]:not(.browser-default), +input[type=email]:not(.browser-default), +input[type=url]:not(.browser-default), +input[type=time]:not(.browser-default), +input[type=date]:not(.browser-default), +input[type=datetime]:not(.browser-default), +input[type=datetime-local]:not(.browser-default), +input[type=tel]:not(.browser-default), +input[type=number]:not(.browser-default), +input[type=search]:not(.browser-default), +textarea.materialize-textarea { + + // General Styles + background-color: transparent; + border: none; + border-bottom: $input-border; + border-radius: 0; + outline: none; + height: $input-height; + width: 100%; + font-size: $input-font-size; + margin: $input-margin; + padding: $input-padding; + box-shadow: none; + box-sizing: content-box; + transition: box-shadow .3s, border .3s; + + // Disabled input style + &:disabled, + &[readonly="readonly"] { + color: $input-disabled-color; + border-bottom: $input-disabled-border; + } + + // Disabled label style + &:disabled+label, + &[readonly="readonly"]+label { + color: $input-disabled-color; + } + + // Focused input style + &:focus:not([readonly]) { + border-bottom: 1px solid $input-focus-color; + box-shadow: 0 1px 0 0 $input-focus-color; + } + + // Focused label style + &:focus:not([readonly])+label { + color: $input-focus-color; + } + + // Hide helper text on data message + &.valid ~ .helper-text[data-success], + &:focus.valid ~ .helper-text[data-success], + &.invalid ~ .helper-text[data-error], + &:focus.invalid ~ .helper-text[data-error] { + @extend %hidden-text; + } + + // Valid Input Style + &.valid, + &:focus.valid { + @extend %valid-input-style; + } + + // Custom Success Message + &.valid ~ .helper-text:after, + &:focus.valid ~ .helper-text:after { + @extend %custom-success-message; + } + &:focus.valid ~ label { + color: $input-success-color; + } + + // Invalid Input Style + &.invalid, + &:focus.invalid { + @extend %invalid-input-style; + } + + // Custom Error message + &.invalid ~ .helper-text:after, + &:focus.invalid ~ .helper-text:after { + @extend %custom-error-message; + } + &:focus.invalid ~ label { + color: $input-error-color; + } + + // Full width label when using validate for error messages + &.validate + label { + width: 100%; + } + + // Form Message Shared Styles + & + label:after { + @extend %input-after-style; + } +} + + +/* Validation Sass Placeholders */ +%valid-input-style { + border-bottom: 1px solid $input-success-color; + box-shadow: 0 1px 0 0 $input-success-color; +} +%invalid-input-style { + border-bottom: $input-invalid-border; + box-shadow: 0 1px 0 0 $input-error-color; +} +%hidden-text { + color: transparent; + user-select: none; + pointer-events: none; +} +%custom-success-message { + content: attr(data-success); + color: $input-success-color; +} +%custom-error-message { + content: attr(data-error); + color: $input-error-color; +} +%input-after-style { + display: block; + content: ""; + position: absolute; + top: 100%; + left: 0; + opacity: 0; + transition: .2s opacity ease-out, .2s color ease-out; +} + + +// Styling for input field wrapper +.input-field { + // Inline styles + &.inline { + display: inline-block; + vertical-align: middle; + margin-left: 5px; + + input, + .select-dropdown { + margin-bottom: 1rem; + } + } + + // Gutter spacing + &.col { + label { + left: $gutter-width / 2; + } + + .prefix ~ label, + .prefix ~ .validate ~ label { + width: calc(100% - 3rem - #{$gutter-width}); + } + } + + position: relative; + margin-top: 1rem; + margin-bottom: 1rem; + + & > label { + color: $input-border-color; + position: absolute; + top: 0; + left: 0; + font-size: 1rem; + cursor: text; + transition: transform .2s ease-out, color .2s ease-out; + transform-origin: 0% 100%; + text-align: initial; + transform: translateY(12px); + + &:not(.label-icon).active { + transform: translateY(-14px) scale(.8); + transform-origin: 0 0; + } + } + + // Autofill + date + time inputs + & > input[type]:-webkit-autofill:not(.browser-default):not([type="search"]) + label, + & > input[type=date]:not(.browser-default) + label, + & > input[type=time]:not(.browser-default) + label { + transform: translateY(-14px) scale(.8); + transform-origin: 0 0; + } + + .helper-text { + &::after { + opacity: 1; + position: absolute; + top: 0; + left: 0; + } + + position: relative; + min-height: 18px; + display: block; + font-size: 12px; + color: rgba(0,0,0,.54); + } + + // Prefix Icons + .prefix { + position: absolute; + width: $input-height; + font-size: $input-icon-size; + transition: color .2s; + top: ($input-height - $input-icon-size) / 2; + + &.active { color: $input-focus-color; } + } + + .prefix ~ input, + .prefix ~ textarea, + .prefix ~ label, + .prefix ~ .validate ~ label, + .prefix ~ .helper-text, + .prefix ~ .autocomplete-content { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); + } + + .prefix ~ label { margin-left: 3rem; } + + @media #{$medium-and-down} { + .prefix ~ input { + width: 86%; + width: calc(100% - 3rem); + } + } + + @media #{$small-and-down} { + .prefix ~ input { + width: 80%; + width: calc(100% - 3rem); + } + } +} + + +/* Search Field */ + +.input-field input[type=search] { + display: block; + line-height: inherit; + transition: .3s background-color; + + .nav-wrapper & { + height: inherit; + padding-left: 4rem; + width: calc(100% - 4rem); + border: 0; + box-shadow: none; + } + + &:focus:not(.browser-default) { + background-color: $input-background; + border: 0; + box-shadow: none; + color: #444; + + & + label i, + & ~ .mdi-navigation-close, + & ~ .material-icons { + color: #444; + } + } + + & + .label-icon { + transform: none; + left: 1rem; + } + + & ~ .mdi-navigation-close, + & ~ .material-icons { + position: absolute; + top: 0; + right: 1rem; + color: transparent; + cursor: pointer; + font-size: $input-icon-size; + transition: .3s color; + } +} + + +/* Textarea */ + +// Default textarea +textarea { + width: 100%; + height: $input-height; + background-color: transparent; + + &.materialize-textarea { + line-height: normal; + overflow-y: hidden; /* prevents scroll bar flash */ + padding: .8rem 0 .8rem 0; /* prevents text jump on Enter keypress */ + resize: none; + min-height: $input-height; + box-sizing: border-box; + } +} + +// For textarea autoresize +.hiddendiv { + visibility: hidden; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; /* future version of deprecated 'word-wrap' */ + padding-top: 1.2rem; /* prevents text jump on Enter keypress */ + + // Reduces repaints + position: absolute; + top: 0; + z-index: -1; +} + + +/* Autocomplete */ +.autocomplete-content { + li { + .highlight { color: #444; } + + img { + height: $dropdown-item-height - 10; + width: $dropdown-item-height - 10; + margin: 5px 15px; + } + } +} + +/* Character Counter */ +.character-counter { + min-height: 18px; +} diff --git a/src/scss/components/forms/_radio-buttons.scss b/src/scss/components/forms/_radio-buttons.scss new file mode 100644 index 00000000..c9f72962 --- /dev/null +++ b/src/scss/components/forms/_radio-buttons.scss @@ -0,0 +1,115 @@ +/* Radio Buttons + ========================================================================== */ + +// Remove default Radio Buttons +[type="radio"]:not(:checked), +[type="radio"]:checked { + position: absolute; + opacity: 0; + pointer-events: none; +} + +[type="radio"]:not(:checked) + span, +[type="radio"]:checked + span { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + transition: .28s ease; + user-select: none; +} + +[type="radio"] + span:before, +[type="radio"] + span:after { + content: ''; + position: absolute; + left: 0; + top: 0; + margin: 4px; + width: 16px; + height: 16px; + z-index: 0; + transition: .28s ease; +} + +/* Unchecked styles */ +[type="radio"]:not(:checked) + span:before, +[type="radio"]:not(:checked) + span:after, +[type="radio"]:checked + span:before, +[type="radio"]:checked + span:after, +[type="radio"].with-gap:checked + span:before, +[type="radio"].with-gap:checked + span:after { + border-radius: 50%; +} + +[type="radio"]:not(:checked) + span:before, +[type="radio"]:not(:checked) + span:after { + border: 2px solid $radio-empty-color; +} + +[type="radio"]:not(:checked) + span:after { + transform: scale(0); +} + +/* Checked styles */ +[type="radio"]:checked + span:before { + border: 2px solid transparent; +} + +[type="radio"]:checked + span:after, +[type="radio"].with-gap:checked + span:before, +[type="radio"].with-gap:checked + span:after { + border: $radio-border; +} + +[type="radio"]:checked + span:after, +[type="radio"].with-gap:checked + span:after { + background-color: $radio-fill-color; +} + +[type="radio"]:checked + span:after { + transform: scale(1.02); +} + +/* Radio With gap */ +[type="radio"].with-gap:checked + span:after { + transform: scale(.5); +} + +/* Focused styles */ +[type="radio"].tabbed:focus + span:before { + box-shadow: 0 0 0 10px rgba(0,0,0,.1); +} + +/* Disabled Radio With gap */ +[type="radio"].with-gap:disabled:checked + span:before { + border: 2px solid $input-disabled-color; +} + +[type="radio"].with-gap:disabled:checked + span:after { + border: none; + background-color: $input-disabled-color; +} + +/* Disabled style */ +[type="radio"]:disabled:not(:checked) + span:before, +[type="radio"]:disabled:checked + span:before { + background-color: transparent; + border-color: $input-disabled-color; +} + +[type="radio"]:disabled + span { + color: $input-disabled-color; +} + +[type="radio"]:disabled:not(:checked) + span:before { + border-color: $input-disabled-color; +} + +[type="radio"]:disabled:checked + span:after { + background-color: $input-disabled-color; + border-color: $input-disabled-solid-color; +} diff --git a/src/scss/components/forms/_range.scss b/src/scss/components/forms/_range.scss new file mode 100644 index 00000000..18607f5d --- /dev/null +++ b/src/scss/components/forms/_range.scss @@ -0,0 +1,161 @@ +/* Range + ========================================================================== */ + +.range-field { + position: relative; +} + +input[type=range], +input[type=range] + .thumb { + @extend .no-select; + cursor: pointer; +} + +input[type=range] { + position: relative; + background-color: transparent; + border: none; + outline: none; + width: 100%; + margin: 15px 0; + padding: 0; + + &:focus { + outline: none; + } +} + +input[type=range] + .thumb { + position: absolute; + top: 10px; + left: 0; + border: none; + height: 0; + width: 0; + border-radius: 50%; + background-color: $radio-fill-color; + margin-left: 7px; + + transform-origin: 50% 50%; + transform: rotate(-45deg); + + .value { + display: block; + width: 30px; + text-align: center; + color: $radio-fill-color; + font-size: 0; + transform: rotate(45deg); + } + + &.active { + border-radius: 50% 50% 50% 0; + + .value { + color: $input-background; + margin-left: -1px; + margin-top: 8px; + font-size: 10px; + } + } +} + +// Shared +@mixin range-track { + height: $track-height; + background: #c2c0c2; + border: none; +} + +@mixin range-thumb { + border: none; + height: $range-height; + width: $range-width; + border-radius: 50%; + background: $radio-fill-color; + transition: box-shadow .3s; +} + +// WebKit +input[type=range] { + -webkit-appearance: none; +} + +input[type=range]::-webkit-slider-runnable-track { + @include range-track; +} + +input[type=range]::-webkit-slider-thumb { + @include range-thumb; + -webkit-appearance: none; + background-color: $radio-fill-color; + transform-origin: 50% 50%; + margin: -5px 0 0 0; + +} + +.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb { + box-shadow: 0 0 0 10px rgba($radio-fill-color, .26); +} + +// FireFox +input[type=range] { + /* fix for FF unable to apply focus style bug */ + border: 1px solid white; + + /*required for proper track sizing in FF*/ +} + +input[type=range]::-moz-range-track { + @include range-track; +} + +input[type=range]::-moz-focus-inner { + border: 0; +} + +input[type=range]::-moz-range-thumb { + @include range-thumb; + margin-top: -5px; +} + +// hide the outline behind the border +input[type=range]:-moz-focusring { + outline: 1px solid #fff; + outline-offset: -1px; +} + +.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb { + box-shadow: 0 0 0 10px rgba($radio-fill-color, .26); +} + +// IE 10+ +input[type=range]::-ms-track { + height: $track-height; + + // remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead + background: transparent; + + // leave room for the larger thumb to overflow with a transparent border */ + border-color: transparent; + border-width: 6px 0; + + /*remove default tick marks*/ + color: transparent; +} + +input[type=range]::-ms-fill-lower { + background: #777; +} + +input[type=range]::-ms-fill-upper { + background: #ddd; +} + +input[type=range]::-ms-thumb { + @include range-thumb; +} + +.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb { + box-shadow: 0 0 0 10px rgba($radio-fill-color, .26); +} diff --git a/src/scss/components/forms/_select.scss b/src/scss/components/forms/_select.scss new file mode 100644 index 00000000..2fd04d3c --- /dev/null +++ b/src/scss/components/forms/_select.scss @@ -0,0 +1,180 @@ +/* Select Field + ========================================================================== */ + +select { display: none; } +select.browser-default { display: block; } + +select { + background-color: $select-background; + width: 100%; + padding: $select-padding; + border: $select-border; + border-radius: $select-radius; + height: $input-height; +} + +.select-label { + position: absolute; +} + +.select-wrapper { + &.valid .helper-text[data-success], + &.invalid ~ .helper-text[data-error] { + @extend %hidden-text; + } + + &.valid { + & > input.select-dropdown { + @extend %valid-input-style; + } + + & ~ .helper-text:after { + @extend %custom-success-message; + } + } + + &.invalid { + & > input.select-dropdown, + & > input.select-dropdown:focus { + @extend %invalid-input-style; + } + + & ~ .helper-text:after { + @extend %custom-error-message; + } + } + + &.valid + label, + &.invalid + label { + width: 100%; + pointer-events: none; + } + + & + label:after { + @extend %input-after-style; + } + + position: relative; + + input.select-dropdown { + &:focus { + border-bottom: 1px solid $input-focus-color; + } + position: relative; + cursor: pointer; + background-color: transparent; + border: none; + border-bottom: $input-border; + outline: none; + height: $input-height; + line-height: $input-height; + width: 100%; + font-size: $input-font-size; + margin: $input-margin; + padding: 0; + display: block; + user-select:none; + z-index: 1; + } + + .caret { + position: absolute; + right: 0; + top: 0; + bottom: 0; + margin: auto 0; + z-index: 0; + fill: rgba(0,0,0,.87); + } + + & + label { + position: absolute; + top: -26px; + font-size: $label-font-size; + } +} + +// Disabled styles +select:disabled { + color: $input-disabled-color; +} + +.select-wrapper.disabled { + + label { + color: $input-disabled-color; + } + .caret { + fill: $input-disabled-color; + } +} + +.select-wrapper input.select-dropdown:disabled { + color: $input-disabled-color; + cursor: default; + user-select: none; +} + +.select-wrapper i { + color: $select-disabled-color; +} + +.select-dropdown li.disabled, +.select-dropdown li.disabled > span, +.select-dropdown li.optgroup { + color: $select-disabled-color; + background-color: transparent; +} + +body.keyboard-focused { + .select-dropdown.dropdown-content li:focus { + background-color: $select-option-focus; + } +} + +.select-dropdown.dropdown-content { + li { + &:hover { + background-color: $select-option-hover; + } + + &.selected { + background-color: $select-option-selected; + } + } +} + +// Prefix Icons +.prefix ~ .select-wrapper { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} + +.prefix ~ label { margin-left: 3rem; } + +// Icons +.select-dropdown li { + img { + height: $dropdown-item-height - 10; + width: $dropdown-item-height - 10; + margin: 5px 15px; + float: right; + } +} + +// Optgroup styles +.select-dropdown li.optgroup { + border-top: 1px solid $dropdown-hover-bg-color; + + &.selected > span { + color: rgba(0, 0, 0, .7); + } + + & > span { + color: rgba(0, 0, 0, .4); + } + + & ~ li.optgroup-option { + padding-left: 1rem; + } +} diff --git a/src/scss/components/forms/_switches.scss b/src/scss/components/forms/_switches.scss new file mode 100644 index 00000000..3296b12c --- /dev/null +++ b/src/scss/components/forms/_switches.scss @@ -0,0 +1,89 @@ +/* Switch + ========================================================================== */ + +.switch, +.switch * { + -webkit-tap-highlight-color: transparent; + user-select: none; +} + +.switch label { + cursor: pointer; +} + +.switch label input[type=checkbox] { + opacity: 0; + width: 0; + height: 0; + + &:checked + .lever { + background-color: $switch-checked-lever-bg; + + &:before, &:after { + left: 18px; + } + + &:after { + background-color: $switch-bg-color; + } + } +} + +.switch label .lever { + content: ""; + display: inline-block; + position: relative; + width: 36px; + height: 14px; + background-color: $switch-unchecked-lever-bg; + border-radius: $switch-radius; + margin-right: 10px; + transition: background 0.3s ease; + vertical-align: middle; + margin: 0 16px; + + &:before, &:after { + content: ""; + position: absolute; + display: inline-block; + width: 20px; + height: 20px; + border-radius: 50%; + left: 0; + top: -3px; + transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease; + } + + &:before { + background-color: transparentize($switch-bg-color, .85); + } + + &:after { + background-color: $switch-unchecked-bg; + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); + } +} + +// Switch active style +input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before, +input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before { + transform: scale(2.4); + background-color: transparentize($switch-bg-color, .85); +} + +input[type=checkbox]:not(:disabled) ~ .lever:active:before, +input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before { + transform: scale(2.4); + background-color: rgba(0,0,0,.08); +} + +// Disabled Styles +.switch input[type=checkbox][disabled] + .lever { + cursor: default; + background-color: rgba(0,0,0,.12); +} + +.switch label input[type=checkbox][disabled] + .lever:after, +.switch label input[type=checkbox][disabled]:checked + .lever:after { + background-color: $input-disabled-solid-color; +} diff --git a/src/scss/materialize.scss b/src/scss/materialize.scss new file mode 100644 index 00000000..6a51657b --- /dev/null +++ b/src/scss/materialize.scss @@ -0,0 +1,41 @@ +@charset "UTF-8"; + +// Color +@import "components/color-variables"; +@import "components/color-classes"; + +// Variables; +@import "components/variables"; + +// Reset +@import "components/normalize"; + +// components +@import "components/global"; +@import "components/badges"; +@import "components/icons-material-design"; +@import "components/grid"; +@import "components/navbar"; +@import "components/typography"; +@import "components/transitions"; +@import "components/cards"; +@import "components/toast"; +@import "components/tabs"; +@import "components/tooltip"; +@import "components/buttons"; +@import "components/dropdown"; +@import "components/waves"; +@import "components/modal"; +@import "components/collapsible"; +@import "components/chips"; +@import "components/materialbox"; +@import "components/forms/forms"; +@import "components/table_of_contents"; +@import "components/sidenav"; +@import "components/preloader"; +@import "components/slider"; +@import "components/carousel"; +@import "components/tapTarget"; +@import "components/pulse"; +@import "components/datepicker"; +@import "components/timepicker"; diff --git a/src/scss/partials/_chat.scss b/src/scss/partials/_chat.scss new file mode 100644 index 00000000..76e47b28 --- /dev/null +++ b/src/scss/partials/_chat.scss @@ -0,0 +1,1097 @@ +.chat-container { + display: flex; + // padding: 200px; + width: 100%; + align-items: center; + height: 100vh; + overflow: hidden; + flex-direction: column; + position: relative; + background-image: url('../../../public/assets/img/camomile.jpg'); + background-size: cover; + background-position: center center; + + #im-title { + cursor: pointer; + } + + /* .chat-background, #chat-closed { + position: absolute; + /* left: 0; + top: 0; + width: 100%; + height: 100%; * + left: -1%; + top: -1%; + width: 102%; + height: 102%; + background-image: url('../../../public/assets/img/camomile.jpg'); + background-size: cover; + background-position: center center; + display: none; + } */ + + #chat-background-canvas { + display: none; + } + + /* #chat-closed { + z-index: 3; + } + + > *:not(.chat-background) { + z-index: 2; + } */ + + #topbar { + width: 100%; + background-color: #fff; + box-sizing: border-box; + user-select: none; + display: flex; + align-items: center; + box-shadow: 0 1px 2px 0 rgba(16, 35, 47, 0.07); + padding: .5rem 1rem; + flex: 0 0 auto; /* Forces side columns to stay same width */ + min-height: 60px; + max-height: 60px; + + & > * { + margin: 0 2px; + } + + .chat-info { + flex-grow: 1; + } + + .content { + padding-left: 1rem; + flex: 1; + } + + .person { + display: flex; + align-items: center; + cursor: pointer; + + &:hover { + background-color: transparent; + } + + .user-avatar { + width: 44px; + height: 44px; + line-height: 44px; + } + + .bottom { + font-size: 14px; + line-height: 18px; + color: $placeholder-color; + + .online { + color: $darkblue; + } + } + } + + .pinned-message { + cursor: pointer; + display: flex; + flex-direction: row; + align-items: center; + overflow: hidden; + box-sizing: border-box; + width: 150px; + margin-right: 1rem; + max-height: 35px; + /* padding: .25rem; */ + + &:hover { + background-color: rgba(112, 117, 121, 0.08); + } + + .pinned-message-border { + height: 32px; + border-radius: 1px; + min-width: 2px; + background: $blue; + } + + .pinned-message-content { + margin-left: 8px; + flex-grow: 1; + flex-shrink: 1; + overflow: hidden; + pointer-events: none; + } + + .pinned-message-title { + color: $blue; + } + + .pinned-message-title, .pinned-message-subtitle { + font-size: 14px; + line-height: 18px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + .pinned-message-subtitle { + white-space: nowrap; + } + } + } + + #bubbles { + /* overflow-y: scroll; + scrollbar-width: none; + -ms-overflow-style: none; */ + width: 100%; + height: 100%; + max-height: 100%; + flex: 1 1 auto; /* Lets middle column shrink/grow to available width */ + overflow: hidden; + + &:not(.scrolled-down) { + -webkit-mask-image: -webkit-linear-gradient(bottom, transparent, #000 20px); + mask-image: linear-gradient(0deg, transparent 0, #000 20px); + } + + /* .os-content { + display: flex; + align-items: flex-end; + } */ + + .preloader { + width: 100%; + height: 100%; + + svg { + width: 50px; + height: 50px; + } + } + + #bubbles-inner { + max-width: 700px; + width: 100%; + display: flex; + flex-direction: column; + flex-shrink: 1; + padding: 9px; + margin: 0 auto; + box-sizing: border-box; + min-height: 100%; + justify-content: flex-end; + + & > * { + display: flex; + padding: 5px 0; + } + } + + .service { + justify-content: center; + align-self: center; + margin: 1rem 0; + + .service-msg { + color: #fff; + background-color: rgba(#000, 0.22); + /* font-weight: 500; */ + padding: 0 8px; + line-height: 24px; + font-size: 15px; + border-radius: 12px; + user-select: none; + } + } + + .bubble { + /* max-width: 480px; */ + /* max-height: 50vh; */ + max-width: 85%; + border-radius: 12px; + box-shadow: 0 1px 2px 0 rgba(16, 35, 47, 0.15); + position: relative; + display: flex; + flex-direction: column-reverse; + font-size: 0; + width: max-content; + height: fit-content; + + &.photo, &.video { + width: min-content; + + .message { + width: min-content; + max-width: min-content; + + /* .time { + max-width: min-content; + overflow: hidden; + } */ + } + + .box.web { + width: min-content; + max-width: min-content; + } + } + + img, video { + object-fit: contain; + } + + .emoji { + height: 18px; + width: 18px; + margin: 0 .05rem; + } + + &.emoji-big { + font-size: 0; + background: none!important; + box-shadow: none; + line-height: 1; + user-select: none; + + .attachment { + padding-top: .5rem; + padding-bottom: 1.5rem; + + span.emoji { + height: auto; + width: auto; + } + } + } + + &.emoji-1x { + font-size: 96px; + + img.emoji { + height: 64px; + width: 64px; + /* height: 96px; + width: 96px; */ + } + } + + &.emoji-2x { + font-size: 64px; + + img.emoji { + height: 48px; + width: 48px; + /* height: 64px; + width: 64px; */ + } + } + + &.emoji-3x { + font-size: 52px; + + img.emoji { + height: 32px; + width: 32px; + /* height: 48px; + width: 48px; */ + } + } + + &.sticker { + cursor: pointer; + background: none!important; + box-shadow: none; + max-width: 300px; + max-height: 300px; + /* width: 300px; // new + height: 300px; // new */ + + /* min-height: 250px; */ + + /* .attachment { + min-width: auto; + } */ + + .message.message-empty { + display: none; + /* border-radius: 12px; */ + } + + &:hover .message.message-empty { + display: block; + } + } + + .message:not(.message-empty) + .attachment { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + + &:not(.emoji-big) .attachment { + font-size: 0; + } + + .attachment { + max-width: 100%; + border-radius: inherit; + overflow: hidden; + + display: flex; // lol + justify-content: center; + + img, video { + width: auto; + height: auto; + max-width: 100%; + cursor: pointer; + } + } + + &:not(.sticker) { + .attachment { + max-width: 380px; + } + } + + &.video { + .attachment { + img { + width: 100%; + height: 100%; + } + } + } + + /* * + .attachment { + border-top-left-radius: 0; + border-top-right-radius: 0; + } */ + + .box { + font-size: .95rem; + margin: .25rem; + padding: .25rem; + margin-bottom: -5px; + border-radius: 4px; + //transition: anim(background-color); + + /* &:hover { + cursor: pointer; + } */ + + &.web { + margin-top: -5px; + margin-bottom: 5px; + max-width: 100%; + overflow: hidden; + /* max-width: 320px; */ + /* width: max-content; */ + + /* .quote { + // box-sizing: border-box; + } */ + + .preview { + /* height: 100px; */ + max-height: 100%; + max-width: 100%; + border-radius: 4px; + margin-bottom: 6px; + overflow: hidden; + user-select: none; + cursor: pointer; + + img, video { + max-width: 100%; + /* width: auto; + height: auto; */ + width: 100%; + height: 100%; + } + } + + .title { + line-height: 1.4; + font-weight: 500; + } + + .name { + display: block; + + &:hover { + text-decoration: underline; + } + } + + .text { + overflow: hidden; + text-overflow: ellipsis; + line-height: 1.2; + } + } + + .quote { + padding-left: .5rem; + max-width: 100%; + overflow: hidden; + width: 100%; + } + + .name { + font-weight: 500; + } + + &:not(.web) { + margin-bottom: 0; + margin-top: 0; + cursor: pointer; + } + } + + .message { + font-size: 1rem; + /* padding: .25rem .6rem; */ + padding: 0 .6rem .2675rem .6rem; + padding-top: 0; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; + + * { + overflow: hidden; + text-overflow: ellipsis; + } + + &:last-child { + padding-top: .2675rem; + } + + &.message-empty { + /* display: none; */ + position: absolute; + bottom: .1rem; + right: .1rem; + border-radius: 12px; + background-color: rgba(0, 0, 0, .3); + padding: .0rem .3rem; + + .time { + color: #fff; + } + } + + .emoji { + font-size: 1.2rem; + } + } + + /* &:hover .message-empty { + display: block; + } */ + + .time { + font-size: .8rem; + user-select: none; + float: right; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + height: 20px; + line-height: 20px; + + .inner { + position: absolute; + bottom: 0; + right: 0; + font-size: .75rem; + } + } + + .user-avatar { + position: absolute; + left: -2.5rem; + width: 32px; + height: 32px; + line-height: 32px; + bottom: 0; + font-size: .85rem; + } + + &:not(.forwarded).hide-name, &.emoji-big { + .name { + display: none; + } + } + + /* &.forwarded */.name { + cursor: pointer; + } + + &.forwarded/* .message-empty + */ .attachment { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + > .name { + padding: .2675rem .6rem 0 .6rem; + font-weight: 500; + /* padding-bottom: 4px; */ + color: $darkblue; + font-size: .9rem; + width: max-content; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + &:not(.sticker):not(.emoji-big):last-child:after { + position: absolute; + bottom: -1px; + width: 11px; + height: 20px; + background-repeat: no-repeat repeat; + content: ''; + background-size: 11px 20px; + /* background-position: -2px -2px; */ + } + } + + .bubble + .bubble { + margin-top: 5px; + } + + .in, + .out { + flex-direction: column; + } + + .in { + align-items: flex-start; + + a { + color: $darkblue; + } + + .box:hover { + background-color: $light; + } + + .quote { + border-left: 2px $darkblue solid; + + .name { + color: $darkblue; + } + + * { + overflow: hidden; + text-overflow: ellipsis; + } + } + + .time { + color: rgba($darkgrey, 0.6); + width: 2rem; + + .inner { + line-height: 19px; + padding: 0 .35rem; + } + } + + .bubble { + background-color: #ffffff; + border-radius: 6px 12px 12px 6px; + + &:first-child { + border-radius: 12px 12px 12px 6px; + } + + &:last-child { + border-radius: 6px 12px 12px 0px; + + &:after { + left: -8.4px; + background-image: url('../../assets/img/msg-tail-left.svg'); + } + } + + &:first-child:last-child { + border-radius: 12px 12px 12px 0px; + } + } + } + + .out { + align-items: flex-end; + + a { + color: $darkgreen; + } + + .box:hover { + background-color: rgba($green, 0.12); + } + + .quote { + border-left: 2px $darkgreen solid; + + .name { + color: $darkgreen; + } + } + + .time { + color: $darkgreen; + width: 48px; + display: inline-block; + + .inner { + display: flex; + align-items: center; + padding: 0 .25rem; + } + } + + .bubble { + .time .tgico:after { + font-size: 1.1rem; + vertical-align: middle; + margin-left: .1rem; + } + } + + .bubble.forwarded { + .name { + color: $darkgreen; + } + } + + .bubble.read { + .time .tgico:after { + content: $tgico-checks; + } + } + + .bubble.sent { + .time .tgico:after { + content: $tgico-check; + } + } + + .bubble { + background-color: #eeffde; + border-radius: 12px 6px 6px 12px; + + &:first-child { + border-radius: 12px 12px 6px 12px; + } + + &:last-child { + border-radius: 12px 6px 0px 12px; + + &:after { + right: -8.4px; + background-image: url('../../assets/img/msg-tail-right.svg'); + } + } + + &:first-child:last-child { + border-radius: 12px 12px 0px 12px; + } + } + + .user-avatar { + left: auto; + right: -2.5rem; + } + } + } + + #chat-input { + display: flex; + align-items: center; + width: 100%; + max-width: 700px; + padding-top: .35rem; + padding-bottom: 1rem; + justify-content: space-between; + flex: 0 0 auto; /* Forces side columns to stay same width */ + position: relative; + + .input-message { + display: flex; + align-items: center; + width: calc(100% - 3.75rem); + justify-content: space-between; + background-color: #fff; + border-radius: 12px; + border-bottom-right-radius: 0; + box-shadow: 0 1px 2px 0 rgba(16, 35, 47, 0.07); + margin-right: .5rem; + padding: 0 .5rem; + min-height: 3.25rem; + max-height: 30rem; + caret-color: $button-primary-background; + flex: 1; + position: relative; + + &:after { + position: absolute; + bottom: -1px; + width: 11px; + height: 20px; + background-repeat: no-repeat repeat; + content: ''; + background-size: 11px 20px; + right: -9px; + background-image: url('../../assets/img/msg-tail-left.svg'); + transform: scaleX(-1); + } + + .input-message-container { + width: 1%; + max-height: inherit; + flex: 1 1 auto; + } + + .btn-icon { + display: block; + color: $placeholder-color; + font-size: 1.5rem; + line-height: 1.5rem; + + flex: 0 0 auto; + + &.active { + color: $blue; + } + } + + .emoji { + font-size: 24px; + height: 24px; + width: 24px; + } + } + + #input-message { + background: none; + border: none; + width: 100%; + padding: .5rem .5rem; + font-size: .95rem; + /* height: 100%; */ + max-height: 30rem; + overflow-y: auto; + resize: none; + border: none; + outline: none; + cursor: text; + } + + [contenteditable=true]:empty:before { + content: attr(data-placeholder); + color: #9e9e9e; + display: block; /* For Firefox By Ariel Flesler */ + } + + .btn-circle { + flex: 0 0 auto; + font-size: 1.5rem; + line-height: 1.5rem; + height: 3.25rem; + width: 3.25rem; + color: #9e9e9e; + background-color: #fff; + + &.tgico-send { + color: $blue; + } + } + + .os-scrollbar-handle { + background: rgba(0, 0, 0, 0.2); + } + } + + /* #chat-closed { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: inherit; + z-index: 3; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + + + .tgico-chatsplaceholder { + font-size: 10rem; + color: #ABB0B3; + } + + h3 { + font-size: 2rem; + color: #707579; + text-align: center; + } + + .buttons { + display: flex; + justify-content: center; + align-items: center; + margin-top: 1rem; + + button { + margin: 0 2.5rem; + width: 4rem; + height: 4rem; + background: #fff; + border: none; + position: relative; + font-size: 2rem; + color: #707579; + cursor: pointer; + + box-shadow: 0 1px 2px 0 rgba(16, 35, 47, 0.07); + + &:hover { + background: #4EA4F6; + color: #fff; + + span { + color: #4EA4F6; + } + } + + span { + position: absolute; + top: 100%; + left: 50%; + width: 100%; + padding-top: 1rem; + transform: translateX(-50%); + font-size: .9rem; + font-family: "Roboto"; + } + } + } + } */ +} + +.emoji-dropdown { + position: absolute; + left: 0; + top: calc(-420px + -0.75rem); + display: flex; + flex-direction: column; + width: 420px; + height: 420px; + background: #fff; + box-shadow: 0px 5px 10px 5px rgba(16, 35, 47, 0.14); + border-radius: 12px; + z-index: 2; +/* display: none; */ + display: flex; + overflow: hidden; + + transition: all 0.2s ease-out; + transform: scale(0); + transform-origin: 0 100%; + + &.active { + /* display: flex; */ + transition: all 0.2s ease-in; + transform: scale(1); + } + + > .menu-horizontal { + padding: 0 3rem; + } + + .emoji-container { + width: 100%; + max-width: 100%; + overflow: hidden; + height: 100%; + } + + .tabs-container { + /* width: 300%; */ + height: 100%; + + .emoji-category { + font-size: 2.25rem; + line-height: 2.25rem; + margin-top: 1px; + + > * { + margin: 0; + padding: 5px 5px; + line-height: inherit; + border-radius: 8px; + cursor: pointer; + user-select: none; + + width: 44px; + height: 44px; + + .emoji { + width: 100%; + height: 100%; + } + + &:hover { + background-color: rgba(112, 117, 121, 0.08); + } + } + + /* &::after { + content: ""; + flex: auto; + } */ + } + + .emoji-category, .sticker-category { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + + &::after { + content: ""; + flex: auto; + } + } + + .sticker-category { + /* &.not-full::after { + content: ""; + flex: auto; + } */ + + > div { + width: 80px; + height: 80px; + display: flex; + align-items: center; + /* overflow: hidden; */ + cursor: pointer; + user-select: none; + /* margin: 3.5px 0; + margin-right: 6.25px; */ + padding: 1px 2.5px; + justify-content: center; + border-radius: 12px; + + &:hover { + background-color: rgba(112, 117, 121, 0.08); + } + + /* &:nth-child(5n+5) { + margin-right: 0; + } */ + + > * { + max-width: 100%; + max-height: 100%; + } + } + } + + > div { + min-height: 100%; + /* display: flex; */ + flex-direction: column; + height: 100%; + + > div:first-of-type { + flex: 1; + padding: 0; + padding-top: 10px; + } + } + + .scrollable { + padding: 0 10px; + } + } + + .emoji-padding { + .menu-horizontal { + border-top: 1px solid $lightgrey; + } + } + + .emoji-padding, .stickers-padding { + .menu-horizontal { + height: 50px; + border-bottom: none; + padding: 0; + width: 100%; + + li { + padding: 0; + width: 50px; + height: 50px; + line-height: 50px; + display: flex; + align-items: center; + + &.active { + &:after { + display: none; + } + } + } + } + } + + /* #content-stickers { + padding: 0; + } */ + + .stickers-padding { + .menu-wrapper { + padding: 0; + height: 50px; + max-width: 100%; + border-top: 1px solid $lightgrey; + + .menu-horizontal { + width: 100%; + height: 100%; + } + } + + li { + /* width: calc(100% / 7); */ + flex: 0 0 auto; + + &.active { + &:not(.tgico-recent) { + background-color: rgba(112, 117, 121, 0.08); + } + } + + > * { + padding: .75rem; + max-width: 100%; + max-height: 100%; + width: 100%; + height: 100%; + } + } + } +} diff --git a/src/scss/partials/_chatlist.scss b/src/scss/partials/_chatlist.scss new file mode 100644 index 00000000..d73a849d --- /dev/null +++ b/src/scss/partials/_chatlist.scss @@ -0,0 +1,188 @@ +.chats-container { + .input-search { + position: relative; + width: 100%; + margin-left: 1rem; + + input { + background-color: rgba(112, 117, 121, .08); + border: 2px solid transparent; + height: 3rem; + border-radius: 22px; + box-sizing: border-box; + padding: 0 1.5rem 0 3rem; + -webkit-transition: all .15s ease-out; + transition: all .15s ease-out; + width: 100%; + + &:focus { + background-color: rgba(112, 117, 121, 0); + border: 2px solid $button-primary-background; + + & + .tgico { + color: $button-primary-background; + opacity: 1; + } + } + } + + .tgico { + position: absolute; + left: 1rem; + top: 50%; + transform: translateY(-50%); + text-align: center; + font-size: 1.65rem; + color: $color-gray; + opacity: .6; + -webkit-transition: all .15s ease-out; + transition: all .15s ease-out; + } + } + + ul { + margin: 0; + padding: 0 .5rem; + } + + #dialogs-pinned { + border-bottom: 1px solid #DADCE0; + + &:empty { + display: none; + } + } + + li { + padding: 0 .5rem; + height: 70px; + max-height: 70px; + overflow: hidden; + border-radius: $border-radius; + background-color: #fff; + display: grid; + align-items: center; + grid-template-columns: 60px calc(100% - 60px); + position: relative; + /* grid-template-columns: 60px calc(85% - 60px) 15%; */ + + cursor: pointer; + + &:hover { + background: rgba(112, 117, 121, .08); + } + + &.active { + background: darken(rgba(112, 117, 121, .1), .8); + } + + /* &.dialog-pinned + li:not(.dialog-pinned) { + + } */ + } + + p { + margin: 0; + display: flex; + justify-content: space-between; + height: 1.7rem; // hot-fix + + span:not(.tgico-pinnedchat):not(.emoji):last-child { + font-size: .9rem; + } + } + + span { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + vertical-align: middle; + margin: .1rem 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + + .user-caption { + max-width: 100%; + max-height: 100%; + overflow: hidden; + color: $placeholder-color; + } + + .user-title { + max-width: 80%; + } + + .user-last-message { + /* display: block; */ + /* display: flex; + align-items: center; */ + max-width: 80%; + + i { + font-style: normal; + color: $darkblue; + } + + .emoji { + font-size: 1.2rem; + width: 20px; + height: 20px; + margin: 0 .125rem; + } + } + + .message-status { + margin-right: .25rem; + + &[class*=" tgico-"] { + color: $success-color; + font-size: 1.15rem; + } + } + + /* .dialog-details { + text-align: right; + + :first-child { + font-size: .9rem; + display: block; + } + } */ + + .unread, .unread-muted { + border-radius: 12px; + min-width: 24px; + padding: 0 8px; + height: 24px; + text-align: center; + line-height: 24px; + color: #fff; + font-weight: 500; + } + + .tgico-pinnedchat { + border-radius: 50%; + width: 24px; + height: 24px; + line-height: 24px; + font-size: 1.5rem; + color: #fff; + text-align: center; + } + + .unread:empty, .unread-muted:empty { + visibility: hidden; + } + + .unread { + background: $success-color; + } + + .unread-muted, .tgico-pinnedchat { + background: #cecece; + } +} diff --git a/src/scss/partials/_fonts.scss b/src/scss/partials/_fonts.scss new file mode 100644 index 00000000..98948b40 --- /dev/null +++ b/src/scss/partials/_fonts.scss @@ -0,0 +1,328 @@ +@font-face { + font-family: "#{$tgico-font-family}"; + src: url("#{$tgico-font-path}/#{$tgico-font-family}.eot?owpifk"); + src: url("#{$tgico-font-path}/#{$tgico-font-family}.eot?owpifk#iefix") + format("embedded-opentype"), + url("#{$tgico-font-path}/#{$tgico-font-family}.ttf?owpifk") + format("truetype"), + url("#{$tgico-font-path}/#{$tgico-font-family}.woff?owpifk") format("woff"), + url("#{$tgico-font-path}/#{$tgico-font-family}.svg?owpifk##{$tgico-font-family}") + format("svg"); + font-weight: normal; + font-style: normal; + font-display: block; +} + +/* [class^="tgico-"]:before, +[class^="tgico-"]:after, */ +[class^="tgico-"], +.tgico:before, +.tgico:after, +[class*=" tgico-"]:before, +[class*=" tgico-"]:after { + font-family: "#{$tgico-font-family}" !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.tgico-check:before { + content: $tgico-check; +} +.tgico-settings:before { + content: "\e901"; +} +.tgico-smallscreen:before { + content: "\e902"; +} +.tgico-smile:before { + content: "\e903"; +} +.tgico-sport:before { + content: "\e904"; +} +.tgico-stop:before { + content: "\e905"; +} +.tgico-unarchive:before { + content: "\e906"; +} +.tgico-unlock:before { + content: "\e907"; +} +.tgico-unmute:before { + content: "\e908"; +} +.tgico-unpin:before { + content: "\e909"; +} +.tgico-unread:before { + content: "\e90a"; +} +.tgico-up:before { + content: "\e90b"; +} +.tgico-username:before { + content: "\e90c"; +} +.tgico-user:before { + content: "\e90d"; +} +.tgico-play:before { + content: "\e90e"; +} +.tgico-poll:before { + content: "\e90f"; +} +.tgico-radiooff:before { + content: "\e910"; +} +.tgico-radioon:before { + content: "\e911"; +} +.tgico-recent:before { + content: "\e912"; +} +.tgico-reply:before { + content: "\e913"; +} +.tgico-revote:before { + content: "\e914"; +} +.tgico-savedmessages:before { + content: "\e915"; +} +.tgico-search:before { + content: "\e916"; +} +.tgico-send:before { + content: "\e917"; +} +.tgico-send2:before { + content: "\e918"; +} +.tgico-sending:before { + content: "\e919"; +} +.tgico-sendingerror:before { + content: "\e91a"; +} +.tgico-mute:before { + content: "\e91b"; +} +.tgico-newchannel:before { + content: "\e91c"; +} +.tgico-newchat_filled:before { + content: "\e91d"; +} +.tgico-newgroup:before { + content: "\e91e"; +} +.tgico-newprivate:before { + content: "\e91f"; +} +.tgico-next:before { + content: "\e920"; +} +.tgico-nosound:before { + content: "\e921"; +} +.tgico-pause:before { + content: "\e922"; +} +.tgico-permissions:before { + content: "\e923"; +} +.tgico-phone:before { + content: "\e924"; +} +.tgico-photo:before { + content: "\e925"; +} +.tgico-pin:before { + content: "\e926"; +} +.tgico-pinnedchat:before { + content: "\e927"; +} +.tgico-largepause:before { + content: "\e928"; +} +.tgico-largeplay:before { + content: "\e929"; +} +.tgico-livelocation:before { + content: "\e92a"; +} +.tgico-location:before { + content: "\e92b"; +} +.tgico-lock:before { + content: "\e92c"; +} +.tgico-logout:before { + content: "\e92d"; +} +.tgico-menu:before { + content: "\e92e"; +} +.tgico-message:before { + content: "\e92f"; +} +.tgico-microphone:before { + content: "\e930"; +} +.tgico-microphone2:before { + content: "\e931"; +} +.tgico-minus:before { + content: "\e932"; +} +.tgico-more:before { + content: "\e933"; +} +.tgico-download:before { + content: "\e934"; +} +.tgico-eats:before { + content: "\e935"; +} +.tgico-edit:before { + content: "\e936"; +} +.tgico-eye1:before { + content: "\e937"; +} +.tgico-eye2:before { + content: "\e938"; +} +.tgico-flag:before { + content: "\e939"; +} +.tgico-forward:before { + content: "\e93a"; +} +.tgico-FullScreen:before { + content: "\e93b"; +} +.tgico-group:before { + content: "\e93c"; +} +.tgico-help:before { + content: "\e93d"; +} +.tgico-info:before { + content: "\e93e"; +} +.tgico-lamp:before { + content: "\e93f"; +} +.tgico-language:before { + content: "\e940"; +} +.tgico-checkboxempty:before { + content: "\e941"; +} +.tgico-checkboxon:before { + content: "\e942"; +} +.tgico-close:before { + content: "\e943"; +} +.tgico-colorize:before { + content: "\e944"; +} +.tgico-copy:before { + content: "\e945"; +} +.tgico-data:before { + content: "\e946"; +} +.tgico-delete_filled:before { + content: "\e947"; +} +.tgico-delete:before { + content: "\e948"; +} +.tgico-deleteuser:before { + content: "\e949"; +} +.tgico-document:before { + content: "\e94a"; +} +.tgico-down:before { + content: "\e94b"; +} +.tgico-attach:before { + content: "\e94c"; +} +.tgico-avatar_archivedchats:before { + content: "\e94d"; +} +.tgico-avatar_deletedaccount:before { + content: "\e94e"; +} +.tgico-avatar_savedmessages:before { + content: "\e94f"; +} +.tgico-back:before { + content: "\e950"; +} +.tgico-camera:before { + content: "\e951"; +} +.tgico-cameraadd:before { + content: "\e952"; +} +.tgico-car:before { + content: "\e953"; +} +.tgico-channel:before { + content: "\e954"; +} +.tgico-channelviews:before { + content: "\e955"; +} +.tgico-chatsplaceholder:before { + content: "\e956"; +} +.tgico-check1:before { + content: "\e957"; +} +.tgico-checkbox:before { + content: "\e958"; +} +.tgico-checkboxblock:before { + content: "\e959"; +} +.tgico-checks:before { + content: $tgico-checks; +} +.tgico-activesessions:before { + content: "\e95b"; +} +.tgico-add:before { + content: "\e95c"; +} +.tgico-addmember_filled:before { + content: "\e95d"; +} +.tgico-adduser:before { + content: "\e95e"; +} +.tgico-admin:before { + content: "\e95f"; +} +.tgico-animals:before { + content: "\e960"; +} +.tgico-archive:before { + content: "\e961"; +} diff --git a/src/scss/partials/_ico.scss b/src/scss/partials/_ico.scss new file mode 100644 index 00000000..f6be8558 --- /dev/null +++ b/src/scss/partials/_ico.scss @@ -0,0 +1,5 @@ +$tgico-font-family: "tgico" !default; +$tgico-font-path: "../../assets/fonts" !default; + +$tgico-check: "\e900"; +$tgico-checks: "\e95a"; diff --git a/src/scss/partials/_leftSidebar.scss b/src/scss/partials/_leftSidebar.scss new file mode 100644 index 00000000..72f16cc7 --- /dev/null +++ b/src/scss/partials/_leftSidebar.scss @@ -0,0 +1,34 @@ +.chats-container { + display: flex; + flex-direction: column; + + .sidebar-content { + width: 100%; + max-height: 100%; + overflow: hidden; + display: flex; /* idk why but need */ + position: relative; + } + + #chats-container { + max-height: 100%; + overflow: hidden; + } + + #search-container { + display: none; + width: 100%; + max-height: 100%; + height: 100%; + overflow: hidden; + position: absolute; + left: 0; + top: 0; + z-index: 3; + background: #fff; + + &.active { + display: block; + } + } +} diff --git a/src/scss/partials/_sidebar.scss b/src/scss/partials/_sidebar.scss new file mode 100644 index 00000000..eabff923 --- /dev/null +++ b/src/scss/partials/_sidebar.scss @@ -0,0 +1,175 @@ +.sidebar { + background-color: #fff; + overflow: hidden; +} + +.sidebar-left { + border-right: 1px solid #DADCE0; +} + +.sidebar-right { + border-left: 1px solid #DADCE0; +} + +.sidebar-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: .5rem 1.25rem; + min-height: 60px; + + .sidebar-title { + flex: 1; + padding-left: 2rem; + font-weight: 500; + font-size: 1.4rem; + } + + .btn-icon + .btn-icon { + margin-left: .5rem; + } +} + +.sidebar-menu-button > div { + display: none; +} + +.profile-content { + .profile-name { + text-align: center; + font-size: 23px; + font-weight: 500; + margin: 3px 0; + } + + .profile-subtitle { + text-align: center; + color: $darkgrey; + font-size: 14px; + margin: 0 0 18px; + + &.online { + color: $darkblue; + } + } + + .profile-row { + display: flex; + width: 100%; + flex-direction: column; + padding-left: 80px; + padding-top: 2px; + padding-right: 12px; + font-size: 15px; + position: relative; + margin: 1.75rem 0; + + &:before { + position: absolute; + left: 24px; + /* top: 0; */ + font-size: 24px; + color: $darkgrey; + } + + p { + margin: 0; + } + + .profile-row-label { + color: $placeholder-color; + font-size: 14px; + margin-top: 1px; + } + } + + .profile-row-bio { + .emoji { + width: 24px; + height: 24px; + } + } + + .user-avatar { + width: 120px; + height: 120px; + margin: 0 auto 20px; + font-size: 4rem!important; + } + + [type="checkbox"] + span { + padding-left: 54px; + margin-left: -54px; + } + + .content-container { + width: 100%; + max-width: 100%; + overflow: hidden; + } + + .profile-tabs { + margin-top: 40px; + } + + .profile-tabs-content { + /* width: 500%; + margin-left: -100%; + */ + /* > div { + height: 0; + + &.active { + height: auto; + } + } */ + + #content-media { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + grid-auto-rows: max-content; + grid-gap: 3.5px; + place-items: start; + + > div { + width: 100%; + cursor: pointer; + + background-repeat: no-repeat; + background-size: cover; + background-position: center center; + + &::before { + content: ""; + display: inline-block; + width: 1px; + height: 0; + padding-bottom: 100%; + } + } + } + + #content-docs { + padding: 15px; + + .document { + padding-left: 5rem; + padding-right: 1rem; + height: 54px; + + & + .document { + margin-top: 1.5rem; + } + } + + .document-name { + font-weight: normal; + + width: 100%; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + } + } + } +} diff --git a/src/scss/partials/_vars.scss b/src/scss/partials/_vars.scss new file mode 100644 index 00000000..f2286bc3 --- /dev/null +++ b/src/scss/partials/_vars.scss @@ -0,0 +1,27 @@ +$lightblue: #e6ebee; +$blue: #4ea4f6; +$darkblue: #1da1f1; + +$lightgreen: #eeffde; +$green: #4dcd5e; +$darkgreen: #50af4f; + +$dotgreen: #0ac630; + +$lightgrey: #dadce0; +$grey: #c4c9cc; +$darkgrey: #707579; + +$light: rgba($darkgrey, 0.08); + +$text: #000000; +$bg: #ffffff; + +$text-size: 16px; +$time-size: 12px; + +@function anim($elem) { + @return 150ms ease-out $elem; +} + +@import "ico"; diff --git a/src/scss/style.scss b/src/scss/style.scss new file mode 100644 index 00000000..8860a77e --- /dev/null +++ b/src/scss/style.scss @@ -0,0 +1,1422 @@ +$placeholder-color: #9e9e9e; +$border-radius: 8px; +$button-primary-background: #4EA4F6; +$success-color: #4DCD5E; +$color-error: #E53935; +$color-gray: #707579; + +$lightblue: #e6ebee; +$blue: #4ea4f6; +$darkblue: #1da1f1; + +$lightgreen: #eeffde; +$green: #4dcd5e; +$darkgreen: #50af4f; + +$dotgreen: #0ac630; + +$lightgrey: #dadce0; +$grey: #c4c9cc; +$darkgrey: #707579; + +$light: rgba($darkgrey, 0.08); + +$text: #000000; +$bg: #ffffff; + +$text-size: 16px; +$time-size: 12px; + +@import "partials/ico"; +@import "partials/chatlist"; +@import "partials/chat"; +@import "partials/sidebar"; +@import "partials/leftSidebar"; + +html, body { + height: 100%; + width: 100%; +} + +button, input, optgroup, select, textarea, html { + font-family: "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} + +.whole { + height: 100vh; + min-height: 100vh; + width: 100%; + min-width: 100%; +} + +h1, h2, h3, h4, h5, h6 { + letter-spacing: -.66px; + font-weight: 500; +} + +input { + caret-color: $button-primary-background; +} + +.subtitle { + /* font-weight: 500; */ + font-size: 1rem; + color: $placeholder-color; + line-height: 1.25; +} + +.page-sign .input-wrapper, +.page-authCode .input-wrapper, +.page-signUp .input-wrapper, +.page-password .input-wrapper { + margin-top: 3rem; +} + +.page-authCode { + .phone-wrapper { + display: flex; + align-items: center; + justify-content: center; + margin: 1.52rem 0 0.912rem 0; + + h4 { + margin: 0; + + &[contenteditable="true"] { + padding: 0 1rem; + border: none; + outline: none; + padding: 0 1rem; + border-bottom: 2px solid $button-primary-background; + } + } + + .phone.error { + border-color: $color-error!important; + } + } +} + +.btn-icon { + text-align: center; + font-size: 1.65rem; + line-height: 1.65rem; + border-radius: 50%; + -webkit-transition: background-color .15s ease-out; + transition: background-color .15s ease-out; + color: $color-gray; + cursor: pointer; + background: none; + border: none; + padding: .5rem; + position: relative; + overflow: hidden; + + /* kostil */ + display: flex; + align-items: center; + justify-content: center; + + &.active { + color: $blue; + } + + &:hover { + background-color: rgba(112, 117, 121, 0.08); + } +} + +.user-avatar { + color: #fff; + width: 52px; + height: 52px; + line-height: 52px; + border-radius: 50%; + background-color: $button-primary-background; + text-align: center; + font-size: 1.25em; + /* overflow: hidden; */ + position: relative; + user-select: none; + + /* kostil */ + display: flex; + align-items: center; + justify-content: center; + + img { + width: 100%; + height: 100%; + border-radius: inherit; + user-select: none; + } + + &[class*=" tgico-"] { + line-height: 52px; + font-size: 1.5rem; + } + + path { + fill: white; + } + + &.is-online:after { + position: absolute; + content: " "; + display: block; + border-radius: 50%; + border: 2px solid white; + background-color: #4DCD5E; + left: 70%; + top: 79%; + width: 12px; + height: 12px; + } +} + +/* .user-title, b { + color: #000; +} */ + +.user-title, b, .user-last-message b { + color: #000; + font-weight: normal; +} + +.rp { + position: relative; +} + +/** + * Utility: Ripple + * -------------------------------------------------- + */ + .c-ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; + background: transparent; +} + +.c-ripple__circle { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + opacity: 0; + width: 0; + height: 0; + border-radius: 50%; + /* background: rgba(255, 255, 255, 0.25); */ + background: rgba(112, 117, 121, .08); +} +.c-ripple.active .c-ripple__circle { + //-webkit-animation: a-ripple 750ms ease-in; + animation: a-ripple 750ms ease-in-out; +} + +/** + * Animation: Ripple + * -------------------------------------------------- + */ +@-webkit-keyframes a-ripple { + 0% { + opacity: 0; + } + 25% { + opacity: 1; + } + 100% { + width: 200%; + padding-bottom: 200%; + opacity: 0; + } +} +@keyframes a-ripple { + 0% { + opacity: 0; + } + 25% { + opacity: 1; + } + 100% { + width: 200%; + padding-bottom: 200%; + opacity: 0; + } +} + +/* .ripple { + background-color: rgba(112, 117, 121, .08); + width: 1rem; + height: 1rem; + position: absolute; + border-radius: 50%; + transform: translateX(-100%) translateY(-100%); + mix-blend-mode: screen; + animation: ripple 750ms ease-out forwards; +} + +@keyframes ripple { + 0% { transform: translate(-100%, -100%); } + 80% { transform: translate(-100%, -100%) scale(50); } + 100% { transform: translate(-100%, -100%) scale(50); } +} */ + +.document { + padding-left: 4.5rem; + display: flex; + flex-direction: column; + height: 70px; + justify-content: center; + cursor: pointer; + position: relative; + + .document-ico { + position: absolute; + left: 0; + width: 54px; + height: 54px; + color: #fff; + font-weight: 500; + letter-spacing: 1px; + text-align: center; + font-size: 1.1rem; + padding-top: 1.5rem; + background-size: contain; + background-image: url('../assets/img/doc-in.svg'); + } + + .document-name { + white-space: nowrap; + font-weight: 500; + line-height: 1.3; + } + + .document-size { + white-space: nowrap; + color: $darkgrey; + font-size: 14px; + padding-right: 32px; + line-height: 1.3; + } +} + +.page-signUp { + .auth-image { + border-radius: 50%; + cursor: pointer; + position: relative; + overflow: hidden; + + canvas { + max-width: 100%; + max-height: 100%; + width: 100%; + height: 100%; + background-color: $button-primary-background; + } + + svg { + position: absolute; + width: 36px; + height: 36px; + top: 50%; + left: 50%; + transform: translateY(-50%) translateX(-50%); + z-index: 2; + } + } +} + +.input-wrapper { + width: 350px; + margin: 0 auto; +} + +.input-field { + position: relative; + + .arrow-down { + position: absolute; + content: " "; + top: 50%; + bottom: 0; + right: 15px; + cursor: pointer; + + height: 0; + width: 0; + + border: solid #bdbdbd; + border-radius: 1px; + border-width: 0 2px 2px 0; + display: inline-block; + padding: 4px; + vertical-align: middle; + + z-index: 2; + + margin-top: -7px; + transform: rotate(45deg); + -webkit-transform: rotate(45deg); + transition: .2s all; + } + + label { + position: absolute; + color: $placeholder-color; + left: 12.5px; + right: auto; + z-index: 2; + top: 50%; + transform: translateY(-50%); + background-color: #fff; + font-size: 0.85rem; + transition: .2s all; + display: inline-block; + cursor: text; + } + + input { + border: 1px solid #DADCE0; + border-radius: $border-radius; + padding: 0 12.5px; + box-sizing: border-box; + font-size: 0.85rem; + width: 100%; + height: 45px; + transition: .2s border-color; + position: relative; + z-index: 1; + /* font-weight: 500; */ + + &:focus { + border-color: $button-primary-background; + border-width: 1.5px; + padding: 0 12px; + } + + &:disabled { + background-color: #fff; + color: #000; + } + + &.error { + border-color: $color-error; + transition: .2s border-width; + + & + label { + color: $color-error!important; + } + } + + &:focus ~ .arrow-down { + margin-top: -2px; + transform: rotate(225deg); + -webkit-transform: rotate(225deg); + border-color: $button-primary-background; + } + + &:focus + label { + color: $button-primary-background; + } + + &:focus + label, &:valid + label, &:disabled + label { + top: -8.5px; + transform: none; + padding: 0 5px; + left: 7.5px; + } + } +} + +.checkbox-field { + margin: 1rem 0; + display: block; + text-align: left; + padding: 0 1rem; + /* font-weight: 500; */ + position: relative; +} + +[type="checkbox"] { + position: absolute; + opacity: 0; + pointer-events: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + + & + span { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + &:before, &:after { + content: ''; + left: 0; + position: absolute; + -webkit-transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + } + + &:before { + border-radius: 2px; + z-index: 1; + } + + &:after { + height: 18px; + width: 18px; + z-index: 0; + border: 2px solid $button-primary-background; + border-radius: 3px; + top: 50%; + transform: translateY(-50%); + } + } + + &:not(:checked) + span:before { + width: 0; + height: 0; + border: 2px solid transparent; + left: 6px; + top: 10px; + -webkit-transform: rotateZ(45deg); + transform: rotateZ(45deg); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; + } + + &:checked + span:before { + top: 4px; + left: -1px; + width: 8px; + height: 14px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: 2px solid #fff; + border-bottom: 2px solid #fff; + -webkit-transform: rotateZ(45deg); + transform: rotateZ(45deg); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; + } + + &:not(:checked) + span:after { + background-color: transparent; + } + + &:checked + span:after { + background-color: $button-primary-background; + } +} + +.input-wrapper > * ~ * { + margin-top: 1.2rem; +} + +.select-wrapper { + max-height: 300px; + height: auto; + position: absolute; + width: 100%; + top: calc(100% + 10px); + left: 0; + overflow-y: auto; + background-color: #fff; + z-index: 3; + border-radius: $border-radius; + + ul { + margin: 10px 0; + } + + li { + /* display: flex; */ + align-items: center; + padding: 0 12.5px; + justify-content: space-between; + height: 50px; + cursor: pointer; + font-weight: 500; + + text-align: left; + display: grid; + grid-template-columns: 15% 65% 20%; + + &:hover { + background-color: rgba(112, 117, 121, .08); + } + } + + .emoji { + height: 24px; + width: 24px; + font-size: 24px; + line-height: 1; + } +} + +.phone-code { + color: $placeholder-color; + text-align: right; +} + +::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */ + color: $placeholder-color; + opacity: 1; /* Firefox */ +} + +:-ms-input-placeholder { /* Internet Explorer 10-11 */ + color: $placeholder-color; +} + +::-ms-input-placeholder { /* Microsoft Edge */ + color: $placeholder-color; +} + +input:focus, button:focus { + outline: none; +} + +.auth-image { + width: 133px; + height: 133px; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; +} + +/* .phone-wrapper { + display: flex; + align-items: ; +} */ + +.phone-edit { + display: inline-block; + width: 24px; + height: 24px; + margin-left: .4rem; + opacity: .5; + transition: .2s; + cursor: pointer; + font-size: 1.5rem; + + &:hover { + opacity: 1; + } +} + +/* button { + position: relative; + overflow: hidden; + + &:hover { + &:before { + display: block; + } + } + + &:before { + display: none; + content: " "; + position: absolute; + z-index: 2; + background: #000; + top: 0; + left: 0; + right: 0; + bottom: 0; + opacity: .08; + } +} */ + +.btn-primary { + background: $button-primary-background; + color: #fff; + border-radius: $border-radius; + width: 100%; + text-align: center; + font-size: 0.85rem; + height: 45px; + border: none; + font-weight: 500; + cursor: pointer; + overflow: hidden; + position: relative; + + &:hover { + background: darken($button-primary-background, 8%); + } + + svg, use { + height: calc(100% - 20px); + right: 12.5px; + left: auto; + margin: auto 0; + } +} + +/* // scaling... any units +$width: 100px; + +.loader { + position: relative; + margin: 0 auto; + width: $width; + &:before { + content: ''; + display: block; + padding-top: 100%; + } +} */ + +.preloader-circular { + animation: rotate 2s linear infinite; + height: 100%; + transform-origin: center center; + /* width: 100%; */ + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + margin: auto; +} + +.preloader-path { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + animation: dash 1.5s ease-in-out infinite/* , color 6s ease-in-out infinite */; + stroke-linecap: round; + stroke: white; + stroke-width: 3; +} + +.preloader-container { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + margin: auto; + width: 50px; + height: 50px; + /* cursor: pointer; */ + + .preloader-circular { + cursor: pointer; + background-color: rgba(0, 0, 0, .5); + border-radius: 50%; + animation: rotate 2s linear infinite; + width: 100%; + height: 100%; + } + + .preloader-path-new { + stroke-dasharray: 5, 200; + stroke-dashoffset: 0; + //animation: dash 1.5s ease-in-out infinite/* , color 6s ease-in-out infinite */; + stroke-linecap: round; + stroke: white; + stroke-width: 1.5; + /* transition: .1s all; */ + } + + &.preloader-swing { + cursor: default; + + .preloader-circular { + cursor: default; + } + + .preloader-path-new { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + animation: dashNew 1.5s ease-in-out infinite/* , color 6s ease-in-out infinite */; + } + } + + .preloader-close { + cursor: pointer; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin: auto; + color: #fff; + stroke: #fff; + width: 34%; + height: 34%; + + &:hover { + background: none; + } + } +} + +@keyframes rotate { + 100% { + transform: rotate(360deg); + } +} + +@keyframes dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -35px; + } + 100% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -124px; + } +} + +@keyframes dashNew { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -35px; + } + 100% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -286%; + } +} + +.emoji { + display: inline-block; + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + vertical-align: middle; + + line-height: 1em; + font-size: 1em; + + font-family: apple color emoji,segoe ui emoji,noto color emoji,android emoji,emojisymbols,emojione mozilla,twemoji mozilla,segoe ui symbol; + +} + +.popup { + position: fixed; + left: 0; + top: 0; + height: 100%; + max-width: none; + width: 100%; + z-index: 3; + background-color: rgba(0, 0, 0, .35); + margin: 0; + padding: 0; + box-shadow: none; + opacity: 0; + visibility: hidden; + -webkit-transition: opacity 0.3s 0s, visibility 0s 0.3s; + -moz-transition: opacity 0.3s 0s, visibility 0s 0.3s; + transition: opacity 0.3s 0s, visibility 0s 0.3s; + overflow: auto; + /* text-align: center; */ + display: flex; + align-items: center; + justify-content: center; +} + +.popup.is-visible { + opacity: 1; + visibility: visible; + -webkit-transition: opacity 0.3s 0s, visibility 0s 0s; + -moz-transition: opacity 0.3s 0s, visibility 0s 0s; + transition: opacity 0.3s 0s, visibility 0s 0s; +} + +.popup-container { + position: relative; + /* max-width: 400px; */ + border-radius: $border-radius; + background-color: #fff; + padding: 1rem; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); + backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -webkit-transition-property: -webkit-transform; + -moz-transition-property: -moz-transform; + transition-property: transform; + -webkit-transition-duration: 0.3s; + -moz-transition-duration: 0.3s; + transition-duration: 0.3s; +} + +.popup-close { + /* position: absolute; + left: 20px; + top: 12.5px; */ + /* width: 100%; */ + height: 18px; + cursor: pointer; + z-index: 3; + text-align: center; + justify-self: center; + line-height: 1; + + svg { + max-width: 100%; + max-height: 100%; + } + + path { + fill: $color-gray; + transition: .2s all; + } + + &:hover path { + fill: #000; + } + + /* &:before, &:after { + position: absolute; + left: 15px; + content: ' '; + height: 15px; + width: 1px; + background-color: #707579; + } + + &:before { + transform: rotate(45deg); + } + + &:after { + transform: rotate(-45deg); + } */ +} + +.popup.is-visible .popup-container { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} + +.btn-circle { + border-radius: 50%; + width: 44px; + height: 44px; + + path { + fill: white; + } +} + +.popup-header { + /* display: grid; + align-items: center; + grid-template-columns: 9.5% 86.5%; + justify-content: space-between; */ + display: flex; + margin-bottom: 2rem; +} + +.popup-avatar { + .popup-container { + /* height: 400px; */ + /* width: 400px; */ + max-width: 600px; + max-height: 600px; + + > button { + position: absolute; + bottom: 15px; + right: 15px; + } + } + + h6 { + font-size: 1.1rem; + text-align: left; + margin: 0; + margin-left: 1.5rem; + } + + .crop { + /* min-width: calc(100% - 8rem); + min-height: calc(100% - 8rem); */ + + max-width: 200%; + max-height: 200%; + + padding: 0 2.75rem 2.75rem; + + /* position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); */ + + border-radius: $border-radius; + + img { + /* max-width: 100%; */ + /* height: 100%; */ + border-radius: $border-radius; + } + } +} + +.overlay::selection { + background: transparent; +} +.crop-component::selection { + background: transparent; +} +/* .crop-blur { + -webkit-filter: blur(10px) sepia(0.2); + filter: blur(10px) sepia(0.2); +} */ +.crop-image, +.overlay > img { + width: auto; + height: auto; + /* можно явно указать либо ширину, либо высоту */ + /* width: 500px; */ + /*либо height: 300px;*/ + display: block; + object-fit: contain; + object-position: center; +} +/*add stretch*/ +.crop-image { + display: block; + position: relative; + pointer-events: none; +} +.crop-component { + position: relative; + z-index: 999; + background-color: white; + margin: 0 auto; + overflow: hidden; + + > img { + max-width: 100%; + } + + .crop-overlay-color { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(255, 255, 255, 0.7); + border-radius: $border-radius; + } +} +.overlay { + position: absolute; + left: 50%; + top: 50%; + z-index: 999; + margin-left: -100px; + margin-top: -100px; + width: 200px; + height: 200px; + /* box-shadow: 0 0 0 3px white; */ + overflow: hidden; + box-sizing: content-box; + border-radius: 50%; + + &:hover, &:active { + cursor: move; + } + + > img { + position: absolute; + display: block; + } +} + +.overlays { + top: 0; + left: 0; + width: 100%; + height: 100%; + position: fixed!important; + background-color: rgba(0, 0, 0, .2); + z-index: 3; + display: none; + + &.active { + display: block; + } +} + +.media-viewer { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, .9); + /* color: $darkgrey; */ + display: flex; + align-items: center; + justify-content: center; + + .media-viewer-author { + position: absolute; + top: 0; + left: 0; + height: 60px; + padding: 8px 8px 8px 80px; + display: flex; + flex-direction: column; + justify-content: center; + color: #8b8b8b; + + .user-avatar { + width: 44px; + height: 44px; + position: absolute; + top: 8px; + left: 20px; + } + + .media-viewer-name { + font-weight: 500; + } + + .media-viewer-date { + font-size: 15px; + } + } + + .media-viewer-buttons { + position: absolute; + top: 0; + right: 0; + display: flex; + flex-flow: row nowrap; + padding: 8px; + + .btn-icon { + margin: 0 .25rem; + } + } + + .media-viewer-content { + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; + + .media-viewer-stub { + flex: 1; + } + + .media-viewer-container { + align-self: center; + position: relative; + } + + .media-viewer-media { + display: flex; + align-items: center; + justify-content: center; + + > img, > video { + max-height: calc(100vh - 100px); + max-width: calc(100vw - 16px); + } + } + + .media-viewer-switcher-left, .media-viewer-switcher-right { + position: absolute; + left: 0; + top: 0; + width: 10rem; + height: 100%; + cursor: pointer; + + &:hover { + > span { + opacity: 1; + } + } + } + + .media-viewer-switcher-right { + left: auto; + right: 0; + } + + .media-viewer-prev-button, .media-viewer-next-button { + cursor: pointer; + position: absolute; + color: #fff; + font-size: 3rem; + left: 2rem; + top: 50%; + transform: translateY(-50%) rotate(90deg); + opacity: 0; + transition: .2s opacity; + z-index: 3; + /* box-shadow: 0 1px 2px 0 rgba(16, 35, 47, 0.07); */ + } + + .media-viewer-next-button { + left: auto; + right: 2rem; + transform: translateY(-50%) rotate(-90deg); + } + + .media-viewer-caption { + flex: 1; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + color: $darkgrey; + } + } +} + +div.scrollable-y::-webkit-scrollbar { + /* width: 4px; */ + width: 10px; +} + +/* ::-webkit-scrollbar-track { + + +} */ + +div.scrollable-y::-webkit-scrollbar-thumb { + border: 2px solid rgba(0, 0, 0, 0); + background-clip: padding-box; +} + +::-webkit-scrollbar-thumb { + opacity: 0; + transition: .2s ease-in-out; +} + +div.scrollable.active::-webkit-scrollbar-thumb { + border-radius: $border-radius; + background-color: rgba(0, 0, 0, 0.4); + opacity: 1; +} + +::-webkit-scrollbar-button { + width: 0; + height: 0; + display: none; +} +::-webkit-scrollbar-corner { + background-color: transparent; +} + +.scrollable { + width: 100%; + height: 100%; + overflow-y: hidden; + overflow-x: hidden; + max-height: 100%; + + &.scrollable-x { + overflow-x: auto; + overflow-x: overlay; + } + + &.scrollable-y { + overflow-y: auto; + overflow-y: overlay; + } +} + +div.scrollable-x::-webkit-scrollbar { + height: 4px; +} + +/* div.scrollable-x::-webkit-scrollbar-thumb { + border: none; +} */ + +.menu-horizontal { + width: 100%; + color: $darkgrey; + margin-top: 0px; + margin-bottom: 0; + border-bottom: 1px solid $lightgrey; + display: flex; + justify-content: space-around; + align-items: center; + + > li { + display: inline-block; + padding: .75rem 1rem; + cursor: pointer; + text-align: center; + flex: 1; + user-select: none; + + &.active { + position: relative; + color: $blue; + + &:after { + content: ''; + position: absolute; + background: $blue; + left: 24px; + right: 24px; + bottom: -1px; + height: 4px; + border-top-left-radius: 2px; + border-top-right-radius: 2px; + } + } + } +} + +.tabs-container { + min-width: 100%; + display: flex; + /* overflow: hidden; */ + overflow-x: hidden; + + &.animated { + transition: .2s margin-left; + } + + > div { + width: 100%; + max-width: 100%; + overflow: hidden; + /* transition: .2s all; */ + display: none; + + &.active { + display: flex; + } + + > div { + width: 100%; + padding: 7.5px; + max-width: 100%; + overflow: hidden; + } + } +} + +.justify-start { + justify-content: flex-start; +} + +.page-chats { + /* display: grid; */ + /* grid-template-columns: 25% 50%; */ + display: flex; + max-height: 100vh; + min-height: 100vh; + + > div { + height: 100%; + position: relative; + min-height: 100%; + max-height: 100%; + } + + .chats-container { + width: 25%; + /* grid-column: 1; */ + } + + .chat-container { + background-color: #e6ebee; + /* grid-column: 2; */ + width: 100%; + flex: 1; + } + + .profile-container { + //display: none; + width: 0%; + /* grid-column: 3; */ + + transition: .2s ease-in-out; + + > div { + min-width: 25vw; + } + } + + .preloader { + width: 50px; + height: 50px; + + position: absolute; + top: 50%; + left: 50%; + transform: translateY(-50%) translateX(-50%); + + .preloader-path { + stroke: $button-primary-background; + } + } +} + +.page-password { + #password { + padding-right: 2.5rem; + + &[type="password"] { + font-size: 2.25rem; + padding-left: 10px; + } + } + + .toggle-visible { + position: absolute; + right: .25rem; + z-index: 2; + top: 50%; + transform: translateY(-50%); + font-size: 1.25rem; + color: $placeholder-color; + cursor: pointer; + transition: .2s; + padding: .5rem; + + &:hover { + color: #000; + } + } +} diff --git a/src/scss/tgico.scss b/src/scss/tgico.scss new file mode 100644 index 00000000..68ede48e --- /dev/null +++ b/src/scss/tgico.scss @@ -0,0 +1,2 @@ +@import "partials/vars"; +@import "partials/fonts"; diff --git a/src/tests/lol.test.ts b/src/tests/lol.test.ts new file mode 100644 index 00000000..450778c4 --- /dev/null +++ b/src/tests/lol.test.ts @@ -0,0 +1,50 @@ +import CryptoWorker from '../lib/crypto/cryptoworker'; +import { bytesFromHex, bytesFromArrayBuffer } from '../lib/bin_utils'; + +test('factorize', () => { + for(let i = 0; i < 10; ++i) { + CryptoWorker.factorize(new Uint8Array([20, 149, 30, 137, 202, 169, 105, 69])).then((pAndQ: any) => { + pAndQ.pop(); + expect(pAndQ).toEqual([[59, 165, 190, 67], [88, 86, 117, 215]]); + }); + } +}); + +test('sha1', () => { + CryptoWorker.sha1Hash(bytesFromHex('ec5ac983081eeb1da706316227000000044af6cfb1000000046995dd57000000d55105998729349339eb322d86ec13bc0884f6ba0449d8ecbad0ef574837422579a11a88591796cdcc4c05690da0652462489286450179a635924bcc0ab83848')) + .then(buffer => { + //console.log(bytesFromArrayBuffer(buffer)); + + let bytes = bytesFromArrayBuffer(buffer); + expect(bytes).toEqual([ + 55, 160, 249, 190, 133, 135, + 3, 45, 56, 157, 186, 81, + 249, 0, 96, 235, 11, 10, + 173, 197 + ]); + }); +}); + +test('pbkdf2', () => { + /* const crypto = require('crypto'); + + Object.defineProperty(global.self, 'crypto', { + value: { + getRandomValues: arr => crypto.randomBytes(arr.length), + }, + }); */ + + /* let buffer = new Uint8Array([ + 166, 101, 158, 215, 174, 249, 101, 150, 109, 155, 243, + 250, 221, 227, 251, 39, 34, 108, 230, 63, 198, 98, 9, + 95, 20, 66, 186, 1, 245, 240, 185, 238 + ]); + + let salt = new Uint8Array([ + 40, 95, 205, 123, 107, 81, 255, 138, 0, 0, 0, 0, 0, 0, 0, 0 + ]); + + let iterations = 100000; */ + + +}); diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 00000000..3a77ee0c --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1,249 @@ +// Type definitions for jsbn v1.2.29 +// Project: http://www-cs-students.stanford.edu/%7Etjw/jsbn/ +// Definitions by: Eugene Chernyshov , Al Tabayoyon +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +export class SecureRandom { + nextBytes(bytes: number[]): void; +} + +export class BigInteger { + constructor(a: number, c: SecureRandom); + constructor(a: number, b: number, c: SecureRandom); + constructor(a: string, b?: number); + constructor(a: number[], b?: number); + constructor(a: BigInteger); + + s: number; + t: number; + data: number[]; // forge specific + + DB: number; + DM: number; + DV: number; + + FV: number; + F1: number; + F2: number; + + // am: Compute w_j += (x*this_i), propagate carries, + am(i: number, x: number, w: BigInteger, j: number, c: number, n: number): number; + + // (protected) copy this to r + copyTo(r: BigInteger): void; + + // (protected) set from integer value x, -DV <= x < DV + fromInt(x: number): void; + + // (protected) set from string and radix + fromString(x: string, b: number): void; + + // (protected) clamp off excess high words + clamp(): void; + + // (public) return string representation in given radix + toString(b?: number): string; + + // (public) -this + negate(): BigInteger; + + // (public) |this| + abs(): BigInteger; + + // (public) return + if this > a, - if this < a, 0 if equal + compareTo(a: BigInteger): number; + + // (public) return the number of bits in "this" + bitLength(): number; + + // (protected) r = this << n*DB + dlShiftTo(n: number, r: BigInteger): void; + + // (protected) r = this >> n*DB + drShiftTo(n: number, r: BigInteger): void; + + // (protected) r = this << n + lShiftTo(n: number, r: BigInteger): void; + + // (protected) r = this >> n + rShiftTo(n: number, r: BigInteger): void; + + // (protected) r = this - a + subTo(a: BigInteger, r: BigInteger): void; + + // (protected) r = this * a, r != this,a (HAC 14.12) + multiplyTo(a: BigInteger, r: BigInteger): void; + + // (protected) r = this^2, r != this (HAC 14.16) + squareTo(r: BigInteger): void; + + // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) + // r != q, this != m. q or r may be null. + divRemTo(m: BigInteger, q: BigInteger, r: BigInteger): void; + + // (public) this mod a + mod(a: BigInteger): BigInteger; + + // (protected) return "-1/this % 2^DB"; useful for Mont. reduction + invDigit(): number; + + // (protected) true iff this is even + isEven(): boolean; + + // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) + exp(e: number, z: Reduction): BigInteger; + + // (public) this^e % m, 0 <= e < 2^32 + modPowInt(e: number, m: BigInteger): BigInteger; + + // (public) + clone(): BigInteger; + + // (public) return value as integer + intValue(): number; + + // (public) return value as byte + byteValue(): number; + + // (public) return value as short (assumes DB>=16) + shortValue(): number; + + // (protected) return x s.t. r^x < DV + chunkSize(r: number): number; + + // (public) 0 if this == 0, 1 if this > 0 + signum(): number; + + // (protected) convert to radix string + toRadix(b: number): string; + + // (protected) convert from radix string + fromRadix(s: string, b: number): void; + + // (protected) alternate constructor + fromNumber(a: number, b?: number, c?: number): void; + + // (public) convert to bigendian byte array + toByteArray(): number[]; + + equals(a: BigInteger): boolean; + + min(a: BigInteger): BigInteger; + + max(a: BigInteger): BigInteger; + + // (protected) r = this op a (bitwise) + bitwiseTo(a: BigInteger, op: (x: number, y: number) => number, r: BigInteger): void; + + // (public) this & a + and(a: BigInteger): BigInteger; + + // (public) this | a + or(a: BigInteger): BigInteger; + + // (public) this ^ a + xor(a: BigInteger): BigInteger; + + // (public) this & ~a + andNot(a: BigInteger): BigInteger; + + // (public) ~this + not(): BigInteger; + + // (public) this << n + shiftLeft(n: number): BigInteger; + + // (public) this >> n + shiftRight(n: number): BigInteger; + + // (public) returns index of lowest 1-bit (or -1 if none) + getLowestSetBit(): number; + + // (public) return number of set bits + bitCount(): number; + + // (public) true iff nth bit is set + testBit(n: number): boolean; + + // (protected) this op (1< number): BigInteger; + + // (protected) this op (1<= 0, 1 < n < DV + dMultiply(n: number): void; + + // (protected) this += n << w words, this >= 0 + dAddOffset(n: number, w: number): void; + + // (public) this^e + pow(e: number): BigInteger; + + // (protected) r = lower n words of "this * a", a.t <= n + multiplyLowerTo(a: BigInteger, n: number, r: BigInteger): void; + + // (protected) r = "this * a" without lower n words, n > 0 + multiplyUpperTo(a: BigInteger, n: number, r: BigInteger): void; + + // (public) this^e % m (HAC 14.85) + modPow(e: BigInteger, m: BigInteger): BigInteger; + + // (public) gcd(this,a) (HAC 14.54) + gcd(a: BigInteger): BigInteger; + + // (protected) this % n, n < 2^26 + modInt(n: number): number; + + // (public) 1/this % m (HAC 14.61) + modInverse(m: BigInteger): BigInteger; + + // (public) test primality with certainty >= 1-.5^t + isProbablePrime(t: number): boolean; + + // (protected) true if probably prime (HAC 4.24, Miller-Rabin) + millerRabin(t: number): boolean; + + static ZERO: BigInteger; + static ONE: BigInteger; +} + +export interface Reduction { + convert(x: BigInteger): BigInteger; + revert(x: BigInteger): BigInteger; + reduce(x: BigInteger): void; + mulTo(x: BigInteger, y: BigInteger, r: BigInteger): void; + sqrTo(x: BigInteger, r: BigInteger): void; +} + +export as namespace jsbn; diff --git a/stats.json b/stats.json new file mode 100644 index 00000000..8635d3b0 --- /dev/null +++ b/stats.json @@ -0,0 +1,9665 @@ +{ + "errors": [], + "warnings": [ + "asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).\nThis can impact web performance.\nAssets: \n bundle.js (1.09 MiB)", + "entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.\nEntrypoints:\n main (1.09 MiB)\n bundle.js\n", + "webpack performance recommendations: \nYou can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application.\nFor more info visit https://webpack.js.org/guides/code-splitting/" + ], + "version": "4.41.2", + "hash": "e5bb06c076e3ed69a540", + "time": 8680, + "builtAt": 1579094416874, + "publicPath": "", + "outputPath": "/Users/kuzmenko/Documents/projects/tweb/public", + "assetsByChunkName": { + "main": "bundle.js" + }, + "assets": [ + { + "name": "assets/fonts/tgico.eot", + "size": 21788, + "chunks": [], + "chunkNames": [], + "info": {}, + "emitted": true + }, + { + "name": "assets/fonts/tgico.svg", + "size": 78299, + "chunks": [], + "chunkNames": [], + "info": {}, + "emitted": true + }, + { + "name": "assets/fonts/tgico.svg.br", + "size": 17893, + "chunks": [], + "chunkNames": [], + "info": {}, + "emitted": true + }, + { + "name": "assets/fonts/tgico.ttf", + "size": 21632, + "chunks": [], + "chunkNames": [], + "info": {}, + "emitted": true + }, + { + "name": "assets/fonts/tgico.woff", + "size": 21708, + "chunks": [], + "chunkNames": [], + "info": {}, + "emitted": true + }, + { + "name": "assets/img/msg-tail-left.svg", + "size": 1026, + "chunks": [], + "chunkNames": [], + "info": {}, + "emitted": true + }, + { + "name": "assets/img/msg-tail-right.svg", + "size": 973, + "chunks": [], + "chunkNames": [], + "info": {}, + "emitted": true + }, + { + "name": "bundle.js", + "size": 1142787, + "chunks": [ + 0 + ], + "chunkNames": [ + "main" + ], + "info": {}, + "emitted": true, + "isOverSizeLimit": true + }, + { + "name": "bundle.js.br", + "size": 225779, + "chunks": [], + "chunkNames": [], + "info": {}, + "emitted": true + }, + { + "name": "c05c8d5242c7b2494d71.worker.js", + "size": 105265, + "chunks": [], + "chunkNames": [], + "info": { + "immutable": true + }, + "emitted": true + }, + { + "name": "c05c8d5242c7b2494d71.worker.js.br", + "size": 30801, + "chunks": [], + "chunkNames": [], + "info": {}, + "emitted": true + } + ], + "filteredAssets": 0, + "entrypoints": { + "main": { + "chunks": [ + 0 + ], + "assets": [ + "bundle.js" + ], + "children": {}, + "childAssets": {}, + "isOverSizeLimit": true + } + }, + "namedChunkGroups": { + "main": { + "chunks": [ + 0 + ], + "assets": [ + "bundle.js" + ], + "children": {}, + "childAssets": {}, + "isOverSizeLimit": true + } + }, + "chunks": [ + { + "id": 0, + "rendered": true, + "initial": true, + "entry": true, + "size": 2285829, + "names": [ + "main" + ], + "files": [ + "bundle.js" + ], + "hash": "744b15056b7f610a19ae", + "siblings": [], + "parents": [], + "children": [], + "childrenByOrder": {}, + "modules": [ + { + "id": 0, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/utils.js", + "name": "./src/lib/utils.js", + "index": 29, + "index2": 26, + "size": 19444, + "cacheable": true, + "built": true, + "optional": false, + "prefetched": false, + "chunks": [ + 0 + ], + "issuer": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtproto.ts", + "issuerId": 2, + "issuerName": "./src/lib/mtproto.ts", + "issuerPath": [ + { + "id": 18, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/index.ts", + "name": "./src/index.ts", + "profile": { + "factory": 17, + "building": 2295 + } + }, + { + "id": 2, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtproto.ts", + "name": "./src/lib/mtproto.ts", + "profile": { + "factory": 1354, + "building": 0, + "dependencies": 287 + } + } + ], + "profile": { + "factory": 1950, + "building": 50, + "dependencies": 703 + }, + "failed": false, + "errors": 0, + "warnings": 0, + "assets": [], + "reasons": [ + { + "moduleId": 2, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtproto.ts", + "module": "./src/lib/mtproto.ts", + "moduleName": "./src/lib/mtproto.ts", + "type": "cjs require", + "userRequest": "./utils", + "loc": "58:14-32" + }, + { + "moduleId": 12, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/services.ts", + "module": "./src/lib/services.ts", + "moduleName": "./src/lib/services.ts", + "type": "cjs require", + "userRequest": "./utils", + "loc": "38:14-32" + }, + { + "moduleId": 15, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/tl_utils.ts", + "module": "./src/lib/tl_utils.ts", + "moduleName": "./src/lib/tl_utils.ts", + "type": "cjs require", + "userRequest": "./utils", + "loc": "17:14-32" + }, + { + "moduleId": 16, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/cryptoworker.ts", + "module": "./src/lib/cryptoworker.ts", + "moduleName": "./src/lib/cryptoworker.ts", + "type": "cjs require", + "userRequest": "./utils", + "loc": "6:14-32" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony side effect evaluation", + "userRequest": "./utils", + "loc": "1:0-59" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "108:14-26" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "345:32-36" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "367:11-25" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "398:8-22" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "426:10-24" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "439:10-24" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "457:10-24" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "468:10-24" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "470:10-24" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "483:18-32" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "490:12-26" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "506:76-90" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "536:10-24" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "538:10-24" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "559:10-24" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "565:65-79" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "566:10-24" + }, + { + "moduleId": 17, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/src/lib/richtextprocessor.js", + "module": "./src/lib/richtextprocessor.js", + "moduleName": "./src/lib/richtextprocessor.js", + "type": "harmony import specifier", + "userRequest": "./utils", + "loc": "576:12-26" + }, + { + "moduleId": 39, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtnetworker.ts", + "module": "./src/lib/mtnetworker.ts", + "moduleName": "./src/lib/mtnetworker.ts", + "type": "cjs require", + "userRequest": "./utils", + "loc": "13:14-32" + }, + { + "moduleId": 41, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/components/pageSignIn.ts", + "module": "./src/components/pageSignIn.ts", + "moduleName": "./src/components/pageSignIn.ts", + "type": "cjs require", + "userRequest": "../lib/utils", + "loc": "18:14-37" + } + ], + "usedExports": true, + "providedExports": [ + "dT", + "isObject", + "tsNow", + "safeReplaceObject", + "numberWithCommas", + "isElementInViewport", + "copy", + "ripple", + "encodeEntities", + "calcImageInBox", + "emojiUnicode", + "countryCodeEmoji", + "unifiedCountryCodeEmoji", + "SearchIndexManager" + ], + "optimizationBailout": [ + "ModuleConcatenation bailout: Module is referenced from these modules with unsupported syntax: ./src/components/pageSignIn.ts (referenced with cjs require), ./src/lib/cryptoworker.ts (referenced with cjs require), ./src/lib/mtnetworker.ts (referenced with cjs require), ./src/lib/mtproto.ts (referenced with cjs require), ./src/lib/services.ts (referenced with cjs require), ./src/lib/tl_utils.ts (referenced with cjs require)" + ], + "depth": 2, + "source": "/*!\r\n * Webogram v0.7.0 - messaging web application for MTProto\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\nvar _logTimer = (new Date()).getTime()\r\nexport function dT () {\r\n return '[' + (((new Date()).getTime() - _logTimer) / 1000).toFixed(3) + ']'\r\n}\r\n\r\nfunction checkClick (e, noprevent) {\r\n if (e.which == 1 && (e.ctrlKey || e.metaKey) || e.which == 2) {\r\n return true\r\n }\r\n\r\n if (!noprevent) {\r\n e.preventDefault()\r\n }\r\n\r\n return false\r\n}\r\n\r\nfunction isInDOM (element, parentNode) {\r\n if (!element) {\r\n return false\r\n }\r\n parentNode = parentNode || document.body\r\n if (element == parentNode) {\r\n return true\r\n }\r\n return isInDOM(element.parentNode, parentNode)\r\n}\r\n\r\nfunction checkDragEvent (e) {\r\n if (!e || e.target && (e.target.tagName == 'IMG' || e.target.tagName == 'A')) return false\r\n if (e.dataTransfer && e.dataTransfer.types) {\r\n for (var i = 0; i < e.dataTransfer.types.length; i++) {\r\n if (e.dataTransfer.types[i] == 'Files') {\r\n return true\r\n }\r\n }\r\n } else {\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n\r\nfunction cancelEvent (event) {\r\n event = event || window.event\r\n if (event) {\r\n event = event.originalEvent || event\r\n\r\n if (event.stopPropagation) event.stopPropagation()\r\n if (event.preventDefault) event.preventDefault()\r\n event.returnValue = false\r\n event.cancelBubble = true\r\n }\r\n\r\n return false\r\n}\r\n\r\nfunction hasOnclick (element) {\r\n if (element.onclick ||\r\n element.getAttribute('ng-click')) {\r\n return true\r\n }\r\n var events = $._data(element, 'events')\r\n if (events && (events.click || events.mousedown)) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nfunction getScrollWidth () {\r\n var outer = $('
    ').css({\r\n position: 'absolute',\r\n width: 100,\r\n height: 100,\r\n overflow: 'scroll',\r\n top: -9999\r\n }).appendTo($(document.body))\r\n\r\n var scrollbarWidth = outer[0].offsetWidth - outer[0].clientWidth\r\n outer.remove()\r\n\r\n return scrollbarWidth\r\n}\r\n\r\nfunction onCtrlEnter (textarea, cb) {\r\n $(textarea).on('keydown', function (e) {\r\n if (e.keyCode == 13 && (e.ctrlKey || e.metaKey)) {\r\n cb()\r\n return cancelEvent(e)\r\n }\r\n })\r\n}\r\n\r\nfunction setFieldSelection (field, from, to) {\r\n field = $(field)[0]\r\n try {\r\n field.focus()\r\n if (from === undefined || from === false) {\r\n from = field.value.length\r\n }\r\n if (to === undefined || to === false) {\r\n to = from\r\n }\r\n if (field.createTextRange) {\r\n var range = field.createTextRange()\r\n range.collapse(true)\r\n range.moveEnd('character', to)\r\n range.moveStart('character', from)\r\n range.select()\r\n }\r\n else if (field.setSelectionRange) {\r\n field.setSelectionRange(from, to)\r\n }\r\n } catch(e) {}\r\n}\r\n\r\nfunction getFieldSelection (field) {\r\n if (field.selectionStart) {\r\n return field.selectionStart\r\n }\r\n else if (!document.selection) {\r\n return 0\r\n }\r\n\r\n var c = '\\x01'\r\n var sel = document.selection.createRange()\r\n var txt = sel.text\r\n var dup = sel.duplicate()\r\n var len = 0\r\n\r\n try {\r\n dup.moveToElementText(field)\r\n } catch(e) {\r\n return 0\r\n }\r\n\r\n sel.text = txt + c\r\n len = dup.text.indexOf(c)\r\n sel.moveStart('character', -1)\r\n sel.text = ''\r\n\r\n // if (browser.msie && len == -1) {\r\n // return field.value.length\r\n // }\r\n return len\r\n}\r\n\r\nfunction getRichValue (field) {\r\n if (!field) {\r\n return ''\r\n }\r\n var lines = []\r\n var line = []\r\n\r\n getRichElementValue(field, lines, line)\r\n if (line.length) {\r\n lines.push(line.join(''))\r\n }\r\n\r\n var value = lines.join('\\n')\r\n value = value.replace(/\\u00A0/g, ' ')\r\n\r\n return value\r\n}\r\n\r\nfunction getRichValueWithCaret (field) {\r\n if (!field) {\r\n return []\r\n }\r\n var lines = []\r\n var line = []\r\n\r\n var sel = window.getSelection ? window.getSelection() : false\r\n var selNode\r\n var selOffset\r\n if (sel && sel.rangeCount) {\r\n var range = sel.getRangeAt(0)\r\n if (range.startContainer &&\r\n range.startContainer == range.endContainer &&\r\n range.startOffset == range.endOffset) {\r\n selNode = range.startContainer\r\n selOffset = range.startOffset\r\n }\r\n }\r\n\r\n getRichElementValue(field, lines, line, selNode, selOffset)\r\n\r\n if (line.length) {\r\n lines.push(line.join(''))\r\n }\r\n\r\n var value = lines.join('\\n')\r\n var caretPos = value.indexOf('\\x01')\r\n if (caretPos != -1) {\r\n value = value.substr(0, caretPos) + value.substr(caretPos + 1)\r\n }\r\n value = value.replace(/\\u00A0/g, ' ')\r\n\r\n return [value, caretPos]\r\n}\r\n\r\nfunction getRichElementValue (node, lines, line, selNode, selOffset) {\r\n if (node.nodeType == 3) { // TEXT\r\n if (selNode === node) {\r\n var value = node.nodeValue\r\n line.push(value.substr(0, selOffset) + '\\x01' + value.substr(selOffset))\r\n } else {\r\n line.push(node.nodeValue)\r\n }\r\n return\r\n }\r\n if (node.nodeType != 1) { // NON-ELEMENT\r\n return\r\n }\r\n var isSelected = (selNode === node)\r\n var isBlock = node.tagName == 'DIV' || node.tagName == 'P'\r\n var curChild\r\n if (isBlock && line.length || node.tagName == 'BR') {\r\n lines.push(line.join(''))\r\n line.splice(0, line.length)\r\n }\r\n else if (node.tagName == 'IMG') {\r\n if (node.alt) {\r\n line.push(node.alt)\r\n }\r\n }\r\n if (isSelected && !selOffset) {\r\n line.push('\\x01')\r\n }\r\n var curChild = node.firstChild\r\n while (curChild) {\r\n getRichElementValue(curChild, lines, line, selNode, selOffset)\r\n curChild = curChild.nextSibling\r\n }\r\n if (isSelected && selOffset) {\r\n line.push('\\x01')\r\n }\r\n if (isBlock && line.length) {\r\n lines.push(line.join(''))\r\n line.splice(0, line.length)\r\n }\r\n}\r\n\r\nfunction setRichFocus (field, selectNode, noCollapse) {\r\n field.focus()\r\n if (selectNode &&\r\n selectNode.parentNode == field &&\r\n !selectNode.nextSibling &&\r\n !noCollapse) {\r\n field.removeChild(selectNode)\r\n selectNode = null\r\n }\r\n if (window.getSelection && document.createRange) {\r\n var range = document.createRange()\r\n if (selectNode) {\r\n range.selectNode(selectNode)\r\n } else {\r\n range.selectNodeContents(field)\r\n }\r\n if (!noCollapse) {\r\n range.collapse(false)\r\n }\r\n\r\n var sel = window.getSelection()\r\n sel.removeAllRanges()\r\n sel.addRange(range)\r\n }\r\n else if (document.body.createTextRange !== undefined) {\r\n var textRange = document.body.createTextRange()\r\n textRange.moveToElementText(selectNode || field)\r\n if (!noCollapse) {\r\n textRange.collapse(false)\r\n }\r\n textRange.select()\r\n }\r\n}\r\n\r\nfunction getSelectedText () {\r\n var sel = (\r\n window.getSelection && window.getSelection() ||\r\n document.getSelection && document.getSelection() ||\r\n document.selection && document.selection.createRange().text || ''\r\n ).toString().replace(/^\\s+|\\s+$/g, '')\r\n\r\n return sel\r\n}\r\n\r\nfunction scrollToNode (scrollable, node, scroller) {\r\n var elTop = node.offsetTop - 15\r\n var elHeight = node.offsetHeight + 30\r\n var scrollTop = scrollable.scrollTop\r\n var viewportHeight = scrollable.clientHeight\r\n\r\n if (scrollTop > elTop) { // we are below the node to scroll\r\n scrollable.scrollTop = elTop\r\n $(scroller).nanoScroller({flash: true})\r\n }\r\n else if (scrollTop < elTop + elHeight - viewportHeight) { // we are over the node to scroll\r\n scrollable.scrollTop = elTop + elHeight - viewportHeight\r\n $(scroller).nanoScroller({flash: true})\r\n }\r\n}\r\n\r\nif (Config.Modes.animations &&\r\n typeof window.requestAnimationFrame == 'function') {\r\n window.onAnimationFrameCallback = function (cb) {\r\n return (function () {\r\n window.requestAnimationFrame(cb)\r\n })\r\n }\r\n} else {\r\n window.onAnimationFrameCallback = function (cb) {\r\n return cb\r\n }\r\n}\r\n\r\nfunction onContentLoaded (cb) {\r\n cb = onAnimationFrameCallback(cb)\r\n setZeroTimeout(cb)\r\n}\r\n\r\nexport function isObject(object) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\nexport function tsNow (seconds) {\r\n var t = +new Date() + (window.tsOffset || 0)\r\n return seconds ? Math.floor(t / 1000) : t\r\n}\r\n\r\nexport function safeReplaceObject (wasObject, newObject) {\r\n for (var key in wasObject) {\r\n if (!newObject.hasOwnProperty(key) && key.charAt(0) != '$') {\r\n delete wasObject[key]\r\n }\r\n }\r\n for (var key in newObject) {\r\n if (newObject.hasOwnProperty(key)) {\r\n wasObject[key] = newObject[key]\r\n }\r\n }\r\n}\r\n\r\nexport function numberWithCommas(x) {\r\n var parts = x.toString().split(\".\");\r\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n return parts.join(\".\");\r\n}\r\n\r\nexport function isElementInViewport(el) {\r\n var rect = el.getBoundingClientRect(),\r\n vWidth = window.innerWidth || doc.documentElement.clientWidth,\r\n vHeight = window.innerHeight || doc.documentElement.clientHeight,\r\n efp = function (x, y) { return document.elementFromPoint(x, y) }; \r\n\r\n // Return false if it's not in the viewport\r\n if (rect.right < 0 || rect.bottom < 0 \r\n || rect.left > vWidth || rect.top > vHeight)\r\n return false;\r\n\r\n // Return true if any of its four corners are visible\r\n return (\r\n el.contains(efp(rect.left, rect.top))\r\n || el.contains(efp(rect.right, rect.top))\r\n || el.contains(efp(rect.right, rect.bottom))\r\n || el.contains(efp(rect.left, rect.bottom))\r\n );\r\n}\r\n\r\nexport function copy(obj) {\r\n //in case of premitives\r\n if(obj===null || typeof obj !== \"object\"){\r\n return obj;\r\n }\r\n \r\n //date objects should be \r\n if(obj instanceof Date){\r\n return new Date(obj.getTime());\r\n }\r\n \r\n //handle Array\r\n if(Array.isArray(obj)){\r\n var clonedArr = [];\r\n obj.forEach(function(element){\r\n clonedArr.push(copy(element))\r\n });\r\n return clonedArr;\r\n }\r\n \r\n //lastly, handle objects\r\n let clonedObj = new obj.constructor();\r\n for(var prop in obj){\r\n if(obj.hasOwnProperty(prop)){\r\n clonedObj[prop] = copy(obj[prop]);\r\n }\r\n }\r\n return clonedObj;\r\n}\r\n\r\nexport function ripple(elem/* : HTMLElement */) {\r\n elem.addEventListener('mousedown', function(/* this: typeof elem, */e) {\r\n let rect = this.getBoundingClientRect();\r\n\r\n const startTime = Date.now();\r\n const animationTime = 350;\r\n\r\n let X = e.clientX - rect.left;\r\n let Y = e.clientY - rect.top;\r\n let rippleDiv = document.createElement(\"div\");\r\n rippleDiv.classList.add(\"ripple\");\r\n rippleDiv.setAttribute(\"style\", \"top:\" + Y + \"px; left:\" + X + \"px;\");\r\n this.appendChild(rippleDiv);\r\n\r\n elem.addEventListener('mouseup', () => {\r\n let elapsed = Date.now() - startTime;\r\n\r\n setTimeout(() => {\r\n rippleDiv.parentElement.removeChild(rippleDiv);\r\n }, elapsed < animationTime ? animationTime - elapsed : 0);\r\n }, {once: true});\r\n });\r\n};\r\n\r\nfunction listMergeSorted (list1, list2) {\r\n list1 = list1 || []\r\n list2 = list2 || []\r\n\r\n var result = copy(list1);\r\n\r\n var minID = list1.length ? list1[list1.length - 1] : 0xFFFFFFFF\r\n for (var i = 0; i < list2.length; i++) {\r\n if (list2[i] < minID) {\r\n result.push(list2[i])\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nfunction listUniqSorted (list) {\r\n list = list || []\r\n var resultList = []\r\n var prev = false\r\n for (var i = 0; i < list.length; i++) {\r\n if (list[i] !== prev) {\r\n resultList.push(list[i])\r\n }\r\n prev = list[i]\r\n }\r\n\r\n return resultList\r\n}\r\n\r\nfunction templateUrl (tplName) {\r\n var forceLayout = {\r\n confirm_modal: 'desktop',\r\n error_modal: 'desktop',\r\n media_modal_layout: 'desktop',\r\n slider: 'desktop',\r\n reply_message: 'desktop',\r\n full_round: 'desktop',\r\n message_body: 'desktop',\r\n message_media: 'desktop',\r\n message_attach_game: 'desktop',\r\n forwarded_messages: 'desktop',\r\n chat_invite_link_modal: 'desktop',\r\n reply_markup: 'desktop',\r\n short_message: 'desktop',\r\n pinned_message: 'desktop',\r\n channel_edit_modal: 'desktop',\r\n megagroup_edit_modal: 'desktop',\r\n inline_results: 'desktop',\r\n composer_dropdown: 'desktop',\r\n peer_pinned_message_bar: 'desktop',\r\n report_msgs_modal: 'desktop'\r\n }\r\n var layout = forceLayout[tplName] || (Config.Mobile ? 'mobile' : 'desktop')\r\n return 'partials/' + layout + '/' + tplName + '.html'\r\n}\r\n\r\nexport function encodeEntities (value) {\r\n return value.replace(/&/g, '&').replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, function (value) {\r\n var hi = value.charCodeAt(0)\r\n var low = value.charCodeAt(1)\r\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';'\r\n }).replace(/([^\\#-~| |!])/g, function (value) { // non-alphanumeric\r\n return '&#' + value.charCodeAt(0) + ';'\r\n }).replace(//g, '>')\r\n}\r\n\r\nexport function calcImageInBox (imageW, imageH, boxW, boxH, noZooom) {\r\n var boxedImageW = boxW\r\n var boxedImageH = boxH\r\n\r\n if ((imageW / imageH) > (boxW / boxH)) {\r\n boxedImageH = parseInt(imageH * boxW / imageW)\r\n }else {\r\n boxedImageW = parseInt(imageW * boxH / imageH)\r\n if (boxedImageW > boxW) {\r\n boxedImageH = parseInt(boxedImageH * boxW / boxedImageW)\r\n boxedImageW = boxW\r\n }\r\n }\r\n\r\n // if (Config.Navigator.retina) {\r\n // imageW = Math.floor(imageW / 2)\r\n // imageH = Math.floor(imageH / 2)\r\n // }\r\n\r\n if (noZooom && boxedImageW >= imageW && boxedImageH >= imageH) {\r\n boxedImageW = imageW\r\n boxedImageH = imageH\r\n }\r\n\r\n return {w: boxedImageW, h: boxedImageH}\r\n}\r\n\r\n/**\r\n * emojiUnicode\r\n * Get the unicode code of an emoji in base 16.\r\n *\r\n * @name emojiUnicode\r\n * @function\r\n * @param {String} input The emoji character.\r\n * @returns {String} The base 16 unicode code.\r\n */\r\nexport function emojiUnicode (input) {\r\n return emojiUnicode.raw(input).split(' ').map(val => parseInt(val).toString(16)).join('-').toUpperCase();\r\n}\r\n\r\n/**\r\n* emojiunicode.raw\r\n* Get the unicode code points of an emoji in base 16.\r\n*\r\n* @name emojiunicode.raw\r\n* @function\r\n* @param {String} input The emoji character.\r\n* @returns {String} The unicode code points.\r\n*/\r\nemojiUnicode.raw = function (input) {\r\n if(input.length === 1) {\r\n return input.charCodeAt(0).toString();\r\n } else if(input.length > 1) {\r\n const pairs = [];\r\n for (var i = 0; i < input.length; i++) {\r\n if (\r\n // high surrogate\r\n input.charCodeAt(i) >= 0xd800 && input.charCodeAt(i) <= 0xdbff\r\n ) {\r\n if (\r\n input.charCodeAt(i + 1) >= 0xdc00 && input.charCodeAt(i + 1) <= 0xdfff\r\n ) {\r\n // low surrogate\r\n pairs.push(\r\n (input.charCodeAt(i) - 0xd800) * 0x400\r\n + (input.charCodeAt(i + 1) - 0xdc00) + 0x10000\r\n );\r\n }\r\n } else if (input.charCodeAt(i) < 0xd800 || input.charCodeAt(i) > 0xdfff) {\r\n // modifiers and joiners\r\n pairs.push(input.charCodeAt(i))\r\n }\r\n }\r\n return pairs.join(' ');\r\n }\r\n\r\n return '';\r\n};\r\n\r\n// country code regex\r\nconst CC_REGEX = /^[a-z]{2}$/i;\r\n\r\n// offset between uppercase ascii and regional indicator symbols\r\nconst OFFSET = 127397;\r\n\r\n/**\r\n * convert country code to corresponding emoji flag\r\n * @param {string} cc - country code string\r\n * @returns {string} country code emoji\r\n */\r\nexport function countryCodeEmoji(cc/* : string */) {\r\n if(!CC_REGEX.test(cc)) {\r\n const type = typeof cc;\r\n throw new TypeError(\r\n `cc argument must be an ISO 3166-1 alpha-2 string, but got '${\r\n type === 'string' ? cc : type\r\n }' instead.`,\r\n );\r\n }\r\n\r\n const chars = [...cc.toUpperCase()].map(c => c.charCodeAt(0) + OFFSET);\r\n console.log(chars);\r\n return String.fromCodePoint(...chars);\r\n}\r\n\r\nexport function unifiedCountryCodeEmoji(cc/* : string */) {\r\n if(!CC_REGEX.test(cc)) {\r\n const type = typeof cc;\r\n throw new TypeError(\r\n `cc argument must be an ISO 3166-1 alpha-2 string, but got '${\r\n type === 'string' ? cc : type\r\n }' instead.`,\r\n );\r\n }\r\n\r\n const chars = [...cc.toUpperCase()].map(c => c.charCodeAt(0) + OFFSET);\r\n return chars.map(c => c.toString(16).toUpperCase()).join('-');\r\n}\r\n\r\nfunction versionCompare (ver1, ver2) {\r\n if (typeof ver1 !== 'string') {\r\n ver1 = ''\r\n }\r\n if (typeof ver2 !== 'string') {\r\n ver2 = ''\r\n }\r\n ver1 = ver1.replace(/^\\s+|\\s+$/g, '').split('.')\r\n ver2 = ver2.replace(/^\\s+|\\s+$/g, '').split('.')\r\n\r\n var a = Math.max(ver1.length, ver2.length), i\r\n\r\n for (i = 0; i < a; i++) {\r\n if (ver1[i] == ver2[i]) {\r\n continue\r\n }\r\n if (ver1[i] > ver2[i]) {\r\n return 1\r\n } else {\r\n return -1\r\n }\r\n }\r\n\r\n return 0\r\n}\r\n\r\n\r\n var badCharsRe = /[`~!@#$%^&*()\\-_=+\\[\\]\\\\|{}'\";:\\/?.>,<\\s]+/g,\r\n trimRe = /^\\s+|\\s$/g\r\n\r\n function createIndex () {\r\n return {\r\n shortIndexes: {},\r\n fullTexts: {}\r\n }\r\n }\r\n\r\n function cleanSearchText (text) {\r\n var hasTag = text.charAt(0) == '%'\r\n text = text.replace(badCharsRe, ' ').replace(trimRe, '')\r\n text = text.replace(/[^A-Za-z0-9]/g, function (ch) {\r\n var latinizeCh = Config.LatinizeMap[ch]\r\n return latinizeCh !== undefined ? latinizeCh : ch\r\n })\r\n text = text.toLowerCase()\r\n if (hasTag) {\r\n text = '%' + text\r\n }\r\n\r\n return text\r\n }\r\n\r\n function cleanUsername (username) {\r\n return username && username.toLowerCase() || ''\r\n }\r\n\r\n function indexObject (id, searchText, searchIndex) {\r\n if (searchIndex.fullTexts[id] !== undefined) {\r\n return false\r\n }\r\n\r\n searchText = cleanSearchText(searchText)\r\n\r\n if (!searchText.length) {\r\n return false\r\n }\r\n\r\n var shortIndexes = searchIndex.shortIndexes\r\n\r\n searchIndex.fullTexts[id] = searchText\r\n\r\n searchText.split(' ').forEach(function(searchWord) {\r\n var len = Math.min(searchWord.length, 3),\r\n wordPart, i\r\n for (i = 1; i <= len; i++) {\r\n wordPart = searchWord.substr(0, i)\r\n if (shortIndexes[wordPart] === undefined) {\r\n shortIndexes[wordPart] = [id]\r\n } else {\r\n shortIndexes[wordPart].push(id)\r\n }\r\n }\r\n })\r\n }\r\n\r\n function search (query, searchIndex) {\r\n var shortIndexes = searchIndex.shortIndexes\r\n var fullTexts = searchIndex.fullTexts\r\n\r\n query = cleanSearchText(query)\r\n\r\n var queryWords = query.split(' ')\r\n var foundObjs = false,\r\n newFoundObjs, i\r\n var j, searchText\r\n var found\r\n\r\n for (i = 0; i < queryWords.length; i++) {\r\n newFoundObjs = shortIndexes[queryWords[i].substr(0, 3)]\r\n if (!newFoundObjs) {\r\n foundObjs = []\r\n break\r\n }\r\n if (foundObjs === false || foundObjs.length > newFoundObjs.length) {\r\n foundObjs = newFoundObjs\r\n }\r\n }\r\n\r\n newFoundObjs = {}\r\n\r\n for (j = 0; j < foundObjs.length; j++) {\r\n found = true\r\n searchText = fullTexts[foundObjs[j]]\r\n for (i = 0; i < queryWords.length; i++) {\r\n if (searchText.indexOf(queryWords[i]) == -1) {\r\n found = false\r\n break\r\n }\r\n }\r\n if (found) {\r\n newFoundObjs[foundObjs[j]] = true\r\n }\r\n }\r\n\r\n return newFoundObjs\r\n }\r\n\r\n let SearchIndexManager = {\r\n createIndex: createIndex,\r\n indexObject: indexObject,\r\n cleanSearchText: cleanSearchText,\r\n cleanUsername: cleanUsername,\r\n search: search\r\n };\r\n window.SearchIndexManager = SearchIndexManager;\r\n\r\n export {SearchIndexManager};\r\n//})(window)\r\n" + }, + { + "id": 1, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/bin_utils.ts", + "name": "./src/lib/bin_utils.ts", + "index": 22, + "index2": 25, + "size": 28692, + "cacheable": true, + "built": true, + "optional": false, + "prefetched": false, + "chunks": [ + 0 + ], + "issuer": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtproto.ts", + "issuerId": 2, + "issuerName": "./src/lib/mtproto.ts", + "issuerPath": [ + { + "id": 18, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/index.ts", + "name": "./src/index.ts", + "profile": { + "factory": 17, + "building": 2295 + } + }, + { + "id": 2, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtproto.ts", + "name": "./src/lib/mtproto.ts", + "profile": { + "factory": 1354, + "building": 0, + "dependencies": 287 + } + } + ], + "profile": { + "factory": 1950, + "building": 50, + "dependencies": 703 + }, + "failed": false, + "errors": 0, + "warnings": 0, + "assets": [], + "reasons": [ + { + "moduleId": 2, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtproto.ts", + "module": "./src/lib/mtproto.ts", + "moduleName": "./src/lib/mtproto.ts", + "type": "cjs require", + "userRequest": "./bin_utils", + "loc": "57:18-40" + }, + { + "moduleId": 9, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/filemanager.ts", + "module": "./src/lib/filemanager.ts", + "moduleName": "./src/lib/filemanager.ts", + "type": "cjs require", + "userRequest": "./bin_utils", + "loc": "3:18-40" + }, + { + "moduleId": 12, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/services.ts", + "module": "./src/lib/services.ts", + "moduleName": "./src/lib/services.ts", + "type": "cjs require", + "userRequest": "./bin_utils", + "loc": "43:18-40" + }, + { + "moduleId": 15, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/tl_utils.ts", + "module": "./src/lib/tl_utils.ts", + "moduleName": "./src/lib/tl_utils.ts", + "type": "cjs require", + "userRequest": "./bin_utils", + "loc": "16:18-40" + }, + { + "moduleId": 16, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/cryptoworker.ts", + "module": "./src/lib/cryptoworker.ts", + "moduleName": "./src/lib/cryptoworker.ts", + "type": "cjs require", + "userRequest": "./bin_utils", + "loc": "7:18-40" + }, + { + "moduleId": 38, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/idb.ts", + "module": "./src/lib/idb.ts", + "moduleName": "./src/lib/idb.ts", + "type": "cjs require", + "userRequest": "./bin_utils", + "loc": "6:18-40" + }, + { + "moduleId": 39, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtnetworker.ts", + "module": "./src/lib/mtnetworker.ts", + "moduleName": "./src/lib/mtnetworker.ts", + "type": "cjs require", + "userRequest": "./bin_utils", + "loc": "14:18-40" + }, + { + "moduleId": 42, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/components/pageAuthCode.ts", + "module": "./src/components/pageAuthCode.ts", + "moduleName": "./src/components/pageAuthCode.ts", + "type": "cjs require", + "userRequest": "../lib/bin_utils", + "loc": "13:18-45" + }, + { + "moduleId": 45, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/components/pagePassword.ts", + "module": "./src/components/pagePassword.ts", + "moduleName": "./src/components/pagePassword.ts", + "type": "cjs require", + "userRequest": "../lib/bin_utils", + "loc": "13:18-45" + } + ], + "usedExports": true, + "providedExports": null, + "optimizationBailout": [ + "ModuleConcatenation bailout: Module is not an ECMAScript module" + ], + "depth": 2, + "source": "\"use strict\";\n/*!\n * Webogram v0.7.0 - messaging web application for MTProto\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// @ts-ignore\nvar jsbn_1 = require(\"jsbn\");\n// @ts-ignore\nvar Rusha = __importStar(require(\"rusha/dist/rusha.min.js\"));\nvar leemon_1 = require(\"leemon\");\n//import CryptoJS from 'crypto-js';\n// @ts-ignore\nvar pako_inflate_min_js_1 = __importDefault(require(\"pako/dist/pako_inflate.min.js\"));\nvar CryptoJS = require(\"./crypto.js\");\nrequire(\"./closure_long.js\");\nvar goog = this.goog;\nfunction bigint(num) {\n return new jsbn_1.BigInteger(num.toString(16), 16);\n}\nexports.bigint = bigint;\nfunction bigStringInt(strNum) {\n return new jsbn_1.BigInteger(strNum, 10);\n}\nexports.bigStringInt = bigStringInt;\n/* export function dHexDump (bytes) {\n var arr = []\n for (var i = 0; i < bytes.length; i++) {\n if (i && !(i % 2)) {\n if (!(i % 16)) {\n arr.push('\\n')\n } else if (!(i % 4)) {\n arr.push(' ')\n } else {\n arr.push(' ')\n }\n }\n arr.push((bytes[i] < 16 ? '0' : '') + bytes[i].toString(16))\n }\n\n console.log(arr.join(''))\n} */\nfunction bytesToHex(bytes) {\n bytes = bytes || [];\n var arr = [];\n for (var i = 0; i < bytes.length; i++) {\n arr.push((bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16));\n }\n return arr.join('');\n}\nexports.bytesToHex = bytesToHex;\nfunction bytesFromHex(hexString) {\n var len = hexString.length, i;\n var start = 0;\n var bytes = [];\n if (hexString.length % 2) {\n bytes.push(parseInt(hexString.charAt(0), 16));\n start++;\n }\n for (i = start; i < len; i += 2) {\n bytes.push(parseInt(hexString.substr(i, 2), 16));\n }\n return bytes;\n}\nexports.bytesFromHex = bytesFromHex;\nfunction bytesToBase64(bytes) {\n var mod3;\n var result = '';\n for (var nLen = bytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {\n mod3 = nIdx % 3;\n nUint24 |= bytes[nIdx] << (16 >>> mod3 & 24);\n if (mod3 === 2 || nLen - nIdx === 1) {\n result += String.fromCharCode(uint6ToBase64(nUint24 >>> 18 & 63), uint6ToBase64(nUint24 >>> 12 & 63), uint6ToBase64(nUint24 >>> 6 & 63), uint6ToBase64(nUint24 & 63));\n nUint24 = 0;\n }\n }\n return result.replace(/A(?=A$|$)/g, '=');\n}\nexports.bytesToBase64 = bytesToBase64;\nfunction uint6ToBase64(nUint6) {\n return nUint6 < 26\n ? nUint6 + 65\n : nUint6 < 52\n ? nUint6 + 71\n : nUint6 < 62\n ? nUint6 - 4\n : nUint6 === 62\n ? 43\n : nUint6 === 63\n ? 47\n : 65;\n}\nexports.uint6ToBase64 = uint6ToBase64;\nfunction base64ToBlob(base64str, mimeType) {\n var sliceSize = 1024;\n var byteCharacters = atob(base64str);\n var bytesLength = byteCharacters.length;\n var slicesCount = Math.ceil(bytesLength / sliceSize);\n var byteArrays = new Array(slicesCount);\n for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n var begin = sliceIndex * sliceSize;\n var end = Math.min(begin + sliceSize, bytesLength);\n var bytes = new Array(end - begin);\n for (var offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n return blobConstruct(byteArrays, mimeType);\n}\nexports.base64ToBlob = base64ToBlob;\nfunction dataUrlToBlob(url) {\n // var name = 'b64blob ' + url.length\n // console.time(name)\n var urlParts = url.split(',');\n var base64str = urlParts[1];\n var mimeType = urlParts[0].split(':')[1].split(';')[0];\n var blob = base64ToBlob(base64str, mimeType);\n // console.timeEnd(name)\n return blob;\n}\nexports.dataUrlToBlob = dataUrlToBlob;\nfunction blobConstruct(blobParts, mimeType) {\n if (mimeType === void 0) { mimeType = ''; }\n var blob;\n var safeMimeType = blobSafeMimeType(mimeType);\n try {\n blob = new Blob(blobParts, { type: safeMimeType });\n }\n catch (e) {\n // @ts-ignore\n var bb = new BlobBuilder;\n blobParts.forEach(function (blobPart) {\n bb.append(blobPart);\n });\n blob = bb.getBlob(safeMimeType);\n }\n return blob;\n}\nexports.blobConstruct = blobConstruct;\nfunction blobSafeMimeType(mimeType) {\n if ([\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/bmp',\n 'video/mp4',\n 'video/webm',\n 'video/quicktime',\n 'audio/ogg',\n 'audio/mpeg',\n 'audio/mp4',\n ].indexOf(mimeType) == -1) {\n return 'application/octet-stream';\n }\n return mimeType;\n}\nexports.blobSafeMimeType = blobSafeMimeType;\nfunction bytesCmp(bytes1, bytes2) {\n var len = bytes1.length;\n if (len != bytes2.length) {\n return false;\n }\n for (var i = 0; i < len; i++) {\n if (bytes1[i] != bytes2[i]) {\n return false;\n }\n }\n return true;\n}\nexports.bytesCmp = bytesCmp;\nfunction bytesXor(bytes1, bytes2) {\n var len = bytes1.length;\n var bytes = [];\n for (var i = 0; i < len; ++i) {\n bytes[i] = bytes1[i] ^ bytes2[i];\n }\n return bytes;\n}\nexports.bytesXor = bytesXor;\nfunction bytesToWords(bytes) {\n if (bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n var len = bytes.length;\n var words = [];\n var i;\n for (i = 0; i < len; i++) {\n words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8);\n }\n return new CryptoJS.lib.WordArray.init(words, len);\n}\nfunction bytesFromWords(wordArray) {\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n var bytes = [];\n for (var i = 0; i < sigBytes; i++) {\n bytes.push((words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);\n }\n return bytes;\n}\nfunction bytesFromBigInt(bigInt, len) {\n var bytes = bigInt.toByteArray();\n if (len && bytes.length < len) {\n var padding = [];\n for (var i = 0, needPadding = len - bytes.length; i < needPadding; i++) {\n padding[i] = 0;\n }\n if (bytes instanceof ArrayBuffer) {\n bytes = bufferConcat(padding, bytes);\n }\n else {\n bytes = padding.concat(bytes);\n }\n }\n else {\n while (!bytes[0] && (!len || bytes.length > len)) {\n bytes = bytes.slice(1);\n }\n }\n return bytes;\n}\nexports.bytesFromBigInt = bytesFromBigInt;\nfunction bytesFromLeemonBigInt(bigInt) {\n var str = leemon_1.bigInt2str(bigInt, 16);\n return bytesFromHex(str);\n}\nexports.bytesFromLeemonBigInt = bytesFromLeemonBigInt;\nfunction bytesToArrayBuffer(b) {\n return (new Uint8Array(b)).buffer;\n}\nexports.bytesToArrayBuffer = bytesToArrayBuffer;\nfunction convertToArrayBuffer(bytes) {\n // Be careful with converting subarrays!!\n if (bytes instanceof ArrayBuffer) {\n return bytes;\n }\n if (bytes.buffer !== undefined &&\n bytes.buffer.byteLength == bytes.length * bytes.BYTES_PER_ELEMENT) {\n return bytes.buffer;\n }\n return bytesToArrayBuffer(bytes);\n}\nexports.convertToArrayBuffer = convertToArrayBuffer;\nfunction convertToUint8Array(bytes) {\n if (bytes.buffer !== undefined) {\n return bytes;\n }\n return new Uint8Array(bytes);\n}\nexports.convertToUint8Array = convertToUint8Array;\nfunction convertToByteArray(bytes) {\n if (Array.isArray(bytes)) {\n return bytes;\n }\n bytes = convertToUint8Array(bytes);\n var newBytes = [];\n for (var i = 0, len = bytes.length; i < len; i++) {\n newBytes.push(bytes[i]);\n }\n return newBytes;\n}\nexports.convertToByteArray = convertToByteArray;\nfunction bytesFromArrayBuffer(buffer) {\n var len = buffer.byteLength;\n var byteView = new Uint8Array(buffer);\n var bytes = [];\n for (var i = 0; i < len; ++i) {\n bytes[i] = byteView[i];\n }\n return bytes;\n}\nexports.bytesFromArrayBuffer = bytesFromArrayBuffer;\nfunction bufferConcat(buffer1, buffer2) {\n var l1 = buffer1.byteLength || buffer1.length;\n var l2 = buffer2.byteLength || buffer2.length;\n var tmp = new Uint8Array(l1 + l2);\n tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0);\n tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1);\n return tmp.buffer;\n}\nexports.bufferConcat = bufferConcat;\nfunction bufferConcats() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var length = 0;\n args.forEach(function (b) { return length += b.byteLength || b.length; });\n var tmp = new Uint8Array(length);\n var lastLength = 0;\n args.forEach(function (b) {\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\n lastLength += b.byteLength || b.length;\n });\n return tmp /* .buffer */;\n}\nexports.bufferConcats = bufferConcats;\nfunction longToInts(sLong) {\n var divRem = bigStringInt(sLong).divideAndRemainder(bigint(0x100000000));\n return [divRem[0].intValue(), divRem[1].intValue()];\n}\nexports.longToInts = longToInts;\nfunction longToBytes(sLong) {\n return bytesFromWords({ words: longToInts(sLong), sigBytes: 8 }).reverse();\n}\nexports.longToBytes = longToBytes;\nfunction longFromInts(high, low) {\n return bigint(high).shiftLeft(32).add(bigint(low)).toString(10);\n}\nexports.longFromInts = longFromInts;\nfunction intToUint(val) {\n if (typeof (val) === 'string')\n val = parseInt(val);\n if (val < 0) {\n val = val + 4294967296;\n }\n return val;\n}\nexports.intToUint = intToUint;\nfunction uintToInt(val) {\n if (val > 2147483647) {\n val = val - 4294967296;\n }\n return val;\n}\nexports.uintToInt = uintToInt;\nfunction sha1HashSync(bytes) {\n var hash = Rusha.createHash();\n hash.update(bytes);\n var hashBytes = hash.digest();\n //console.log('sha1HashSync', bytes, hashBytes);\n //rushaInstance = rushaInstance || new Rusha(1024 * 1024);\n // console.log(dT(), 'SHA-1 hash start', bytes.byteLength || bytes.length)\n /* var hashBytes = rushaInstance.rawDigest(bytes).buffer; */\n // console.log(dT(), 'SHA-1 hash finish')\n return hashBytes;\n}\nexports.sha1HashSync = sha1HashSync;\nfunction sha1BytesSync(bytes) {\n return bytesFromArrayBuffer(sha1HashSync(bytes));\n}\nexports.sha1BytesSync = sha1BytesSync;\nfunction sha256HashSync(bytes) {\n // console.log(dT(), 'SHA-2 hash start', bytes.byteLength || bytes.length)\n var hashWords = CryptoJS.SHA256(bytesToWords(bytes));\n // console.log(dT(), 'SHA-2 hash finish')\n var hashBytes = bytesFromWords(hashWords);\n return hashBytes;\n}\nexports.sha256HashSync = sha256HashSync;\nfunction rsaEncrypt(publicKey, bytes) {\n bytes = addPadding(bytes, 255);\n // console.log('RSA encrypt start')\n var N = new jsbn_1.BigInteger(publicKey.modulus, 16);\n var E = new jsbn_1.BigInteger(publicKey.exponent, 16);\n var X = new jsbn_1.BigInteger(bytes);\n var encryptedBigInt = X.modPowInt(E, N), encryptedBytes = bytesFromBigInt(encryptedBigInt, 256);\n // console.log('RSA encrypt finish')\n return encryptedBytes;\n}\nexports.rsaEncrypt = rsaEncrypt;\nfunction addPadding(bytes, blockSize, zeroes, full) {\n if (full === void 0) { full = false; }\n blockSize = blockSize || 16;\n var len = bytes.byteLength || bytes.length;\n var needPadding = blockSize - (len % blockSize);\n if (needPadding > 0 && (needPadding < blockSize || full)) {\n var padding = new Array(needPadding);\n if (zeroes) {\n for (var i = 0; i < needPadding; i++) {\n padding[i] = 0;\n }\n }\n else {\n (new jsbn_1.SecureRandom()).nextBytes(padding);\n }\n if (bytes instanceof ArrayBuffer) {\n bytes = bufferConcat(bytes, padding);\n }\n else {\n bytes = bytes.concat(padding);\n }\n }\n return bytes;\n}\nexports.addPadding = addPadding;\nfunction aesEncryptSync(bytes, keyBytes, ivBytes) {\n var len = bytes.byteLength || bytes.length;\n // console.log(dT(), 'AES encrypt start', len/*, bytesToHex(keyBytes), bytesToHex(ivBytes)*/)\n bytes = addPadding(bytes);\n var encryptedWords = CryptoJS.AES.encrypt(bytesToWords(bytes), bytesToWords(keyBytes), {\n iv: bytesToWords(ivBytes),\n padding: CryptoJS.pad.NoPadding,\n mode: CryptoJS.mode.IGE\n }).ciphertext;\n var encryptedBytes = bytesFromWords(encryptedWords);\n // console.log(dT(), 'AES encrypt finish')\n return encryptedBytes;\n}\nexports.aesEncryptSync = aesEncryptSync;\nfunction aesDecryptSync(encryptedBytes, keyBytes, ivBytes) {\n // console.log(dT(), 'AES decrypt start', encryptedBytes.length)\n var decryptedWords = CryptoJS.AES.decrypt({ ciphertext: bytesToWords(encryptedBytes) }, bytesToWords(keyBytes), {\n iv: bytesToWords(ivBytes),\n padding: CryptoJS.pad.NoPadding,\n mode: CryptoJS.mode.IGE\n });\n var bytes = bytesFromWords(decryptedWords);\n // console.log(dT(), 'AES decrypt finish')\n return bytes;\n}\nexports.aesDecryptSync = aesDecryptSync;\nfunction getDerivation(hash, salt, password, iterations, keyLength) {\n if (hash === void 0) { hash = 'SHA-512'; }\n return __awaiter(this, void 0, void 0, function () {\n var passwordBuffer, importedKey, saltBuffer, params, derivation;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n passwordBuffer = password;\n return [4 /*yield*/, crypto.subtle.importKey(\"raw\", passwordBuffer, \"PBKDF2\", false, [\"deriveBits\", 'deriveKey'])];\n case 1:\n importedKey = _a.sent();\n saltBuffer = salt /* textEncoder.encode(salt); */;\n params = { name: \"PBKDF2\", hash: hash, salt: saltBuffer, iterations: iterations };\n return [4 /*yield*/, crypto.subtle.deriveBits(params, importedKey, keyLength * 8)];\n case 2:\n derivation = _a.sent();\n return [2 /*return*/, derivation];\n }\n });\n });\n}\nfunction getKey(derivation) {\n return __awaiter(this, void 0, void 0, function () {\n var ivlen, keylen, derivedKey, iv, importedEncryptionKey;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n ivlen = 16;\n keylen = 32;\n derivedKey = derivation.slice(0, keylen);\n iv = derivation.slice(-ivlen);\n return [4 /*yield*/, crypto.subtle.importKey('raw', derivedKey, { name: 'AES-CBC', length: 256 }, false, ['encrypt'])];\n case 1:\n importedEncryptionKey = _a.sent();\n return [2 /*return*/, {\n key: importedEncryptionKey,\n iv: iv\n }];\n }\n });\n });\n}\nfunction encrypt(text, keyObject) {\n return __awaiter(this, void 0, void 0, function () {\n var textBuffer, encryptedText;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n textBuffer = text;\n return [4 /*yield*/, crypto.subtle.encrypt({ name: 'AES-CBC', iv: keyObject.iv }, keyObject.key, textBuffer)];\n case 1:\n encryptedText = _a.sent();\n return [2 /*return*/, encryptedText];\n }\n });\n });\n}\n/* import * as crypto from 'crypto'; */\nfunction hash_pbkdf2(/* hasher: 'string', */ buffer, salt, iterations) {\n return __awaiter(this, void 0, void 0, function () {\n var importKey, deriveKey, bits;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, window.crypto.subtle.importKey(\"raw\", //only \"raw\" is allowed\n buffer, //your password\n {\n name: \"PBKDF2\",\n }, false, //whether the key is extractable (i.e. can be used in exportKey)\n [\"deriveKey\", \"deriveBits\"] //can be any combination of \"deriveKey\" and \"deriveBits\"\n )];\n case 1:\n importKey = _a.sent();\n return [4 /*yield*/, window.crypto.subtle.deriveKey({\n \"name\": \"PBKDF2\",\n salt: salt,\n iterations: iterations,\n hash: { name: \"SHA-512\" },\n }, importKey, //your key from generateKey or importKey\n {\n name: \"AES-CTR\",\n //the generateKey parameters for that type of algorithm\n length: 256,\n }, false, //whether the derived key is extractable (i.e. can be used in exportKey)\n [\"encrypt\", \"decrypt\"] //limited to the options in that algorithm's importKey\n )];\n case 2:\n deriveKey = _a.sent();\n bits = window.crypto.subtle.deriveBits({\n \"name\": \"PBKDF2\",\n salt: salt,\n iterations: iterations,\n hash: { name: \"SHA-512\" },\n }, importKey, //your key from generateKey or importKey\n 512 //the number of bits you want to derive\n );\n return [2 /*return*/, bits];\n }\n });\n });\n}\nexports.hash_pbkdf2 = hash_pbkdf2;\nfunction gzipUncompress(bytes, toString) {\n // console.log('Gzip uncompress start')\n // @ts-ignore\n //var result = (new Zlib.Gunzip(bytes)).decompress();\n var result = pako_inflate_min_js_1.default.inflate(bytes, toString ? { to: 'string' } : undefined);\n // console.log('Gzip uncompress finish')\n return result;\n}\nexports.gzipUncompress = gzipUncompress;\nfunction nextRandomInt(maxValue) {\n return Math.floor(Math.random() * maxValue);\n}\nexports.nextRandomInt = nextRandomInt;\nfunction pqPrimeFactorization(pqBytes) {\n var what = new jsbn_1.BigInteger(pqBytes);\n var result = false;\n // console.log(dT(), 'PQ start', pqBytes, what.toString(16), what.bitLength())\n try {\n result = pqPrimeLeemon(leemon_1.str2bigInt(what.toString(16), 16, Math.ceil(64 / leemon_1.bpe) + 1));\n }\n catch (e) {\n console.error('Pq leemon Exception', e);\n }\n if (result === false && what.bitLength() <= 64) {\n // console.time('PQ long')\n try {\n result = pqPrimeLong(goog.math.Long.fromString(what.toString(16), 16));\n }\n catch (e) {\n console.error('Pq long Exception', e);\n }\n // console.timeEnd('PQ long')\n }\n // console.log(result)\n if (result === false) {\n // console.time('pq BigInt')\n result = pqPrimeBigInteger(what);\n // console.timeEnd('pq BigInt')\n }\n // console.log(dT(), 'PQ finish')\n return result;\n}\nexports.pqPrimeFactorization = pqPrimeFactorization;\nfunction pqPrimeBigInteger(what) {\n var it = 0, g;\n for (var i = 0; i < 3; i++) {\n var q = (nextRandomInt(128) & 15) + 17;\n var x = bigint(nextRandomInt(1000000000) + 1);\n var y = x.clone();\n var lim = 1 << (i + 18);\n for (var j = 1; j < lim; j++) {\n ++it;\n var a = x.clone();\n var b = x.clone();\n var c = bigint(q);\n while (!b.equals(jsbn_1.BigInteger.ZERO)) {\n if (!b.and(jsbn_1.BigInteger.ONE).equals(jsbn_1.BigInteger.ZERO)) {\n c = c.add(a);\n if (c.compareTo(what) > 0) {\n c = c.subtract(what);\n }\n }\n a = a.add(a);\n if (a.compareTo(what) > 0) {\n a = a.subtract(what);\n }\n b = b.shiftRight(1);\n }\n x = c.clone();\n var z = x.compareTo(y) < 0 ? y.subtract(x) : x.subtract(y);\n g = z.gcd(what);\n if (!g.equals(jsbn_1.BigInteger.ONE)) {\n break;\n }\n if ((j & (j - 1)) == 0) {\n y = x.clone();\n }\n }\n if (g.compareTo(jsbn_1.BigInteger.ONE) > 0) {\n break;\n }\n }\n var f = what.divide(g), P, Q;\n if (g.compareTo(f) > 0) {\n P = f;\n Q = g;\n }\n else {\n P = g;\n Q = f;\n }\n return [bytesFromBigInt(P), bytesFromBigInt(Q), it];\n}\nexports.pqPrimeBigInteger = pqPrimeBigInteger;\nfunction gcdLong(a, b) {\n while (a.notEquals(goog.math.Long.ZERO) && b.notEquals(goog.math.Long.ZERO)) {\n while (b.and(goog.math.Long.ONE).equals(goog.math.Long.ZERO)) {\n b = b.shiftRight(1);\n }\n while (a.and(goog.math.Long.ONE).equals(goog.math.Long.ZERO)) {\n a = a.shiftRight(1);\n }\n if (a.compare(b) > 0) {\n a = a.subtract(b);\n }\n else {\n b = b.subtract(a);\n }\n }\n return b.equals(goog.math.Long.ZERO) ? a : b;\n}\nexports.gcdLong = gcdLong;\nfunction pqPrimeLong(what) {\n var it = 0, g;\n for (var i = 0; i < 3; i++) {\n var q = goog.math.Long.fromInt((nextRandomInt(128) & 15) + 17);\n var x = goog.math.Long.fromInt(nextRandomInt(1000000000) + 1);\n var y = x;\n var lim = 1 << (i + 18);\n for (var j = 1; j < lim; j++) {\n ++it;\n var a = x;\n var b = x;\n var c = q;\n while (b.notEquals(goog.math.Long.ZERO)) {\n if (b.and(goog.math.Long.ONE).notEquals(goog.math.Long.ZERO)) {\n c = c.add(a);\n if (c.compare(what) > 0) {\n c = c.subtract(what);\n }\n }\n a = a.add(a);\n if (a.compare(what) > 0) {\n a = a.subtract(what);\n }\n b = b.shiftRight(1);\n }\n x = c;\n var z = x.compare(y) < 0 ? y.subtract(x) : x.subtract(y);\n g = gcdLong(z, what);\n if (g.notEquals(goog.math.Long.ONE)) {\n break;\n }\n if ((j & (j - 1)) == 0) {\n y = x;\n }\n }\n if (g.compare(goog.math.Long.ONE) > 0) {\n break;\n }\n }\n var f = what.div(g), P, Q;\n if (g.compare(f) > 0) {\n P = f;\n Q = g;\n }\n else {\n P = g;\n Q = f;\n }\n return [bytesFromHex(P.toString(16)), bytesFromHex(Q.toString(16)), it];\n}\nexports.pqPrimeLong = pqPrimeLong;\nfunction pqPrimeLeemon(what) {\n var minBits = 64;\n var minLen = Math.ceil(minBits / leemon_1.bpe) + 1;\n var it = 0;\n var i, q;\n var j, lim;\n var P;\n var Q;\n var a = new Array(minLen);\n var b = new Array(minLen);\n var c = new Array(minLen);\n var g = new Array(minLen);\n var z = new Array(minLen);\n var x = new Array(minLen);\n var y = new Array(minLen);\n for (i = 0; i < 3; i++) {\n q = (nextRandomInt(128) & 15) + 17;\n leemon_1.copyInt_(x, nextRandomInt(1000000000) + 1);\n leemon_1.copy_(y, x);\n lim = 1 << (i + 18);\n for (j = 1; j < lim; j++) {\n ++it;\n leemon_1.copy_(a, x);\n leemon_1.copy_(b, x);\n leemon_1.copyInt_(c, q);\n while (!leemon_1.isZero(b)) {\n if (b[0] & 1) {\n leemon_1.add_(c, a);\n if (leemon_1.greater(c, what)) {\n leemon_1.sub_(c, what);\n }\n }\n leemon_1.add_(a, a);\n if (leemon_1.greater(a, what)) {\n leemon_1.sub_(a, what);\n }\n leemon_1.rightShift_(b, 1);\n }\n leemon_1.copy_(x, c);\n if (leemon_1.greater(x, y)) {\n leemon_1.copy_(z, x);\n leemon_1.sub_(z, y);\n }\n else {\n leemon_1.copy_(z, y);\n leemon_1.sub_(z, x);\n }\n leemon_1.eGCD_(z, what, g, a, b);\n if (!leemon_1.equalsInt(g, 1)) {\n break;\n }\n if ((j & (j - 1)) == 0) {\n leemon_1.copy_(y, x);\n }\n }\n if (leemon_1.greater(g, leemon_1.one)) {\n break;\n }\n }\n leemon_1.divide_(what, g, x, y);\n if (leemon_1.greater(g, x)) {\n P = x;\n Q = g;\n }\n else {\n P = g;\n Q = x;\n }\n // console.log(dT(), 'done', bigInt2str(what, 10), bigInt2str(P, 10), bigInt2str(Q, 10))\n return [bytesFromLeemonBigInt(P), bytesFromLeemonBigInt(Q), it];\n}\nexports.pqPrimeLeemon = pqPrimeLeemon;\nfunction bytesModPow(x, y, m) {\n try {\n var xBigInt = leemon_1.str2bigInt(bytesToHex(x), 16);\n var yBigInt = leemon_1.str2bigInt(bytesToHex(y), 16);\n var mBigInt = leemon_1.str2bigInt(bytesToHex(m), 16);\n var resBigInt = leemon_1.powMod(xBigInt, yBigInt, mBigInt);\n return bytesFromHex(leemon_1.bigInt2str(resBigInt, 16));\n }\n catch (e) {\n console.error('mod pow error', e);\n }\n return bytesFromBigInt(new jsbn_1.BigInteger(x).modPow(new jsbn_1.BigInteger(y), new jsbn_1.BigInteger(m)), 256);\n}\nexports.bytesModPow = bytesModPow;\n" + }, + { + "id": 2, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtproto.ts", + "name": "./src/lib/mtproto.ts", + "index": 19, + "index2": 33, + "size": 92532, + "cacheable": true, + "built": true, + "optional": false, + "prefetched": false, + "chunks": [ + 0 + ], + "issuer": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/index.ts", + "issuerId": 18, + "issuerName": "./src/index.ts", + "issuerPath": [ + { + "id": 18, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/index.ts", + "name": "./src/index.ts", + "profile": { + "factory": 17, + "building": 2295 + } + } + ], + "profile": { + "factory": 1354, + "building": 0, + "dependencies": 287 + }, + "failed": false, + "errors": 0, + "warnings": 0, + "assets": [], + "reasons": [ + { + "moduleId": 12, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/services.ts", + "module": "./src/lib/services.ts", + "moduleName": "./src/lib/services.ts", + "type": "cjs require", + "userRequest": "./mtproto", + "loc": "37:16-36" + }, + { + "moduleId": 18, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/index.ts", + "module": "./src/index.ts", + "moduleName": "./src/index.ts", + "type": "cjs require", + "userRequest": "./lib/mtproto", + "loc": "21:16-40" + }, + { + "moduleId": 39, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/lib/mtnetworker.ts", + "module": "./src/lib/mtnetworker.ts", + "moduleName": "./src/lib/mtnetworker.ts", + "type": "cjs require", + "userRequest": "./mtproto", + "loc": "15:16-36" + }, + { + "moduleId": 41, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/components/pageSignIn.ts", + "module": "./src/components/pageSignIn.ts", + "moduleName": "./src/components/pageSignIn.ts", + "type": "cjs require", + "userRequest": "../lib/mtproto", + "loc": "13:16-41" + }, + { + "moduleId": 42, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/components/pageAuthCode.ts", + "module": "./src/components/pageAuthCode.ts", + "moduleName": "./src/components/pageAuthCode.ts", + "type": "cjs require", + "userRequest": "../lib/mtproto", + "loc": "15:16-41" + }, + { + "moduleId": 43, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/components/pageSignUp.ts", + "module": "./src/components/pageSignUp.ts", + "moduleName": "./src/components/pageSignUp.ts", + "type": "cjs require", + "userRequest": "../lib/mtproto", + "loc": "6:16-41" + }, + { + "moduleId": 45, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/components/pagePassword.ts", + "module": "./src/components/pagePassword.ts", + "moduleName": "./src/components/pagePassword.ts", + "type": "cjs require", + "userRequest": "../lib/mtproto", + "loc": "15:16-41" + } + ], + "usedExports": true, + "providedExports": null, + "optimizationBailout": [ + "ModuleConcatenation bailout: Module is not an ECMAScript module" + ], + "depth": 1, + "source": "\"use strict\";\n/*!\n * Webogram v0.7.0 - messaging web application for MTProto\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Config = __importStar(require(\"./config\"));\nvar storage_1 = __importDefault(require(\"./storage\"));\nvar bin_utils_1 = require(\"./bin_utils\");\nvar utils_1 = require(\"./utils\");\nvar tl_utils_1 = require(\"./tl_utils\");\nvar cryptoworker_1 = __importDefault(require(\"./cryptoworker\"));\nvar filemanager_1 = __importDefault(require(\"./filemanager\"));\nvar idb_1 = __importDefault(require(\"./idb\"));\nvar mtnetworker_1 = require(\"./mtnetworker\");\nvar leemon_1 = require(\"leemon\");\nvar $rootScope = {\n $broadcast: function (name, detail) {\n console.log(utils_1.dT(), 'Broadcasting ' + name + ' event, with args:', detail);\n //console.trace();\n var myCustomEvent = new CustomEvent(name, { detail: detail });\n document.dispatchEvent(myCustomEvent);\n },\n};\n/* let qSync = {\n when: function(result: any) {\n return Promise.resolve(result);\n },\n reject: function (result: any) {\n return {\n then: function(cb: any, badcb: any) {\n if(badcb) {\n return badcb(result);\n }\n }\n };\n }\n}; */\nvar TelegramMeWebService = /** @class */ (function () {\n function TelegramMeWebService() {\n this.disabled = Config.Modes.test ||\n Config.App.domains.indexOf(location.hostname) == -1 ||\n location.protocol != 'http:' && location.protocol != 'https:' ||\n location.protocol == 'https:' && location.hostname != 'web.telegram.org';\n }\n TelegramMeWebService.prototype.setAuthorized = function (canRedirect) {\n if (this.disabled) {\n return false;\n }\n storage_1.default.get('tgme_sync').then(function (curValue) {\n var ts = utils_1.tsNow(true);\n if (canRedirect &&\n curValue &&\n curValue.canRedirect == canRedirect &&\n curValue.ts + 86400 > ts) {\n return false;\n }\n storage_1.default.set({ tgme_sync: { canRedirect: canRedirect, ts: ts } });\n var urls = [\n '//telegram.me/_websync_?authed=' + (canRedirect ? '1' : '0'),\n '//t.me/_websync_?authed=' + (canRedirect ? '1' : '0')\n ];\n urls.forEach(function (url) {\n var script = document.createElement('script');\n script.onload = script.onerror = function () {\n //document.body.removeChild(script);\n script.remove();\n };\n script.src = url;\n document.body.appendChild(script);\n });\n });\n };\n return TelegramMeWebService;\n}());\nexports.TelegramMeWebService = TelegramMeWebService;\nexports.telegramMeWebService = new TelegramMeWebService();\n// @ts-ignore\n// костыль\n//import * as jsbn from 'jsbn';\nvar jsbn_1 = require(\"jsbn\");\n//import { SecureRandom } from '../types';\n// @ts-ignore\nglobalThis.BigInteger = jsbn_1.BigInteger;\n//let SecureRandom = jsbn.SecureRandom;\nvar chromeMatches = navigator.userAgent.match(/Chrome\\/(\\d+(\\.\\d+)?)/);\nvar chromeVersion = chromeMatches && parseFloat(chromeMatches[1]) || false;\nvar xhrSendBuffer = !('ArrayBufferView' in window) && (chromeVersion > 0 && chromeVersion < 30);\nvar MTProto;\n(function (MTProto) {\n var MTProto_ = /** @class */ (function () {\n function MTProto_() {\n /* public chromeMatches = navigator.userAgent.match(/Chrome\\/(\\d+(\\.\\d+)?)/);\n public chromeVersion = this.chromeMatches && parseFloat(this.chromeMatches[1]) || false;\n public xhrSendBuffer = !('ArrayBufferView' in window) && (this.chromeVersion > 0 && this.chromeVersion < 30); */\n this.secureRandom = null;\n this.secureRandom = new jsbn_1.SecureRandom();\n //$($window).on('click keydown', rng_seed_time);\n }\n return MTProto_;\n }());\n MTProto.MTProto_ = MTProto_;\n var DcConfigurator = /** @class */ (function () {\n function DcConfigurator() {\n // it was DcConfigurator\n this.sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora'];\n this.dcOptions = Config.Modes.test\n ? [\n { id: 1, host: '149.154.175.10', port: 80 },\n { id: 2, host: '149.154.167.40', port: 80 },\n { id: 3, host: '149.154.175.117', port: 80 }\n ]\n : [\n { id: 1, host: '149.154.175.50', port: 80 },\n { id: 2, host: '149.154.167.50', port: 80 },\n { id: 3, host: '149.154.175.100', port: 80 },\n { id: 4, host: '149.154.167.91', port: 80 },\n { id: 5, host: '149.154.171.5', port: 80 }\n ];\n /* public dcOptions = Config.Modes.test ? [{\n id: 2,\n host: '149.154.167.40',\n port: 443\n }] : [{\n id: 2,\n host: '149.154.167.50',\n port: 443\n }]; */\n this.chosenServers = {};\n }\n DcConfigurator.prototype.chooseServer = function (dcID, upload) {\n if (!(dcID in this.chosenServers)) {\n var chosenServer = false, i, dcOption;\n if (Config.Modes.ssl || !Config.Modes.http) {\n var subdomain = this.sslSubdomains[dcID - 1] + (upload ? '-1' : '');\n var path = Config.Modes.test ? 'apiw_test1' : 'apiw1';\n chosenServer = 'https://' + subdomain + '.web.telegram.org/' + path;\n return chosenServer;\n }\n for (i = 0; i < this.dcOptions.length; i++) {\n dcOption = this.dcOptions[i];\n if (dcOption.id == dcID) {\n chosenServer = 'http://' + dcOption.host + (dcOption.port != 80 ? ':' + dcOption.port : '') + '/apiw1';\n break;\n }\n }\n // @ts-ignore\n chosenServers[dcID] = chosenServer;\n }\n // @ts-ignore\n return chosenServers[dcID];\n };\n return DcConfigurator;\n }());\n MTProto.DcConfigurator = DcConfigurator;\n var RSAKeysManager = /** @class */ (function () {\n function RSAKeysManager() {\n /**\n * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id\n *\n *\n * -----BEGIN RSA PUBLIC KEY-----\n * MIIBCgKCAQEAwVACPi9w23mF3tBkdZz+zwrzKOaaQdr01vAbU4E1pvkfj4sqDsm6\n * lyDONS789sVoD/xCS9Y0hkkC3gtL1tSfTlgCMOOul9lcixlEKzwKENj1Yz/s7daS\n * an9tqw3bfUV/nqgbhGX81v/+7RFAEd+RwFnK7a+XYl9sluzHRyVVaTTveB2GazTw\n * Efzk2DWgkBluml8OREmvfraX3bkHZJTKX4EQSjBbbdJ2ZXIsRrYOXfaA+xayEGB+\n * 8hdlLmAjbCVfaigxX0CDqWeR1yFL9kwd9P0NsZRPsmoqVwMbMu7mStFai6aIhc3n\n * Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB\n * -----END RSA PUBLIC KEY-----\n *\n * -----BEGIN PUBLIC KEY-----\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAruw2yP/BCcsJliRoW5eB\n * VBVle9dtjJw+OYED160Wybum9SXtBBLXriwt4rROd9csv0t0OHCaTmRqBcQ0J8fx\n * hN6/cpR1GWgOZRUAiQxoMnlt0R93LCX/j1dnVa/gVbCjdSxpbrfY2g2L4frzjJvd\n * l84Kd9ORYjDEAyFnEA7dD556OptgLQQ2e2iVNq8NZLYTzLp5YpOdO1doK+ttrltg\n * gTCy5SrKeLoCPPbOgGsdxJxyz5KKcZnSLj16yE5HvJQn0CNpRdENvRUXe6tBP78O\n * 39oJ8BTHp9oIjd6XWXAsp2CvK45Ol8wFXGF710w9lwCGNbmNxNYhtIkdqfsEcwR5\n * JwIDAQAB\n * -----END PUBLIC KEY-----\n *\n * -----BEGIN PUBLIC KEY-----\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvfLHfYH2r9R70w8prHbl\n * Wt/nDkh+XkgpflqQVcnAfSuTtO05lNPspQmL8Y2XjVT4t8cT6xAkdgfmmvnvRPOO\n * KPi0OfJXoRVylFzAQG/j83u5K3kRLbae7fLccVhKZhY46lvsueI1hQdLgNV9n1cQ\n * 3TDS2pQOCtovG4eDl9wacrXOJTG2990VjgnIKNA0UMoP+KF03qzryqIt3oTvZq03\n * DyWdGK+AZjgBLaDKSnC6qD2cFY81UryRWOab8zKkWAnhw2kFpcqhI0jdV5QaSCEx\n * vnsjVaX0Y1N0870931/5Jb9ICe4nweZ9kSDF/gip3kWLG0o8XQpChDfyvsqB9OLV\n * /wIDAQAB\n * -----END PUBLIC KEY-----\n *\n * -----BEGIN PUBLIC KEY-----\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/ditzm+mPND6xkhzwFI\n * z6J/968CtkcSE/7Z2qAJiXbmZ3UDJPGrzqTDHkO30R8VeRM/Kz2f4nR05GIFiITl\n * 4bEjvpy7xqRDspJcCFIOcyXm8abVDhF+th6knSU0yLtNKuQVP6voMrnt9MV1X92L\n * GZQLgdHZbPQz0Z5qIpaKhdyA8DEvWWvSUwwc+yi1/gGaybwlzZwqXYoPOhwMebzK\n * Uk0xW14htcJrRrq+PXXQbRzTMynseCoPIoke0dtCodbA3qQxQovE16q9zz4Otv2k\n * 4j63cz53J+mhkVWAeWxVGI0lltJmWtEYK6er8VqqWot3nqmWMXogrgRLggv/Nbbo\n * oQIDAQAB\n * -----END PUBLIC KEY-----\n *\n * -----BEGIN PUBLIC KEY-----\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmpxVY7ld/8DAjz6F6q0\n * 5shjg8/4p6047bn6/m8yPy1RBsvIyvuDuGnP/RzPEhzXQ9UJ5Ynmh2XJZgHoE9xb\n * nfxL5BXHplJhMtADXKM9bWB11PU1Eioc3+AXBB8QiNFBn2XI5UkO5hPhbb9mJpjA\n * 9Uhw8EdfqJP8QetVsI/xrCEbwEXe0xvifRLJbY08/Gp66KpQvy7g8w7VB8wlgePe\n * xW3pT13Ap6vuC+mQuJPyiHvSxjEKHgqePji9NP3tJUFQjcECqcm0yV7/2d0t/pbC\n * m+ZH1sadZspQCEPPrtbkQBlvHb4OLiIWPGHKSMeRFvp3IWcmdJqXahxLCUS1Eh6M\n * AQIDAQAB\n * -----END PUBLIC KEY-----\n *\n * Bytes can be got via\n * $ openssl rsa -pubin -in key.pub -text -noout\n */\n this.publisKeysHex = [{\n modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f',\n exponent: '010001'\n }, {\n modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\n exponent: '010001'\n }, {\n modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff',\n exponent: '010001'\n }, {\n modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1',\n exponent: '010001'\n }, {\n modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01',\n exponent: '010001'\n }];\n this.publicKeysParsed = {};\n this.prepared = false;\n }\n // prepareRsaKeys\n RSAKeysManager.prototype.prepare = function () {\n if (this.prepared) {\n return;\n }\n for (var i = 0; i < this.publisKeysHex.length; i++) {\n var keyParsed = this.publisKeysHex[i];\n var RSAPublicKey = new tl_utils_1.TLSerialization();\n RSAPublicKey.storeBytes(bin_utils_1.bytesFromHex(keyParsed.modulus), 'n');\n RSAPublicKey.storeBytes(bin_utils_1.bytesFromHex(keyParsed.exponent), 'e');\n var buffer = RSAPublicKey.getBuffer();\n var fingerprintBytes = bin_utils_1.sha1BytesSync(buffer).slice(-8);\n fingerprintBytes.reverse();\n // @ts-ignore\n this.publicKeysParsed[bin_utils_1.bytesToHex(fingerprintBytes)] = {\n modulus: keyParsed.modulus,\n exponent: keyParsed.exponent\n };\n }\n this.prepared = true;\n };\n // selectRsaKeyByFingerPrint\n RSAKeysManager.prototype.select = function (fingerprints) {\n this.prepare();\n var fingerprintHex, foundKey, i;\n for (i = 0; i < fingerprints.length; i++) {\n fingerprintHex = bin_utils_1.bigStringInt(fingerprints[i]).toString(16);\n // @ts-ignore\n if (foundKey = this.publicKeysParsed[fingerprintHex]) {\n return Object.assign({\n fingerprint: fingerprints[i]\n }, foundKey);\n }\n }\n return false;\n };\n return RSAKeysManager;\n }());\n MTProto.RSAKeysManager = RSAKeysManager;\n var TimeManager = /** @class */ (function () {\n function TimeManager() {\n var _this = this;\n this.lastMessageID = [0, 0];\n this.timeOffset = 0;\n storage_1.default.get('server_time_offset').then(function (to) {\n if (to) {\n _this.timeOffset = to;\n }\n });\n }\n TimeManager.prototype.generateID = function () {\n var timeTicks = utils_1.tsNow(), timeSec = Math.floor(timeTicks / 1000) + this.timeOffset, timeMSec = timeTicks % 1000, random = bin_utils_1.nextRandomInt(0xFFFF);\n var messageID = [timeSec, (timeMSec << 21) | (random << 3) | 4];\n if (this.lastMessageID[0] > messageID[0] ||\n this.lastMessageID[0] == messageID[0] && this.lastMessageID[1] >= messageID[1]) {\n messageID = [this.lastMessageID[0], this.lastMessageID[1] + 4];\n }\n this.lastMessageID = messageID;\n // console.log('generated msg id', messageID, timeOffset)\n return bin_utils_1.longFromInts(messageID[0], messageID[1]);\n };\n TimeManager.prototype.applyServerTime = function (serverTime, localTime) {\n var newTimeOffset = serverTime - Math.floor((localTime || utils_1.tsNow()) / 1000);\n var changed = Math.abs(this.timeOffset - newTimeOffset) > 10;\n storage_1.default.set({\n server_time_offset: newTimeOffset\n });\n this.lastMessageID = [0, 0];\n this.timeOffset = newTimeOffset;\n console.log(utils_1.dT(), 'Apply server time', serverTime, localTime, newTimeOffset, changed);\n return changed;\n };\n return TimeManager;\n }());\n MTProto.TimeManager = TimeManager;\n var Authorizer = /** @class */ (function () {\n function Authorizer( /* $http: any */) {\n this.cached = {};\n /* delete $http.defaults.headers.post['Content-Type'];\n delete $http.defaults.headers.common['Accept']; */\n }\n Authorizer.prototype.mtpSendPlainRequest = function (dcID, requestBuffer) {\n var requestLength = requestBuffer.byteLength, requestArray = new Int32Array(requestBuffer);\n var header = new tl_utils_1.TLSerialization();\n header.storeLongP(0, 0, 'auth_key_id'); // Auth key\n header.storeLong(MTProto.timeManager.generateID(), 'msg_id'); // Msg_id\n header.storeInt(requestLength, 'request_length');\n var headerBuffer = header.getBuffer(), headerArray = new Int32Array(headerBuffer);\n var headerLength = headerBuffer.byteLength;\n var resultBuffer = new ArrayBuffer(headerLength + requestLength), resultArray = new Int32Array(resultBuffer);\n resultArray.set(headerArray);\n resultArray.set(requestArray, headerArray.length);\n var requestData = xhrSendBuffer ? resultBuffer : resultArray, requestPromise;\n var url = MTProto.dcConfigurator.chooseServer(dcID);\n var baseError = {\n code: 406,\n type: 'NETWORK_BAD_RESPONSE',\n url: url\n };\n console.log('mtpSendPlainRequest: creating requestPromise');\n return /* requestPromise = */ fetch(url, { method: 'POST', body: requestData })\n .then(function (response) {\n console.log('response', response);\n if (response.status != 200)\n throw response;\n return response.arrayBuffer();\n })\n /* .catch(err => {console.log('asdasdasd', err); }); */\n /* try {\n requestPromise = fetch(url, {method: 'POST', body: requestData});\n } catch(e) {\n requestPromise = $q.reject(Object.assign(baseError, {\n originalError: e\n }));\n } */\n /* return requestPromise */ .then(function (result) {\n console.log('mtpSendPlainRequest: in good sector', result);\n if (!result || !result.byteLength) {\n return Promise.reject(baseError);\n //return this.$q.reject(baseError);\n }\n try {\n var deserializer = new tl_utils_1.TLDeserialization(result, { mtproto: true });\n var auth_key_id = deserializer.fetchLong('auth_key_id');\n var msg_id = deserializer.fetchLong('msg_id');\n var msg_len = deserializer.fetchInt('msg_len');\n }\n catch (e) {\n console.error('mtpSendPlainRequest: deserialization went bad', e);\n var error = Object.assign(baseError, { originalError: e });\n throw error;\n //return Promise.reject(error);\n //return $q.reject(error);\n }\n return deserializer;\n }, function (error) {\n if (!error.message && !error.type) {\n error = Object.assign(baseError, {\n originalError: error\n });\n }\n return Promise.reject(error);\n //return $q.reject(error);\n });\n };\n Authorizer.prototype.mtpSendReqPQ = function (auth) {\n var _this = this;\n var deferred = auth.deferred;\n var request = new tl_utils_1.TLSerialization({\n mtproto: true\n });\n request.storeMethod('req_pq', {\n nonce: auth.nonce\n });\n console.log(utils_1.dT(), 'Send req_pq', bin_utils_1.bytesToHex(auth.nonce));\n this.mtpSendPlainRequest(auth.dcID, request.getBuffer()).then(function (deserializer) {\n var response = deserializer.fetchObject('ResPQ');\n if (response._ != 'resPQ') {\n throw new Error('[MT] resPQ response invalid: ' + response._);\n }\n if (!bin_utils_1.bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] resPQ nonce mismatch');\n }\n auth.serverNonce = response.server_nonce;\n auth.pq = response.pq;\n auth.fingerprints = response.server_public_key_fingerprints;\n console.log(utils_1.dT(), 'Got ResPQ', bin_utils_1.bytesToHex(auth.serverNonce), bin_utils_1.bytesToHex(auth.pq), auth.fingerprints);\n auth.publicKey = MTProto.rsaKeysManager.select(auth.fingerprints);\n if (!auth.publicKey) {\n throw new Error('[MT] No public key found');\n }\n console.log(utils_1.dT(), 'PQ factorization start', auth.pq);\n cryptoworker_1.default.factorize(auth.pq).then(function (pAndQ) {\n auth.p = pAndQ[0];\n auth.q = pAndQ[1];\n console.log(utils_1.dT(), 'PQ factorization done', pAndQ[2]);\n _this.mtpSendReqDhParams(auth);\n }, function (error) {\n console.log('Worker error', error, error.stack);\n deferred.reject(error);\n });\n }, function (error) {\n console.error(utils_1.dT(), 'req_pq error', error.message);\n deferred.reject(error);\n });\n setTimeout(function () {\n MTProto.rsaKeysManager.prepare();\n });\n };\n Authorizer.prototype.mtpSendReqDhParams = function (auth) {\n var _this = this;\n var deferred = auth.deferred;\n auth.newNonce = new Array(32);\n MTProto.secureRandom.nextBytes(auth.newNonce);\n var data = new tl_utils_1.TLSerialization({ mtproto: true });\n data.storeObject({\n _: 'p_q_inner_data',\n pq: auth.pq,\n p: auth.p,\n q: auth.q,\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n new_nonce: auth.newNonce\n }, 'P_Q_inner_data', 'DECRYPTED_DATA');\n // @ts-ignore\n var dataWithHash = bin_utils_1.sha1BytesSync(data.getBuffer()).concat(data.getBytes());\n var request = new tl_utils_1.TLSerialization({ mtproto: true });\n request.storeMethod('req_DH_params', {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n p: auth.p,\n q: auth.q,\n public_key_fingerprint: auth.publicKey.fingerprint,\n encrypted_data: bin_utils_1.rsaEncrypt(auth.publicKey, dataWithHash)\n });\n console.log(utils_1.dT(), 'Send req_DH_params');\n this.mtpSendPlainRequest(auth.dcID, request.getBuffer()).then(function (deserializer) {\n var response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE');\n console.log(utils_1.dT(), 'Sent req_DH_params, response:', response);\n if (response._ != 'server_DH_params_fail' && response._ != 'server_DH_params_ok') {\n deferred.reject(new Error('[MT] Server_DH_Params response invalid: ' + response._));\n return false;\n }\n if (!bin_utils_1.bytesCmp(auth.nonce, response.nonce)) {\n deferred.reject(new Error('[MT] Server_DH_Params nonce mismatch'));\n return false;\n }\n if (!bin_utils_1.bytesCmp(auth.serverNonce, response.server_nonce)) {\n deferred.reject(new Error('[MT] Server_DH_Params server_nonce mismatch'));\n return false;\n }\n if (response._ == 'server_DH_params_fail') {\n var newNonceHash = bin_utils_1.sha1BytesSync(auth.newNonce).slice(-16);\n if (!bin_utils_1.bytesCmp(newNonceHash, response.new_nonce_hash)) {\n deferred.reject(new Error('[MT] server_DH_params_fail new_nonce_hash mismatch'));\n return false;\n }\n deferred.reject(new Error('[MT] server_DH_params_fail'));\n return false;\n }\n // fill auth object\n try {\n _this.mtpDecryptServerDhDataAnswer(auth, response.encrypted_answer);\n }\n catch (e) {\n console.error(utils_1.dT(), 'mtpDecryptServerDhDataAnswer FAILED!', e);\n deferred.reject(e);\n return false;\n }\n console.log(utils_1.dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...');\n _this.mtpSendSetClientDhParams(auth);\n }, function (error) {\n console.log(utils_1.dT(), 'Send req_DH_params FAIL!', error);\n deferred.reject(error);\n });\n };\n Authorizer.prototype.mtpDecryptServerDhDataAnswer = function (auth, encryptedAnswer) {\n auth.localTime = utils_1.tsNow();\n auth.tmpAesKey = bin_utils_1.sha1BytesSync(auth.newNonce.concat(auth.serverNonce)).concat(bin_utils_1.sha1BytesSync(auth.serverNonce.concat(auth.newNonce)).slice(0, 12));\n auth.tmpAesIv = bin_utils_1.sha1BytesSync(auth.serverNonce.concat(auth.newNonce)).slice(12).concat(bin_utils_1.sha1BytesSync([].concat(auth.newNonce, auth.newNonce)), auth.newNonce.slice(0, 4));\n var answerWithHash = bin_utils_1.aesDecryptSync(encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv);\n var hash = answerWithHash.slice(0, 20);\n var answerWithPadding = answerWithHash.slice(20);\n var buffer = bin_utils_1.bytesToArrayBuffer(answerWithPadding);\n var deserializer = new tl_utils_1.TLDeserialization(buffer, { mtproto: true });\n var response = deserializer.fetchObject('Server_DH_inner_data');\n if (response._ != 'server_DH_inner_data') {\n throw new Error('[MT] server_DH_inner_data response invalid: ' + response /* constructor */);\n }\n if (!bin_utils_1.bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] server_DH_inner_data nonce mismatch');\n }\n if (!bin_utils_1.bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] server_DH_inner_data serverNonce mismatch');\n }\n console.log(utils_1.dT(), 'Done decrypting answer');\n auth.g = response.g;\n auth.dhPrime = response.dh_prime;\n auth.gA = response.g_a;\n auth.serverTime = response.server_time;\n auth.retry = 0;\n this.mtpVerifyDhParams(auth.g, auth.dhPrime, auth.gA);\n var offset = deserializer.getOffset();\n if (!bin_utils_1.bytesCmp(hash, bin_utils_1.sha1BytesSync(answerWithPadding.slice(0, offset)))) {\n throw new Error('[MT] server_DH_inner_data SHA1-hash mismatch');\n }\n MTProto.timeManager.applyServerTime(auth.serverTime, auth.localTime);\n };\n Authorizer.prototype.mtpVerifyDhParams = function (g, dhPrime, gA) {\n console.log(utils_1.dT(), 'Verifying DH params');\n var dhPrimeHex = bin_utils_1.bytesToHex(dhPrime);\n if (g != 3 ||\n dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') {\n // The verified value is from https://core.telegram.org/mtproto/security_guidelines\n throw new Error('[MT] DH params are not verified: unknown dhPrime');\n }\n console.log(utils_1.dT(), 'dhPrime cmp OK');\n var gABigInt = new jsbn_1.BigInteger(bin_utils_1.bytesToHex(gA), 16);\n var dhPrimeBigInt = new jsbn_1.BigInteger(dhPrimeHex, 16);\n if (gABigInt.compareTo(jsbn_1.BigInteger.ONE) <= 0) {\n throw new Error('[MT] DH params are not verified: gA <= 1');\n }\n if (gABigInt.compareTo(dhPrimeBigInt.subtract(jsbn_1.BigInteger.ONE)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1');\n }\n console.log(utils_1.dT(), '1 < gA < dhPrime-1 OK');\n var two = new jsbn_1.BigInteger(/* null */ '');\n two.fromInt(2);\n var twoPow = two.pow(2048 - 64);\n if (gABigInt.compareTo(twoPow) < 0) {\n throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}');\n }\n if (gABigInt.compareTo(dhPrimeBigInt.subtract(twoPow)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}');\n }\n console.log(utils_1.dT(), '2^{2048-64} < gA < dhPrime-2^{2048-64} OK');\n return true;\n };\n Authorizer.prototype.mtpSendSetClientDhParams = function (auth) {\n var _this = this;\n var deferred = auth.deferred;\n var gBytes = bin_utils_1.bytesFromHex(auth.g.toString(16));\n auth.b = new Array(256);\n MTProto.secureRandom.nextBytes(auth.b);\n cryptoworker_1.default.modPow(gBytes, auth.b, auth.dhPrime).then(function (gB) {\n var data = new tl_utils_1.TLSerialization({ mtproto: true });\n data.storeObject({\n _: 'client_DH_inner_data',\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n retry_id: [0, auth.retry++],\n g_b: gB\n }, 'Client_DH_Inner_Data');\n // @ts-ignore\n var dataWithHash = bin_utils_1.sha1BytesSync(data.getBuffer()).concat(data.getBytes());\n var encryptedData = bin_utils_1.aesEncryptSync(dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\n var request = new tl_utils_1.TLSerialization({ mtproto: true });\n request.storeMethod('set_client_DH_params', {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n encrypted_data: encryptedData\n });\n console.log(utils_1.dT(), 'Send set_client_DH_params');\n _this.mtpSendPlainRequest(auth.dcID, request.getBuffer()).then(function (deserializer) {\n var response = deserializer.fetchObject('Set_client_DH_params_answer');\n if (response._ != 'dh_gen_ok' && response._ != 'dh_gen_retry' && response._ != 'dh_gen_fail') {\n deferred.reject(new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._));\n return false;\n }\n if (!bin_utils_1.bytesCmp(auth.nonce, response.nonce)) {\n deferred.reject(new Error('[MT] Set_client_DH_params_answer nonce mismatch'));\n return false;\n }\n if (!bin_utils_1.bytesCmp(auth.serverNonce, response.server_nonce)) {\n deferred.reject(new Error('[MT] Set_client_DH_params_answer server_nonce mismatch'));\n return false;\n }\n cryptoworker_1.default.modPow(auth.gA, auth.b, auth.dhPrime).then(function (authKey) {\n var authKeyHash = bin_utils_1.sha1BytesSync(authKey), authKeyAux = authKeyHash.slice(0, 8), authKeyID = authKeyHash.slice(-8);\n console.log(utils_1.dT(), 'Got Set_client_DH_params_answer', response._);\n switch (response._) {\n case 'dh_gen_ok':\n var newNonceHash1 = bin_utils_1.sha1BytesSync(auth.newNonce.concat([1], authKeyAux)).slice(-16);\n if (!bin_utils_1.bytesCmp(newNonceHash1, response.new_nonce_hash1)) {\n deferred.reject(new Error('[MT] Set_client_DH_params_answer new_nonce_hash1 mismatch'));\n return false;\n }\n var serverSalt = bin_utils_1.bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8));\n // console.log('Auth successfull!', authKeyID, authKey, serverSalt);\n auth.authKeyID = authKeyID;\n auth.authKey = authKey;\n auth.serverSalt = serverSalt;\n deferred.resolve(auth);\n break;\n case 'dh_gen_retry':\n var newNonceHash2 = bin_utils_1.sha1BytesSync(auth.newNonce.concat([2], authKeyAux)).slice(-16);\n if (!bin_utils_1.bytesCmp(newNonceHash2, response.new_nonce_hash2)) {\n deferred.reject(new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch'));\n return false;\n }\n return _this.mtpSendSetClientDhParams(auth);\n case 'dh_gen_fail':\n var newNonceHash3 = bin_utils_1.sha1BytesSync(auth.newNonce.concat([3], authKeyAux)).slice(-16);\n if (!bin_utils_1.bytesCmp(newNonceHash3, response.new_nonce_hash3)) {\n deferred.reject(new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch'));\n return false;\n }\n deferred.reject(new Error('[MT] Set_client_DH_params_answer fail'));\n return false;\n }\n }, deferred.reject);\n }, deferred.reject);\n }, deferred.reject);\n };\n // mtpAuth\n Authorizer.prototype.auth = function (dcID) {\n var _this = this;\n if (dcID in this.cached) {\n return this.cached[dcID];\n }\n var nonce = [];\n for (var i = 0; i < 16; i++) {\n nonce.push(bin_utils_1.nextRandomInt(0xFF));\n }\n if (!MTProto.dcConfigurator.chooseServer(dcID)) {\n return Promise.reject(new Error('[MT] No server found for dc ' + dcID));\n }\n var promise = new Promise(function (resolve, reject) {\n var auth = {\n dcID: dcID,\n nonce: nonce,\n deferred: { resolve: resolve, reject: reject }\n };\n //this.cached[dcID] = auth.deferred.promise;\n _this.cached[dcID] = promise;\n setTimeout(function () {\n _this.mtpSendReqPQ(auth);\n });\n }).catch(function () {\n delete _this.cached[dcID];\n });\n return promise;\n //return this.cached[dcID];\n };\n return Authorizer;\n }());\n MTProto.Authorizer = Authorizer;\n var NetworkerFactory = /** @class */ (function () {\n function NetworkerFactory( /*public AppRuntimeManager: any , $rootScope: any */) {\n /* delete $http.defaults.headers.post['Content-Type']\n delete $http.defaults.headers.common['Accept'] */\n this.updatesProcessor = null;\n this.iii = 0;\n this.offline = false;\n this.offlineInited = false;\n this.akStopped = false;\n /* $rootScope.retryOnline = function() {\n $(document.body).trigger('online');\n } */\n }\n NetworkerFactory.prototype.startAll = function () {\n if (this.akStopped) {\n this.akStopped = false;\n // @ts-ignore\n this.updatesProcessor({\n _: 'new_session_created'\n }, true);\n }\n };\n NetworkerFactory.prototype.stopAll = function () {\n this.akStopped = true;\n };\n NetworkerFactory.prototype.setUpdatesProcessor = function (callback) {\n this.updatesProcessor = callback;\n };\n NetworkerFactory.prototype.getNetworker = function (dcID, authKey, serverSalt, options) {\n console.log(utils_1.dT(), 'NetworkerFactory: creating new instance of MTPNetworker...');\n return new mtnetworker_1.MTPNetworker(this, dcID, authKey, serverSalt, options);\n };\n return NetworkerFactory;\n }());\n MTProto.NetworkerFactory = NetworkerFactory;\n var ApiManager = /** @class */ (function () {\n function ApiManager() {\n //MtpSingleInstanceService.start();\n var _this = this;\n this.cachedNetworkers = {};\n this.cachedUploadNetworkers = {};\n this.cachedExportPromise = {};\n this.baseDcID = false;\n this.telegramMeNotified = false;\n storage_1.default.get('dc').then(function (dcID) {\n if (dcID) {\n _this.baseDcID = dcID;\n }\n });\n }\n ApiManager.prototype.telegramMeNotify = function (newValue) {\n if (this.telegramMeNotified !== newValue) {\n this.telegramMeNotified = newValue;\n exports.telegramMeWebService.setAuthorized(this.telegramMeNotified);\n }\n };\n // mtpSetUserAuth\n ApiManager.prototype.setUserAuth = function (dcID, userAuth) {\n var fullUserAuth = Object.assign({ dcID: dcID }, userAuth);\n storage_1.default.set({\n dc: dcID,\n user_auth: fullUserAuth\n });\n this.telegramMeNotify(true);\n $rootScope.$broadcast('user_auth', fullUserAuth);\n this.baseDcID = dcID;\n };\n // mtpLogOut\n ApiManager.prototype.logOut = function () {\n var _this = this;\n var storageKeys = [];\n for (var dcID = 1; dcID <= 5; dcID++) {\n storageKeys.push('dc' + dcID + '_auth_key');\n }\n // WebPushApiManager.forceUnsubscribe(); // WARNING\n return storage_1.default.get(storageKeys).then(function (storageResult) {\n var logoutPromises = [];\n for (var i = 0; i < storageResult.length; i++) {\n if (storageResult[i]) {\n logoutPromises.push(_this.invokeApi('auth.logOut', {}, { dcID: i + 1, ignoreErrors: true }));\n }\n }\n return Promise.all(logoutPromises).then(function () {\n storage_1.default.remove('dc', 'user_auth');\n _this.baseDcID = false;\n _this.telegramMeNotify(false);\n return _this.mtpClearStorage();\n }, function (error) {\n storageKeys.push('dc', 'user_auth');\n storage_1.default.remove(storageKeys);\n _this.baseDcID = false;\n error.handled = true;\n _this.telegramMeNotify(false);\n return _this.mtpClearStorage();\n });\n });\n };\n ApiManager.prototype.mtpClearStorage = function () {\n var saveKeys = ['user_auth', 't_user_auth', 'dc', 't_dc'];\n for (var dcID = 1; dcID <= 5; dcID++) {\n saveKeys.push('dc' + dcID + '_auth_key');\n saveKeys.push('t_dc' + dcID + '_auth_key');\n }\n storage_1.default.noPrefix();\n storage_1.default.get(saveKeys).then(function (values) {\n storage_1.default.clear().then(function () {\n var restoreObj = {};\n saveKeys.forEach(function (key, i) {\n var value = values[i];\n if (value !== false && value !== undefined) {\n restoreObj[key] = value;\n }\n });\n storage_1.default.noPrefix();\n return storage_1.default.set(restoreObj);\n });\n });\n };\n // mtpGetNetworker\n ApiManager.prototype.getNetworker = function (dcID, options) {\n if (options === void 0) { options = {}; }\n var cache = (options.fileUpload || options.fileDownload)\n ? this.cachedUploadNetworkers\n : this.cachedNetworkers;\n if (!dcID) {\n throw new Error('get Networker without dcID');\n }\n if (cache[dcID] !== undefined) {\n return Promise.resolve(cache[dcID]);\n //return qSync.when(cache[dcID]);\n }\n var akk = 'dc' + dcID + '_auth_key';\n var ssk = 'dc' + dcID + '_server_salt';\n // WARNING added []\n return storage_1.default.get([akk, ssk]).then(function (result) {\n if (cache[dcID] !== undefined) {\n return cache[dcID];\n }\n var authKeyHex = result[0];\n var serverSaltHex = result[1];\n // console.log('ass', dcID, authKeyHex, serverSaltHex)\n if (authKeyHex && authKeyHex.length == 512) {\n if (!serverSaltHex || serverSaltHex.length != 16) {\n serverSaltHex = 'AAAAAAAAAAAAAAAA';\n }\n var authKey = bin_utils_1.bytesFromHex(authKeyHex);\n var serverSalt = bin_utils_1.bytesFromHex(serverSaltHex);\n return cache[dcID] = MTProto.networkerFactory.getNetworker(dcID, authKey, serverSalt, options);\n }\n if (!options.createNetworker) {\n return Promise.reject({ type: 'AUTH_KEY_EMPTY', code: 401 });\n //return $q.reject({type: 'AUTH_KEY_EMPTY', code: 401})\n }\n return MTProto.authorizer.auth(dcID).then(function (auth) {\n var _a;\n var storeObj = (_a = {},\n _a[akk] = bin_utils_1.bytesToHex(auth.authKey),\n _a[ssk] = bin_utils_1.bytesToHex(auth.serverSalt),\n _a);\n storage_1.default.set(storeObj);\n return cache[dcID] = MTProto.networkerFactory.getNetworker(dcID, auth.authKey, auth.serverSalt, options);\n }, function (error) {\n console.log('Get networker error', error, error.stack);\n return Promise.reject(error);\n //return $q.reject(error);\n });\n });\n };\n // mtpInvokeApi\n ApiManager.prototype.invokeApi = function (method, params, options) {\n var _this = this;\n if (params === void 0) { params = {}; }\n if (options === void 0) { options = {}; }\n console.log(utils_1.dT(), 'Invoke api', method, params, options);\n return new Promise(function (resolve, reject) {\n var rejectPromise = function (error) {\n if (!error) {\n error = { type: 'ERROR_EMPTY' };\n }\n else if (!utils_1.isObject(error)) {\n error = { message: error };\n }\n reject(error);\n if (options.ignoreErrors) {\n return;\n }\n if (error.code == 406) {\n error.handled = true;\n }\n if (!options.noErrorBox) {\n error.input = method;\n error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack;\n setTimeout(function () {\n if (!error.handled) {\n if (error.code == 401) {\n // @ts-ignore WARNING!\n _this.logOut().finally(function () {\n if (location.protocol == 'http:' &&\n !Config.Modes.http &&\n Config.App.domains.indexOf(location.hostname) != -1) {\n location.href = location.href.replace(/^http:/, 'https:');\n }\n else {\n location.hash = '/login';\n // AppRuntimeManager.reload(); // WARNING\n }\n });\n }\n else {\n // ErrorService.show({error: error}); // WARNING\n }\n error.handled = true;\n }\n }, 100);\n }\n };\n var dcID;\n var cachedNetworker;\n var stack = (new Error()).stack || 'empty stack';\n var performRequest = function (networker) {\n return (cachedNetworker = networker)\n .wrapApiCall(method, params, options)\n .then(resolve, function (error) {\n console.error(utils_1.dT(), 'Error', error.code, error.type, _this.baseDcID, dcID);\n if (error.code == 401 && _this.baseDcID == dcID) {\n storage_1.default.remove('dc', 'user_auth');\n _this.telegramMeNotify(false);\n rejectPromise(error);\n }\n else if (error.code == 401 && _this.baseDcID && dcID != _this.baseDcID) {\n if (_this.cachedExportPromise[dcID] === undefined) {\n var promise = new Promise(function (exportResolve, exportReject) {\n _this.invokeApi('auth.exportAuthorization', { dc_id: dcID }, { noErrorBox: true }).then(function (exportedAuth) {\n _this.invokeApi('auth.importAuthorization', {\n id: exportedAuth.id,\n bytes: exportedAuth.bytes\n }, { dcID: dcID, noErrorBox: true }).then(exportResolve, exportReject);\n }, exportReject);\n });\n _this.cachedExportPromise[dcID] = promise;\n }\n _this.cachedExportPromise[dcID].then(function () {\n (cachedNetworker = networker).wrapApiCall(method, params, options).then(resolve, rejectPromise);\n }, rejectPromise);\n }\n else if (error.code == 303) {\n var newDcID = error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\\d+)/)[2];\n if (newDcID != dcID) {\n if (options.dcID) {\n options.dcID = newDcID;\n }\n else {\n storage_1.default.set({ dc: _this.baseDcID = newDcID });\n }\n _this.getNetworker(newDcID, options).then(function (networker) {\n networker.wrapApiCall(method, params, options).then(resolve, rejectPromise);\n }, rejectPromise);\n }\n }\n else if (!options.rawError && error.code == 420) {\n var waitTime = error.type.match(/^FLOOD_WAIT_(\\d+)/)[1] || 10;\n if (waitTime > (options.timeout || 60)) {\n return rejectPromise(error);\n }\n setTimeout(function () {\n performRequest(cachedNetworker);\n }, waitTime * 1000);\n }\n else if (!options.rawError && (error.code == 500 || error.type == 'MSG_WAIT_FAILED')) {\n var now = utils_1.tsNow();\n if (options.stopTime) {\n if (now >= options.stopTime) {\n return rejectPromise(error);\n }\n }\n else {\n options.stopTime = now + (options.timeout !== undefined ? options.timeout : 10) * 1000;\n }\n options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1;\n setTimeout(function () {\n performRequest(cachedNetworker);\n }, options.waitTime * 1000);\n }\n else {\n rejectPromise(error);\n }\n });\n };\n if (dcID = (options.dcID || _this.baseDcID)) {\n _this.getNetworker(dcID, options).then(performRequest, rejectPromise);\n }\n else {\n storage_1.default.get('dc').then(function (baseDcID) {\n _this.getNetworker(dcID = baseDcID || 2, options).then(performRequest, rejectPromise);\n });\n }\n });\n };\n // mtpGetUserID\n ApiManager.prototype.getUserID = function () {\n var _this = this;\n return storage_1.default.get('user_auth').then(function (auth) {\n _this.telegramMeNotify(auth && auth.id > 0 || false);\n return auth.id || 0;\n });\n };\n ApiManager.prototype.getBaseDcID = function () {\n return this.baseDcID || false;\n };\n return ApiManager;\n }());\n MTProto.ApiManager = ApiManager;\n var ApiFileManager = /** @class */ (function () {\n function ApiFileManager() {\n this.cachedFs = false;\n this.cachedFsPromise = false;\n this.cachedSavePromises = {};\n this.cachedDownloadPromises = {};\n this.cachedDownloads = {};\n this.downloadPulls = {};\n this.downloadActives = {};\n this.index = 0;\n }\n ApiFileManager.prototype.downloadRequest = function (dcID, cb, activeDelta) {\n var _this = this;\n if (this.downloadPulls[dcID] === undefined) {\n this.downloadPulls[dcID] = [];\n this.downloadActives[dcID] = 0;\n }\n var downloadPull = this.downloadPulls[dcID];\n var promise = new Promise(function (resolve, reject) {\n // WARNING deferred!\n downloadPull.push({ cb: cb, deferred: { resolve: resolve, reject: reject }, activeDelta: activeDelta });\n });\n setTimeout(function () {\n _this.downloadCheck(dcID);\n }, 0);\n return promise;\n };\n ApiFileManager.prototype.downloadCheck = function (dcID) {\n var _this = this;\n var downloadPull = this.downloadPulls[dcID];\n var downloadLimit = dcID == 'upload' ? 11 : 5;\n if (this.downloadActives[dcID] >= downloadLimit || !downloadPull || !downloadPull.length) {\n return false;\n }\n var data = downloadPull.shift();\n var activeDelta = data.activeDelta || 1;\n this.downloadActives[dcID] += activeDelta;\n this.index++;\n data.cb()\n .then(function (result) {\n _this.downloadActives[dcID] -= activeDelta;\n _this.downloadCheck(dcID);\n data.deferred.resolve(result);\n }, function (error) {\n _this.downloadActives[dcID] -= activeDelta;\n _this.downloadCheck(dcID);\n data.deferred.reject(error);\n });\n };\n ApiFileManager.prototype.getFileName = function (location) {\n switch (location._) {\n case 'inputDocumentFileLocation':\n var fileName = (location.file_name || '').split('.', 2);\n var ext = fileName[1] || '';\n if (location.stickerType == 1 /* && !WebpManager.isWebpSupported() */) { // warning\n ext += 'webp'; /* 'png'; */\n }\n else if (location.stickerType == 2) {\n ext += 'tgs';\n }\n var versionPart = location.version ? ('v' + location.version) : '';\n return fileName[0] + '_' + location.id + versionPart + (ext ? '.' + ext : ext);\n default:\n if (!location.volume_id && !location.file_reference) {\n console.trace('Empty location', location);\n }\n var ext = 'jpg';\n if (location.stickerType == 1) {\n ext = 'webp' /* WebpManager.isWebpSupported() ? 'webp' : 'png'*/;\n }\n else if (location.stickerType == 2) {\n ext += 'tgs';\n }\n if (location.volume_id) {\n return location.volume_id + '_' + location.local_id + '_' + location.secret + '.' + ext;\n }\n else {\n return location.id + '_' + location.access_hash + '.' + ext;\n }\n }\n };\n ApiFileManager.prototype.getTempFileName = function (file) {\n var size = file.size || -1;\n var random = bin_utils_1.nextRandomInt(0xFFFFFFFF);\n return '_temp' + random + '_' + size;\n };\n ApiFileManager.prototype.getCachedFile = function (location) {\n if (!location) {\n return false;\n }\n var fileName = this.getFileName(location);\n return this.cachedDownloads[fileName] || false;\n };\n ApiFileManager.prototype.getFileStorage = function () {\n if (!Config.Modes.memory_only) {\n /* if(TmpfsFileStorage.isAvailable()) {\n return TmpfsFileStorage;\n } */\n if (idb_1.default.isAvailable()) {\n return idb_1.default;\n }\n }\n return idb_1.default /* MemoryFileStorage */;\n };\n ApiFileManager.prototype.saveSmallFile = function (location, bytes) {\n var _this = this;\n var fileName = this.getFileName(location);\n if (!this.cachedSavePromises[fileName]) {\n this.cachedSavePromises[fileName] = this.getFileStorage().saveFile(fileName, bytes).then(function (blob) {\n return _this.cachedDownloads[fileName] = blob;\n }, function (error) {\n delete _this.cachedSavePromises[fileName];\n });\n }\n return this.cachedSavePromises[fileName];\n };\n ApiFileManager.prototype.downloadSmallFile = function (location, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n if (!filemanager_1.default.isAvailable()) {\n return Promise.reject({ type: 'BROWSER_BLOB_NOT_SUPPORTED' });\n }\n var dcID = options.dcID || location.dc_id;\n var mimeType = options.mimeType || 'image/jpeg';\n var fileName = this.getFileName(location);\n var cachedPromise = this.cachedSavePromises[fileName] || this.cachedDownloadPromises[fileName];\n if (cachedPromise) {\n return cachedPromise;\n }\n var fileStorage = this.getFileStorage();\n return this.cachedDownloadPromises[fileName] = fileStorage.getFile(fileName).then(function (blob) {\n return _this.cachedDownloads[fileName] = blob;\n }, function () {\n var downloadPromise = _this.downloadRequest(dcID, function () {\n var inputLocation = location;\n if (!inputLocation._ || inputLocation._ == 'fileLocation') {\n inputLocation = Object.assign({}, location, { _: 'inputFileLocation' });\n }\n var params = {\n flags: 0,\n location: inputLocation,\n offset: 0,\n limit: 1024 * 1024\n };\n console.log('next small promise', params);\n return MTProto.apiManager.invokeApi('upload.getFile', params, {\n dcID: dcID,\n fileDownload: true,\n createNetworker: true,\n noErrorBox: true\n });\n }, dcID);\n var processDownloaded = function (bytes) {\n return Promise.resolve(bytes);\n /* if(!location.sticker || WebpManager.isWebpSupported()) {\n return qSync.when(bytes);\n }\n \n return WebpManager.getPngBlobFromWebp(bytes); */\n };\n return fileStorage.getFileWriter(fileName, mimeType).then(function (fileWriter) {\n return downloadPromise.then(function (result) {\n return processDownloaded(result.bytes).then(function (proccessedResult) {\n return filemanager_1.default.write(fileWriter, proccessedResult).then(function () {\n return _this.cachedDownloads[fileName] = fileWriter.finalize();\n });\n });\n });\n });\n });\n };\n ApiFileManager.prototype.getDownloadedFile = function (location, size) {\n var fileStorage = this.getFileStorage();\n var fileName = this.getFileName(location);\n return fileStorage.getFile(fileName, size);\n };\n ApiFileManager.prototype.downloadFile = function (dcID, location, size, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n if (!filemanager_1.default.isAvailable()) {\n return Promise.reject({ type: 'BROWSER_BLOB_NOT_SUPPORTED' });\n }\n /* var processSticker = false;\n if(location.sticker && !WebpManager.isWebpSupported()) {\n if(options.toFileEntry || size > 524288) {\n delete location.sticker;\n } else {\n processSticker = true;\n options.mime = 'image/png';\n }\n } */\n // console.log(dT(), 'Dload file', dcID, location, size)\n var fileName = this.getFileName(location);\n var toFileEntry = options.toFileEntry || null;\n var cachedPromise = this.cachedSavePromises[fileName] || this.cachedDownloadPromises[fileName];\n var fileStorage = this.getFileStorage();\n // console.log(dT(), 'fs', fileStorage.name, fileName, cachedPromise)\n if (cachedPromise) {\n if (toFileEntry) {\n return cachedPromise.then(function (blob) {\n return filemanager_1.default.copy(blob, toFileEntry);\n });\n }\n return cachedPromise;\n }\n //var deferred = $q.defer()\n var deferredHelper = { notify: function () { } };\n var deferred = new Promise(function (resolve, reject) {\n deferredHelper.resolve = resolve;\n deferredHelper.reject = reject;\n });\n Object.assign(deferred, deferredHelper);\n var canceled = false;\n var resolved = false;\n var mimeType = options.mime_type || 'image/jpeg', cacheFileWriter;\n var errorHandler = function (error) {\n deferred.reject(error);\n errorHandler = function () { };\n if (cacheFileWriter &&\n (!error || error.type != 'DOWNLOAD_CANCELED')) {\n cacheFileWriter.truncate(0);\n }\n };\n fileStorage.getFile(fileName, size).then(function (blob) {\n if (toFileEntry) {\n filemanager_1.default.copy(blob, toFileEntry).then(function () {\n deferred.resolve();\n }, errorHandler);\n }\n else {\n deferred.resolve(_this.cachedDownloads[fileName] = blob);\n }\n }, function () {\n var fileWriterPromise = toFileEntry ? filemanager_1.default.getFileWriter(toFileEntry) : fileStorage.getFileWriter(fileName, mimeType);\n var processDownloaded = function (bytes) {\n return Promise.resolve(bytes);\n /* if(!processSticker) {\n return Promise.resolve(bytes);\n }\n \n return WebpManager.getPngBlobFromWebp(bytes); */\n };\n fileWriterPromise.then(function (fileWriter) {\n cacheFileWriter = fileWriter;\n var limit = 524288, offset;\n var startOffset = 0;\n var writeFilePromise = Promise.resolve(), writeFileDeferred;\n if (fileWriter.length) {\n startOffset = fileWriter.length;\n if (startOffset >= size) {\n if (toFileEntry) {\n deferred.resolve();\n }\n else {\n deferred.resolve(_this.cachedDownloads[fileName] = fileWriter.finalize());\n }\n return;\n }\n fileWriter.seek(startOffset);\n deferred.notify({ done: startOffset, total: size });\n }\n var _loop_1 = function () {\n //writeFileDeferred = $q.defer();\n var writeFileDeferredHelper = {};\n writeFileDeferred = new Promise(function (resolve, reject) {\n writeFileDeferredHelper.resolve = resolve;\n writeFileDeferredHelper.reject = reject;\n });\n Object.assign(writeFileDeferred, writeFileDeferredHelper);\n ;\n (function (isFinal, offset, writeFileDeferred, writeFilePromise) {\n return _this.downloadRequest(dcID, function () {\n if (canceled) {\n return Promise.resolve();\n }\n return MTProto.apiManager.invokeApi('upload.getFile', {\n flags: 0,\n location: location,\n offset: offset,\n limit: limit\n }, {\n dcID: dcID,\n fileDownload: true,\n singleInRequest: 'safari' in window,\n createNetworker: true\n });\n }, dcID).then(function (result) {\n writeFilePromise.then(function () {\n if (canceled) {\n return Promise.resolve();\n }\n return processDownloaded(result.bytes).then(function (processedResult) {\n return filemanager_1.default.write(fileWriter, processedResult).then(function () {\n writeFileDeferred.resolve();\n }, errorHandler).then(function () {\n if (isFinal) {\n resolved = true;\n if (toFileEntry) {\n deferred.resolve();\n }\n else {\n deferred.resolve(_this.cachedDownloads[fileName] = fileWriter.finalize());\n }\n }\n else {\n deferred.notify({ done: offset + limit, total: size });\n }\n });\n });\n });\n });\n })(offset + limit >= size, offset, writeFileDeferred, writeFilePromise);\n writeFilePromise = writeFileDeferred;\n };\n for (offset = startOffset; offset < size; offset += limit) {\n _loop_1();\n }\n });\n });\n deferred.cancel = function () {\n if (!canceled && !resolved) {\n canceled = true;\n delete _this.cachedDownloadPromises[fileName];\n errorHandler({ type: 'DOWNLOAD_CANCELED' });\n }\n };\n if (!toFileEntry) {\n this.cachedDownloadPromises[fileName] = deferred;\n }\n return deferred;\n };\n ApiFileManager.prototype.uploadFile = function (file) {\n var fileSize = file.size, isBigFile = fileSize >= 10485760, canceled = false, resolved = false, doneParts = 0, partSize = 262144, // 256 Kb\n activeDelta = 2;\n if (fileSize > 67108864) {\n partSize = 524288;\n activeDelta = 4;\n }\n else if (fileSize < 102400) {\n partSize = 32768;\n activeDelta = 1;\n }\n var totalParts = Math.ceil(fileSize / partSize);\n if (totalParts > 3000) {\n return Promise.reject({ type: 'FILE_TOO_BIG' });\n }\n var fileID = [bin_utils_1.nextRandomInt(0xFFFFFFFF), bin_utils_1.nextRandomInt(0xFFFFFFFF)];\n //var deferred = $q.defer();\n var deferredHelper = { notify: function () { } };\n var deferred = new Promise(function (resolve, reject) {\n deferredHelper.resolve = resolve;\n deferredHelper.reject = reject;\n return Promise.resolve();\n });\n Object.assign(deferred, deferredHelper);\n var errorHandler = function (error) {\n console.error(utils_1.dT(), 'Up Error', error);\n deferred.reject(error);\n canceled = true;\n errorHandler = function () { };\n };\n var _part = 0, resultInputFile = {\n _: isBigFile ? 'inputFileBig' : 'inputFile',\n id: fileID,\n parts: totalParts,\n name: file.name,\n md5_checksum: ''\n };\n var _loop_2 = function (offset) {\n var part = _part++; // 0, 1\n this_1.downloadRequest('upload', function () {\n return new Promise(function (uploadResolve, uploadReject) {\n var reader = new FileReader();\n var blob = file.slice(offset, offset + partSize);\n reader.onloadend = function (e) {\n if (canceled) {\n uploadReject();\n return;\n }\n if (e.target.readyState != FileReader.DONE) {\n console.error(utils_1.dT(), 'wrong readyState!');\n return;\n }\n console.log(utils_1.dT(), 'Starting to upload file, isBig:', isBigFile, fileID, part);\n MTProto.apiManager.invokeApi(isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart', {\n file_id: fileID,\n file_part: part,\n file_total_parts: totalParts,\n bytes: e.target.result\n }, {\n startMaxLength: partSize + 256,\n fileUpload: true,\n singleInRequest: true\n }).then(function (result) {\n doneParts++;\n uploadResolve();\n console.log(utils_1.dT(), 'Progress', doneParts * partSize / fileSize);\n if (doneParts >= totalParts) {\n deferred.resolve(resultInputFile);\n resolved = true;\n }\n else {\n deferred.notify({ done: doneParts * partSize, total: fileSize });\n }\n }, errorHandler);\n };\n reader.readAsArrayBuffer(blob);\n });\n }, activeDelta);\n };\n var this_1 = this;\n for (var offset = 0; offset < fileSize; offset += partSize) {\n _loop_2(offset);\n }\n deferred.cancel = function () {\n console.log('cancel upload', canceled, resolved);\n if (!canceled && !resolved) {\n canceled = true;\n errorHandler({ type: 'UPLOAD_CANCELED' });\n }\n };\n return deferred;\n };\n return ApiFileManager;\n }());\n MTProto.ApiFileManager = ApiFileManager;\n var ServerTimeManager = /** @class */ (function () {\n function ServerTimeManager() {\n var _this = this;\n this.timestampNow = utils_1.tsNow(true);\n this.midnightNoOffset = this.timestampNow - (this.timestampNow % 86400);\n this.midnightOffseted = new Date();\n this.midnightOffset = this.midnightNoOffset - (Math.floor(+this.midnightOffseted / 1000));\n this.serverTimeOffset = 0;\n this.timeParams = {\n midnightOffset: this.midnightOffset,\n serverTimeOffset: this.serverTimeOffset\n };\n this.midnightOffseted.setHours(0);\n this.midnightOffseted.setMinutes(0);\n this.midnightOffseted.setSeconds(0);\n storage_1.default.get('server_time_offset').then(function (to) {\n if (to) {\n _this.serverTimeOffset = to;\n _this.timeParams.serverTimeOffset = to;\n }\n });\n }\n return ServerTimeManager;\n }());\n MTProto.ServerTimeManager = ServerTimeManager;\n var PasswordManager = /** @class */ (function () {\n function PasswordManager() {\n }\n PasswordManager.prototype.getState = function (options) {\n if (options === void 0) { options = {}; }\n return MTProto.apiManager.invokeApi('account.getPassword', {}, options).then(function (result) {\n return result;\n });\n };\n /* public updateSettings(state: any, settings: any) {\n var currentHashPromise;\n var newHashPromise;\n var params: any = {\n new_settings: {\n _: 'account.passwordInputSettings',\n flags: 0,\n hint: settings.hint || ''\n }\n };\n \n if(typeof settings.cur_password === 'string' &&\n settings.cur_password.length > 0) {\n currentHashPromise = this.makePasswordHash(state.current_salt, settings.cur_password);\n } else {\n currentHashPromise = Promise.resolve([]);\n }\n \n if (typeof settings.new_password === 'string' &&\n settings.new_password.length > 0) {\n var saltRandom = new Array(8);\n var newSalt = bufferConcat(state.new_salt, saltRandom);\n secureRandom.nextBytes(saltRandom);\n newHashPromise = this.makePasswordHash(newSalt, settings.new_password);\n params.new_settings.new_salt = newSalt;\n params.new_settings.flags |= 1;\n } else {\n if(typeof settings.new_password === 'string') {\n params.new_settings.flags |= 1;\n params.new_settings.new_salt = [];\n }\n newHashPromise = Promise.resolve([]);\n }\n \n if(typeof settings.email === 'string') {\n params.new_settings.flags |= 2;\n params.new_settings.email = settings.email || '';\n }\n \n return Promise.all([currentHashPromise, newHashPromise]).then((hashes) => {\n params.current_password_hash = hashes[0];\n params.new_settings.new_password_hash = hashes[1];\n \n return apiManager.invokeApi('account.updatePasswordSettings', params);\n });\n } */\n PasswordManager.prototype.check = function (state, password, options) {\n if (options === void 0) { options = {}; }\n return this.computeCheck(password, state).then(function (inputCheckPassword) {\n return MTProto.apiManager.invokeApi('auth.checkPassword', {\n password: inputCheckPassword\n }, options);\n });\n };\n PasswordManager.prototype.requestRecovery = function (options) {\n if (options === void 0) { options = {}; }\n return MTProto.apiManager.invokeApi('auth.requestPasswordRecovery', {}, options);\n };\n PasswordManager.prototype.recover = function (code, options) {\n if (options === void 0) { options = {}; }\n return MTProto.apiManager.invokeApi('auth.recoverPassword', {\n code: code\n }, options);\n };\n /* public makePasswordHash(salt: any, password: any) {\n var passwordUTF8 = unescape(encodeURIComponent(password));\n \n var buffer = new ArrayBuffer(passwordUTF8.length);\n var byteView = new Uint8Array(buffer);\n for(var i = 0, len = passwordUTF8.length; i < len; i++) {\n byteView[i] = passwordUTF8.charCodeAt(i);\n }\n \n buffer = bufferConcat(bufferConcat(salt, byteView), salt);\n \n return CryptoWorker.sha256Hash(buffer);\n } */\n PasswordManager.prototype.makePasswordHash = function (password, client_salt, server_salt) {\n var passwordUTF8 = unescape(encodeURIComponent(password));\n // @ts-ignore\n var textEncoder = new TextEncoder(\"utf-8\");\n var passwordBuffer = textEncoder.encode(passwordUTF8);\n // right\n var buffer = bin_utils_1.bufferConcats(client_salt, passwordBuffer, client_salt);\n return cryptoworker_1.default.sha256Hash(buffer).then(function (buffer) {\n console.log('encoded 1', bin_utils_1.bytesToHex(new Uint8Array(buffer)));\n buffer = bin_utils_1.bufferConcats(server_salt, buffer, server_salt);\n return cryptoworker_1.default.sha256Hash(buffer).then(function (buffer) {\n console.log('encoded 2', buffer, bin_utils_1.bytesToHex(new Uint8Array(buffer)));\n return cryptoworker_1.default.pbkdf2(new Uint8Array(buffer), client_salt, 100000).then(function (hash) {\n console.log('encoded 3', hash, bin_utils_1.bytesToHex(new Uint8Array(hash)));\n hash = bin_utils_1.bufferConcats(server_salt, hash, server_salt);\n return cryptoworker_1.default.sha256Hash(hash).then(function (buffer) {\n console.log('got password hash:', buffer, bin_utils_1.bytesToHex(new Uint8Array(buffer)));\n return buffer;\n });\n });\n });\n });\n };\n PasswordManager.prototype.computeCheck = function (password, state) {\n return __awaiter(this, void 0, void 0, function () {\n var algo, p, B, g, check_prime_and_good, pw_hash, x, padArray, pForHash, gForHash, b_for_hash, g_x, k, kg_x, is_good_mod_exp_first, generate_and_check_random, _a, a, a_for_hash, u, g_b, ux, a_ux, S, K, h1, h2, buff, _b, _c, M1, out;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n algo = state.current_algo;\n p = leemon_1.str2bigInt(bin_utils_1.bytesToHex(algo.p), 16);\n B = leemon_1.str2bigInt(bin_utils_1.bytesToHex(state.srp_B), 16);\n g = leemon_1.int2bigInt(algo.g, 32, 256);\n console.log('p', leemon_1.bigInt2str(p, 16));\n console.log('B', leemon_1.bigInt2str(B, 16));\n check_prime_and_good = function (bytes, g) {\n var good_prime = 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b';\n if (bin_utils_1.bytesToHex(bytes) == good_prime && [3, 4, 5, 7].indexOf(g) !== -1) {\n return true;\n }\n // TO-DO check_prime_and_good_check\n };\n return [4 /*yield*/, this.makePasswordHash(password, new Uint8Array(algo.salt1), new Uint8Array(algo.salt2))];\n case 1:\n pw_hash = _d.sent();\n x = leemon_1.str2bigInt(bin_utils_1.bytesToHex(new Uint8Array(pw_hash)), 16);\n console.warn('computed pw_hash:', pw_hash, x, bin_utils_1.bytesToHex(new Uint8Array(pw_hash)));\n padArray = function (arr, len, fill) {\n if (fill === void 0) { fill = 0; }\n return Array(len).fill(fill).concat(arr).slice(-len);\n };\n pForHash = padArray(bin_utils_1.bytesFromHex(leemon_1.bigInt2str(p, 16)), 256);\n gForHash = padArray(bin_utils_1.bytesFromHex(leemon_1.bigInt2str(g, 16)), 256);\n b_for_hash = padArray(bin_utils_1.bytesFromHex(leemon_1.bigInt2str(B, 16)), 256);\n console.log(bin_utils_1.bytesToHex(pForHash));\n console.log(bin_utils_1.bytesToHex(gForHash));\n console.log(bin_utils_1.bytesToHex(b_for_hash));\n g_x = leemon_1.powMod(g, x, p);\n console.log('g_x', leemon_1.bigInt2str(g_x, 16));\n return [4 /*yield*/, cryptoworker_1.default.sha256Hash(bin_utils_1.bufferConcat(pForHash, gForHash))];\n case 2:\n k = _d.sent();\n k = leemon_1.str2bigInt(bin_utils_1.bytesToHex(new Uint8Array(k)), 16);\n console.log('k', leemon_1.bigInt2str(k, 16));\n kg_x = leemon_1.mod(leemon_1.mult(k, g_x), p);\n // good\n console.log('kg_x', leemon_1.bigInt2str(kg_x, 16));\n is_good_mod_exp_first = function (modexp, prime) {\n var diff = leemon_1.sub(prime, modexp);\n var min_diff_bits_count = 2048 - 64;\n var max_mod_exp_size = 256;\n if (leemon_1.negative(diff) ||\n leemon_1.bitSize(diff) < min_diff_bits_count ||\n leemon_1.bitSize(modexp) < min_diff_bits_count ||\n Math.floor((leemon_1.bitSize(modexp) + 7) / 8) > max_mod_exp_size)\n return false;\n return true;\n };\n generate_and_check_random = function () { return __awaiter(_this, void 0, void 0, function () {\n var random_size, a_1, A, a_for_hash_1, s, u_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n random_size = 256;\n _a.label = 1;\n case 1:\n if (!true) return [3 /*break*/, 4];\n a_1 = leemon_1.str2bigInt(bin_utils_1.bytesToHex(state.secure_random), 16);\n A = leemon_1.powMod(g, a_1, p);\n if (!is_good_mod_exp_first(A, p)) return [3 /*break*/, 3];\n a_for_hash_1 = bin_utils_1.bytesFromHex(leemon_1.bigInt2str(A, 16));\n return [4 /*yield*/, cryptoworker_1.default.sha256Hash(bin_utils_1.bufferConcat(new Uint8Array(a_for_hash_1), new Uint8Array(b_for_hash)))];\n case 2:\n s = _a.sent();\n u_1 = leemon_1.str2bigInt(bin_utils_1.bytesToHex(new Uint8Array(s)), 16);\n //if(u > 0)\n if (!leemon_1.isZero(u_1) && !leemon_1.negative(u_1))\n return [2 /*return*/, { a: a_1, a_for_hash: a_for_hash_1, u: u_1 }];\n _a.label = 3;\n case 3: return [3 /*break*/, 1];\n case 4: return [2 /*return*/];\n }\n });\n }); };\n return [4 /*yield*/, generate_and_check_random()];\n case 3:\n _a = _d.sent(), a = _a.a, a_for_hash = _a.a_for_hash, u = _a.u;\n console.log('a', leemon_1.bigInt2str(a, 16));\n console.log('a_for_hash', bin_utils_1.bytesToHex(a_for_hash));\n console.log('u', leemon_1.bigInt2str(u, 16));\n // g_b = (B - kg_x) % p\n console.log('B - kg_x', leemon_1.bigInt2str(leemon_1.sub(B, kg_x), 16));\n if (!leemon_1.greater(B, kg_x)) {\n console.log('negative');\n g_b = leemon_1.add(B, p);\n }\n else\n g_b = B;\n g_b = leemon_1.mod(leemon_1.sub(g_b, kg_x), p);\n ux = leemon_1.mult(u, x);\n a_ux = leemon_1.add(a, ux);\n S = leemon_1.powMod(g_b, a_ux, p);\n return [4 /*yield*/, cryptoworker_1.default.sha256Hash(padArray(bin_utils_1.bytesFromHex(leemon_1.bigInt2str(S, 16)), 256))];\n case 4:\n K = _d.sent();\n return [4 /*yield*/, cryptoworker_1.default.sha256Hash(pForHash)];\n case 5:\n h1 = _d.sent();\n return [4 /*yield*/, cryptoworker_1.default.sha256Hash(gForHash)];\n case 6:\n h2 = _d.sent();\n h1 = bin_utils_1.bytesXor(new Uint8Array(h1), new Uint8Array(h2));\n _b = bin_utils_1.bufferConcats;\n _c = [h1];\n return [4 /*yield*/, cryptoworker_1.default.sha256Hash(algo.salt1)];\n case 7:\n _c = _c.concat([_d.sent()]);\n return [4 /*yield*/, cryptoworker_1.default.sha256Hash(algo.salt2)];\n case 8:\n buff = _b.apply(void 0, _c.concat([_d.sent(),\n a_for_hash,\n b_for_hash,\n K]));\n return [4 /*yield*/, cryptoworker_1.default.sha256Hash(buff)];\n case 9:\n M1 = _d.sent();\n out = {\n _: 'inputCheckPasswordSRP',\n srp_id: state.srp_id,\n A: new Uint8Array(a_for_hash),\n M1: new Uint8Array(M1)\n };\n console.log('out', bin_utils_1.bytesToHex(out.A), bin_utils_1.bytesToHex(out.M1));\n return [2 /*return*/, out];\n }\n });\n });\n };\n return PasswordManager;\n }());\n MTProto.PasswordManager = PasswordManager;\n MTProto.passwordManager = new PasswordManager();\n MTProto.secureRandom = new jsbn_1.SecureRandom();\n //export const mtproto = new MTProto();\n MTProto.dcConfigurator = new DcConfigurator();\n MTProto.rsaKeysManager = new RSAKeysManager();\n MTProto.timeManager = new TimeManager();\n MTProto.authorizer = new Authorizer();\n MTProto.networkerFactory = new NetworkerFactory();\n MTProto.apiManager = new ApiManager();\n MTProto.apiFileManager = new ApiFileManager();\n MTProto.serverTimeManager = new ServerTimeManager();\n})(MTProto = exports.MTProto || (exports.MTProto = {}));\nwindow.MTProto = MTProto;\n" + }, + { + "id": 3, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/runtime/api.js", + "name": "./node_modules/css-loader/dist/runtime/api.js", + "index": 3, + "index2": 0, + "size": 2677, + "cacheable": true, + "built": true, + "optional": false, + "prefetched": false, + "chunks": [ + 0 + ], + "issuer": "/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "issuerId": 22, + "issuerName": "./node_modules/css-loader/dist/cjs.js!./node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "issuerPath": [ + { + "id": 18, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/index.ts", + "name": "./src/index.ts", + "profile": { + "factory": 17, + "building": 2295 + } + }, + { + "id": 21, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/style-loader/dist/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "name": "./node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "profile": { + "factory": 1354, + "building": 0, + "dependencies": 287 + } + }, + { + "id": 22, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "name": "./node_modules/css-loader/dist/cjs.js!./node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "profile": { + "factory": 185, + "building": 23 + } + } + ], + "profile": { + "factory": 726, + "building": 109 + }, + "failed": false, + "errors": 0, + "warnings": 0, + "assets": [], + "reasons": [ + { + "moduleId": 20, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/resolve-url-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/sass-loader/dist/cjs.js??ref--4-3!/Users/kuzmenko/Documents/projects/tweb/src/materialize.scss", + "module": "./node_modules/css-loader/dist/cjs.js!./node_modules/resolve-url-loader!./node_modules/sass-loader/dist/cjs.js??ref--4-3!./src/materialize.scss", + "moduleName": "./node_modules/css-loader/dist/cjs.js!./node_modules/resolve-url-loader!./node_modules/sass-loader/dist/cjs.js??ref--4-3!./src/materialize.scss", + "type": "cjs require", + "userRequest": "../node_modules/css-loader/dist/runtime/api.js", + "loc": "1:27-84" + }, + { + "moduleId": 22, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "module": "./node_modules/css-loader/dist/cjs.js!./node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "moduleName": "./node_modules/css-loader/dist/cjs.js!./node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "type": "cjs require", + "userRequest": "../../css-loader/dist/runtime/api.js", + "loc": "1:27-74" + }, + { + "moduleId": 24, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/resolve-url-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/sass-loader/dist/cjs.js??ref--4-3!/Users/kuzmenko/Documents/projects/tweb/src/scss/style.scss", + "module": "./node_modules/css-loader/dist/cjs.js!./node_modules/resolve-url-loader!./node_modules/sass-loader/dist/cjs.js??ref--4-3!./src/scss/style.scss", + "moduleName": "./node_modules/css-loader/dist/cjs.js!./node_modules/resolve-url-loader!./node_modules/sass-loader/dist/cjs.js??ref--4-3!./src/scss/style.scss", + "type": "cjs require", + "userRequest": "../../node_modules/css-loader/dist/runtime/api.js", + "loc": "1:27-87" + }, + { + "moduleId": 28, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/resolve-url-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/sass-loader/dist/cjs.js??ref--4-3!/Users/kuzmenko/Documents/projects/tweb/src/scss/tgico.scss", + "module": "./node_modules/css-loader/dist/cjs.js!./node_modules/resolve-url-loader!./node_modules/sass-loader/dist/cjs.js??ref--4-3!./src/scss/tgico.scss", + "moduleName": "./node_modules/css-loader/dist/cjs.js!./node_modules/resolve-url-loader!./node_modules/sass-loader/dist/cjs.js??ref--4-3!./src/scss/tgico.scss", + "type": "cjs require", + "userRequest": "../../node_modules/css-loader/dist/runtime/api.js", + "loc": "1:27-87" + } + ], + "usedExports": true, + "providedExports": null, + "optimizationBailout": [ + "ModuleConcatenation bailout: Module is not an ECMAScript module" + ], + "depth": 3, + "source": "\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \"{\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = modules[_i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = \"(\".concat(item[2], \") and (\").concat(mediaQuery, \")\");\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot).concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}" + }, + { + "id": 4, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js", + "name": "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js", + "index": 4, + "index2": 2, + "size": 6909, + "cacheable": true, + "built": true, + "optional": false, + "prefetched": false, + "chunks": [ + 0 + ], + "issuer": "/Users/kuzmenko/Documents/projects/tweb/node_modules/style-loader/dist/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/resolve-url-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/sass-loader/dist/cjs.js??ref--4-3!/Users/kuzmenko/Documents/projects/tweb/src/materialize.scss", + "issuerId": 19, + "issuerName": "./src/materialize.scss", + "issuerPath": [ + { + "id": 18, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/ts-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/src/index.ts", + "name": "./src/index.ts", + "profile": { + "factory": 17, + "building": 2295 + } + }, + { + "id": 19, + "identifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/style-loader/dist/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/resolve-url-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/sass-loader/dist/cjs.js??ref--4-3!/Users/kuzmenko/Documents/projects/tweb/src/materialize.scss", + "name": "./src/materialize.scss", + "profile": { + "factory": 1354, + "building": 0, + "dependencies": 287 + } + } + ], + "profile": { + "factory": 187, + "building": 2741, + "dependencies": 0 + }, + "failed": false, + "errors": 0, + "warnings": 0, + "assets": [], + "reasons": [ + { + "moduleId": 19, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/style-loader/dist/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/resolve-url-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/sass-loader/dist/cjs.js??ref--4-3!/Users/kuzmenko/Documents/projects/tweb/src/materialize.scss", + "module": "./src/materialize.scss", + "moduleName": "./src/materialize.scss", + "type": "cjs require", + "userRequest": "!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js", + "loc": "12:13-94" + }, + { + "moduleId": 21, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/style-loader/dist/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "module": "./node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "moduleName": "./node_modules/overlayscrollbars/css/OverlayScrollbars.min.css", + "type": "cjs require", + "userRequest": "!../../style-loader/dist/runtime/injectStylesIntoStyleTag.js", + "loc": "12:13-84" + }, + { + "moduleId": 23, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/style-loader/dist/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/resolve-url-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/sass-loader/dist/cjs.js??ref--4-3!/Users/kuzmenko/Documents/projects/tweb/src/scss/style.scss", + "module": "./src/scss/style.scss", + "moduleName": "./src/scss/style.scss", + "type": "cjs require", + "userRequest": "!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js", + "loc": "12:13-97" + }, + { + "moduleId": 27, + "moduleIdentifier": "/Users/kuzmenko/Documents/projects/tweb/node_modules/style-loader/dist/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/css-loader/dist/cjs.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/resolve-url-loader/index.js!/Users/kuzmenko/Documents/projects/tweb/node_modules/sass-loader/dist/cjs.js??ref--4-3!/Users/kuzmenko/Documents/projects/tweb/src/scss/tgico.scss", + "module": "./src/scss/tgico.scss", + "moduleName": "./src/scss/tgico.scss", + "type": "cjs require", + "userRequest": "!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js", + "loc": "12:13-97" + } + ], + "usedExports": true, + "providedExports": null, + "optimizationBailout": [ + "ModuleConcatenation bailout: Module is not an ECMAScript module" + ], + "depth": 2, + "source": "\"use strict\";\n\nvar stylesInDom = {};\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nfunction listToStyles(list, options) {\n var styles = [];\n var newStyles = {};\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var css = item[1];\n var media = item[2];\n var sourceMap = item[3];\n var part = {\n css: css,\n media: media,\n sourceMap: sourceMap\n };\n\n if (!newStyles[id]) {\n styles.push(newStyles[id] = {\n id: id,\n parts: [part]\n });\n } else {\n newStyles[id].parts.push(part);\n }\n }\n\n return styles;\n}\n\nfunction addStylesToDom(styles, options) {\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i];\n var domStyle = stylesInDom[item.id];\n var j = 0;\n\n if (domStyle) {\n domStyle.refs++;\n\n for (; j < domStyle.parts.length; j++) {\n domStyle.parts[j](item.parts[j]);\n }\n\n for (; j < item.parts.length; j++) {\n domStyle.parts.push(addStyle(item.parts[j], options));\n }\n } else {\n var parts = [];\n\n for (; j < item.parts.length; j++) {\n parts.push(addStyle(item.parts[j], options));\n }\n\n stylesInDom[item.id] = {\n id: item.id,\n refs: 1,\n parts: parts\n };\n }\n }\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n\n if (typeof options.attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n options.attributes.nonce = nonce;\n }\n }\n\n Object.keys(options.attributes).forEach(function (key) {\n style.setAttribute(key, options.attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n }\n\n if (sourceMap && btoa) {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {};\n options.attributes = typeof options.attributes === 'object' ? options.attributes : {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of