second tour

This commit is contained in:
Eduard Kuzmenko 2020-02-06 22:43:07 +07:00
parent 7d076f84c1
commit c4f58a72de
200 changed files with 119155 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
node_modules
coverage
__pycache__
dist

7
babel.config.js Normal file
View File

@ -0,0 +1,7 @@
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
]/* ,
plugins: ["@babel/plugin-syntax-dynamic-import"] */
};

10
fff.code-workspace Normal file
View File

@ -0,0 +1,10 @@
{
"folders": [
{
"path": "."
}
],
"settings": {
"typescript.tsdk": "node_modules/typescript/lib"
}
}

195
jest.config.js Normal file
View File

@ -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: [
'<rootDir>/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,
};

14286
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

61
package.json Normal file
View File

@ -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"
}
}

BIN
public/.DS_Store vendored Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

BIN
public/assets/.DS_Store vendored Normal file

Binary file not shown.

BIN
public/assets/fonts/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,108 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="check_svg" d="M429.452 283.67l352.606 402.978c12.74 14.56 34.872 16.036 49.432 3.295 13.104-11.466 15.61-30.54 6.692-44.854l-3.397-4.578-377.263-431.158c-12.010-13.726-32.215-15.731-46.582-5.549l-4.553 3.846-161.684 161.684c-13.681 13.681-13.681 35.861 0 49.542 12.313 12.313 31.51 13.544 45.2 3.694l4.342-3.694 135.207-135.207z" />
<glyph unicode="&#xe901;" glyph-name="settings_svg" d="M574.049 917.333c44.763 0 85.055-34.149 92.639-78.255l11.132-64.743c21.986-9.976 42.789-22.111 62.102-36.238l59.204 21.999c42.327 15.728 92.075-2.624 114.342-41.844l40.694-71.677c22.083-38.896 12.844-91.038-21.177-119.995l-48.916-41.635c1.365-12.471 2.066-24.728 2.066-36.945s-0.702-24.471-2.066-36.941l48.909-41.615c34.127-29.037 43.25-81.12 21.184-119.994l-40.694-71.691c-22.281-39.253-72.139-57.537-114.343-41.855l-59.204 21.999c-19.312-14.126-40.116-26.262-62.102-36.238l-11.132-64.743c-7.563-43.987-47.98-78.255-92.639-78.255h-81.402c-44.76 0-85.054 34.144-92.647 78.246l-11.148 64.757c-21.974 9.976-42.775 22.111-62.095 36.236l-59.193-22c-42.324-15.731-92.071 2.628-114.341 41.849l-40.708 71.691c-22.089 38.901-12.854 91.046 21.174 120l48.921 41.624c-1.371 12.507-2.077 24.743-2.077 36.931 0 12.19 0.706 24.427 2.077 36.936l-48.927 41.644c-34.124 29.045-43.242 81.131-21.166 120l40.708 71.677c22.288 39.243 72.143 57.521 114.339 41.838l59.193-22c15.456 11.3 31.86 21.326 49.054 29.992l13.041 6.243 11.148 64.757c7.572 43.983 47.991 78.246 92.647 78.246h81.402zM574.049 832h-81.402c-3.005 0-8.008-4.241-8.55-7.39l-15.141-87.948c-2.578-14.975-12.926-27.449-27.167-32.749-29.427-10.951-56.391-26.714-79.781-46.637-11.769-10.024-28.039-12.898-42.53-7.512l-81.642 30.343c-2.886 1.073-8.755-1.079-10.409-3.992l-40.708-71.677c-1.871-3.295-0.626-10.408 2.274-12.877l66.78-56.84c11.46-9.754 16.934-24.825 14.405-39.66-2.856-16.758-4.312-32.167-4.312-47.062s1.456-30.303 4.312-47.062c2.529-14.838-2.947-29.911-14.411-39.665l-66.78-56.82c-2.848-2.423-4.121-9.609-2.267-12.873l40.708-71.691c1.676-2.952 7.468-5.089 10.408-3.997l81.642 30.343c14.491 5.386 30.761 2.512 42.53-7.512 23.39-19.923 50.354-35.685 79.781-46.637 14.241-5.3 24.589-17.774 27.167-32.749l15.141-87.948c0.561-3.261 5.434-7.39 8.55-7.39h81.402c3.002 0 7.999 4.237 8.539 7.381l15.121 87.948c2.576 14.983 12.93 27.463 27.18 32.762 29.447 10.949 56.4 26.706 79.753 46.618 11.769 10.035 28.047 12.915 42.544 7.528l81.661-30.343c2.889-1.074 8.757 1.078 10.41 3.99l40.694 71.691c1.872 3.299 0.626 10.413-2.271 12.879l-66.78 56.82c-11.482 9.77-16.956 24.874-14.399 39.732 2.848 16.55 4.301 31.992 4.301 46.995s-1.453 30.445-4.301 46.995c-2.556 14.855 2.915 29.957 14.394 39.727l66.78 56.84c2.855 2.43 4.13 9.622 2.279 12.882l-40.694 71.677c-1.672 2.944-7.464 5.081-10.411 3.986l-81.661-30.343c-14.498-5.387-30.775-2.507-42.544 7.528-23.353 19.912-50.306 35.669-79.753 46.618-14.25 5.298-24.603 17.779-27.18 32.762l-15.121 87.948c-0.56 3.256-5.426 7.381-8.539 7.381zM533.333 533.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333z" />
<glyph unicode="&#xe902;" glyph-name="smallscreen_svg" d="M640 362.667h170.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-128v-128c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v170.667c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM384 362.667c23.564 0 42.667-19.103 42.667-42.667v-170.667c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667v128h-128c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667h170.667zM640 789.333c23.564 0 42.667-19.103 42.667-42.667v-128h128c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667h-170.667c-23.564 0-42.667 19.103-42.667 42.667v170.667c0 23.564 19.103 42.667 42.667 42.667zM384 789.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-170.667c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-170.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h128v128c0 23.564 19.103 42.667 42.667 42.667z" />
<glyph unicode="&#xe903;" glyph-name="smile_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM284.419 377.593c19.94 10.175 44.353 2.258 54.528-17.682 32.942-64.559 99.285-106.044 173.053-106.044 73.655 0 139.914 41.358 172.91 105.764 10.207 19.924 34.633 27.8 54.556 17.593s27.8-34.633 17.593-54.556c-46.735-91.224-140.688-149.868-245.060-149.868-104.532 0-198.604 58.824-245.263 150.265-10.175 19.94-2.258 44.353 17.682 54.528zM373.333 618.667c29.455 0 53.333-28.654 53.333-64s-23.878-64-53.333-64c-29.455 0-53.333 28.654-53.333 64s23.878 64 53.333 64zM650.667 618.667c29.455 0 53.333-28.654 53.333-64s-23.878-64-53.333-64c-29.455 0-53.333 28.654-53.333 64s23.878 64 53.333 64z" />
<glyph unicode="&#xe904;" glyph-name="sport_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM633.382 812.421l-99.43-59.674c-11.823-7.094-26.224-7.98-38.692-2.66l-5.212 2.66-99.43 59.674c-73.272-24.394-136.73-70.269-182.904-130.155 1.307-2.149 2.38-4.446 3.232-6.866l1.114-3.719 21.333-85.333c3.181-12.722 0.316-26.088-7.549-36.331l-3.674-4.187-85.333-85.333c-2.67-2.67-5.606-4.913-8.723-6.727l-0.113-5.77c0-98.342 36.968-188.050 97.765-255.985l94.228-0.015c14.987 0 28.876-7.863 36.586-20.715l56.656-94.465c31.514-8.363 64.619-12.82 98.764-12.82s67.25 4.457 98.764 12.82l56.649 94.465c6.747 11.245 18.224 18.671 31.028 20.352l5.559 0.363 94.235 0.015c60.797 67.935 97.765 157.643 97.765 255.985l-0.071 5.746c-3.132 1.819-6.083 4.069-8.765 6.751l-85.333 85.333c-10.598 10.598-14.858 25.978-11.223 40.518l21.333 85.333c0.951 3.804 2.386 7.361 4.221 10.62-43.172 56.11-101.644 99.936-169.159 125.296l-13.622 4.824zM537.6 652.8l170.667-128c15.914-11.935 21.468-33.284 13.389-51.462l-85.333-192c-6.848-15.408-22.128-25.338-38.989-25.338h-170.667c-16.861 0-32.141 9.93-38.989 25.338l-85.333 192c-8.079 18.178-2.525 39.527 13.389 51.462l170.667 128c15.17 11.378 36.030 11.378 51.2 0zM512 565.333l-117.871-88.403 60.265-135.597h115.211l60.265 135.597-117.871 88.403z" />
<glyph unicode="&#xe905;" glyph-name="stop_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM341.333 490.667h341.333c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-341.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287z" />
<glyph unicode="&#xe906;" glyph-name="unarchive_svg" d="M320 917.333h384c50.361 0 97.967-22.229 130.279-60.418l6.255-7.849 64-85.333c19.941-26.588 31.636-58.35 33.776-91.357l0.358-11.043v-469.333c0-94.257-76.41-170.667-170.667-170.667h-512c-94.257 0-170.667 76.41-170.667 170.667v469.333c0 33.234 9.701 65.662 27.794 93.351l6.34 9.049 64 85.333c30.217 40.289 76.563 65.036 126.502 67.972l10.032 0.295zM768 661.333h-512c-47.128 0-85.333-38.205-85.333-85.333v-384c0-47.128 38.205-85.333 85.333-85.333h512c47.128 0 85.333 38.205 85.333 85.333v384c0 47.128-38.205 85.333-85.333 85.333zM542.17 499.503l128-128c16.662-16.662 16.662-43.677 0-60.34s-43.677-16.662-60.34 0l-97.83 97.83-97.83-97.83c-16.662-16.662-43.677-16.662-60.34 0s-16.662 43.677 0 60.34l128 128c16.662 16.662 43.677 16.662 60.34 0zM704 832h-384c-24.418 0-47.54-10.451-63.65-28.495l-4.617-5.638-43.503-57.975c15.158 4.411 31.188 6.775 47.769 6.775h512c16.566 0 32.581-2.36 47.727-6.763l-43.46 57.963c-14.651 19.534-36.885 31.761-60.986 33.823l-7.281 0.311z" />
<glyph unicode="&#xe907;" glyph-name="unlock_svg" d="M758.746 917.136l9.254 0.197c114.72 0 208.291-90.552 213.136-204.079l0.197-9.254v-128c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v128c0 70.692-57.308 128-128 128-68.168 0-123.89-53.287-127.783-120.479l-0.217-7.521v-85.333c70.692 0 128-57.308 128-128v-341.333c0-70.692-57.308-128-128-128h-426.667c-70.692 0-128 57.308-128 128v341.333c0 70.692 57.308 128 128 128h341.333v85.333c0 114.72 90.552 208.291 204.079 213.136zM640 533.333h-426.667c-23.564 0-42.667-19.103-42.667-42.667v-341.333c0-23.564 19.103-42.667 42.667-42.667h426.667c23.564 0 42.667 19.103 42.667 42.667v341.333c0 23.564-19.103 42.667-42.667 42.667zM426.667 384c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z" />
<glyph unicode="&#xe908;" glyph-name="unmute_svg" d="M469.333 106.667h85.333c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM512 874.667c164.949 0 298.667-133.718 298.667-298.667v-243.082l78.167-117.251c18.903-28.354-1.423-66.334-35.501-66.334h-682.667c-34.078 0-54.404 37.98-35.501 66.334l78.167 117.251v243.082c0 164.949 133.718 298.667 298.667 298.667zM512 789.333c-117.821 0-213.333-95.513-213.333-213.333v-243.082c0-16.847-4.987-33.317-14.332-47.334l-33.945-50.917h523.22l-33.945 50.917c-9.345 14.017-14.332 30.487-14.332 47.334v243.082c0 117.821-95.513 213.333-213.333 213.333z" />
<glyph unicode="&#xe909;" glyph-name="unpin_svg" d="M137.341 858.651l3.609 3.966c15.608 15.149 39.825 15.971 56.367 2.708l3.966-3.609 704-725.333c16.412-16.909 16.009-43.921-0.9-60.333-15.608-15.149-39.825-15.971-56.367-2.708l-3.966 3.609-153.789 158.39-2.618-0.387-4.976-0.287h-128v-213.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v213.333h-229.827c-35.346 0-64 28.654-64 64 0 13.435 4.226 26.47 11.991 37.298l4.174 5.222 126.831 142.685-13.521 148.492-164.931 169.921c-15.149 15.608-15.971 39.825-2.708 56.367v0zM399.531 534.955l3.955-43.359c1.897-20.871-3.956-41.613-16.281-58.341l-4.923-6.077-95.263-107.135 321.109-0.043-208.597 214.955zM774.331 874.667c35.346 0 64-28.654 64-64 0-16.607-6.451-32.478-17.847-44.339l-4.502-4.254-92.392-79.193-13.987-153.859c-2.133-23.467-22.887-40.762-46.354-38.629-21.791 1.981-38.26 20.017-38.793 41.373l0.165 4.981 13.987 153.859c1.788 19.671 10.335 38.033 24.061 52.027l5.387 5.037 48.606 41.662h-332.661c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h390.331z" />
<glyph unicode="&#xe90a;" glyph-name="unread_svg" d="M256 874.667h512c91.4 0 166.019-71.849 170.458-162.149l0.209-8.518v-170.667c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v170.667c0 44.986-34.811 81.842-78.965 85.099l-6.369 0.234h-512c-44.986 0-81.842-34.811-85.099-78.965l-0.234-6.369v-579.66l94.081 94.081c8.916 8.916 20.555 14.483 32.962 15.892l6.259 0.354h250.698c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-238.327l-150.886-150.886c-18.329-18.329-48.045-18.329-66.374 0-7.544 7.544-12.255 17.393-13.447 27.891l-0.3 5.296v672.366c0 91.4 71.849 166.019 162.149 170.458l8.518 0.209zM810.667 448c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM810.667 362.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe90b;" glyph-name="up_svg" d="M512 558.327l268.497-268.497c16.662-16.662 43.677-16.662 60.34 0s16.662 43.677 0 60.34l-298.667 298.667c-16.662 16.662-43.677 16.662-60.34 0l-298.667-298.667c-16.662-16.662-16.662-43.677 0-60.34s43.677-16.662 60.34 0l268.497 268.497z" />
<glyph unicode="&#xe90c;" glyph-name="username_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333 0-138.814-70.078-230.734-168.892-234.847-63.863-2.658-119.454 33.041-149.259 91.225-37.901-40.012-91.626-64.97-151.181-64.97-115.203 0-208.593 93.39-208.593 208.593s93.39 208.593 208.593 208.593c48.261 0 92.693-16.389 128.036-43.906l-0.036 5.98c0 23.564 19.103 42.667 42.667 42.667 21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-213.333c0-67.759 38.647-108.79 83.559-106.921 48.336 2.012 87.108 52.867 87.108 149.587 0 212.077-171.923 384-384 384s-384-171.923-384-384c0-212.077 171.923-384 384-384 34.105 0 67.582 4.436 99.854 13.1 22.758 6.11 46.161-7.386 52.271-30.144s-7.386-46.161-30.144-52.271c-39.472-10.598-80.388-16.019-121.981-16.019-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 571.259c-68.074 0-123.259-55.185-123.259-123.259s55.185-123.259 123.259-123.259c68.074 0 123.259 55.185 123.259 123.259s-55.185 123.259-123.259 123.259z" />
<glyph unicode="&#xe90d;" glyph-name="user_svg" d="M512 448c166.709 0 286.52-44.22 355.634-135.63 18.407-24.344 28.366-54.030 28.366-84.549v-48.011c0-63.96-51.85-115.81-115.81-115.81h-536.381c-63.96 0-115.81 51.85-115.81 115.81v48.009c0 30.519 9.958 60.205 28.364 84.548 69.114 91.412 188.926 135.633 355.636 135.633zM512 362.667c-142.434 0-237.024-34.911-287.568-101.763-7.202-9.525-11.099-21.141-11.099-33.084v-48.009c0-16.832 13.645-30.476 30.476-30.476h536.381c16.832 0 30.476 13.645 30.476 30.476v48.011c0 11.942-3.897 23.558-11.1 33.084-50.545 66.851-145.134 101.762-287.567 101.762zM512 874.667c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM512 789.333c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe90e;" glyph-name="play_svg" d="M264.359 840.649l548.011-365.341c15.082-10.055 19.157-30.432 9.103-45.514-2.404-3.605-5.497-6.699-9.103-9.103l-548.011-365.341c-15.082-10.055-35.459-5.979-45.514 9.103-3.594 5.391-5.512 11.726-5.512 18.206v730.682c0 18.126 14.694 32.821 32.821 32.821 6.48 0 12.814-1.918 18.206-5.512z" />
<glyph unicode="&#xe90f;" glyph-name="poll_svg" d="M810.667 874.667c68.168 0 123.89-53.287 127.783-120.479l0.217-7.521v-597.333c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217h-597.333c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v597.333c0 68.168 53.287 123.89 120.479 127.783l7.521 0.217h597.333zM810.667 789.333h-597.333c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976v-597.333c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h597.333c21.881 0 39.915 16.471 42.38 37.691l0.287 4.976v597.333c0 21.881-16.471 39.915-37.691 42.38l-4.976 0.287zM512 704c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-426.667c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v426.667c0 23.564 19.103 42.667 42.667 42.667zM682.667 448c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-170.667c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v170.667c0 23.564 19.103 42.667 42.667 42.667zM341.333 576c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-298.667c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v298.667c0 23.564 19.103 42.667 42.667 42.667z" />
<glyph unicode="&#xe910;" glyph-name="radiooff_svg" d="M512 874.667c-234.667 0-426.667-192-426.667-426.667s192-426.667 426.667-426.667c234.667 0 426.667 192 426.667 426.667s-192 426.667-426.667 426.667v0zM512 106.667c-187.733 0-341.333 153.6-341.333 341.333s153.6 341.333 341.333 341.333c187.733 0 341.333-153.6 341.333-341.333s-153.6-341.333-341.333-341.333v0z" />
<glyph unicode="&#xe911;" glyph-name="radioon_svg" d="M512 661.333c-119.467 0-213.333-93.867-213.333-213.333s93.867-213.333 213.333-213.333c119.467 0 213.333 93.867 213.333 213.333s-93.867 213.333-213.333 213.333v0zM512 874.667c-234.667 0-426.667-192-426.667-426.667s192-426.667 426.667-426.667c234.667 0 426.667 192 426.667 426.667s-192 426.667-426.667 426.667v0zM512 106.667c-187.733 0-341.333 153.6-341.333 341.333s153.6 341.333 341.333 341.333c187.733 0 341.333-153.6 341.333-341.333s-153.6-341.333-341.333-341.333v0z" />
<glyph unicode="&#xe912;" glyph-name="recent_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM512 746.667c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-237.126l173.767-157.97c17.436-15.851 18.721-42.835 2.87-60.271-14.632-16.095-38.75-18.428-56.088-6.224l-4.184 3.354-173.767 157.97c-15.813 14.376-25.584 34.088-27.56 55.177l-0.372 7.965v237.126c0 23.564 19.103 42.667 42.667 42.667z" />
<glyph unicode="&#xe913;" glyph-name="reply_svg" d="M551.482 755.401c0 36.917-29.927 66.844-66.844 66.844-16.818 0-33.017-6.339-45.368-17.754l-332.624-307.401c-27.112-25.056-28.779-67.347-2.558-95.67l2.558-2.511 332.624-307.401c27.112-25.056 69.403-23.389 94.459 3.723 11.414 12.351 17.754 28.551 17.754 45.368v118.601c152.889-7.862 256.331-59.141 314.429-152.148l6.036-10.039c14.433-25.042 46.434-33.641 71.476-19.208 15.982 9.212 25.934 26.157 26.195 44.602 4.452 315.096-133.606 490.424-404.481 511.228l-13.654 0.911v120.852zM466.149 713.138v-120.072c0-23.564 19.103-42.667 42.667-42.667 226.569 0 347.682-104.819 371.281-326.55-85.156 81.425-209.864 121.75-371.281 121.75-23.564 0-42.667-19.103-42.667-42.667v-120.076l-286.917 265.121 286.917 265.16z" />
<glyph unicode="&#xe914;" glyph-name="revote_svg" d="M328.837 691.503c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-128 128c-15.381 15.381-16.564 39.583-3.549 56.32l3.549 4.020 128 128c16.662 16.662 43.677 16.662 60.34 0 15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-55.13-55.163h494.293c68.168 0 123.89-53.287 127.783-120.479l0.217-7.521v-512c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217h-512c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v298.667c0 23.564 19.103 42.667 42.667 42.667 21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-298.667c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h512c21.881 0 39.915 16.471 42.38 37.691l0.287 4.976v512c0 21.881-16.471 39.915-37.691 42.38l-4.976 0.287h-494.293l55.13-55.163zM734.17 606.17c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-256-256c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-106.667 106.667c-16.662 16.662-16.662 43.677 0 60.34 15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 76.497-76.463 225.83 225.797c16.662 16.662 43.677 16.662 60.34 0z" />
<glyph unicode="&#xe915;" glyph-name="savedmessages_svg" d="M725.333 874.667c94.257 0 170.667-76.41 170.667-170.667v-608.186c0-47.128-38.205-85.335-85.333-85.335-20.37 0-40.068 7.288-55.534 20.545l-243.132 208.399-243.132-208.399c-35.782-30.671-89.653-26.527-120.324 9.256-13.257 15.466-20.543 35.164-20.543 55.534v608.186c0 94.257 76.41 170.667 170.667 170.667h426.667zM725.333 789.333h-426.667c-47.128 0-85.333-38.205-85.333-85.333v-608.186l243.132 208.399c31.956 27.391 79.112 27.391 111.068 0l243.132-208.399v608.186c0 47.128-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe916;" glyph-name="search_svg" d="M405.333 832c153.167 0 277.333-124.166 277.333-277.333 0-61.172-19.805-117.718-53.353-163.576l211.523-211.588c16.662-16.662 16.662-43.677 0-60.34-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-211.588 211.523c-45.858-33.548-102.404-53.353-163.576-53.353-153.167 0-277.333 124.166-277.333 277.333s124.166 277.333 277.333 277.333zM405.333 746.667c-106.039 0-192-85.961-192-192s85.961-192 192-192c106.039 0 192 85.961 192 192s-85.961 192-192 192z" />
<glyph unicode="&#xe917;" glyph-name="send_svg" d="M113.23 835.154l63.657-292.376c5.172-23.754 25.163-41.402 49.374-43.587l464.783-41.96c5.102-0.461 8.864-4.97 8.404-10.072-0.403-4.464-3.94-8.001-8.403-8.404l-464.785-41.977c-24.211-2.187-44.2-19.834-49.372-43.587l-63.656-292.355c-4.359-20.021 8.337-39.786 28.359-44.145 8.011-1.744 16.375-0.786 23.784 2.726l833.499 395.052c18.516 8.776 26.412 30.901 17.636 49.417-3.667 7.738-9.898 13.969-17.636 17.636l-833.5 395.052c-18.516 8.776-40.641 0.88-49.417-17.636-3.512-7.409-4.47-15.772-2.726-23.783z" />
<glyph unicode="&#xe918;" glyph-name="send2_svg" d="M274.688 447.988l-12.894 1.988c-37.889 5.841-68.281 34.389-76.478 71.839l-58.050 265.218c-3.614 16.51-1.625 33.753 5.651 49.007 18.084 37.914 63.479 53.988 101.393 35.904l744.874-355.295c15.727-7.502 28.402-20.176 35.904-35.903 18.085-37.913 2.010-83.309-35.903-101.393l-744.873-355.303c-15.254-7.276-32.498-9.265-49.008-5.651-41.034 8.982-67.018 49.528-58.036 90.562l58.049 265.201c8.197 37.447 38.584 65.993 76.469 71.837l12.902 1.99zM214.679 786.763l53.997-246.704c0.656-2.996 3.087-5.28 6.118-5.747l232.866-35.896c27.846-4.292 46.939-30.345 42.647-58.191-3.39-21.995-20.648-39.254-42.643-42.646l-232.87-35.918c-3.031-0.467-5.462-2.751-6.118-5.747l-53.998-246.686 710.217 338.771-710.217 338.764z" />
<glyph unicode="&#xe919;" glyph-name="sending_svg" d="M538.947 803.705c196.451 0 355.705-159.255 355.705-355.705s-159.255-355.705-355.705-355.705c-196.451 0-355.705 159.255-355.705 355.705s159.255 355.705 355.705 355.705zM538.947 739.032c-160.732 0-291.032-130.299-291.032-291.032s130.299-291.032 291.032-291.032c160.732 0 291.032 130.299 291.032 291.032s-130.299 291.032-291.032 291.032zM509.088 429.67l-1.138 1.991-2.551 6.222-1.073 4.755-0.308 2.675-0.103 191.319c0 19.347 15.684 35.032 35.032 35.032 17.589 0 32.15-12.962 34.652-29.855l0.38-5.177v-174.134l97.529-97.516c12.313-12.313 13.544-31.51 3.694-45.2l-3.694-4.342c-12.313-12.313-31.51-13.544-45.2-3.694l-4.342 3.694-109.513 109.641-1.769 2.215-1.596 2.374z" />
<glyph unicode="&#xe91a;" glyph-name="sendingerror_svg" d="M538.947 803.705c196.451 0 355.705-159.255 355.705-355.705s-159.255-355.705-355.705-355.705c-196.451 0-355.705 159.255-355.705 355.705s159.255 355.705 355.705 355.705zM538.947 326.737c-22.324 0-40.421-18.097-40.421-40.421s18.097-40.421 40.421-40.421c22.324 0 40.421 18.097 40.421 40.421s-18.097 40.421-40.421 40.421zM538.947 671.663c-19.347 0-35.032-15.684-35.032-35.032v-215.579c0-19.347 15.684-35.032 35.032-35.032s35.032 15.684 35.032 35.032v215.579c0 19.347-15.684 35.032-35.032 35.032z" />
<glyph unicode="&#xe91b;" glyph-name="mute_svg" d="M469.333 106.667h85.333c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM140.95 862.617c15.608 15.149 39.825 15.971 56.367 2.708l3.966-3.609 704-725.333c16.412-16.909 16.009-43.921-0.9-60.333-15.608-15.149-39.825-15.971-56.367-2.708l-3.966 3.609-70.594 72.729-5.456-0.346h-597.333c-32.455 0-52.437 34.449-37.937 62.223l2.436 4.111 78.167 117.251v243.082c0 43.147 9.186 85.028 26.607 123.383l-99.89 102.901c-16.412 16.909-16.009 43.921 0.9 60.333zM299.016 588.321l-0.349-12.321v-243.082c0-14.44-3.664-28.604-10.595-41.183l-3.736-6.152-33.945-50.917h440.61l-385.097 396.676c-3.734-13.951-6.054-28.346-6.888-43.022zM512 874.667c161.513 0 293.082-128.204 298.493-288.399l0.173-10.268v-128c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v128c0 117.821-95.513 213.333-213.333 213.333-26.015 0-51.327-4.639-75.1-13.582-22.055-8.297-46.66 2.857-54.957 24.912s2.857 46.66 24.912 54.957c33.342 12.543 68.828 19.046 105.145 19.046z" />
<glyph unicode="&#xe91c;" glyph-name="newchannel_svg" d="M789.333 888.385c58.91 0 106.667-47.756 106.667-106.667v-667.437c0-24.74-8.6-48.711-24.327-67.809-37.45-45.475-104.673-51.98-150.148-14.53l-209.525 172.581v-76.524c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521-0.008 110.936c-97.372 19.769-170.659 105.858-170.659 209.064 0 117.821 95.513 213.333 213.333 213.333h176.693l246.165 202.724c19.098 15.728 43.069 24.327 67.809 24.327zM341.333 234.689v-106.689c0-23.564 19.103-42.667 42.667-42.667 21.881 0 39.915 16.471 42.38 37.691l0.287 4.976v106.689h-85.333zM789.333 803.052c-4.948 0-9.742-1.72-13.562-4.865l-246.165-202.724c-15.278-12.582-34.455-19.462-54.247-19.462h-176.693c-70.692 0-128-57.308-128-128s57.308-128 128-128h176.693c19.792 0 38.969-6.88 54.247-19.462l246.165-202.724c9.095-7.49 22.54-6.189 30.030 2.906 3.146 3.82 4.865 8.614 4.865 13.562v667.437c0 11.782-9.551 21.333-21.333 21.333z" />
<glyph unicode="&#xe91d;" glyph-name="newchat_filled_svg" d="M128 215.040v-129.707c0-11.947 9.387-21.333 21.333-21.333h129.707c5.547 0 11.093 2.133 14.933 6.4l450.828 450.415c7.415 7.396 8.244 18.89 2.488 27.207l-2.481 2.956-129.83 129.83c-8.331 8.331-21.839 8.331-30.17 0l-450.408-450.408c-4.267-4.267-6.4-9.387-6.4-15.36zM883.627 659.627c16.64 16.64 16.64 43.52 0 60.16l-99.84 99.84c-16.64 16.64-43.52 16.64-60.16 0l-62.995-62.995c-8.331-8.331-8.331-21.839 0-30.17l129.83-129.83c8.331-8.331 21.839-8.331 30.17 0l62.995 62.995z" />
<glyph unicode="&#xe91e;" glyph-name="newgroup_svg" d="M341.333 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-34.452c0-58.91-47.756-106.667-106.667-106.667h-469.333c-58.91 0-106.667 47.756-106.667 106.667v34.452c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM765.931 361.234l4.984-0.049c91.863-6.21 162.691-32.125 210.977-79.407 24.687-24.173 39.497-56.524 41.794-90.78l0.314-9.385v-21.612c0-50.81-39.474-92.401-89.427-95.779l-6.573-0.221h-117.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h117.333c5.049 0 9.279 3.509 10.385 8.221l0.282 2.446v21.612c0 14.749-5.939 28.876-16.477 39.195-31.987 31.323-83.828 50.29-157.030 55.239-23.51 1.589-41.281 21.937-39.692 45.447 1.476 21.831 19.126 38.713 40.463 39.741v0zM341.333 320c-118.985 0-199.024-27.459-243.017-79.443-8.383-9.905-12.983-22.462-12.983-35.438v-34.452c0-11.782 9.551-21.333 21.333-21.333h469.333c11.782 0 21.333 9.551 21.333 21.333v34.452c0 12.976-4.6 25.533-12.983 35.438-43.993 51.983-124.033 79.443-243.017 79.443zM725.333 746.667c82.475 0 149.333-66.859 149.333-149.333s-66.859-149.333-149.333-149.333c-82.475 0-149.333 66.859-149.333 149.333s66.859 149.333 149.333 149.333zM341.333 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM725.333 661.333c-35.346 0-64-28.654-64-64s28.654-64 64-64c35.346 0 64 28.654 64 64s-28.654 64-64 64zM341.333 746.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe91f;" glyph-name="newprivate_svg" d="M512 448c166.709 0 286.52-44.22 355.634-135.63 18.407-24.344 28.366-54.030 28.366-84.549v-48.011c0-63.96-51.85-115.81-115.81-115.81h-536.381c-63.96 0-115.81 51.85-115.81 115.81v48.009c0 30.519 9.958 60.205 28.364 84.548 69.114 91.412 188.926 135.633 355.636 135.633zM512 362.667c-142.434 0-237.024-34.911-287.568-101.763-7.202-9.525-11.099-21.141-11.099-33.084v-48.009c0-16.832 13.645-30.476 30.476-30.476h536.381c16.832 0 30.476 13.645 30.476 30.476v48.011c0 11.942-3.897 23.558-11.1 33.084-50.545 66.851-145.134 101.762-287.567 101.762zM512 874.667c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM512 789.333c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe920;" glyph-name="next_svg" d="M840.837 478.17l-298.667 298.667c-16.662 16.662-43.677 16.662-60.34 0-15.381-15.381-16.564-39.583-3.549-56.32l3.549-4.020 225.839-225.83h-494.336c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h494.336l-225.839-225.83c-15.381-15.381-16.564-39.583-3.549-56.32l3.549-4.020c15.381-15.381 39.583-16.564 56.32-3.549l4.020 3.549 298.667 298.667c15.381 15.381 16.564 39.583 3.549 56.32l-3.549 4.020z" />
<glyph unicode="&#xe921;" glyph-name="nosound_svg" d="M549.232 703.909c5.026-8.376 7.68-17.961 7.68-27.729v-456.36c0-29.765-24.129-53.895-53.895-53.895-9.768 0-19.353 2.655-27.729 7.68l-144.24 86.544c-27.056 16.233-43.61 45.472-43.61 77.024v221.653c0 31.552 16.555 60.791 43.61 77.024l144.24 86.544c25.523 15.314 58.629 7.038 73.943-18.486zM179.649 609.684c29.765 0 53.895-24.129 53.895-53.895v-215.579c0-29.765-24.129-53.895-53.895-53.895s-53.895 24.129-53.895 53.895v215.579c0 29.765 24.129 53.895 53.895 53.895zM845.968 559.877c10.445 7.357 24.974 6.431 34.401-2.85s10.58-23.793 3.386-34.352l-3.089-3.756-70.826-71.891 70.826-71.906c10.441-10.605 10.308-27.667-0.297-38.108-9.427-9.281-23.955-10.207-34.401-2.85l-3.708 3.147-70.201 71.344-70.191-71.344-3.708-3.147c-10.445-7.357-24.974-6.431-34.401 2.85s-10.58 23.793-3.386 34.352l3.089 3.756 70.762 71.906-70.762 71.891c-10.441 10.605-10.308 27.667 0.297 38.108 9.427 9.281 23.955 10.207 34.401 2.85l3.708-3.147 70.191-71.275 70.201 71.275 3.708 3.147z" />
<glyph unicode="&#xe922;" glyph-name="pause_svg" d="M384 789.333c23.564 0 42.667-19.103 42.667-42.667v-597.333c0-23.564-19.103-42.667-42.667-42.667h-128c-23.564 0-42.667 19.103-42.667 42.667v597.333c0 23.564 19.103 42.667 42.667 42.667h128zM768 789.333c23.564 0 42.667-19.103 42.667-42.667v-597.333c0-23.564-19.103-42.667-42.667-42.667h-128c-23.564 0-42.667 19.103-42.667 42.667v597.333c0 23.564 19.103 42.667 42.667 42.667h128z" />
<glyph unicode="&#xe923;" glyph-name="permissions_svg" d="M256 832h597.333c68.168 0 123.89-53.287 127.783-120.479l0.217-7.521v-85.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-128v-384c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217h-512c-70.692 0-128 57.308-128 128v85.333c0 23.564 19.103 42.667 42.667 42.667h42.667v384c0 68.168 53.287 123.89 120.479 127.783l7.521 0.217zM554.667 234.667h-426.667v-42.667c0-23.564 19.103-42.667 42.667-42.667h391.292c-4.725 13.363-7.292 27.729-7.292 42.667v42.667zM732.617 746.667h-476.617c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976v-384h384c23.564 0 42.667-19.103 42.667-42.667v-85.333c0-22.371 17.3-40.915 37.865-42.461l5.367-0.202c21.639 0.281 39.393 16.671 41.819 37.726l0.283 4.937v512c0 11.968 1.643 23.553 4.715 34.541l2.569 8.126zM853.333 746.667l-4.976-0.287c-19.587-2.275-35.129-17.816-37.404-37.404l-0.287-4.976v-42.667h85.333v42.667c0 21.881-16.471 39.915-37.691 42.38l-4.976 0.287z" />
<glyph unicode="&#xe924;" glyph-name="phone_svg" d="M308.729 423.841l100.511 111.58c24.050 23.968 36.487 59.685 32.349 95.745l-11.022 95.78c-7.133 60.037-57.665 105.053-118.012 105.053h-65.744c-67.593 0-122.77-56.491-118.59-123.97 21.466-345.892 298.018-622.324 643.797-643.808 67.487-4.181 123.987 50.997 123.987 118.59v65.745c0.583 59.789-44.566 110.49-104.526 117.614l-96.72 11.043c-36.036 4.135-71.753-8.302-97.334-33.883l-109.576-98.598c-66.487 43.057-123.957 98.848-168.958 163.927l-10.162 15.182zM567.25 201.403l88.897 80.052c8.782 8.7 18.694 12.151 28.908 10.979l96.55-11.024c16.741-1.99 29.224-16.008 29.065-32.436l-0.004-66.163c0-19.122-15.756-34.511-33.364-33.42-74.488 4.628-145.314 22.772-210.053 52.012zM265.405 503.224c-29.244 64.741-47.39 135.577-52.014 210.086-1.090 17.602 14.297 33.356 33.42 33.356h65.744c17.059 0 31.236-12.629 33.256-29.632l11.002-95.611c1.171-10.201-2.281-20.113-9.444-27.277l-81.964-90.923z" />
<glyph unicode="&#xe925;" glyph-name="photo_svg" d="M810.667 874.667c70.692 0 128-57.308 128-128v-597.333c0-70.692-57.308-128-128-128h-597.333c-70.692 0-128 57.308-128 128v597.333c0 70.692 57.308 128 128 128h597.333zM382.252 342.812l-2.649 1.925c-8.919 5.489-20.293 3.626-27.047-3.903l-2.302-3.086-142.026-230.78 2.533-0.226 320.269-0.076-144.516 231.209c-1.162 1.86-2.601 3.523-4.261 4.937v0zM668.078 439.78c-8.979 5.391-20.331 3.404-27.003-4.199l-2.269-3.111-103.298-172.033 96.085-153.771h179.072c23.085 0 41.888 18.334 42.643 41.236l-178.122 284.894c-1.785 2.857-4.222 5.25-7.11 6.984zM810.667 789.333h-597.333c-23.564 0-42.667-19.103-42.667-42.667v-537.856l106.911 173.66c29.588 48.082 91.16 64.453 140.398 38.56l6.349-3.618c11.674-7.184 21.831-16.536 29.937-27.525l4.613-6.786 25.86-41.427 80.91 134.719c29.059 48.403 90.449 65.447 139.967 40.095l6.388-3.548c12.034-7.225 22.499-16.738 30.819-27.974l4.73-6.944 105.783-169.287v437.931c0 23.564-19.103 42.667-42.667 42.667z" />
<glyph unicode="&#xe926;" glyph-name="pin_svg" d="M774.331 874.667l6.164-0.293c32.454-3.101 57.836-30.44 57.836-63.707 0-18.683-8.164-36.434-22.349-48.592l-92.392-79.193-18.092-199.011 126.831-142.685c23.483-26.418 21.103-66.871-5.315-90.353-11.715-10.414-26.845-16.166-42.519-16.166h-229.852l0.025-213.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976-0.025 213.333h-229.803c-35.346 0-64 28.654-64 64 0 15.675 5.752 30.804 16.166 42.519l126.831 142.685-18.092 199.011-92.392 79.193c-26.837 23.003-29.945 63.406-6.942 90.243 12.159 14.185 29.909 22.349 48.592 22.349h524.661zM716.661 789.333h-409.322l48.606-41.662c16.872-14.462 27.437-34.934 29.449-57.064l18.092-199.011c2.135-23.48-5.54-46.797-21.204-64.418l-95.269-107.178h449.976l-95.269 107.178c-15.664 17.621-23.338 40.938-21.204 64.418l18.092 199.011c2.012 22.13 12.577 42.603 29.449 57.064l48.606 41.662z" />
<glyph unicode="&#xe927;" glyph-name="pinnedchat_svg" d="M661.661 728.275c5.477-3.286 10.53-7.231 15.046-11.748l103.827-103.827c30.506-30.506 30.506-79.967 0-110.474-4.516-4.516-9.569-8.462-15.046-11.748l-81.664-48.998c10.87-64.852-15.506-128.818-75.883-189.195-13.83-13.83-36.252-13.83-50.082 0l-95.779 95.751-138.372-138.412c-12.677-12.677-32.575-13.734-46.456-3.169l-3.627 3.169c-12.677 12.677-13.734 32.575-3.169 46.456l3.169 3.627 138.406 138.42-95.74 95.724c-13.83 13.83-13.83 36.252 0 50.082 57.358 57.358 117.955 84.030 179.474 77.234l9.721-1.352 48.998 81.664c22.197 36.994 70.181 48.99 107.175 26.794zM615.219 665.041l-62.448-104.080c-8.54-14.233-25.819-20.625-41.565-15.376-38.301 12.767-76.998 4.313-118.378-28.105l188.658-188.658 6.165 8.241c27.286 38.296 33.856 74.389 21.94 110.137-5.249 15.746 1.143 33.026 15.376 41.565l104.815 62.953 0.668 0.591c2.847 2.847 2.847 7.463 0 10.31l-103.827 103.827-1.404 1.096c-3.452 2.071-7.93 0.952-10.002-2.5z" />
<glyph unicode="&#xe928;" glyph-name="largepause_svg" d="M398.222 760.889c15.709 0 28.444-12.735 28.444-28.444v-568.889c0-15.709-12.735-28.444-28.444-28.444h-142.222c-15.709 0-28.444 12.735-28.444 28.444v568.889c0 15.709 12.735 28.444 28.444 28.444h142.222zM768 760.889c15.709 0 28.444-12.735 28.444-28.444v-568.889c0-15.709-12.735-28.444-28.444-28.444h-142.222c-15.709 0-28.444 12.735-28.444 28.444v568.889c0 15.709 12.735 28.444 28.444 28.444h142.222z" />
<glyph unicode="&#xe929;" glyph-name="largeplay_svg" d="M328.391 789.213l488.252-317.364c13.171-8.561 16.909-26.179 8.347-39.351-2.168-3.335-5.012-6.179-8.347-8.347l-488.252-317.364c-13.171-8.561-30.789-4.824-39.351 8.347-2.999 4.614-4.595 9.999-4.595 15.502v634.727c0 15.709 12.735 28.444 28.444 28.444 5.503 0 10.888-1.596 15.502-4.595z" />
<glyph unicode="&#xe92a;" glyph-name="livelocation_svg" d="M512 917.333c188.684 0 341.333-152.649 341.333-341.333 0-156.334-115.811-350.548-275.703-544.008-34.125-40.95-96.71-40.95-130.872 0.044-159.081 191.421-276.092 387.465-276.092 543.964 0 188.684 152.649 341.333 341.333 341.333zM512 832c-141.556 0-256-114.444-256-256 0-125.035 104.336-303.415 243.817-474.132l12.397-15.042 12.219 14.872c131.982 162.383 231.282 328.602 242.508 451.731l0.793 11.416 0.266 11.155c0 141.556-114.444 256-256 256zM90.13 786.304c21.952-8.566 32.803-33.306 24.236-55.258-19.105-48.958-29.033-101.281-29.033-155.046 0-53.871 9.967-106.294 29.146-155.335 8.583-21.946-2.25-46.694-24.196-55.276s-46.694 2.25-55.276 24.196c-23.037 58.906-35.007 121.866-35.007 186.415 0 64.421 11.923 127.261 34.871 186.068 8.566 21.952 33.306 32.803 55.258 24.236zM989.068 762.222c22.988-58.851 34.932-121.744 34.932-186.222s-11.944-127.372-34.932-186.223c-8.574-21.949-33.317-32.792-55.266-24.218s-32.792 33.317-24.218 55.266c19.138 48.995 29.083 101.363 29.083 155.175s-9.945 106.179-29.083 155.174c-8.574 21.949 2.269 46.693 24.218 55.266s46.693-2.269 55.266-24.218zM512 661.333c47.104 0 85.333-38.229 85.333-85.333s-38.229-85.333-85.333-85.333c-47.104 0-85.333 38.229-85.333 85.333s38.229 85.333 85.333 85.333z" />
<glyph unicode="&#xe92b;" glyph-name="location_svg" d="M512 917.333c188.684 0 341.333-152.649 341.333-341.333 0-156.334-115.811-350.548-275.703-544.008-34.125-40.95-96.71-40.95-130.872 0.044-159.081 191.421-276.092 387.465-276.092 543.964 0 188.684 152.649 341.333 341.333 341.333zM512 832c-141.556 0-256-114.444-256-256 0-125.035 104.336-303.415 243.943-474.32l12.271-14.853 12.22 14.873c140.231 172.532 243.567 349.394 243.567 474.301 0 141.556-114.444 256-256 256zM512 661.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333z" />
<glyph unicode="&#xe92c;" glyph-name="lock_svg" d="M512 917.333c114.72 0 208.291-90.552 213.136-204.079l0.197-9.254v-85.333c70.692 0 128-57.308 128-128v-341.333c0-70.692-57.308-128-128-128h-426.667c-70.692 0-128 57.308-128 128v341.333c0 70.692 57.308 128 128 128v85.333c0 117.821 95.513 213.333 213.333 213.333zM725.333 533.333h-426.667c-23.564 0-42.667-19.103-42.667-42.667v-341.333c0-23.564 19.103-42.667 42.667-42.667h426.667c23.564 0 42.667 19.103 42.667 42.667v341.333c0 23.564-19.103 42.667-42.667 42.667zM512 384c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM519.521 831.783l-7.521 0.217c-68.168 0-123.89-53.287-127.783-120.479l-0.217-7.521v-85.333h256v85.333c0 68.168-53.287 123.89-120.479 127.783v0z" />
<glyph unicode="&#xe92d;" glyph-name="logout_svg" d="M256 874.667h213.333c94.257 0 170.667-76.41 170.667-170.667 0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.521 11.344c-3.095 41.946-36.512 75.46-78.416 78.707l-6.684 0.258h-213.333c-44.986 0-81.842-34.811-85.099-78.965l-0.234-6.369v-512c0-44.986 34.811-81.842 78.965-85.099l6.369-0.234h213.333c44.986 0 81.842 34.811 85.099 78.965l0.521 11.344c2.465 21.22 20.499 37.691 42.38 37.691 23.564 0 42.667-19.103 42.667-42.667 0-91.4-71.849-166.019-162.149-170.458l-8.518-0.209h-213.333c-91.4 0-166.019 71.849-170.458 162.149l-0.209 8.518v512c0 91.4 71.849 166.019 162.149 170.458l8.518 0.209zM798.17 648.837l170.667-170.667c1.51-1.51 2.883-3.105 4.12-4.77l3.058-4.746 2.28-4.81 1.51-4.495 1.059-5.014 0.396-3.806v-5.058l-0.217-2.482-0.879-4.952-1.385-4.615-1.441-3.48-2.232-4.159-3.144-4.469-3.123-3.484-170.667-170.667c-16.662-16.662-43.677-16.662-60.34 0s-16.662 43.677 0 60.34l97.797 97.83h-280.96c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h280.96l-97.797 97.83c-16.662 16.662-16.662 43.677 0 60.34s43.677 16.662 60.34 0z" />
<glyph unicode="&#xe92e;" glyph-name="menu_svg" d="M170.667 277.333h682.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-682.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM170.667 490.667h682.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-682.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM170.667 704h682.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-682.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287z" />
<glyph unicode="&#xe92f;" glyph-name="message_svg" d="M316.34 149.333l-150.886-150.886c-18.329-18.329-48.045-18.329-66.374 0-8.802 8.802-13.746 20.739-13.746 33.187v672.366c0 94.257 76.41 170.667 170.667 170.667h512c94.257 0 170.667-76.41 170.667-170.667v-384c0-94.257-76.41-170.667-170.667-170.667h-451.66zM170.667 124.34l94.081 94.081c10.402 10.402 24.51 16.246 39.221 16.246h464.031c47.128 0 85.333 38.205 85.333 85.333v384c0 47.128-38.205 85.333-85.333 85.333h-512c-47.128 0-85.333-38.205-85.333-85.333v-579.66z" />
<glyph unicode="&#xe930;" glyph-name="microphone_svg" d="M810.667 533.333c23.564 0 42.667-19.103 42.667-42.667 0-174.050-130.27-317.673-298.626-338.687l-0.041-130.646c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976 0.002 130.641c-168.377 20.995-298.669 164.628-298.669 338.693 0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667c0-141.385 114.615-256 256-256s256 114.615 256 256c0 23.564 19.103 42.667 42.667 42.667zM512 874.667c94.257 0 170.667-76.41 170.667-170.667v-213.333c0-94.257-76.41-170.667-170.667-170.667s-170.667 76.41-170.667 170.667v213.333c0 94.257 76.41 170.667 170.667 170.667z" />
<glyph unicode="&#xe931;" glyph-name="microphone2_svg" d="M810.667 533.333c23.564 0 42.667-19.103 42.667-42.667 0-174.050-130.27-317.673-298.626-338.687l-0.041-130.646c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976 0.002 130.641c-168.377 20.995-298.669 164.628-298.669 338.693 0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667c0-141.385 114.615-256 256-256s256 114.615 256 256c0 23.564 19.103 42.667 42.667 42.667zM512 874.667c94.257 0 170.667-76.41 170.667-170.667v-213.333c0-94.257-76.41-170.667-170.667-170.667s-170.667 76.41-170.667 170.667v213.333c0 94.257 76.41 170.667 170.667 170.667zM512 789.333c-47.128 0-85.333-38.205-85.333-85.333v-213.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333v213.333c0 47.128-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe932;" glyph-name="minus_svg" d="M810.667 490.667c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-597.333c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h597.333z" />
<glyph unicode="&#xe933;" glyph-name="more_svg" d="M512 277.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333zM512 533.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333zM512 789.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333z" />
<glyph unicode="&#xe934;" glyph-name="download_svg" d="M213.333 149.333h597.333c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-597.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM507.024 831.713l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-408.96l140.497 140.463c15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-213.333-213.333c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-213.333 213.333c-16.662 16.662-16.662 43.677 0 60.34 15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 140.497-140.463v408.96c0 21.881 16.471 39.915 37.691 42.38v0z" />
<glyph unicode="&#xe935;" glyph-name="eats_svg" d="M348.832 898.806c13.342 19.423 39.904 24.352 59.327 11.010 33.446-22.975 65.138-54.661 95.307-94.881 9.357-12.475 17.47-24.268 24.308-35.483 7.542 12.426 17.444 25.949 29.639 40.582 40.837 49.004 97.726 77.455 170.669 85.352-8.832-48.625-25.923-89.734-51.272-123.327l6.436 0.856c60.564 6.345 112.536-4.854 154.549-38.978l16.384-14.111c220.707-196.277 126.127-654.254-158.018-748.969l-4.259-1.178c-43.991-9.751-73.079-7.852-109.154 3.681l-25.15 8.694c-17.645 5.903-28.787 7.947-45.597 7.947-16.795 0-27.935-2.046-45.572-7.953l-25.186-8.717c-36.082-11.546-65.192-13.438-109.182-3.643l-4.219 1.17c-289.524 96.508-379.735 565.602-138.175 758.645 77.415 51.61 141.326 55.739 229.838 31.19l13.32-3.816c-24.135 31.66-48.532 55.808-72.982 72.604-19.423 13.342-24.352 39.904-11.010 59.327zM239.987 670.683c-184.684-147.747-111.593-531.199 112.777-608.175 26.131-5.621 40.407-4.914 61.688 1.837l8.345 2.814 18.109 6.328c25.088 8.293 44.156 11.847 71.093 11.847 26.94 0 46.002-3.548 71.090-11.831l26.426-9.121c18.636-5.906 31.906-7.191 52.451-3.67l9.287 1.804 9.742 3.575c212.168 82.926 284.334 447.443 116.911 599.538l-13.711 11.806c-23.708 18.694-53.002 24.706-92.061 20.614-19.268-2.019-38.538-6-66.596-13.353l-51.84-13.807-14.982-3.716c-17.745-4.186-27.429-5.456-39.45-5.757l-11.772-0.049c-17.461 0.26-28.883 2.268-56.363 10.474l-44.697 13.83c-72.092 21.465-113.983 19.808-166.449-14.986z" />
<glyph unicode="&#xe936;" glyph-name="edit_svg" d="M328.837 76.497c-8.002-8.002-18.854-12.497-30.17-12.497h-128c-23.564 0-42.667 19.103-42.667 42.667v128c0 11.316 4.495 22.168 12.497 30.17l567.163 567.163c31.571 31.571 81.725 33.232 115.252 4.985l5.428-4.985 67.66-67.66c31.571-31.571 33.232-81.725 4.985-115.252l-4.985-5.428-567.163-567.163zM213.333 216.994v-67.66h67.66l426.667 426.667-67.66 67.66-426.667-426.667zM768 771.66l-67.669-67.627 67.669-67.669 67.66 67.636-67.66 67.66z" />
<glyph unicode="&#xe937;" glyph-name="eye1_svg" d="M512.159 725.333c249.485 0 426.508-211.597 426.508-277.333s-176.070-277.333-426.508-277.333c-248.531 0-426.826 211.597-426.826 277.333s179.565 277.333 426.826 277.333zM512 618.667c-94.257 0-170.667-76.41-170.667-170.667s76.41-170.667 170.667-170.667c94.257 0 170.667 76.41 170.667 170.667s-76.41 170.667-170.667 170.667zM512 512c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z" />
<glyph unicode="&#xe938;" glyph-name="eye2_svg" d="M138.557 774.763c14.323 16.37 38.393 19.16 55.959 7.288l4.247-3.274 682.667-597.333c17.734-15.517 19.531-42.472 4.014-60.206-14.323-16.37-38.393-19.16-55.959-7.288l-4.247 3.274-113.642 99.426c-58.284-27.606-125.631-45.983-199.436-45.983-248.531 0-426.826 211.597-426.826 277.333 0 36.906 56.598 119.786 149.999 185.387l-92.761 81.17c-17.734 15.517-19.531 42.472-4.014 60.206zM341.333 448c0-94.257 76.41-170.667 170.667-170.667 35.709 0 68.857 10.967 96.258 29.716l-88.514 77.414c-2.539-0.306-5.123-0.464-7.744-0.464-35.101 0-63.602 28.257-63.996 63.265l-88.501 77.445c-11.623-23.062-18.169-49.121-18.169-76.71zM512.159 725.333c249.485 0 426.508-211.597 426.508-277.333 0-27.128-29.986-79.097-82.81-130.785l-174.596 152.787c-10.435 81.068-77.75 144.323-160.633 148.45l-9.311 0.214-106.655 93.298c34.013 8.496 69.975 13.369 107.496 13.369z" />
<glyph unicode="&#xe939;" glyph-name="flag_svg" d="M500.425 832.631l22.338-12.214c80.817-42.027 176.161-46.937 261.135-12.997l53.608 21.412c28.023 11.193 58.493-9.447 58.493-39.623v-428.019c0-17.54-10.734-33.292-27.058-39.709l-53.573-21.059c-108.687-42.723-230.336-36.060-333.461 17.764l-22.941 12.426c-76.74 39.22-167.453 40.822-245.636 4.124l0.001-313.404c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v768c0 3.617 0.45 7.129 1.297 10.482l1.671 5.032c3.987 10.461 12.185 19.007 22.535 23.56l14.934 7.404c104.95 52.551 228.536 51.136 331.988-3.18zM213.376 762.767l-0.042-336.069 12.85 4.147c90.343 27.394 188.575 18.809 273.487-25.208l22.99-12.458c80.988-41.806 176.293-46.827 261.49-13.337l26.515 10.423v335.997l-12.955-4.724c-104.085-35.929-218.538-27.261-316.108 24.108l-22.47 12.278c-76.646 39.6-167.465 41.459-245.759 4.844z" />
<glyph unicode="&#xe93a;" glyph-name="forward_svg" d="M503.575 755.401c0 36.917 29.927 66.844 66.844 66.844 16.818 0 33.017-6.339 45.368-17.754l332.624-307.401c27.112-25.056 28.779-67.347 2.558-95.67l-2.558-2.511-332.624-307.401c-27.112-25.056-69.403-23.389-94.459 3.723-11.414 12.351-17.754 28.551-17.754 45.368v118.601c-152.889-7.862-256.331-59.141-314.429-152.148l-6.036-10.039c-14.433-25.042-46.434-33.641-71.476-19.208-15.982 9.212-25.934 26.157-26.195 44.602-4.452 315.096 133.606 490.424 404.481 511.228l13.654 0.911v120.852zM588.909 713.138v-120.072c0-23.564-19.103-42.667-42.667-42.667-226.569 0-347.682-104.819-371.281-326.55 85.156 81.425 209.864 121.75 371.281 121.75 23.564 0 42.667-19.103 42.667-42.667v-120.076l286.917 265.121-286.917 265.16z" />
<glyph unicode="&#xe93b;" glyph-name="FullScreen_svg" d="M213.333 362.667c23.564 0 42.667-19.103 42.667-42.667v-128h128c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667h-170.667c-23.564 0-42.667 19.103-42.667 42.667v170.667c0 23.564 19.103 42.667 42.667 42.667zM810.667 362.667c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-170.667c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-170.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h128v128c0 23.564 19.103 42.667 42.667 42.667zM213.333 789.333h170.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-128v-128c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v170.667c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM810.667 789.333c23.564 0 42.667-19.103 42.667-42.667v-170.667c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667v128h-128c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667h170.667z" />
<glyph unicode="&#xe93c;" glyph-name="group_svg" d="M341.333 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-34.452c0-58.91-47.756-106.667-106.667-106.667h-469.333c-58.91 0-106.667 47.756-106.667 106.667v34.452c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM765.931 361.234l4.984-0.049c91.863-6.21 162.691-32.125 210.977-79.407 24.687-24.173 39.497-56.524 41.794-90.78l0.314-9.385v-21.612c0-50.81-39.474-92.401-89.427-95.779l-6.573-0.221h-117.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h117.333c5.049 0 9.279 3.509 10.385 8.221l0.282 2.446v21.612c0 14.749-5.939 28.876-16.477 39.195-31.987 31.323-83.828 50.29-157.030 55.239-23.51 1.589-41.281 21.937-39.692 45.447 1.476 21.831 19.126 38.713 40.463 39.741v0zM341.333 320c-118.985 0-199.024-27.459-243.017-79.443-8.383-9.905-12.983-22.462-12.983-35.438v-34.452c0-11.782 9.551-21.333 21.333-21.333h469.333c11.782 0 21.333 9.551 21.333 21.333v34.452c0 12.976-4.6 25.533-12.983 35.438-43.993 51.984-124.033 79.443-243.017 79.443zM725.333 746.667c82.475 0 149.333-66.859 149.333-149.333s-66.859-149.333-149.333-149.333c-82.475 0-149.333 66.859-149.333 149.333s66.859 149.333 149.333 149.333zM341.333 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM725.333 661.333c-35.346 0-64-28.654-64-64s28.654-64 64-64c35.346 0 64 28.654 64 64s-28.654 64-64 64zM341.333 746.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe93d;" glyph-name="help_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM511.057 307.449c28.778 0 52.079-22.114 52.079-50.308 0-27.759-23.751-50.308-52.079-50.308-28.173 0-52.079 22.847-52.079 50.308 0 27.898 23.457 50.308 52.079 50.308zM526.109 665.6c83.153 0 144.605-45.594 144.605-117.6 0-43.294-18.407-70.681-60.741-100.706l-21.333-14.543c-26.658-18.686-36.572-32.531-36.572-52.538v-5.312c0-20.909-16.095-35.699-40.126-35.699-25.25 0-39.241 13.729-39.241 39.241v5.755c0 40.023 17.424 64.886 57.174 92.491l14.635 10.26c31.961 23.045 41.082 35.548 41.082 57.51 0 31.584-24.537 52.4-62.582 52.4-26.89 0-47.284-12.59-62.294-37.483l-11.534-14.591-3.619-4.191c-8.432-9.021-17.048-12.797-31.459-12.797-18.567 0-34.371 14.423-34.371 34.814 0 7.527 1.224 14.868 3.727 23.378 14.121 46.397 69.829 79.613 142.65 79.613z" />
<glyph unicode="&#xe93e;" glyph-name="info_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM512 490.667c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-213.333c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v213.333c0 23.564 19.103 42.667 42.667 42.667zM512 682.667c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z" />
<glyph unicode="&#xe93f;" glyph-name="lamp_svg" d="M512 917.333c212.077 0 384-171.923 384-384 0-133.866-72.94-242.659-213.333-323.805v-102.862c0-70.692-57.308-128-128-128h-85.333c-70.692 0-128 57.308-128 128v102.85l-12.964 7.682c-131.917 80.22-200.369 186.382-200.369 316.134 0 212.077 171.923 384 384 384zM426.667 106.667c0-23.564 19.103-42.667 42.667-42.667h85.333c23.564 0 42.667 19.103 42.667 42.667h-170.667zM512 832c-164.949 0-298.667-133.718-298.667-298.667 0-106.492 61.417-192.475 190.647-260.968 13.958-7.398 22.686-21.902 22.686-37.699v-42.667h170.667v42.667c0 15.791 8.721 30.29 22.67 37.691 129.241 68.569 190.663 154.56 190.663 260.976 0 164.949-133.718 298.667-298.667 298.667zM512 497.351l103.883 71.179c19.439 13.319 45.994 8.358 59.314-11.081 12.295-17.944 9.013-41.951-6.853-56.014l-4.227-3.299-109.45-74.968v-103.168c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v103.125l-109.45 75.011c-17.944 12.295-23.551 35.868-13.831 54.711l2.751 4.603c12.295 17.944 35.868 23.551 54.711 13.831l4.603-2.751 103.883-71.179z" />
<glyph unicode="&#xe940;" glyph-name="language_svg" d="M529.497 336.405l-88.75 87.702 1.28 1.28c74.24 82.773 127.147 177.92 158.293 278.613h82.347c23.564 0 42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667h-256v42.667c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667v-42.667h-256.213c-23.446 0-42.453-19.007-42.453-42.453s19.007-42.453 42.453-42.453h434.133c-28.587-82.347-73.813-160.427-135.253-228.693-30.282 33.538-56.589 69.562-78.919 107.312l-7.737 13.608c-7.514 13.583-21.812 22.014-37.335 22.014h-17.235c-14.759 0-26.723-11.964-26.723-26.723 0-4.233 1.006-8.406 2.935-12.175l3.895-7.452c28.121-52.452 63.044-102.252 104.373-148.21l-186.671-184.104c-15.443-15.23-16.79-39.355-3.928-56.135l3.842-4.365c16.662-16.662 43.677-16.662 60.34 0l183.163 183.163 99.854-99.854c11.651-11.651 30.541-11.651 42.192 0 3.027 3.027 5.367 6.669 6.861 10.681l6.582 17.668c5.862 15.734 1.951 33.442-9.992 45.244zM759.765 533.333h-26.197c-17.785 0-33.705-11.032-39.95-27.685l-166.637-444.365c-5.734-15.29 2.013-32.334 17.303-38.067 3.32-1.245 6.836-1.883 10.382-1.883h13.052c17.808 0 33.743 11.060 39.972 27.744l37.429 100.256h202.667l37.807-100.373c6.261-16.622 22.166-27.627 39.928-27.627h13.145c16.33 0 29.568 13.238 29.568 29.568 0 3.546-0.638 7.062-1.883 10.382l-166.637 444.365c-6.245 16.653-22.165 27.685-39.95 27.685zM746.667 419.413l69.12-184.747h-138.24l69.12 184.747z" />
<glyph unicode="&#xe941;" glyph-name="checkboxempty_svg" d="M256 832h512c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-512c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128zM256 746.667c-23.564 0-42.667-19.103-42.667-42.667v-512c0-23.564 19.103-42.667 42.667-42.667h512c23.564 0 42.667 19.103 42.667 42.667v512c0 23.564-19.103 42.667-42.667 42.667h-512z" />
<glyph unicode="&#xe942;" glyph-name="checkboxon_svg" d="M768 832c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-512c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128h512zM737.83 648.837l-311.163-311.163-140.497 140.497c-16.662 16.662-43.677 16.662-60.34 0s-16.662-43.677 0-60.34l170.667-170.667c16.662-16.662 43.677-16.662 60.34 0l341.333 341.333c16.662 16.662 16.662 43.677 0 60.34s-43.677 16.662-60.34 0z" />
<glyph unicode="&#xe943;" glyph-name="close_svg" d="M222.281 730.15l3.549 4.020c15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 225.83-225.797 225.83 225.797c16.662 16.662 43.677 16.662 60.34 0s16.662-43.677 0-60.34l-225.797-225.83 225.797-225.83c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-225.83 225.797-225.83-225.797c-16.662-16.662-43.677-16.662-60.34 0s-16.662 43.677 0 60.34l225.797 225.83-225.797 225.83c-15.381 15.381-16.564 39.583-3.549 56.32v0z" />
<glyph unicode="&#xe944;" glyph-name="colorize_svg" d="M822.912 836.985l5.428-4.985 67.66-67.66c31.571-31.571 33.232-81.725 4.985-115.252l-4.985-5.428-153.003-152.96 33.839-33.864c16.662-16.662 16.662-43.677 0-60.34-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-33.83 33.83-353.83-353.83c-6.668-6.668-15.316-10.901-24.562-12.127l-5.608-0.37h-128c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v128c0 9.43 3.122 18.538 8.793 25.943l3.704 4.227 353.797 353.864-33.797 33.797c-16.662 16.662-16.662 43.677 0 60.34 15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 33.83-33.806 152.994 152.969c31.571 31.571 81.725 33.232 115.252 4.985zM554.667 558.293l-341.333-341.291v-67.627h67.627l341.333 341.291-67.627 67.627zM768 771.66l-153.003-152.96 67.669-67.669 152.994 152.969-67.66 67.66z" />
<glyph unicode="&#xe945;" glyph-name="copy_svg" d="M768 746.667c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-384c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128h384zM768 661.333h-384c-23.564 0-42.667-19.103-42.667-42.667v-512c0-23.564 19.103-42.667 42.667-42.667h384c23.564 0 42.667 19.103 42.667 42.667v512c0 23.564-19.103 42.667-42.667 42.667zM213.333 917.333h426.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-426.667c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976v-512c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v512c0 68.168 53.287 123.89 120.479 127.783l7.521 0.217z" />
<glyph unicode="&#xe946;" glyph-name="data_svg" d="M512 853.333c205.279 0 376.865-73.236 383.783-184.967l0.217-7.033v-426.667c0-115.681-174.444-192-384-192-205.279 0-376.865 73.236-383.783 184.967l-0.217 7.033v426.667c0 115.681 174.444 192 384 192zM810.667 234.667l0.011 89.097c-70.821-42.883-179.026-67.764-298.678-67.764-119.628 0-227.814 24.871-298.636 67.739l-0.031-89.072c0-49.268 131.196-106.667 298.667-106.667 163.284 0 292.084 54.564 298.422 102.957l0.245 3.709zM512 469.333c-119.628 0-227.814 24.871-298.636 67.739l-0.031-89.072c0-49.268 131.196-106.667 298.667-106.667 163.284 0 292.084 54.564 298.422 102.957l0.245 3.709 0.011 89.097c-70.821-42.883-179.026-67.764-298.678-67.764zM512 768c-167.47 0-298.667-57.398-298.667-106.667s131.196-106.667 298.667-106.667c167.47 0 298.667 57.398 298.667 106.667s-131.196 106.667-298.667 106.667z" />
<glyph unicode="&#xe947;" glyph-name="delete_filled_svg" d="M768 682.667c23.564 0 42.667-19.103 42.667-42.667v-448c0-70.692-57.308-128-128-128h-341.333c-70.692 0-128 57.308-128 128v448c0 23.564 19.103 42.667 42.667 42.667h512zM426.667 874.667h170.667c9.43 0 18.538-3.122 25.943-8.793l4.227-3.704 30.203-30.17h152.96c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-597.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h152.917l30.246 30.17c6.668 6.668 15.316 10.901 24.562 12.127l5.608 0.37z" />
<glyph unicode="&#xe948;" glyph-name="delete_svg" d="M768 682.667c23.564 0 42.667-19.103 42.667-42.667v-448c0-70.692-57.308-128-128-128h-341.333c-70.692 0-128 57.308-128 128v448c0 23.564 19.103 42.667 42.667 42.667h512zM725.333 597.333h-426.667v-405.333c0-23.564 19.103-42.667 42.667-42.667h341.333c23.564 0 42.667 19.103 42.667 42.667v405.333zM426.667 874.667h170.667c9.43 0 18.538-3.122 25.943-8.793l4.227-3.704 30.203-30.17h152.96c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-597.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h152.917l30.246 30.17c6.668 6.668 15.316 10.901 24.562 12.127l5.608 0.37z" />
<glyph unicode="&#xe949;" glyph-name="deleteuser_svg" d="M384 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-34.452c0-58.91-47.756-106.667-106.667-106.667h-469.333c-58.91 0-106.667 47.756-106.667 106.667v34.452c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM384 320c-118.985 0-199.024-27.459-243.017-79.443-8.383-9.905-12.983-22.462-12.983-35.438v-34.452c0-11.782 9.551-21.333 21.333-21.333h469.333c11.782 0 21.333 9.551 21.333 21.333v34.452c0 12.976-4.6 25.533-12.983 35.438-43.993 51.984-124.033 79.443-243.017 79.443zM682.667 533.333h256c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-256c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM384 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM384 746.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe94a;" glyph-name="document_svg" d="M519.32 874.667c33.948 0 66.505-13.486 90.51-37.49l291.346-291.346c24.005-24.005 37.49-56.562 37.49-90.51v-305.987c0-70.692-57.308-128-128-128h-597.333c-70.692 0-128 57.308-128 128v597.333c0 70.692 57.308 128 128 128h305.987zM469.333 789.333h-256c-23.564 0-42.667-19.103-42.667-42.667v-597.333c0-23.564 19.103-42.667 42.667-42.667h597.333c23.564 0 42.667 19.103 42.667 42.667v256h-256c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v256zM835.669 490.667l-281.003 281.003v-238.336c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h238.336z" />
<glyph unicode="&#xe94b;" glyph-name="down_svg" d="M512 337.673l268.497 268.497c16.662 16.662 43.677 16.662 60.34 0s16.662-43.677 0-60.34l-298.667-298.667c-16.662-16.662-43.677-16.662-60.34 0l-298.667 298.667c-16.662 16.662-16.662 43.677 0 60.34s43.677 16.662 60.34 0l268.497-268.497z" />
<glyph unicode="&#xe94c;" glyph-name="attach_svg" d="M497.401 589.342l-160.596-163.813c-57.774-58.931-57.773-153.256 0.002-212.186 54.925-56.023 143.615-58.882 201.973-7.943l7.659 7.175 280.991 286.603c88.906 90.684 88.906 235.835 0 326.519-84.812 86.507-222.148 90.314-311.561 10.427l-10.923-10.427-280.232-285.835c-120.038-122.438-120.038-318.415 0-440.853 114.978-117.276 301.591-121.763 422.020-12.095l12.555 12.098 160.597 163.812c16.496 16.827 16.229 43.84-0.598 60.337s-43.84 16.229-60.337-0.598l-163.664-166.879c-86.351-84.658-224.981-83.286-309.64 3.065-87.505 89.255-87.505 232.119 0 321.373l282.198 287.801c55.399 54.313 144.337 53.433 198.65-1.966 56.374-57.501 56.374-149.539 0-207.039l-281.1-286.702c-24.445-23.966-63.69-23.577-87.656 0.868-25.243 25.747-25.243 66.96-0.001 92.708l160.596 163.813c16.496 16.827 16.228 43.84-0.598 60.337s-43.84 16.228-60.337-0.598z" />
<glyph unicode="&#xe94d;" glyph-name="avatar_archivedchats_svg" d="M411.469 675.556h201.062c25.242 0 48.73-12.547 62.788-33.293l2.254-3.533 32.21-53.683c6.287-10.479 9.938-22.301 10.672-34.454l0.138-4.571v-249.724c0-41.892-33.96-75.852-75.852-75.852h-265.481c-41.892 0-75.852 33.96-75.852 75.852v249.724c0 12.22 2.952 24.236 8.576 35.035l2.234 3.991 32.21 53.683c12.987 21.645 35.83 35.33 60.853 36.711l4.189 0.115zM644.741 561.778h-265.481c-20.946 0-37.926-16.98-37.926-37.926v-227.556c0-20.946 16.98-37.926 37.926-37.926h265.481c20.946 0 37.926 16.98 37.926 37.926v227.556c0 20.946-16.98 37.926-37.926 37.926zM441.702 442.446c6.836 6.836 17.592 7.362 25.031 1.578l1.786-1.578 43.48-43.48 43.48 43.48c7.405 7.405 19.412 7.405 26.818 0 6.836-6.836 7.362-17.592 1.578-25.031l-1.578-1.786-56.889-56.889c-6.836-6.836-17.592-7.362-25.031-1.578l-1.786 1.578-56.889 56.889c-7.405 7.405-7.405 19.412 0 26.818zM612.531 637.63h-201.062c-12.297 0-23.762-5.956-30.844-15.857l-1.677-2.556-12.348-20.564c4.117 0.692 8.346 1.052 12.66 1.052h265.481c4.313 0 8.543-0.36 12.66-1.052l-12.348 20.564c-6.327 10.545-17.332 17.312-29.466 18.29l-3.055 0.123z" />
<glyph unicode="&#xe94e;" glyph-name="avatar_deletedaccount_svg" d="M512 694.519c104.73 0 189.63-84.9 189.63-189.63v-265.481c0-16.894-20.426-25.355-32.372-13.409l-43.48 43.48-43.48-43.48c-7.405-7.405-19.412-7.405-26.818 0l-43.48 43.48-43.48-43.48c-7.405-7.405-19.412-7.405-26.818 0l-43.48 43.48-43.48-43.48c-11.946-11.946-32.372-3.485-32.372 13.409v265.481c0 104.73 84.9 189.63 189.63 189.63zM512 656.593c-83.784 0-151.704-67.92-151.704-151.704v-219.701l24.517 24.517c7.405 7.405 19.412 7.405 26.818 0l43.48-43.48 43.48 43.48c7.405 7.405 19.412 7.405 26.818 0l43.48-43.48 43.48 43.48c7.405 7.405 19.412 7.405 26.818 0l24.517-24.517v219.701c0 83.784-67.92 151.704-151.704 151.704zM436.148 542.815c20.946 0 37.926-16.98 37.926-37.926s-16.98-37.926-37.926-37.926c-20.946 0-37.926 16.98-37.926 37.926s16.98 37.926 37.926 37.926zM587.852 542.815c20.946 0 37.926-16.98 37.926-37.926s-16.98-37.926-37.926-37.926c-20.946 0-37.926 16.98-37.926 37.926s16.98 37.926 37.926 37.926z" />
<glyph unicode="&#xe94f;" glyph-name="avatar_savedmessages_svg" d="M350.543 222.831c-12.639-7.022-28.172 2.118-28.172 16.577v360.296c0 41.892 33.96 75.852 75.852 75.852h227.556c41.892 0 75.852-33.96 75.852-75.852v-360.296c0-14.459-15.533-23.599-28.172-16.577l-161.457 89.699-161.457-89.699zM663.704 599.704c0 20.946-16.98 37.926-37.926 37.926h-227.556c-20.946 0-37.926-16.98-37.926-37.926v-328.068l142.494 79.164c5.727 3.182 12.691 3.182 18.418 0l142.494-79.164v328.068z" />
<glyph unicode="&#xe950;" glyph-name="back_svg" d="M183.163 478.17l298.667 298.667c16.662 16.662 43.677 16.662 60.34 0 15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-225.839-225.83h494.336c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-494.336l225.839-225.83c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-298.667 298.667c-15.381 15.381-16.564 39.583-3.549 56.32l3.549 4.020z" />
<glyph unicode="&#xe951;" glyph-name="camera_svg" d="M622.327 874.667c22.632 0 44.337-8.99 60.34-24.994l60.34-60.34h67.66c70.692 0 128-57.308 128-128v-469.333c0-70.692-57.308-128-128-128h-597.333c-70.692 0-128 57.308-128 128v469.333c0 70.692 57.308 128 128 128h67.66l60.34 60.34c16.003 16.003 37.708 24.994 60.34 24.994h220.654zM622.327 789.333h-220.654l-60.34-60.34c-16.003-16.003-37.708-24.994-60.34-24.994h-67.66c-23.564 0-42.667-19.103-42.667-42.667v-469.333c0-23.564 19.103-42.667 42.667-42.667h597.333c23.564 0 42.667 19.103 42.667 42.667v469.333c0 23.564-19.103 42.667-42.667 42.667h-67.66c-22.632 0-44.337 8.99-60.34 24.994l-60.34 60.34zM512 661.333c117.821 0 213.333-95.513 213.333-213.333s-95.513-213.333-213.333-213.333c-117.821 0-213.333 95.513-213.333 213.333s95.513 213.333 213.333 213.333zM512 576c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128s-57.308 128-128 128z" />
<glyph unicode="&#xe952;" glyph-name="cameraadd_svg" d="M848.357 277.046l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-85.333h85.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333v-85.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v85.333h-85.333c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h85.333v85.333c0 21.881 16.471 39.915 37.691 42.38v0zM359.006 874.667h220.654c20.117 0 39.502-7.104 54.801-19.922l5.539-5.072 60.34-60.34h67.66c68.168 0 123.89-53.287 127.783-120.479l0.217-7.521v-213.333c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v213.333c0 21.881-16.471 39.915-37.691 42.38l-4.976 0.287h-67.66c-20.117 0-39.502 7.104-54.801 19.922l-5.539 5.072-60.34 60.34h-220.654l-60.34-60.34c-14.225-14.225-32.955-22.909-52.837-24.663l-7.503-0.33h-67.66c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976v-469.333c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h384c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-384c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v469.333c0 68.168 53.287 123.89 120.479 127.783l7.521 0.217h67.66l60.34 60.34c14.225 14.225 32.955 22.909 52.837 24.663l7.503 0.33zM469.333 661.333c117.821 0 213.333-95.513 213.333-213.333s-95.513-213.333-213.333-213.333c-117.821 0-213.333 95.513-213.333 213.333s95.513 213.333 213.333 213.333zM469.333 576c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128s-57.308 128-128 128z" />
<glyph unicode="&#xe953;" glyph-name="car_svg" d="M981.333 106.667c0-70.692-57.308-128-128-128s-128 57.308-128 128h-426.667c0-70.692-57.308-128-128-128-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v299.298c0 32.477 5.297 64.736 15.682 95.507l75.86 224.771c29.566 87.604 104.073 152.458 194.916 169.665 75.184 14.241 135.961 21.425 182.875 21.425s107.691-7.185 182.874-21.425c90.844-17.206 165.35-82.060 194.917-169.664l75.86-224.772c10.385-30.771 15.682-63.031 15.682-95.507v-299.298zM127.995 129.502l0.005-22.835c0-23.564 19.103-42.667 42.667-42.667 21.881 0 39.915 16.471 42.38 37.691l0.287 4.976c-31.088 0-60.235 8.312-85.338 22.835zM810.667 106.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667l0.047 22.86c-25.113-14.538-54.275-22.86-85.381-22.86zM884.798 474.184l-9.377 27.721c-14.717-7.389-30.81-11.914-47.416-13.217l-10.018-0.392h-611.974c-20.132 0-39.775 4.743-57.435 13.609l-9.377-27.721c-7.418-21.98-11.202-45.022-11.202-68.219v-128.631c0-47.128 38.205-85.333 85.333-85.333h597.333c47.128 0 85.333 38.205 85.333 85.333v128.631c0 23.198-3.784 46.24-11.202 68.219v0zM277.333 405.333c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM746.667 405.333c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM512 832c-40.757 0-96.603-6.602-166.994-19.935-60.562-11.471-110.233-54.707-129.944-113.11l-38.36-113.664c6.592-6.232 14.971-10.175 23.899-11.317l5.412-0.344 311.489 0.005c17.587 62.897 75.322 109.032 143.832 109.032s126.245-46.135 143.832-109.032l12.822-0.005c9.43 0 18.538 3.122 25.943 8.793l3.302 2.964-38.294 113.569c-19.711 58.403-69.382 101.639-129.945 113.11-70.391 13.333-126.236 19.934-166.993 19.934zM661.333 597.333c-20.052 0-37.95-9.222-49.685-23.656h99.37c-11.735 14.434-29.633 23.656-49.685 23.656z" />
<glyph unicode="&#xe954;" glyph-name="channel_svg" d="M789.333 888.385c58.91 0 106.667-47.756 106.667-106.667v-667.437c0-24.74-8.6-48.711-24.327-67.809-37.45-45.475-104.673-51.98-150.148-14.53l-209.525 172.581v-76.524c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521-0.008 110.936c-97.372 19.769-170.659 105.858-170.659 209.064 0 117.821 95.513 213.333 213.333 213.333h176.693l246.165 202.724c19.098 15.728 43.069 24.327 67.809 24.327zM341.333 234.689v-106.689c0-23.564 19.103-42.667 42.667-42.667 21.881 0 39.915 16.471 42.38 37.691l0.287 4.976v106.689h-85.333zM789.333 803.052c-4.948 0-9.742-1.72-13.562-4.865l-246.165-202.724c-15.278-12.582-34.455-19.462-54.247-19.462h-176.693c-70.692 0-128-57.308-128-128s57.308-128 128-128h176.693c19.792 0 38.969-6.88 54.247-19.462l246.165-202.724c9.095-7.49 22.54-6.189 30.030 2.906 3.146 3.82 4.865 8.614 4.865 13.562v667.437c0 11.782-9.551 21.333-21.333 21.333z" />
<glyph unicode="&#xe955;" glyph-name="channelviews_svg" d="M512 717.474c217.604 0 404.211-215.579 404.211-269.474s-186.607-269.474-404.211-269.474c-217.604 0-404.211 215.579-404.211 269.474s186.607 269.474 404.211 269.474zM512 636.632c-104.178 0-188.632-84.453-188.632-188.632s84.453-188.632 188.632-188.632c104.178 0 188.632 84.453 188.632 188.632s-84.453 188.632-188.632 188.632zM512 542.316c52.089 0 94.316-42.227 94.316-94.316s-42.227-94.316-94.316-94.316c-52.089 0-94.316 42.227-94.316 94.316s42.227 94.316 94.316 94.316z" />
<glyph unicode="&#xe956;" glyph-name="chatsplaceholder_svg" d="M938.667 661.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-629.699c0-25.921-21.013-46.933-46.933-46.933-10.669 0-20.964 3.633-29.23 10.214l-3.957 3.533-150.886 150.886h-408.993c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h341.335c114.72 0 208.291 90.552 213.136 204.079l0.197 9.254v213.333l0.285 4.976c2.465 21.22 20.499 37.691 42.38 37.691zM682.667 917.333c70.692 0 128-57.308 128-128v-384c0-70.692-57.308-128-128-128h-408.994l-150.886-150.886c-18.329-18.329-48.045-18.329-66.374 0-8.802 8.802-13.746 20.739-13.746 33.187v629.699c0 70.692 57.308 128 128 128h512z" />
<glyph unicode="&#xe957;" glyph-name="check_svg1" d="M200.837 435.503c-16.662 16.662-43.677 16.662-60.34 0s-16.662-43.677 0-60.34l213.333-213.333c16.662-16.662 43.677-16.662 60.34 0l469.333 469.333c16.662 16.662 16.662 43.677 0 60.34s-43.677 16.662-60.34 0l-439.163-439.163-183.163 183.163z" />
<glyph unicode="&#xe958;" glyph-name="checkbox_svg" d="M768 832c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-512c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128h512zM768 746.667h-512c-23.564 0-42.667-19.103-42.667-42.667v-512c0-23.564 19.103-42.667 42.667-42.667h512c23.564 0 42.667 19.103 42.667 42.667v512c0 23.564-19.103 42.667-42.667 42.667zM448 380.34l225.83 225.83c16.662 16.662 43.677 16.662 60.34 0 15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-256-256c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-106.667 106.667c-16.662 16.662-16.662 43.677 0 60.34 15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 76.497-76.497z" />
<glyph unicode="&#xe959;" glyph-name="checkboxblock_svg" d="M768 832c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-512c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128h512zM682.667 490.667h-341.333c-23.564 0-42.667-19.103-42.667-42.667s19.103-42.667 42.667-42.667h341.333c23.564 0 42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667z" />
<glyph unicode="&#xe95a;" glyph-name="checks_svg" d="M267.767 283.67l352.606 402.978c12.74 14.56 34.872 16.036 49.432 3.295 13.104-11.466 15.61-30.54 6.692-44.854l-3.397-4.578-377.263-431.158c-12.010-13.726-32.215-15.731-46.582-5.549l-4.553 3.846-161.684 161.684c-13.681 13.681-13.681 35.861 0 49.542 12.313 12.313 31.51 13.544 45.2 3.694l4.342-3.694 135.207-135.207zM537.241 283.67l352.606 402.978c12.74 14.56 34.872 16.036 49.432 3.295 13.104-11.466 15.61-30.54 6.692-44.854l-3.397-4.578-377.263-431.158c-12.010-13.726-32.215-15.731-46.582-5.549l-4.553 3.846-53.895 53.895c-13.681 13.681-13.681 35.861 0 49.542 12.313 12.313 31.51 13.544 45.2 3.694l4.342-3.694 27.417-27.417z" />
<glyph unicode="&#xe95b;" glyph-name="activesessions_svg" d="M170.667 874.667h597.333c91.4 0 166.019-71.849 170.458-162.149l0.209-8.518v-85.333c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v85.333c0 44.986-34.811 81.842-78.965 85.099l-6.369 0.234h-597.333c-44.986 0-81.842-34.811-85.099-78.965l-0.234-6.369v-341.333c0-44.986 34.811-81.842 78.965-85.099l6.369-0.234h426.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333v-85.333h85.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-256c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h85.333v85.333h-256c-91.4 0-166.019 71.849-170.458 162.149l-0.209 8.518v341.333c0 91.4 71.849 166.019 162.149 170.458l8.518 0.209zM938.667 490.667c47.128 0 85.333-38.205 85.333-85.333v-298.667c0-47.128-38.205-85.333-85.333-85.333h-128c-47.128 0-85.333 38.205-85.333 85.333v298.667c0 47.128 38.205 85.333 85.333 85.333h128zM938.667 405.333h-128v-298.667h128v298.667z" />
<glyph unicode="&#xe95c;" glyph-name="add_svg" d="M507.024 789.046l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-256h256c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-256v-256c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v256h-256c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h256v256c0 21.881 16.471 39.915 37.691 42.38v0z" />
<glyph unicode="&#xe95d;" glyph-name="addmember_filled_svg" d="M384 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-55.786c0-47.128-38.205-85.333-85.333-85.333h-512c-47.128 0-85.333 38.205-85.333 85.333v55.786c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM805.691 661.046l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-85.333h85.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333v-85.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v85.333h-85.333c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h85.333v85.333c0 21.881 16.471 39.915 37.691 42.38v0zM384 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667z" />
<glyph unicode="&#xe95e;" glyph-name="adduser_svg" d="M384 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-34.452c0-58.91-47.756-106.667-106.667-106.667h-469.333c-58.91 0-106.667 47.756-106.667 106.667v34.452c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM384 320c-118.985 0-199.024-27.459-243.017-79.443-8.383-9.905-12.983-22.462-12.983-35.438v-34.452c0-11.782 9.551-21.333 21.333-21.333h469.333c11.782 0 21.333 9.551 21.333 21.333v34.452c0 12.976-4.6 25.533-12.983 35.438-43.993 51.984-124.033 79.443-243.017 79.443zM805.691 661.046l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-85.333h85.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333v-85.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v85.333h-85.333c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h85.333v85.333c0 21.881 16.471 39.915 37.691 42.38v0zM384 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM384 746.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe95f;" glyph-name="admin_svg" d="M512.239 938.667c16.136 0 28.168-2.465 51.412-9.18l47.256-16.287 47.087-16.644c49.569-17.663 104.683-37.693 148.222-53.908l43.063-16.255c63.073-24.566 89.387-56.573 89.387-121.782v-348.951l-0.233-17.057c-4.188-147.321-66.782-208.095-342.576-364.502l-31.551-17.794c-16.838-9.217-35.485-14.972-52.068-14.972s-35.231 5.755-52.666 15.306l-60.882 34.944-42.742 25.118c-217.318 129.436-266.908 189.449-270.408 322.582l-0.207 16.376v348.951c0 62.416 24.82 95.549 81.356 118.649l31.438 11.945 50.040 18.344 214.085 76.391c19.883 5.925 33.697 8.728 49.987 8.728zM512.028 192c-88.816 0-160.487-12.737-215.108-37.49 40.034-27.548 92.38-59.144 160.59-98.405l43.634-24.946c3.143-1.72 6.294-2.993 8.441-3.736l2.653-0.755 2.628 0.741 5.157 2.071c0.962 0.443 1.947 0.932 2.916 1.462l29.292 16.504c75.824 42.914 133.019 76.962 176.006 106.581-54.767 25.067-126.802 37.975-216.211 37.975zM512.239 853.333c-4.804 0-10.274-0.915-17.595-2.835l-5.856-1.63-232.828-83.297-56.445-21.034-9.304-3.835c-16.276-7.329-19.157-13.355-19.505-31.34v-360.007l0.344-12.405c2.193-49.695 14.501-85.623 54.505-125.457 2.779 2.92 6.075 5.46 9.802 7.524 70.807 39.222 163.076 58.315 276.671 58.315 113.6 0 205.871-19.094 276.679-58.319 3.902-2.161 7.332-4.844 10.252-7.913 43.972 44.414 54.375 84.863 54.375 144.557v348.951c0 23.34-1.807 28.455-24.028 37.849l-10.828 4.353-47.336 17.839-76.084 27.905c-35.59 12.912-72.025 25.955-103.212 36.932l-53.573 18.548-10.307 2.819c-7.258 1.839-11.561 2.477-15.726 2.477zM512 704c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM512 618.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe960;" glyph-name="animals_svg" d="M810.667 896c96.926 0 164.419-163.817 129.5-358.876 11.143-29.875 21.422-62.488 28.921-93.111l17.135 3.247c23.156 4.369 45.469-10.861 49.838-34.016 4.057-21.502-8.785-42.277-29.18-48.633l-4.836-1.205-20.804-3.897-0.104-7.182c-0.977-25.593-5.56-50.677-13.28-74.973l26.278-0.021c23.564 0 42.674-19.103 42.674-42.667 0-21.881-16.479-39.915-37.699-42.38l-4.976-0.287-67.99 0.006c-83.817-125.018-250.784-213.339-414.143-213.339s-330.326 88.321-414.143 213.339l-67.99-0.006c-23.564 0-42.674 19.103-42.674 42.667 0 21.881 16.479 39.915 37.699 42.38l4.976 0.287 26.278 0.021c-8.44 26.562-13.131 54.065-13.459 82.145l-20.729 3.907c-23.156 4.369-38.385 26.682-34.016 49.838 4.057 21.502 23.586 36.169 44.895 34.657l4.943-0.64 17.139-3.254c7.503 30.622 17.787 63.242 28.94 93.141-32.379 186.39 46.978 358.852 129.477 358.852 17.359 0 27.61-5.319 45.009-20.338l11.411-10.211 51.843-49.515 12.435-11.368c12.482-11.132 23.107-19.632 31.821-25.401l7.366-4.473 3.826-1.892c54.637 12.584 84.519 16.532 134.955 16.532 45.654 0 74.534-3.24 122.293-13.773l11.715-2.653 1.909 0.839 5.066 2.763c8.029 4.77 17.949 12.241 29.744 22.339l7.302 6.373c5.802 5.155 11.951 10.813 18.875 17.343l45.302 43.032 11.433 10.149c17.439 14.935 27.735 20.254 45.028 20.254zM816.059 806.432l-4.469-3.992-40.247-38.243-18.035-16.832-14.697-13.036c-45.014-38.925-75.751-55.542-108.247-45.254-50.417 11.689-74.298 14.926-118.364 14.926-43.553 0-67.306-3.156-116.584-14.535-34.799-10.775-65.671 5.831-109.757 44.008l-15.176 13.507-14.468 13.503-42.491 40.739c-9.797-11.374-19.612-26.886-27.946-45.412-25.153-55.917-32.966-128.078-15.739-214.28l2.445-12.233-8.611-22.36c-9.343-25.196-18.16-53.218-24.69-78.823l124.928-23.52c23.156-4.369 38.385-26.682 34.016-49.838-4.057-21.502-23.586-36.169-44.895-34.657l-4.943 0.64-119.052 22.448c2.376-22.395 8.77-44.477 18.546-65.818l108.417-0.036c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287-48.002 0.021c74.363-75.424 190.446-128.021 304.002-128.021s229.64 52.597 304.002 128.021l-48.002-0.021c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287 108.417 0.036c9.775 21.341 16.17 43.423 18.546 65.818l-119.052-22.448c-23.156-4.369-45.469 10.861-49.838 34.016-4.057 21.502 8.785 42.277 29.18 48.633l4.836 1.205 124.936 23.516c-6.533 25.627-15.354 53.67-24.698 78.864l-8.612 22.355 2.446 12.236c17.778 88.944 12.869 162.612-8.444 215.911-8.869 22.18-19.758 37.825-27.087 46.171l-2.571 2.786zM493.627 362.667h39.707l4.538-0.233 4.744-0.779 4.565-1.297 4.54-1.851 2.361-1.215 1.938-1.143 3.074-2.131 4.163-3.588c1.719-1.727 3.209-3.458 4.528-5.255l1.857-2.753c0.853-1.378 1.629-2.808 2.324-4.285l1.611-3.95 1.529-5.451 0.746-5.050 0.149-3.686-0.252-4.708-1.167-6.243-0.771-2.541-18.533-55.598 1.134-3.375c3.276-7.571 10.813-12.868 19.588-12.868 11.782 0 21.333 9.551 21.333 21.333 0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667c0-58.91-47.756-106.667-106.667-106.667-24.032 0-46.207 7.947-64.041 21.357-17.788-13.422-39.946-21.357-63.959-21.357-58.91 0-106.667 47.756-106.667 106.667 0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667c0-11.782 9.551-21.333 21.333-21.333 8.774 0 16.311 5.297 19.588 12.868l1.134 3.375-17.597 52.79c-7.824 23.473 4.861 48.844 28.334 56.668l4.767 1.266 3.304 0.606 6.096 0.427zM661.333 533.333c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM362.667 533.333c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM649.223 772.177l-3.214 0.729-1.561-0.614 1.78 0.168 1.633-0.071 1.363-0.212z" />
<glyph unicode="&#xe961;" glyph-name="archive_svg" d="M320 917.333h384c50.361 0 97.967-22.229 130.279-60.418l6.255-7.849 64-85.333c19.941-26.588 31.636-58.35 33.776-91.357l0.358-11.043v-469.333c0-94.257-76.41-170.667-170.667-170.667h-512c-94.257 0-170.667 76.41-170.667 170.667v469.333c0 33.234 9.701 65.662 27.794 93.351l6.34 9.049 64 85.333c30.217 40.289 76.563 65.036 126.502 67.972l10.032 0.295zM768 661.333h-512c-47.128 0-85.333-38.205-85.333-85.333v-384c0-47.128 38.205-85.333 85.333-85.333h512c47.128 0 85.333 38.205 85.333 85.333v384c0 47.128-38.205 85.333-85.333 85.333zM353.83 478.17c15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 97.83-97.83 97.83 97.83c16.662 16.662 43.677 16.662 60.34 0 15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-128-128c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-128 128c-16.662 16.662-16.662 43.677 0 60.34zM704 832h-384c-24.418 0-47.54-10.451-63.65-28.495l-4.617-5.638-43.503-57.975c15.158 4.411 31.188 6.775 47.769 6.775h512c16.566 0 32.581-2.36 47.727-6.763l-43.46 57.963c-14.651 19.534-36.885 31.761-60.986 33.823l-7.281 0.311z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/assets/img/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/assets/img/blank.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 53.2 (72643) - https://sketchapp.com -->
<title>doc-in</title>
<desc>Created with Sketch.</desc>
<g id="doc-in" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M54,22 C54,19.790861 52.209139,18 50,18 L40,18 C37.790861,18 36,16.209139 36,14 L36,4 C36,1.790861 34.209139,-4.05812251e-16 32,0 L33.8020203,8.8817842e-15 C35.3933192,1.00028247e-14 36.9194427,0.632141042 38.0446609,1.75735931 L52.2426407,15.9553391 C53.367859,17.0805573 54,18.6066808 54,20.1979797 L54,22 Z" id="Corner" fill="#287ED0"></path>
<path d="M36,4 L36,14 C36,16.209139 37.790861,18 40,18 L50,18 C52.209139,18 54,19.790861 54,22 L54,48 C54,51.3137085 51.3137085,54 48,54 L6,54 C2.6862915,54 0,51.3137085 0,48 L0,6 C0,2.6862915 2.6862915,0 6,0 L32,0 C34.209139,-4.05812251e-16 36,1.790861 36,4 Z" id="Base" fill="#4EA4F6"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<svg width="11" height="20" viewBox="0 0 11 20" xmlns="http://www.w3.org/2000/svg"><g transform="translate(9 -14)" fill="none" fill-rule="evenodd"><path d="M-6 16h6v17c-.193-2.84-.876-5.767-2.05-8.782-.904-2.325-2.446-4.485-4.625-6.48A1 1 0 01-6 16z" transform="matrix(1 0 0 -1 0 49)" id="corner-fill" fill="#FFF"/></g></svg>

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

View File

@ -0,0 +1 @@
<svg width="11" height="20" viewBox="0 0 11 20" xmlns="http://www.w3.org/2000/svg"><g transform="translate(9 -14)" fill="none" fill-rule="evenodd"><path d="M-6 16h6v17c-.193-2.84-.876-5.767-2.05-8.782-.904-2.325-2.446-4.485-4.625-6.48A1 1 0 01-6 16z" transform="rotate(180 -3.5 24.5)" id="corner-fill" fill="#EEFFDE"/></g></svg>

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

BIN
public/assets/img/pepe.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
public/assets/img/photo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 MiB

423
public/index.html Normal file
View File

@ -0,0 +1,423 @@
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8">
<title>Telegram Web</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- <link rel="manifest" href="/site.webmanifest"> -->
<link rel="apple-touch-icon" href="icon.png">
<!-- Place favicon.ico in the root directory -->
<style>
/* cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Roboto'), local('Roboto-Regular'), url(assets/fonts/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');
unicode-range:U + 0400-045F, U + 0490-0491, U + 04B0-04B1, U + 2116
}
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Roboto'), local('Roboto-Regular'), url(assets/fonts/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');
unicode-range:U + 0100-024F, U + 0259, U + 1E00-1EFF, U + 2020, U + 20A0-20AB, U + 20AD-20CF, U + 2113, U + 2C60-2C7F, U + A720-A7FF
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Roboto'), local('Roboto-Regular'), url(assets/fonts/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');
unicode-range:U + 0000-00FF, U + 0131, U + 0152-0153, U + 02BB-02BC, U + 02C6, U + 02DA, U + 02DC, U + 2000-206F, U + 2074, U + 20AC, U + 2122, U + 2191, U + 2193, U + 2212, U + 2215, U + FEFF, U + FFFD
}
/* cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: local('Roboto Medium'), local('Roboto-Medium'), url(assets/fonts/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');
unicode-range:U + 0400-045F, U + 0490-0491, U + 04B0-04B1, U + 2116
}
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: local('Roboto Medium'), local('Roboto-Medium'), url(assets/fonts/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');
unicode-range:U + 0100-024F, U + 0259, U + 1E00-1EFF, U + 2020, U + 20A0-20AB, U + 20AD-20CF, U + 2113, U + 2C60-2C7F, U + A720-A7FF
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: local('Roboto Medium'), local('Roboto-Medium'), url(assets/fonts/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');
unicode-range:U + 0000-00FF, U + 0131, U + 0152-0153, U + 02BB-02BC, U + 02C6, U + 02DA, U + 02DC, U + 2000-206F, U + 2074, U + 20AC, U + 2122, U + 2191, U + 2193, U + 2212, U + 2215, U + FEFF, U + FFFD
}
</style>
<meta name="theme-color" content="#fafafa">
</head>
<body>
<!--[if IE]>
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience and security.</p>
<![endif]-->
<div class="whole valign-wrapper page-sign" style="display: none;">
<div class="container center-align">
<div class="auth-image">
<svg class="sign-logo" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.2 69.2" style="enable-background:new 0 0 69.2 69.2;" xml:space="preserve">
<g id="Layer_2">
<circle class="st0" fill="#4EA4F6" cx="34.6" cy="34.6" r="34.6"/>
</g>
<g id="Layer_3">
<path class="st1" fill="#FFFFFF" d="M14.4,34.3c0,0,17.3-7.1,23.3-9.6c2.3-1,10.1-4.2,10.1-4.2s3.6-1.4,3.3,2c-0.1,1.4-0.9,6.3-1.7,11.6
c-1.2,7.5-2.5,15.7-2.5,15.7s-0.2,2.3-1.9,2.7c-1.7,0.4-4.5-1.4-5-1.8c-0.4-0.3-7.5-4.8-10.1-7c-0.7-0.6-1.5-1.8,0.1-3.2
c3.6-3.3,7.9-7.4,10.5-10c1.2-1.2,2.4-4-2.6-0.6c-7.1,4.9-14.1,9.5-14.1,9.5s-1.6,1-4.6,0.1c-3-0.9-6.5-2.1-6.5-2.1
S10.3,35.9,14.4,34.3z"/>
</g>
</svg>
</div>
<h4>Sign in to Telegram</h4>
<p class="subtitle">Please confirm your country and<br> enter your phone number.</p>
<div class="input-wrapper">
<div class="input-field input-select">
<input type="text" name="countryCode" id="countryCode" autocomplete="rrRandomRR" required />
<label for="countryCode">Country</label>
<span class="arrow arrow-down"></span>
</div>
<div class="input-field">
<input type="tel" name="phone" id="phone" autocomplete="rr55RandomRR55" required />
<label for="phone">Phone Number</label>
</div>
<label class="checkbox-field">
<input type="checkbox" id="keepSigned" checked="checked">
<span>Keep me signed in</span>
</label>
<button class="btn-primary" style="display: none;">NEXT</button>
</div>
</div>
</div>
<div class="whole valign-wrapper page-authCode" style="display: none;">
<div class="container center-align">
<div class="auth-image"></div>
<div class="phone-wrapper">
<h4 class="phone"></h4>
<span class="phone-edit tgico-edit"></span>
</div>
<p class="subtitle sent-type"></p>
<div class="input-wrapper">
<div class="input-field">
<input type="text" name="code" id="code" autocomplete="off" required />
<label for="code">Code</label>
</div>
</div>
</div>
</div>
<div class="whole valign-wrapper page-password" style="display: none;">
<div class="container center-align">
<div class="auth-image"></div>
<h4 class="phone">Enter a password</h4>
<p class="subtitle">Your account is protected with<br>an additional password</p>
<div class="input-wrapper">
<div class="input-field">
<input type="password" name="password" id="password" autocomplete="off" required />
<label for="password">Password</label>
<span class="toggle-visible tgico-eye1"></span>
</div>
<button class="btn-primary">NEXT</button>
</div>
</div>
</div>
<div class="whole valign-wrapper page-signUp" style="display: none;">
<div class="container center-align">
<div class="auth-image">
<input type="file" id="avatar-input" style="display: none;" />
<canvas id="canvas-avatar"></canvas>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g fill="none" fill-rule="evenodd">
<polygon points="0 0 24 0 24 24 0 24"/>
<path fill="#fff" fill-rule="nonzero" d="M19.8833789,16.0067277 L20,16 C20.5128358,16 20.9355072,16.3860402 20.9932723,16.8833789 L21,17 L21,19 L23,19 C23.5128358,19 23.9355072,19.3860402 23.9932723,19.8833789 L24,20 C24,20.5128358 23.6139598,20.9355072 23.1166211,20.9932723 L23,21 L21,21 L21,23 C21,23.5128358 20.6139598,23.9355072 20.1166211,23.9932723 L20,24 C19.4871642,24 19.0644928,23.6139598 19.0067277,23.1166211 L19,23 L19,21 L17,21 C16.4871642,21 16.0644928,20.6139598 16.0067277,20.1166211 L16,20 C16,19.4871642 16.3860402,19.0644928 16.8833789,19.0067277 L17,19 L19,19 L19,17 C19,16.4871642 19.3860402,16.0644928 19.8833789,16.0067277 L20,16 L19.8833789,16.0067277 Z M8.41421356,2 L13.5857864,2 C14.0572824,2 14.5116128,2.16648982 14.8701798,2.46691315 L15,2.58578644 L16.4142136,4 L18,4 C19.5976809,4 20.9036609,5.24891996 20.9949073,6.82372721 L21,7 L21,12 C21,12.5522847 20.5522847,13 20,13 C19.4871642,13 19.0644928,12.6139598 19.0067277,12.1166211 L19,12 L19,7 C19,6.48716416 18.6139598,6.06449284 18.1166211,6.00672773 L18,6 L16.4142136,6 C15.9427176,6 15.4883872,5.83351018 15.1298202,5.53308685 L15,5.41421356 L13.5857864,4 L8.41421356,4 L7,5.41421356 C6.66660199,5.74761157 6.22761579,5.95114561 5.76163928,5.99225938 L5.58578644,6 L4,6 C3.48716416,6 3.06449284,6.38604019 3.00672773,6.88337887 L3,7 L3,18 C3,18.5128358 3.38604019,18.9355072 3.88337887,18.9932723 L4,19 L13,19 C13.5522847,19 14,19.4477153 14,20 C14,20.5128358 13.6139598,20.9355072 13.1166211,20.9932723 L13,21 L4,21 C2.40231912,21 1.09633912,19.75108 1.00509269,18.1762728 L1,18 L1,7 C1,5.40231912 2.24891996,4.09633912 3.82372721,4.00509269 L4,4 L5.58578644,4 L7,2.58578644 C7.33339801,2.25238843 7.77238421,2.04885439 8.23836072,2.00774062 L8.41421356,2 L13.5857864,2 L8.41421356,2 Z M11,7 C13.7614237,7 16,9.23857625 16,12 C16,14.7614237 13.7614237,17 11,17 C8.23857625,17 6,14.7614237 6,12 C6,9.23857625 8.23857625,7 11,7 Z M11,9 C9.34314575,9 8,10.3431458 8,12 C8,13.6568542 9.34314575,15 11,15 C12.6568542,15 14,13.6568542 14,12 C14,10.3431458 12.6568542,9 11,9 Z"/>
</g>
</svg>
</div>
<h4 class="fullName">Your Name</h4>
<p class="subtitle">Enter your name and add<br>a profile picture</p>
<div class="input-wrapper">
<div class="input-field">
<input type="text" name="name" id="name" autocomplete="off" required />
<label for="name">Name</label>
</div>
<div class="input-field">
<input type="text" name="lastName" id="lastName" autocomplete="off" required />
<label for="lastName">Last Name (optional)</label>
</div>
<button class="btn-primary" id="signUp">START MESSAGING</button>
</div>
</div>
<div class="popup popup-avatar">
<div class="popup-container z-depth-1">
<div class="popup-header">
<span class="popup-close">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g fill="none" fill-rule="evenodd">
<polygon points="0 0 24 0 24 24 0 24"/>
<path fill-rule="nonzero" d="M5.20970461,5.38710056 L5.29289322,5.29289322 C5.65337718,4.93240926 6.22060824,4.90467972 6.61289944,5.20970461 L6.70710678,5.29289322 L12,10.585 L17.2928932,5.29289322 C17.6834175,4.90236893 18.3165825,4.90236893 18.7071068,5.29289322 C19.0976311,5.68341751 19.0976311,6.31658249 18.7071068,6.70710678 L13.415,12 L18.7071068,17.2928932 C19.0675907,17.6533772 19.0953203,18.2206082 18.7902954,18.6128994 L18.7071068,18.7071068 C18.3466228,19.0675907 17.7793918,19.0953203 17.3871006,18.7902954 L17.2928932,18.7071068 L12,13.415 L6.70710678,18.7071068 C6.31658249,19.0976311 5.68341751,19.0976311 5.29289322,18.7071068 C4.90236893,18.3165825 4.90236893,17.6834175 5.29289322,17.2928932 L10.585,12 L5.29289322,6.70710678 C4.93240926,6.34662282 4.90467972,5.77939176 5.20970461,5.38710056 L5.29289322,5.29289322 L5.20970461,5.38710056 Z"/>
</g>
</svg>
</span>
<h6>Drag to Reposition</h6>
</div>
<div class="crop"></div>
<button class="btn-primary btn-circle btn-crop z-depth-1">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g fill="none" fill-rule="evenodd">
<polygon points="0 0 24 0 24 24 0 24"/>
<path fill-rule="nonzero" d="M4.70710678,12.2928932 C4.31658249,11.9023689 3.68341751,11.9023689 3.29289322,12.2928932 C2.90236893,12.6834175 2.90236893,13.3165825 3.29289322,13.7071068 L8.29289322,18.7071068 C8.68341751,19.0976311 9.31658249,19.0976311 9.70710678,18.7071068 L20.7071068,7.70710678 C21.0976311,7.31658249 21.0976311,6.68341751 20.7071068,6.29289322 C20.3165825,5.90236893 19.6834175,5.90236893 19.2928932,6.29289322 L9,16.5857864 L4.70710678,12.2928932 Z"/>
</g>
</svg>
</button>
</div>
</div>
</div>
<div class="whole valign-wrapper page-chats" style="display: none;">
<div class="overlays">
<div class="media-viewer">
<div class="media-viewer-author">
<div class="media-viewer-userpic user-avatar"></div>
<div class="media-viewer-name"></div>
<div class="media-viewer-date"></div>
</div>
<div class="media-viewer-buttons">
<div class="media-viewer-delete-button btn-icon tgico-delete rp rps"></div>
<div class="media-viewer-forward-button btn-icon tgico-forward rp rps"></div>
<div class="media-viewer-download-button btn-icon tgico-download rp rps"></div>
<div class="media-viewer-close-button btn-icon tgico-close rp rps"></div>
</div>
<div class="media-viewer-content">
<div class="media-viewer-stub"></div>
<div class="media-viewer-container">
<div class="media-viewer-switcher-left">
<span class="tgico-down media-viewer-prev-button"></span>
</div>
<div class="media-viewer-switcher-right">
<span class="tgico-down media-viewer-next-button"></span>
</div>
<div class="media-viewer-media">
<!-- <img src="assets/img/camomile.jpg" alt="">
<div class="preloader-container">
<svg xmlns="http://www.w3.org/2000/svg" class="preloader-circular" viewBox="25 25 50 50">
<circle class="preloader-path-new" cx="50" cy="50" r="23" fill="none" stroke-miterlimit="10"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" class="preloader-close" viewBox="0 0 20 20">
<line x1="0" y1="20" x2="20" y2="0" stroke-width="1" stroke-linecap="round"></line>
<line x1="0" y1="0" x2="20" y2="20" stroke-width="1" stroke-linecap="round"></line>
</svg>
</div> -->
</div>
</div>
<div class="media-viewer-caption"></div>
<!-- <div class="media-viewer-loader a-loader"></div> -->
</div>
</div>
</div>
<div class="chats-container sidebar sidebar-left">
<div class="sidebar-header">
<button class="btn-icon tgico-menu rp sidebar-tools-button"></button>
<div class="input-search">
<input type="text" placeholder="Search" id="global-search" />
<span class="tgico tgico-search"></span>
</div>
</div>
<!-- <div class="tabs-container"> -->
<div class="sidebar-content">
<div id="chats-container">
<ul id="dialogs-pinned"></ul>
<ul id="dialogs"></ul>
</div>
<div id="search-container">
</div>
</div>
</div>
<div class="chat-container">
<!-- <div class="chat-background"></div> -->
<canvas id="chat-background-canvas"></canvas>
<div id="topbar" style="display: none;">
<div class="chat-info">
<div class="person">
<div class="user-avatar" id="im-avatar"></div>
<div class="content">
<div class="top">
<div class="user-title" id="im-title"></div>
</div>
<div class="bottom">
<div class="info" id="im-subtitle"></div>
</div>
</div>
<div class="pinned-message">
<div class="pinned-message-border"></div>
<div class="pinned-message-content">
<div class="pinned-message-title">Pinned Message</div>
<div class="pinned-message-subtitle">At the end of this stage, all apps should be able to:
+ Update the chat list and receive new messages.
+ Send new messages.
- Display and send media, files and links. (2 дня)
+ Display a 'Shared media' section for chats that includes photos and files. (2 дня максимум)
+ Display stickers, send emoji and stickers. (3 дня)
+ Use the default camomile background in chats. (1 день)
- Search for messages in chats. (2 дня (+фикс скролла))
</div>
</div>
</div>
</div>
</div>
<div class="pinned-msg"></div>
<div class="btn-icon rp tool-mute chat-mute-button" style="display: none;"></div>
<div class="btn-icon rp tgico-search chat-search-button"></div>
<div class="btn-icon rp tgico-more chat-more-button"></div>
</div>
<div id="bubbles">
<div id="bubbles-inner"></div>
</div>
<!-- <div id="chat-closed"></div> -->
<!-- <div id="chat-closed">
<div class="tgico-chatsplaceholder"></div>
<h3>Open Chat<br>or create a new one</h3>
<div class="buttons">
<button class="btn-circle tgico-newprivate"><span>Private</span></button>
<button class="btn-circle tgico-newgroup"><span>Group</span></button>
<button class="btn-circle tgico-channel"><span>Channel</span></button>
</div>
</div> -->
<div id="chat-input" style="display: none;">
<!-- <div id="chat-input"> -->
<div class="emoji-dropdown">
<ul class="emoji-tabs menu-horizontal">
<li class="emoji-tabs-emoji rp">Emoji</li>
<li class="emoji-tabs-stickers rp">Stickers</li>
<li class="emoji-tabs-gifs rp">GIFs</li>
</ul>
<div class="emoji-container">
<div class="tabs-container">
<div class="emoji-padding">
<div id="content-emoji"></div>
<ul class="menu-horizontal justify-start">
<li class="btn-icon tgico-recent rp"></li>
<li class="active btn-icon tgico-smile rp"></li>
<li class="btn-icon tgico-animals rp"></li>
<li class="btn-icon tgico-eats rp"></li>
<li class="btn-icon tgico-car rp"></li>
<li class="btn-icon tgico-sport rp"></li>
<li class="btn-icon tgico-lamp rp"></li>
<li class="btn-icon tgico-info rp"></li>
<li class="btn-icon tgico-flag rp"></li>
</ul>
</div>
<div class="stickers-padding">
<div id="content-stickers"></div>
<div class="menu-wrapper">
<ul class="menu-horizontal justify-start">
<li class="btn-icon tgico-recent active"></li>
</ul>
</div>
</div>
<div class="gifs-padding"><div id="content-gifs">3</div></div>
</div>
</div>
</div>
<div class="input-message">
<button class="btn-icon rp tgico-smile toggle-emoticons"></button>
<!-- <textarea type="text" id="input-message" placeholder="Message" contenteditable="true"></textarea> -->
<div class="input-message-container">
<div id="input-message" contenteditable="true" data-placeholder="Message"></div>
</div>
<button class="btn-icon rp tgico-attach" id="attach-file"></button>
<input type="file" id="input-file" style="display: none;" />
</div>
<button class="btn-circle z-depth-1 btn-icon tgico-microphone2" id="btn-send"></button>
</div>
</div>
<div class="profile-container sidebar sidebar-right">
<div class="sidebar-header">
<button class="btn-icon rp tgico-close sidebar-close-button"></button>
<div class="sidebar-title">Info</div>
<button class="btn-icon rp tgico-edit sidebar-edit-button"></button>
<div class="btn-icon tgico-more rp sidebar-menu-button">
<div class="sidebar-menu is-bottom-left">
<button class="btn-icon rp tgico-edit sidebar-menu-edit"></button>
<button class="sidebar-menu-block a-menu-item is-danger">Block</button>
</div>
</div>
</div>
<div class="profile-content">
<div class="profile-avatar user-avatar"></div>
<div class="profile-name"></div>
<div class="profile-subtitle"></div>
<div class="profile-row profile-row-bio tgico-info">
<p></p>
<p class="profile-row-label">Bio</p>
</div>
<div class="profile-row profile-row-username tgico-username">
<p></p>
<p class="profile-row-label">Username</p>
</div>
<div class="profile-row profile-row-phone tgico-phone">
<p></p>
<p class="profile-row-label">Phone</p>
</div>
<div class="profile-row profile-row-notifications">
<input type="checkbox" id="profile-notifications" checked="checked">
<span>Notifications</span>
<p class="profile-row-label">Enabled</p>
</div>
<ul class="profile-tabs menu-horizontal">
<li class="profile-tabs-members rp" style="display: none;">Members</li>
<li class="profile-tabs-media rp">Media</li>
<li class="profile-tabs-docs rp">Docs</li>
<li class="profile-tabs-links rp">Links</li>
<li class="profile-tabs-audio rp">Audio</li>
</ul>
<div class="content-container">
<div class="profile-tabs-content tabs-container">
<div class="content-members-container"><div id="content-members">1</div></div>
<div class="content-media-container"><div id="content-media"></div></div>
<div class="content-docs-container"><div id="content-docs"></div></div>
<div class="content-links-container"><div id="content-links">4</div></div>
<div class="content-audio-container"><div id="content-audio">5</div></div>
</div>
</div>
</div>
</div>
</div>
<!-- <script src="bundle.js"></script> -->
<!-- <script src="npm.aes-js.chunk.js"></script>
<script src="npm.jsbn.chunk.js"></script>
<script src="npm.leemon.chunk.js"></script>
<script src="npm.lottie-web.chunk.js"></script>
<script src="vendors~main.chunk.js"></script>
<script src="main.bundle.js"></script> -->
</html>
<script type="text/javascript" src="runtime.bundle.js"></script><script type="text/javascript" src="npm.aes-js.chunk.js"></script><script type="text/javascript" src="npm.jsbn.chunk.js"></script><script type="text/javascript" src="npm.leemon.chunk.js"></script><script type="text/javascript" src="npm.lottie-web.chunk.js"></script><script type="text/javascript" src="vendors~main.chunk.js"></script><script type="text/javascript" src="main.chunk.js"></script>

BIN
public/index.html.gz Normal file

Binary file not shown.

422
public/index_template.html Normal file
View File

@ -0,0 +1,422 @@
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8">
<title>Telegram Web</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- <link rel="manifest" href="/site.webmanifest"> -->
<link rel="apple-touch-icon" href="icon.png">
<!-- Place favicon.ico in the root directory -->
<style>
/* cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Roboto'), local('Roboto-Regular'), url(assets/fonts/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');
unicode-range:U + 0400-045F, U + 0490-0491, U + 04B0-04B1, U + 2116
}
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Roboto'), local('Roboto-Regular'), url(assets/fonts/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');
unicode-range:U + 0100-024F, U + 0259, U + 1E00-1EFF, U + 2020, U + 20A0-20AB, U + 20AD-20CF, U + 2113, U + 2C60-2C7F, U + A720-A7FF
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Roboto'), local('Roboto-Regular'), url(assets/fonts/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');
unicode-range:U + 0000-00FF, U + 0131, U + 0152-0153, U + 02BB-02BC, U + 02C6, U + 02DA, U + 02DC, U + 2000-206F, U + 2074, U + 20AC, U + 2122, U + 2191, U + 2193, U + 2212, U + 2215, U + FEFF, U + FFFD
}
/* cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: local('Roboto Medium'), local('Roboto-Medium'), url(assets/fonts/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');
unicode-range:U + 0400-045F, U + 0490-0491, U + 04B0-04B1, U + 2116
}
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: local('Roboto Medium'), local('Roboto-Medium'), url(assets/fonts/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');
unicode-range:U + 0100-024F, U + 0259, U + 1E00-1EFF, U + 2020, U + 20A0-20AB, U + 20AD-20CF, U + 2113, U + 2C60-2C7F, U + A720-A7FF
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
font-display: swap;
src: local('Roboto Medium'), local('Roboto-Medium'), url(assets/fonts/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');
unicode-range:U + 0000-00FF, U + 0131, U + 0152-0153, U + 02BB-02BC, U + 02C6, U + 02DA, U + 02DC, U + 2000-206F, U + 2074, U + 20AC, U + 2122, U + 2191, U + 2193, U + 2212, U + 2215, U + FEFF, U + FFFD
}
</style>
<meta name="theme-color" content="#fafafa">
</head>
<body>
<!--[if IE]>
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience and security.</p>
<![endif]-->
<div class="whole valign-wrapper page-sign" style="display: none;">
<div class="container center-align">
<div class="auth-image">
<svg class="sign-logo" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.2 69.2" style="enable-background:new 0 0 69.2 69.2;" xml:space="preserve">
<g id="Layer_2">
<circle class="st0" fill="#4EA4F6" cx="34.6" cy="34.6" r="34.6"/>
</g>
<g id="Layer_3">
<path class="st1" fill="#FFFFFF" d="M14.4,34.3c0,0,17.3-7.1,23.3-9.6c2.3-1,10.1-4.2,10.1-4.2s3.6-1.4,3.3,2c-0.1,1.4-0.9,6.3-1.7,11.6
c-1.2,7.5-2.5,15.7-2.5,15.7s-0.2,2.3-1.9,2.7c-1.7,0.4-4.5-1.4-5-1.8c-0.4-0.3-7.5-4.8-10.1-7c-0.7-0.6-1.5-1.8,0.1-3.2
c3.6-3.3,7.9-7.4,10.5-10c1.2-1.2,2.4-4-2.6-0.6c-7.1,4.9-14.1,9.5-14.1,9.5s-1.6,1-4.6,0.1c-3-0.9-6.5-2.1-6.5-2.1
S10.3,35.9,14.4,34.3z"/>
</g>
</svg>
</div>
<h4>Sign in to Telegram</h4>
<p class="subtitle">Please confirm your country and<br> enter your phone number.</p>
<div class="input-wrapper">
<div class="input-field input-select">
<input type="text" name="countryCode" id="countryCode" autocomplete="rrRandomRR" required />
<label for="countryCode">Country</label>
<span class="arrow arrow-down"></span>
</div>
<div class="input-field">
<input type="tel" name="phone" id="phone" autocomplete="rr55RandomRR55" required />
<label for="phone">Phone Number</label>
</div>
<label class="checkbox-field">
<input type="checkbox" id="keepSigned" checked="checked">
<span>Keep me signed in</span>
</label>
<button class="btn-primary" style="display: none;">NEXT</button>
</div>
</div>
</div>
<div class="whole valign-wrapper page-authCode" style="display: none;">
<div class="container center-align">
<div class="auth-image"></div>
<div class="phone-wrapper">
<h4 class="phone"></h4>
<span class="phone-edit tgico-edit"></span>
</div>
<p class="subtitle sent-type"></p>
<div class="input-wrapper">
<div class="input-field">
<input type="text" name="code" id="code" autocomplete="off" required />
<label for="code">Code</label>
</div>
</div>
</div>
</div>
<div class="whole valign-wrapper page-password" style="display: none;">
<div class="container center-align">
<div class="auth-image"></div>
<h4 class="phone">Enter a password</h4>
<p class="subtitle">Your account is protected with<br>an additional password</p>
<div class="input-wrapper">
<div class="input-field">
<input type="password" name="password" id="password" autocomplete="off" required />
<label for="password">Password</label>
<span class="toggle-visible tgico-eye1"></span>
</div>
<button class="btn-primary">NEXT</button>
</div>
</div>
</div>
<div class="whole valign-wrapper page-signUp" style="display: none;">
<div class="container center-align">
<div class="auth-image">
<input type="file" id="avatar-input" style="display: none;" />
<canvas id="canvas-avatar"></canvas>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g fill="none" fill-rule="evenodd">
<polygon points="0 0 24 0 24 24 0 24"/>
<path fill="#fff" fill-rule="nonzero" d="M19.8833789,16.0067277 L20,16 C20.5128358,16 20.9355072,16.3860402 20.9932723,16.8833789 L21,17 L21,19 L23,19 C23.5128358,19 23.9355072,19.3860402 23.9932723,19.8833789 L24,20 C24,20.5128358 23.6139598,20.9355072 23.1166211,20.9932723 L23,21 L21,21 L21,23 C21,23.5128358 20.6139598,23.9355072 20.1166211,23.9932723 L20,24 C19.4871642,24 19.0644928,23.6139598 19.0067277,23.1166211 L19,23 L19,21 L17,21 C16.4871642,21 16.0644928,20.6139598 16.0067277,20.1166211 L16,20 C16,19.4871642 16.3860402,19.0644928 16.8833789,19.0067277 L17,19 L19,19 L19,17 C19,16.4871642 19.3860402,16.0644928 19.8833789,16.0067277 L20,16 L19.8833789,16.0067277 Z M8.41421356,2 L13.5857864,2 C14.0572824,2 14.5116128,2.16648982 14.8701798,2.46691315 L15,2.58578644 L16.4142136,4 L18,4 C19.5976809,4 20.9036609,5.24891996 20.9949073,6.82372721 L21,7 L21,12 C21,12.5522847 20.5522847,13 20,13 C19.4871642,13 19.0644928,12.6139598 19.0067277,12.1166211 L19,12 L19,7 C19,6.48716416 18.6139598,6.06449284 18.1166211,6.00672773 L18,6 L16.4142136,6 C15.9427176,6 15.4883872,5.83351018 15.1298202,5.53308685 L15,5.41421356 L13.5857864,4 L8.41421356,4 L7,5.41421356 C6.66660199,5.74761157 6.22761579,5.95114561 5.76163928,5.99225938 L5.58578644,6 L4,6 C3.48716416,6 3.06449284,6.38604019 3.00672773,6.88337887 L3,7 L3,18 C3,18.5128358 3.38604019,18.9355072 3.88337887,18.9932723 L4,19 L13,19 C13.5522847,19 14,19.4477153 14,20 C14,20.5128358 13.6139598,20.9355072 13.1166211,20.9932723 L13,21 L4,21 C2.40231912,21 1.09633912,19.75108 1.00509269,18.1762728 L1,18 L1,7 C1,5.40231912 2.24891996,4.09633912 3.82372721,4.00509269 L4,4 L5.58578644,4 L7,2.58578644 C7.33339801,2.25238843 7.77238421,2.04885439 8.23836072,2.00774062 L8.41421356,2 L13.5857864,2 L8.41421356,2 Z M11,7 C13.7614237,7 16,9.23857625 16,12 C16,14.7614237 13.7614237,17 11,17 C8.23857625,17 6,14.7614237 6,12 C6,9.23857625 8.23857625,7 11,7 Z M11,9 C9.34314575,9 8,10.3431458 8,12 C8,13.6568542 9.34314575,15 11,15 C12.6568542,15 14,13.6568542 14,12 C14,10.3431458 12.6568542,9 11,9 Z"/>
</g>
</svg>
</div>
<h4 class="fullName">Your Name</h4>
<p class="subtitle">Enter your name and add<br>a profile picture</p>
<div class="input-wrapper">
<div class="input-field">
<input type="text" name="name" id="name" autocomplete="off" required />
<label for="name">Name</label>
</div>
<div class="input-field">
<input type="text" name="lastName" id="lastName" autocomplete="off" required />
<label for="lastName">Last Name (optional)</label>
</div>
<button class="btn-primary" id="signUp">START MESSAGING</button>
</div>
</div>
<div class="popup popup-avatar">
<div class="popup-container z-depth-1">
<div class="popup-header">
<span class="popup-close">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g fill="none" fill-rule="evenodd">
<polygon points="0 0 24 0 24 24 0 24"/>
<path fill-rule="nonzero" d="M5.20970461,5.38710056 L5.29289322,5.29289322 C5.65337718,4.93240926 6.22060824,4.90467972 6.61289944,5.20970461 L6.70710678,5.29289322 L12,10.585 L17.2928932,5.29289322 C17.6834175,4.90236893 18.3165825,4.90236893 18.7071068,5.29289322 C19.0976311,5.68341751 19.0976311,6.31658249 18.7071068,6.70710678 L13.415,12 L18.7071068,17.2928932 C19.0675907,17.6533772 19.0953203,18.2206082 18.7902954,18.6128994 L18.7071068,18.7071068 C18.3466228,19.0675907 17.7793918,19.0953203 17.3871006,18.7902954 L17.2928932,18.7071068 L12,13.415 L6.70710678,18.7071068 C6.31658249,19.0976311 5.68341751,19.0976311 5.29289322,18.7071068 C4.90236893,18.3165825 4.90236893,17.6834175 5.29289322,17.2928932 L10.585,12 L5.29289322,6.70710678 C4.93240926,6.34662282 4.90467972,5.77939176 5.20970461,5.38710056 L5.29289322,5.29289322 L5.20970461,5.38710056 Z"/>
</g>
</svg>
</span>
<h6>Drag to Reposition</h6>
</div>
<div class="crop"></div>
<button class="btn-primary btn-circle btn-crop z-depth-1">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g fill="none" fill-rule="evenodd">
<polygon points="0 0 24 0 24 24 0 24"/>
<path fill-rule="nonzero" d="M4.70710678,12.2928932 C4.31658249,11.9023689 3.68341751,11.9023689 3.29289322,12.2928932 C2.90236893,12.6834175 2.90236893,13.3165825 3.29289322,13.7071068 L8.29289322,18.7071068 C8.68341751,19.0976311 9.31658249,19.0976311 9.70710678,18.7071068 L20.7071068,7.70710678 C21.0976311,7.31658249 21.0976311,6.68341751 20.7071068,6.29289322 C20.3165825,5.90236893 19.6834175,5.90236893 19.2928932,6.29289322 L9,16.5857864 L4.70710678,12.2928932 Z"/>
</g>
</svg>
</button>
</div>
</div>
</div>
<div class="whole valign-wrapper page-chats" style="display: none;">
<div class="overlays">
<div class="media-viewer">
<div class="media-viewer-author">
<div class="media-viewer-userpic user-avatar"></div>
<div class="media-viewer-name"></div>
<div class="media-viewer-date"></div>
</div>
<div class="media-viewer-buttons">
<div class="media-viewer-delete-button btn-icon tgico-delete rp rps"></div>
<div class="media-viewer-forward-button btn-icon tgico-forward rp rps"></div>
<div class="media-viewer-download-button btn-icon tgico-download rp rps"></div>
<div class="media-viewer-close-button btn-icon tgico-close rp rps"></div>
</div>
<div class="media-viewer-content">
<div class="media-viewer-stub"></div>
<div class="media-viewer-container">
<div class="media-viewer-switcher-left">
<span class="tgico-down media-viewer-prev-button"></span>
</div>
<div class="media-viewer-switcher-right">
<span class="tgico-down media-viewer-next-button"></span>
</div>
<div class="media-viewer-media">
<!-- <img src="assets/img/camomile.jpg" alt="">
<div class="preloader-container">
<svg xmlns="http://www.w3.org/2000/svg" class="preloader-circular" viewBox="25 25 50 50">
<circle class="preloader-path-new" cx="50" cy="50" r="23" fill="none" stroke-miterlimit="10"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" class="preloader-close" viewBox="0 0 20 20">
<line x1="0" y1="20" x2="20" y2="0" stroke-width="1" stroke-linecap="round"></line>
<line x1="0" y1="0" x2="20" y2="20" stroke-width="1" stroke-linecap="round"></line>
</svg>
</div> -->
</div>
</div>
<div class="media-viewer-caption"></div>
<!-- <div class="media-viewer-loader a-loader"></div> -->
</div>
</div>
</div>
<div class="chats-container sidebar sidebar-left">
<div class="sidebar-header">
<button class="btn-icon tgico-menu rp sidebar-tools-button"></button>
<div class="input-search">
<input type="text" placeholder="Search" id="global-search" />
<span class="tgico tgico-search"></span>
</div>
</div>
<!-- <div class="tabs-container"> -->
<div class="sidebar-content">
<div id="chats-container">
<ul id="dialogs-pinned"></ul>
<ul id="dialogs"></ul>
</div>
<div id="search-container">
</div>
</div>
</div>
<div class="chat-container">
<!-- <div class="chat-background"></div> -->
<canvas id="chat-background-canvas"></canvas>
<div id="topbar" style="display: none;">
<div class="chat-info">
<div class="person">
<div class="user-avatar" id="im-avatar"></div>
<div class="content">
<div class="top">
<div class="user-title" id="im-title"></div>
</div>
<div class="bottom">
<div class="info" id="im-subtitle"></div>
</div>
</div>
<div class="pinned-message">
<div class="pinned-message-border"></div>
<div class="pinned-message-content">
<div class="pinned-message-title">Pinned Message</div>
<div class="pinned-message-subtitle">At the end of this stage, all apps should be able to:
+ Update the chat list and receive new messages.
+ Send new messages.
- Display and send media, files and links. (2 дня)
+ Display a 'Shared media' section for chats that includes photos and files. (2 дня максимум)
+ Display stickers, send emoji and stickers. (3 дня)
+ Use the default camomile background in chats. (1 день)
- Search for messages in chats. (2 дня (+фикс скролла))
</div>
</div>
</div>
</div>
</div>
<div class="pinned-msg"></div>
<div class="btn-icon rp tool-mute chat-mute-button" style="display: none;"></div>
<div class="btn-icon rp tgico-search chat-search-button"></div>
<div class="btn-icon rp tgico-more chat-more-button"></div>
</div>
<div id="bubbles">
<div id="bubbles-inner"></div>
</div>
<!-- <div id="chat-closed"></div> -->
<!-- <div id="chat-closed">
<div class="tgico-chatsplaceholder"></div>
<h3>Open Chat<br>or create a new one</h3>
<div class="buttons">
<button class="btn-circle tgico-newprivate"><span>Private</span></button>
<button class="btn-circle tgico-newgroup"><span>Group</span></button>
<button class="btn-circle tgico-channel"><span>Channel</span></button>
</div>
</div> -->
<div id="chat-input" style="display: none;">
<!-- <div id="chat-input"> -->
<div class="emoji-dropdown">
<ul class="emoji-tabs menu-horizontal">
<li class="emoji-tabs-emoji rp">Emoji</li>
<li class="emoji-tabs-stickers rp">Stickers</li>
<li class="emoji-tabs-gifs rp">GIFs</li>
</ul>
<div class="emoji-container">
<div class="tabs-container">
<div class="emoji-padding">
<div id="content-emoji"></div>
<ul class="menu-horizontal justify-start">
<li class="btn-icon tgico-recent rp"></li>
<li class="active btn-icon tgico-smile rp"></li>
<li class="btn-icon tgico-animals rp"></li>
<li class="btn-icon tgico-eats rp"></li>
<li class="btn-icon tgico-car rp"></li>
<li class="btn-icon tgico-sport rp"></li>
<li class="btn-icon tgico-lamp rp"></li>
<li class="btn-icon tgico-info rp"></li>
<li class="btn-icon tgico-flag rp"></li>
</ul>
</div>
<div class="stickers-padding">
<div id="content-stickers"></div>
<div class="menu-wrapper">
<ul class="menu-horizontal justify-start">
<li class="btn-icon tgico-recent active"></li>
</ul>
</div>
</div>
<div class="gifs-padding"><div id="content-gifs">3</div></div>
</div>
</div>
</div>
<div class="input-message">
<button class="btn-icon rp tgico-smile toggle-emoticons"></button>
<!-- <textarea type="text" id="input-message" placeholder="Message" contenteditable="true"></textarea> -->
<div class="input-message-container">
<div id="input-message" contenteditable="true" data-placeholder="Message"></div>
</div>
<button class="btn-icon rp tgico-attach" id="attach-file"></button>
<input type="file" id="input-file" style="display: none;" />
</div>
<button class="btn-circle z-depth-1 btn-icon tgico-microphone2" id="btn-send"></button>
</div>
</div>
<div class="profile-container sidebar sidebar-right">
<div class="sidebar-header">
<button class="btn-icon rp tgico-close sidebar-close-button"></button>
<div class="sidebar-title">Info</div>
<button class="btn-icon rp tgico-edit sidebar-edit-button"></button>
<div class="btn-icon tgico-more rp sidebar-menu-button">
<div class="sidebar-menu is-bottom-left">
<button class="btn-icon rp tgico-edit sidebar-menu-edit"></button>
<button class="sidebar-menu-block a-menu-item is-danger">Block</button>
</div>
</div>
</div>
<div class="profile-content">
<div class="profile-avatar user-avatar"></div>
<div class="profile-name"></div>
<div class="profile-subtitle"></div>
<div class="profile-row profile-row-bio tgico-info">
<p></p>
<p class="profile-row-label">Bio</p>
</div>
<div class="profile-row profile-row-username tgico-username">
<p></p>
<p class="profile-row-label">Username</p>
</div>
<div class="profile-row profile-row-phone tgico-phone">
<p></p>
<p class="profile-row-label">Phone</p>
</div>
<div class="profile-row profile-row-notifications">
<input type="checkbox" id="profile-notifications" checked="checked">
<span>Notifications</span>
<p class="profile-row-label">Enabled</p>
</div>
<ul class="profile-tabs menu-horizontal">
<li class="profile-tabs-members rp" style="display: none;">Members</li>
<li class="profile-tabs-media rp">Media</li>
<li class="profile-tabs-docs rp">Docs</li>
<li class="profile-tabs-links rp">Links</li>
<li class="profile-tabs-audio rp">Audio</li>
</ul>
<div class="content-container">
<div class="profile-tabs-content tabs-container">
<div class="content-members-container"><div id="content-members">1</div></div>
<div class="content-media-container"><div id="content-media"></div></div>
<div class="content-docs-container"><div id="content-docs"></div></div>
<div class="content-links-container"><div id="content-links">4</div></div>
<div class="content-audio-container"><div id="content-audio">5</div></div>
</div>
</div>
</div>
</div>
</div>
<!-- <script src="bundle.js"></script> -->
<!-- <script src="npm.aes-js.chunk.js"></script>
<script src="npm.jsbn.chunk.js"></script>
<script src="npm.leemon.chunk.js"></script>
<script src="npm.lottie-web.chunk.js"></script>
<script src="vendors~main.chunk.js"></script>
<script src="main.bundle.js"></script> -->
</html>

27
public/main.chunk.js Normal file

File diff suppressed because one or more lines are too long

BIN
public/main.chunk.js.gz Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

1
public/npm.jsbn.chunk.js Normal file

File diff suppressed because one or more lines are too long

BIN
public/npm.jsbn.chunk.js.gz Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

1
public/runtime.bundle.js Normal file
View File

@ -0,0 +1 @@
!function(e){function r(r){for(var n,l,f=r[0],i=r[1],a=r[2],c=0,s=[];c<f.length;c++)l=f[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,f=1;f<t.length;f++){var i=t[f];0!==o[i]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={5:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="";var f=window.webpackJsonp=window.webpackJsonp||[],i=f.push.bind(f);f.push=r,f=f.slice();for(var a=0;a<f.length;a++)r(f[a]);var p=i;t()}([]);

File diff suppressed because one or more lines are too long

Binary file not shown.

BIN
src/.DS_Store vendored Normal file

Binary file not shown.

BIN
src/assets/.DS_Store vendored Normal file

Binary file not shown.

BIN
src/assets/fonts/.DS_Store vendored Normal file

Binary file not shown.

BIN
src/assets/fonts/tgico.eot Normal file

Binary file not shown.

108
src/assets/fonts/tgico.svg Normal file
View File

@ -0,0 +1,108 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="check_svg" d="M429.452 283.67l352.606 402.978c12.74 14.56 34.872 16.036 49.432 3.295 13.104-11.466 15.61-30.54 6.692-44.854l-3.397-4.578-377.263-431.158c-12.010-13.726-32.215-15.731-46.582-5.549l-4.553 3.846-161.684 161.684c-13.681 13.681-13.681 35.861 0 49.542 12.313 12.313 31.51 13.544 45.2 3.694l4.342-3.694 135.207-135.207z" />
<glyph unicode="&#xe901;" glyph-name="settings_svg" d="M574.049 917.333c44.763 0 85.055-34.149 92.639-78.255l11.132-64.743c21.986-9.976 42.789-22.111 62.102-36.238l59.204 21.999c42.327 15.728 92.075-2.624 114.342-41.844l40.694-71.677c22.083-38.896 12.844-91.038-21.177-119.995l-48.916-41.635c1.365-12.471 2.066-24.728 2.066-36.945s-0.702-24.471-2.066-36.941l48.909-41.615c34.127-29.037 43.25-81.12 21.184-119.994l-40.694-71.691c-22.281-39.253-72.139-57.537-114.343-41.855l-59.204 21.999c-19.312-14.126-40.116-26.262-62.102-36.238l-11.132-64.743c-7.563-43.987-47.98-78.255-92.639-78.255h-81.402c-44.76 0-85.054 34.144-92.647 78.246l-11.148 64.757c-21.974 9.976-42.775 22.111-62.095 36.236l-59.193-22c-42.324-15.731-92.071 2.628-114.341 41.849l-40.708 71.691c-22.089 38.901-12.854 91.046 21.174 120l48.921 41.624c-1.371 12.507-2.077 24.743-2.077 36.931 0 12.19 0.706 24.427 2.077 36.936l-48.927 41.644c-34.124 29.045-43.242 81.131-21.166 120l40.708 71.677c22.288 39.243 72.143 57.521 114.339 41.838l59.193-22c15.456 11.3 31.86 21.326 49.054 29.992l13.041 6.243 11.148 64.757c7.572 43.983 47.991 78.246 92.647 78.246h81.402zM574.049 832h-81.402c-3.005 0-8.008-4.241-8.55-7.39l-15.141-87.948c-2.578-14.975-12.926-27.449-27.167-32.749-29.427-10.951-56.391-26.714-79.781-46.637-11.769-10.024-28.039-12.898-42.53-7.512l-81.642 30.343c-2.886 1.073-8.755-1.079-10.409-3.992l-40.708-71.677c-1.871-3.295-0.626-10.408 2.274-12.877l66.78-56.84c11.46-9.754 16.934-24.825 14.405-39.66-2.856-16.758-4.312-32.167-4.312-47.062s1.456-30.303 4.312-47.062c2.529-14.838-2.947-29.911-14.411-39.665l-66.78-56.82c-2.848-2.423-4.121-9.609-2.267-12.873l40.708-71.691c1.676-2.952 7.468-5.089 10.408-3.997l81.642 30.343c14.491 5.386 30.761 2.512 42.53-7.512 23.39-19.923 50.354-35.685 79.781-46.637 14.241-5.3 24.589-17.774 27.167-32.749l15.141-87.948c0.561-3.261 5.434-7.39 8.55-7.39h81.402c3.002 0 7.999 4.237 8.539 7.381l15.121 87.948c2.576 14.983 12.93 27.463 27.18 32.762 29.447 10.949 56.4 26.706 79.753 46.618 11.769 10.035 28.047 12.915 42.544 7.528l81.661-30.343c2.889-1.074 8.757 1.078 10.41 3.99l40.694 71.691c1.872 3.299 0.626 10.413-2.271 12.879l-66.78 56.82c-11.482 9.77-16.956 24.874-14.399 39.732 2.848 16.55 4.301 31.992 4.301 46.995s-1.453 30.445-4.301 46.995c-2.556 14.855 2.915 29.957 14.394 39.727l66.78 56.84c2.855 2.43 4.13 9.622 2.279 12.882l-40.694 71.677c-1.672 2.944-7.464 5.081-10.411 3.986l-81.661-30.343c-14.498-5.387-30.775-2.507-42.544 7.528-23.353 19.912-50.306 35.669-79.753 46.618-14.25 5.298-24.603 17.779-27.18 32.762l-15.121 87.948c-0.56 3.256-5.426 7.381-8.539 7.381zM533.333 533.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333z" />
<glyph unicode="&#xe902;" glyph-name="smallscreen_svg" d="M640 362.667h170.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-128v-128c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v170.667c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM384 362.667c23.564 0 42.667-19.103 42.667-42.667v-170.667c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667v128h-128c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667h170.667zM640 789.333c23.564 0 42.667-19.103 42.667-42.667v-128h128c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667h-170.667c-23.564 0-42.667 19.103-42.667 42.667v170.667c0 23.564 19.103 42.667 42.667 42.667zM384 789.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-170.667c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-170.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h128v128c0 23.564 19.103 42.667 42.667 42.667z" />
<glyph unicode="&#xe903;" glyph-name="smile_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM284.419 377.593c19.94 10.175 44.353 2.258 54.528-17.682 32.942-64.559 99.285-106.044 173.053-106.044 73.655 0 139.914 41.358 172.91 105.764 10.207 19.924 34.633 27.8 54.556 17.593s27.8-34.633 17.593-54.556c-46.735-91.224-140.688-149.868-245.060-149.868-104.532 0-198.604 58.824-245.263 150.265-10.175 19.94-2.258 44.353 17.682 54.528zM373.333 618.667c29.455 0 53.333-28.654 53.333-64s-23.878-64-53.333-64c-29.455 0-53.333 28.654-53.333 64s23.878 64 53.333 64zM650.667 618.667c29.455 0 53.333-28.654 53.333-64s-23.878-64-53.333-64c-29.455 0-53.333 28.654-53.333 64s23.878 64 53.333 64z" />
<glyph unicode="&#xe904;" glyph-name="sport_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM633.382 812.421l-99.43-59.674c-11.823-7.094-26.224-7.98-38.692-2.66l-5.212 2.66-99.43 59.674c-73.272-24.394-136.73-70.269-182.904-130.155 1.307-2.149 2.38-4.446 3.232-6.866l1.114-3.719 21.333-85.333c3.181-12.722 0.316-26.088-7.549-36.331l-3.674-4.187-85.333-85.333c-2.67-2.67-5.606-4.913-8.723-6.727l-0.113-5.77c0-98.342 36.968-188.050 97.765-255.985l94.228-0.015c14.987 0 28.876-7.863 36.586-20.715l56.656-94.465c31.514-8.363 64.619-12.82 98.764-12.82s67.25 4.457 98.764 12.82l56.649 94.465c6.747 11.245 18.224 18.671 31.028 20.352l5.559 0.363 94.235 0.015c60.797 67.935 97.765 157.643 97.765 255.985l-0.071 5.746c-3.132 1.819-6.083 4.069-8.765 6.751l-85.333 85.333c-10.598 10.598-14.858 25.978-11.223 40.518l21.333 85.333c0.951 3.804 2.386 7.361 4.221 10.62-43.172 56.11-101.644 99.936-169.159 125.296l-13.622 4.824zM537.6 652.8l170.667-128c15.914-11.935 21.468-33.284 13.389-51.462l-85.333-192c-6.848-15.408-22.128-25.338-38.989-25.338h-170.667c-16.861 0-32.141 9.93-38.989 25.338l-85.333 192c-8.079 18.178-2.525 39.527 13.389 51.462l170.667 128c15.17 11.378 36.030 11.378 51.2 0zM512 565.333l-117.871-88.403 60.265-135.597h115.211l60.265 135.597-117.871 88.403z" />
<glyph unicode="&#xe905;" glyph-name="stop_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM341.333 490.667h341.333c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-341.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287z" />
<glyph unicode="&#xe906;" glyph-name="unarchive_svg" d="M320 917.333h384c50.361 0 97.967-22.229 130.279-60.418l6.255-7.849 64-85.333c19.941-26.588 31.636-58.35 33.776-91.357l0.358-11.043v-469.333c0-94.257-76.41-170.667-170.667-170.667h-512c-94.257 0-170.667 76.41-170.667 170.667v469.333c0 33.234 9.701 65.662 27.794 93.351l6.34 9.049 64 85.333c30.217 40.289 76.563 65.036 126.502 67.972l10.032 0.295zM768 661.333h-512c-47.128 0-85.333-38.205-85.333-85.333v-384c0-47.128 38.205-85.333 85.333-85.333h512c47.128 0 85.333 38.205 85.333 85.333v384c0 47.128-38.205 85.333-85.333 85.333zM542.17 499.503l128-128c16.662-16.662 16.662-43.677 0-60.34s-43.677-16.662-60.34 0l-97.83 97.83-97.83-97.83c-16.662-16.662-43.677-16.662-60.34 0s-16.662 43.677 0 60.34l128 128c16.662 16.662 43.677 16.662 60.34 0zM704 832h-384c-24.418 0-47.54-10.451-63.65-28.495l-4.617-5.638-43.503-57.975c15.158 4.411 31.188 6.775 47.769 6.775h512c16.566 0 32.581-2.36 47.727-6.763l-43.46 57.963c-14.651 19.534-36.885 31.761-60.986 33.823l-7.281 0.311z" />
<glyph unicode="&#xe907;" glyph-name="unlock_svg" d="M758.746 917.136l9.254 0.197c114.72 0 208.291-90.552 213.136-204.079l0.197-9.254v-128c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v128c0 70.692-57.308 128-128 128-68.168 0-123.89-53.287-127.783-120.479l-0.217-7.521v-85.333c70.692 0 128-57.308 128-128v-341.333c0-70.692-57.308-128-128-128h-426.667c-70.692 0-128 57.308-128 128v341.333c0 70.692 57.308 128 128 128h341.333v85.333c0 114.72 90.552 208.291 204.079 213.136zM640 533.333h-426.667c-23.564 0-42.667-19.103-42.667-42.667v-341.333c0-23.564 19.103-42.667 42.667-42.667h426.667c23.564 0 42.667 19.103 42.667 42.667v341.333c0 23.564-19.103 42.667-42.667 42.667zM426.667 384c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z" />
<glyph unicode="&#xe908;" glyph-name="unmute_svg" d="M469.333 106.667h85.333c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM512 874.667c164.949 0 298.667-133.718 298.667-298.667v-243.082l78.167-117.251c18.903-28.354-1.423-66.334-35.501-66.334h-682.667c-34.078 0-54.404 37.98-35.501 66.334l78.167 117.251v243.082c0 164.949 133.718 298.667 298.667 298.667zM512 789.333c-117.821 0-213.333-95.513-213.333-213.333v-243.082c0-16.847-4.987-33.317-14.332-47.334l-33.945-50.917h523.22l-33.945 50.917c-9.345 14.017-14.332 30.487-14.332 47.334v243.082c0 117.821-95.513 213.333-213.333 213.333z" />
<glyph unicode="&#xe909;" glyph-name="unpin_svg" d="M137.341 858.651l3.609 3.966c15.608 15.149 39.825 15.971 56.367 2.708l3.966-3.609 704-725.333c16.412-16.909 16.009-43.921-0.9-60.333-15.608-15.149-39.825-15.971-56.367-2.708l-3.966 3.609-153.789 158.39-2.618-0.387-4.976-0.287h-128v-213.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v213.333h-229.827c-35.346 0-64 28.654-64 64 0 13.435 4.226 26.47 11.991 37.298l4.174 5.222 126.831 142.685-13.521 148.492-164.931 169.921c-15.149 15.608-15.971 39.825-2.708 56.367v0zM399.531 534.955l3.955-43.359c1.897-20.871-3.956-41.613-16.281-58.341l-4.923-6.077-95.263-107.135 321.109-0.043-208.597 214.955zM774.331 874.667c35.346 0 64-28.654 64-64 0-16.607-6.451-32.478-17.847-44.339l-4.502-4.254-92.392-79.193-13.987-153.859c-2.133-23.467-22.887-40.762-46.354-38.629-21.791 1.981-38.26 20.017-38.793 41.373l0.165 4.981 13.987 153.859c1.788 19.671 10.335 38.033 24.061 52.027l5.387 5.037 48.606 41.662h-332.661c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h390.331z" />
<glyph unicode="&#xe90a;" glyph-name="unread_svg" d="M256 874.667h512c91.4 0 166.019-71.849 170.458-162.149l0.209-8.518v-170.667c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v170.667c0 44.986-34.811 81.842-78.965 85.099l-6.369 0.234h-512c-44.986 0-81.842-34.811-85.099-78.965l-0.234-6.369v-579.66l94.081 94.081c8.916 8.916 20.555 14.483 32.962 15.892l6.259 0.354h250.698c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-238.327l-150.886-150.886c-18.329-18.329-48.045-18.329-66.374 0-7.544 7.544-12.255 17.393-13.447 27.891l-0.3 5.296v672.366c0 91.4 71.849 166.019 162.149 170.458l8.518 0.209zM810.667 448c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM810.667 362.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe90b;" glyph-name="up_svg" d="M512 558.327l268.497-268.497c16.662-16.662 43.677-16.662 60.34 0s16.662 43.677 0 60.34l-298.667 298.667c-16.662 16.662-43.677 16.662-60.34 0l-298.667-298.667c-16.662-16.662-16.662-43.677 0-60.34s43.677-16.662 60.34 0l268.497 268.497z" />
<glyph unicode="&#xe90c;" glyph-name="username_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333 0-138.814-70.078-230.734-168.892-234.847-63.863-2.658-119.454 33.041-149.259 91.225-37.901-40.012-91.626-64.97-151.181-64.97-115.203 0-208.593 93.39-208.593 208.593s93.39 208.593 208.593 208.593c48.261 0 92.693-16.389 128.036-43.906l-0.036 5.98c0 23.564 19.103 42.667 42.667 42.667 21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-213.333c0-67.759 38.647-108.79 83.559-106.921 48.336 2.012 87.108 52.867 87.108 149.587 0 212.077-171.923 384-384 384s-384-171.923-384-384c0-212.077 171.923-384 384-384 34.105 0 67.582 4.436 99.854 13.1 22.758 6.11 46.161-7.386 52.271-30.144s-7.386-46.161-30.144-52.271c-39.472-10.598-80.388-16.019-121.981-16.019-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 571.259c-68.074 0-123.259-55.185-123.259-123.259s55.185-123.259 123.259-123.259c68.074 0 123.259 55.185 123.259 123.259s-55.185 123.259-123.259 123.259z" />
<glyph unicode="&#xe90d;" glyph-name="user_svg" d="M512 448c166.709 0 286.52-44.22 355.634-135.63 18.407-24.344 28.366-54.030 28.366-84.549v-48.011c0-63.96-51.85-115.81-115.81-115.81h-536.381c-63.96 0-115.81 51.85-115.81 115.81v48.009c0 30.519 9.958 60.205 28.364 84.548 69.114 91.412 188.926 135.633 355.636 135.633zM512 362.667c-142.434 0-237.024-34.911-287.568-101.763-7.202-9.525-11.099-21.141-11.099-33.084v-48.009c0-16.832 13.645-30.476 30.476-30.476h536.381c16.832 0 30.476 13.645 30.476 30.476v48.011c0 11.942-3.897 23.558-11.1 33.084-50.545 66.851-145.134 101.762-287.567 101.762zM512 874.667c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM512 789.333c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe90e;" glyph-name="play_svg" d="M264.359 840.649l548.011-365.341c15.082-10.055 19.157-30.432 9.103-45.514-2.404-3.605-5.497-6.699-9.103-9.103l-548.011-365.341c-15.082-10.055-35.459-5.979-45.514 9.103-3.594 5.391-5.512 11.726-5.512 18.206v730.682c0 18.126 14.694 32.821 32.821 32.821 6.48 0 12.814-1.918 18.206-5.512z" />
<glyph unicode="&#xe90f;" glyph-name="poll_svg" d="M810.667 874.667c68.168 0 123.89-53.287 127.783-120.479l0.217-7.521v-597.333c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217h-597.333c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v597.333c0 68.168 53.287 123.89 120.479 127.783l7.521 0.217h597.333zM810.667 789.333h-597.333c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976v-597.333c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h597.333c21.881 0 39.915 16.471 42.38 37.691l0.287 4.976v597.333c0 21.881-16.471 39.915-37.691 42.38l-4.976 0.287zM512 704c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-426.667c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v426.667c0 23.564 19.103 42.667 42.667 42.667zM682.667 448c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-170.667c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v170.667c0 23.564 19.103 42.667 42.667 42.667zM341.333 576c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-298.667c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v298.667c0 23.564 19.103 42.667 42.667 42.667z" />
<glyph unicode="&#xe910;" glyph-name="radiooff_svg" d="M512 874.667c-234.667 0-426.667-192-426.667-426.667s192-426.667 426.667-426.667c234.667 0 426.667 192 426.667 426.667s-192 426.667-426.667 426.667v0zM512 106.667c-187.733 0-341.333 153.6-341.333 341.333s153.6 341.333 341.333 341.333c187.733 0 341.333-153.6 341.333-341.333s-153.6-341.333-341.333-341.333v0z" />
<glyph unicode="&#xe911;" glyph-name="radioon_svg" d="M512 661.333c-119.467 0-213.333-93.867-213.333-213.333s93.867-213.333 213.333-213.333c119.467 0 213.333 93.867 213.333 213.333s-93.867 213.333-213.333 213.333v0zM512 874.667c-234.667 0-426.667-192-426.667-426.667s192-426.667 426.667-426.667c234.667 0 426.667 192 426.667 426.667s-192 426.667-426.667 426.667v0zM512 106.667c-187.733 0-341.333 153.6-341.333 341.333s153.6 341.333 341.333 341.333c187.733 0 341.333-153.6 341.333-341.333s-153.6-341.333-341.333-341.333v0z" />
<glyph unicode="&#xe912;" glyph-name="recent_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM512 746.667c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-237.126l173.767-157.97c17.436-15.851 18.721-42.835 2.87-60.271-14.632-16.095-38.75-18.428-56.088-6.224l-4.184 3.354-173.767 157.97c-15.813 14.376-25.584 34.088-27.56 55.177l-0.372 7.965v237.126c0 23.564 19.103 42.667 42.667 42.667z" />
<glyph unicode="&#xe913;" glyph-name="reply_svg" d="M551.482 755.401c0 36.917-29.927 66.844-66.844 66.844-16.818 0-33.017-6.339-45.368-17.754l-332.624-307.401c-27.112-25.056-28.779-67.347-2.558-95.67l2.558-2.511 332.624-307.401c27.112-25.056 69.403-23.389 94.459 3.723 11.414 12.351 17.754 28.551 17.754 45.368v118.601c152.889-7.862 256.331-59.141 314.429-152.148l6.036-10.039c14.433-25.042 46.434-33.641 71.476-19.208 15.982 9.212 25.934 26.157 26.195 44.602 4.452 315.096-133.606 490.424-404.481 511.228l-13.654 0.911v120.852zM466.149 713.138v-120.072c0-23.564 19.103-42.667 42.667-42.667 226.569 0 347.682-104.819 371.281-326.55-85.156 81.425-209.864 121.75-371.281 121.75-23.564 0-42.667-19.103-42.667-42.667v-120.076l-286.917 265.121 286.917 265.16z" />
<glyph unicode="&#xe914;" glyph-name="revote_svg" d="M328.837 691.503c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-128 128c-15.381 15.381-16.564 39.583-3.549 56.32l3.549 4.020 128 128c16.662 16.662 43.677 16.662 60.34 0 15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-55.13-55.163h494.293c68.168 0 123.89-53.287 127.783-120.479l0.217-7.521v-512c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217h-512c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v298.667c0 23.564 19.103 42.667 42.667 42.667 21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-298.667c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h512c21.881 0 39.915 16.471 42.38 37.691l0.287 4.976v512c0 21.881-16.471 39.915-37.691 42.38l-4.976 0.287h-494.293l55.13-55.163zM734.17 606.17c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-256-256c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-106.667 106.667c-16.662 16.662-16.662 43.677 0 60.34 15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 76.497-76.463 225.83 225.797c16.662 16.662 43.677 16.662 60.34 0z" />
<glyph unicode="&#xe915;" glyph-name="savedmessages_svg" d="M725.333 874.667c94.257 0 170.667-76.41 170.667-170.667v-608.186c0-47.128-38.205-85.335-85.333-85.335-20.37 0-40.068 7.288-55.534 20.545l-243.132 208.399-243.132-208.399c-35.782-30.671-89.653-26.527-120.324 9.256-13.257 15.466-20.543 35.164-20.543 55.534v608.186c0 94.257 76.41 170.667 170.667 170.667h426.667zM725.333 789.333h-426.667c-47.128 0-85.333-38.205-85.333-85.333v-608.186l243.132 208.399c31.956 27.391 79.112 27.391 111.068 0l243.132-208.399v608.186c0 47.128-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe916;" glyph-name="search_svg" d="M405.333 832c153.167 0 277.333-124.166 277.333-277.333 0-61.172-19.805-117.718-53.353-163.576l211.523-211.588c16.662-16.662 16.662-43.677 0-60.34-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-211.588 211.523c-45.858-33.548-102.404-53.353-163.576-53.353-153.167 0-277.333 124.166-277.333 277.333s124.166 277.333 277.333 277.333zM405.333 746.667c-106.039 0-192-85.961-192-192s85.961-192 192-192c106.039 0 192 85.961 192 192s-85.961 192-192 192z" />
<glyph unicode="&#xe917;" glyph-name="send_svg" d="M113.23 835.154l63.657-292.376c5.172-23.754 25.163-41.402 49.374-43.587l464.783-41.96c5.102-0.461 8.864-4.97 8.404-10.072-0.403-4.464-3.94-8.001-8.403-8.404l-464.785-41.977c-24.211-2.187-44.2-19.834-49.372-43.587l-63.656-292.355c-4.359-20.021 8.337-39.786 28.359-44.145 8.011-1.744 16.375-0.786 23.784 2.726l833.499 395.052c18.516 8.776 26.412 30.901 17.636 49.417-3.667 7.738-9.898 13.969-17.636 17.636l-833.5 395.052c-18.516 8.776-40.641 0.88-49.417-17.636-3.512-7.409-4.47-15.772-2.726-23.783z" />
<glyph unicode="&#xe918;" glyph-name="send2_svg" d="M274.688 447.988l-12.894 1.988c-37.889 5.841-68.281 34.389-76.478 71.839l-58.050 265.218c-3.614 16.51-1.625 33.753 5.651 49.007 18.084 37.914 63.479 53.988 101.393 35.904l744.874-355.295c15.727-7.502 28.402-20.176 35.904-35.903 18.085-37.913 2.010-83.309-35.903-101.393l-744.873-355.303c-15.254-7.276-32.498-9.265-49.008-5.651-41.034 8.982-67.018 49.528-58.036 90.562l58.049 265.201c8.197 37.447 38.584 65.993 76.469 71.837l12.902 1.99zM214.679 786.763l53.997-246.704c0.656-2.996 3.087-5.28 6.118-5.747l232.866-35.896c27.846-4.292 46.939-30.345 42.647-58.191-3.39-21.995-20.648-39.254-42.643-42.646l-232.87-35.918c-3.031-0.467-5.462-2.751-6.118-5.747l-53.998-246.686 710.217 338.771-710.217 338.764z" />
<glyph unicode="&#xe919;" glyph-name="sending_svg" d="M538.947 803.705c196.451 0 355.705-159.255 355.705-355.705s-159.255-355.705-355.705-355.705c-196.451 0-355.705 159.255-355.705 355.705s159.255 355.705 355.705 355.705zM538.947 739.032c-160.732 0-291.032-130.299-291.032-291.032s130.299-291.032 291.032-291.032c160.732 0 291.032 130.299 291.032 291.032s-130.299 291.032-291.032 291.032zM509.088 429.67l-1.138 1.991-2.551 6.222-1.073 4.755-0.308 2.675-0.103 191.319c0 19.347 15.684 35.032 35.032 35.032 17.589 0 32.15-12.962 34.652-29.855l0.38-5.177v-174.134l97.529-97.516c12.313-12.313 13.544-31.51 3.694-45.2l-3.694-4.342c-12.313-12.313-31.51-13.544-45.2-3.694l-4.342 3.694-109.513 109.641-1.769 2.215-1.596 2.374z" />
<glyph unicode="&#xe91a;" glyph-name="sendingerror_svg" d="M538.947 803.705c196.451 0 355.705-159.255 355.705-355.705s-159.255-355.705-355.705-355.705c-196.451 0-355.705 159.255-355.705 355.705s159.255 355.705 355.705 355.705zM538.947 326.737c-22.324 0-40.421-18.097-40.421-40.421s18.097-40.421 40.421-40.421c22.324 0 40.421 18.097 40.421 40.421s-18.097 40.421-40.421 40.421zM538.947 671.663c-19.347 0-35.032-15.684-35.032-35.032v-215.579c0-19.347 15.684-35.032 35.032-35.032s35.032 15.684 35.032 35.032v215.579c0 19.347-15.684 35.032-35.032 35.032z" />
<glyph unicode="&#xe91b;" glyph-name="mute_svg" d="M469.333 106.667h85.333c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM140.95 862.617c15.608 15.149 39.825 15.971 56.367 2.708l3.966-3.609 704-725.333c16.412-16.909 16.009-43.921-0.9-60.333-15.608-15.149-39.825-15.971-56.367-2.708l-3.966 3.609-70.594 72.729-5.456-0.346h-597.333c-32.455 0-52.437 34.449-37.937 62.223l2.436 4.111 78.167 117.251v243.082c0 43.147 9.186 85.028 26.607 123.383l-99.89 102.901c-16.412 16.909-16.009 43.921 0.9 60.333zM299.016 588.321l-0.349-12.321v-243.082c0-14.44-3.664-28.604-10.595-41.183l-3.736-6.152-33.945-50.917h440.61l-385.097 396.676c-3.734-13.951-6.054-28.346-6.888-43.022zM512 874.667c161.513 0 293.082-128.204 298.493-288.399l0.173-10.268v-128c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v128c0 117.821-95.513 213.333-213.333 213.333-26.015 0-51.327-4.639-75.1-13.582-22.055-8.297-46.66 2.857-54.957 24.912s2.857 46.66 24.912 54.957c33.342 12.543 68.828 19.046 105.145 19.046z" />
<glyph unicode="&#xe91c;" glyph-name="newchannel_svg" d="M789.333 888.385c58.91 0 106.667-47.756 106.667-106.667v-667.437c0-24.74-8.6-48.711-24.327-67.809-37.45-45.475-104.673-51.98-150.148-14.53l-209.525 172.581v-76.524c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521-0.008 110.936c-97.372 19.769-170.659 105.858-170.659 209.064 0 117.821 95.513 213.333 213.333 213.333h176.693l246.165 202.724c19.098 15.728 43.069 24.327 67.809 24.327zM341.333 234.689v-106.689c0-23.564 19.103-42.667 42.667-42.667 21.881 0 39.915 16.471 42.38 37.691l0.287 4.976v106.689h-85.333zM789.333 803.052c-4.948 0-9.742-1.72-13.562-4.865l-246.165-202.724c-15.278-12.582-34.455-19.462-54.247-19.462h-176.693c-70.692 0-128-57.308-128-128s57.308-128 128-128h176.693c19.792 0 38.969-6.88 54.247-19.462l246.165-202.724c9.095-7.49 22.54-6.189 30.030 2.906 3.146 3.82 4.865 8.614 4.865 13.562v667.437c0 11.782-9.551 21.333-21.333 21.333z" />
<glyph unicode="&#xe91d;" glyph-name="newchat_filled_svg" d="M128 215.040v-129.707c0-11.947 9.387-21.333 21.333-21.333h129.707c5.547 0 11.093 2.133 14.933 6.4l450.828 450.415c7.415 7.396 8.244 18.89 2.488 27.207l-2.481 2.956-129.83 129.83c-8.331 8.331-21.839 8.331-30.17 0l-450.408-450.408c-4.267-4.267-6.4-9.387-6.4-15.36zM883.627 659.627c16.64 16.64 16.64 43.52 0 60.16l-99.84 99.84c-16.64 16.64-43.52 16.64-60.16 0l-62.995-62.995c-8.331-8.331-8.331-21.839 0-30.17l129.83-129.83c8.331-8.331 21.839-8.331 30.17 0l62.995 62.995z" />
<glyph unicode="&#xe91e;" glyph-name="newgroup_svg" d="M341.333 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-34.452c0-58.91-47.756-106.667-106.667-106.667h-469.333c-58.91 0-106.667 47.756-106.667 106.667v34.452c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM765.931 361.234l4.984-0.049c91.863-6.21 162.691-32.125 210.977-79.407 24.687-24.173 39.497-56.524 41.794-90.78l0.314-9.385v-21.612c0-50.81-39.474-92.401-89.427-95.779l-6.573-0.221h-117.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h117.333c5.049 0 9.279 3.509 10.385 8.221l0.282 2.446v21.612c0 14.749-5.939 28.876-16.477 39.195-31.987 31.323-83.828 50.29-157.030 55.239-23.51 1.589-41.281 21.937-39.692 45.447 1.476 21.831 19.126 38.713 40.463 39.741v0zM341.333 320c-118.985 0-199.024-27.459-243.017-79.443-8.383-9.905-12.983-22.462-12.983-35.438v-34.452c0-11.782 9.551-21.333 21.333-21.333h469.333c11.782 0 21.333 9.551 21.333 21.333v34.452c0 12.976-4.6 25.533-12.983 35.438-43.993 51.983-124.033 79.443-243.017 79.443zM725.333 746.667c82.475 0 149.333-66.859 149.333-149.333s-66.859-149.333-149.333-149.333c-82.475 0-149.333 66.859-149.333 149.333s66.859 149.333 149.333 149.333zM341.333 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM725.333 661.333c-35.346 0-64-28.654-64-64s28.654-64 64-64c35.346 0 64 28.654 64 64s-28.654 64-64 64zM341.333 746.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe91f;" glyph-name="newprivate_svg" d="M512 448c166.709 0 286.52-44.22 355.634-135.63 18.407-24.344 28.366-54.030 28.366-84.549v-48.011c0-63.96-51.85-115.81-115.81-115.81h-536.381c-63.96 0-115.81 51.85-115.81 115.81v48.009c0 30.519 9.958 60.205 28.364 84.548 69.114 91.412 188.926 135.633 355.636 135.633zM512 362.667c-142.434 0-237.024-34.911-287.568-101.763-7.202-9.525-11.099-21.141-11.099-33.084v-48.009c0-16.832 13.645-30.476 30.476-30.476h536.381c16.832 0 30.476 13.645 30.476 30.476v48.011c0 11.942-3.897 23.558-11.1 33.084-50.545 66.851-145.134 101.762-287.567 101.762zM512 874.667c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM512 789.333c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe920;" glyph-name="next_svg" d="M840.837 478.17l-298.667 298.667c-16.662 16.662-43.677 16.662-60.34 0-15.381-15.381-16.564-39.583-3.549-56.32l3.549-4.020 225.839-225.83h-494.336c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h494.336l-225.839-225.83c-15.381-15.381-16.564-39.583-3.549-56.32l3.549-4.020c15.381-15.381 39.583-16.564 56.32-3.549l4.020 3.549 298.667 298.667c15.381 15.381 16.564 39.583 3.549 56.32l-3.549 4.020z" />
<glyph unicode="&#xe921;" glyph-name="nosound_svg" d="M549.232 703.909c5.026-8.376 7.68-17.961 7.68-27.729v-456.36c0-29.765-24.129-53.895-53.895-53.895-9.768 0-19.353 2.655-27.729 7.68l-144.24 86.544c-27.056 16.233-43.61 45.472-43.61 77.024v221.653c0 31.552 16.555 60.791 43.61 77.024l144.24 86.544c25.523 15.314 58.629 7.038 73.943-18.486zM179.649 609.684c29.765 0 53.895-24.129 53.895-53.895v-215.579c0-29.765-24.129-53.895-53.895-53.895s-53.895 24.129-53.895 53.895v215.579c0 29.765 24.129 53.895 53.895 53.895zM845.968 559.877c10.445 7.357 24.974 6.431 34.401-2.85s10.58-23.793 3.386-34.352l-3.089-3.756-70.826-71.891 70.826-71.906c10.441-10.605 10.308-27.667-0.297-38.108-9.427-9.281-23.955-10.207-34.401-2.85l-3.708 3.147-70.201 71.344-70.191-71.344-3.708-3.147c-10.445-7.357-24.974-6.431-34.401 2.85s-10.58 23.793-3.386 34.352l3.089 3.756 70.762 71.906-70.762 71.891c-10.441 10.605-10.308 27.667 0.297 38.108 9.427 9.281 23.955 10.207 34.401 2.85l3.708-3.147 70.191-71.275 70.201 71.275 3.708 3.147z" />
<glyph unicode="&#xe922;" glyph-name="pause_svg" d="M384 789.333c23.564 0 42.667-19.103 42.667-42.667v-597.333c0-23.564-19.103-42.667-42.667-42.667h-128c-23.564 0-42.667 19.103-42.667 42.667v597.333c0 23.564 19.103 42.667 42.667 42.667h128zM768 789.333c23.564 0 42.667-19.103 42.667-42.667v-597.333c0-23.564-19.103-42.667-42.667-42.667h-128c-23.564 0-42.667 19.103-42.667 42.667v597.333c0 23.564 19.103 42.667 42.667 42.667h128z" />
<glyph unicode="&#xe923;" glyph-name="permissions_svg" d="M256 832h597.333c68.168 0 123.89-53.287 127.783-120.479l0.217-7.521v-85.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-128v-384c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217h-512c-70.692 0-128 57.308-128 128v85.333c0 23.564 19.103 42.667 42.667 42.667h42.667v384c0 68.168 53.287 123.89 120.479 127.783l7.521 0.217zM554.667 234.667h-426.667v-42.667c0-23.564 19.103-42.667 42.667-42.667h391.292c-4.725 13.363-7.292 27.729-7.292 42.667v42.667zM732.617 746.667h-476.617c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976v-384h384c23.564 0 42.667-19.103 42.667-42.667v-85.333c0-22.371 17.3-40.915 37.865-42.461l5.367-0.202c21.639 0.281 39.393 16.671 41.819 37.726l0.283 4.937v512c0 11.968 1.643 23.553 4.715 34.541l2.569 8.126zM853.333 746.667l-4.976-0.287c-19.587-2.275-35.129-17.816-37.404-37.404l-0.287-4.976v-42.667h85.333v42.667c0 21.881-16.471 39.915-37.691 42.38l-4.976 0.287z" />
<glyph unicode="&#xe924;" glyph-name="phone_svg" d="M308.729 423.841l100.511 111.58c24.050 23.968 36.487 59.685 32.349 95.745l-11.022 95.78c-7.133 60.037-57.665 105.053-118.012 105.053h-65.744c-67.593 0-122.77-56.491-118.59-123.97 21.466-345.892 298.018-622.324 643.797-643.808 67.487-4.181 123.987 50.997 123.987 118.59v65.745c0.583 59.789-44.566 110.49-104.526 117.614l-96.72 11.043c-36.036 4.135-71.753-8.302-97.334-33.883l-109.576-98.598c-66.487 43.057-123.957 98.848-168.958 163.927l-10.162 15.182zM567.25 201.403l88.897 80.052c8.782 8.7 18.694 12.151 28.908 10.979l96.55-11.024c16.741-1.99 29.224-16.008 29.065-32.436l-0.004-66.163c0-19.122-15.756-34.511-33.364-33.42-74.488 4.628-145.314 22.772-210.053 52.012zM265.405 503.224c-29.244 64.741-47.39 135.577-52.014 210.086-1.090 17.602 14.297 33.356 33.42 33.356h65.744c17.059 0 31.236-12.629 33.256-29.632l11.002-95.611c1.171-10.201-2.281-20.113-9.444-27.277l-81.964-90.923z" />
<glyph unicode="&#xe925;" glyph-name="photo_svg" d="M810.667 874.667c70.692 0 128-57.308 128-128v-597.333c0-70.692-57.308-128-128-128h-597.333c-70.692 0-128 57.308-128 128v597.333c0 70.692 57.308 128 128 128h597.333zM382.252 342.812l-2.649 1.925c-8.919 5.489-20.293 3.626-27.047-3.903l-2.302-3.086-142.026-230.78 2.533-0.226 320.269-0.076-144.516 231.209c-1.162 1.86-2.601 3.523-4.261 4.937v0zM668.078 439.78c-8.979 5.391-20.331 3.404-27.003-4.199l-2.269-3.111-103.298-172.033 96.085-153.771h179.072c23.085 0 41.888 18.334 42.643 41.236l-178.122 284.894c-1.785 2.857-4.222 5.25-7.11 6.984zM810.667 789.333h-597.333c-23.564 0-42.667-19.103-42.667-42.667v-537.856l106.911 173.66c29.588 48.082 91.16 64.453 140.398 38.56l6.349-3.618c11.674-7.184 21.831-16.536 29.937-27.525l4.613-6.786 25.86-41.427 80.91 134.719c29.059 48.403 90.449 65.447 139.967 40.095l6.388-3.548c12.034-7.225 22.499-16.738 30.819-27.974l4.73-6.944 105.783-169.287v437.931c0 23.564-19.103 42.667-42.667 42.667z" />
<glyph unicode="&#xe926;" glyph-name="pin_svg" d="M774.331 874.667l6.164-0.293c32.454-3.101 57.836-30.44 57.836-63.707 0-18.683-8.164-36.434-22.349-48.592l-92.392-79.193-18.092-199.011 126.831-142.685c23.483-26.418 21.103-66.871-5.315-90.353-11.715-10.414-26.845-16.166-42.519-16.166h-229.852l0.025-213.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976-0.025 213.333h-229.803c-35.346 0-64 28.654-64 64 0 15.675 5.752 30.804 16.166 42.519l126.831 142.685-18.092 199.011-92.392 79.193c-26.837 23.003-29.945 63.406-6.942 90.243 12.159 14.185 29.909 22.349 48.592 22.349h524.661zM716.661 789.333h-409.322l48.606-41.662c16.872-14.462 27.437-34.934 29.449-57.064l18.092-199.011c2.135-23.48-5.54-46.797-21.204-64.418l-95.269-107.178h449.976l-95.269 107.178c-15.664 17.621-23.338 40.938-21.204 64.418l18.092 199.011c2.012 22.13 12.577 42.603 29.449 57.064l48.606 41.662z" />
<glyph unicode="&#xe927;" glyph-name="pinnedchat_svg" d="M661.661 728.275c5.477-3.286 10.53-7.231 15.046-11.748l103.827-103.827c30.506-30.506 30.506-79.967 0-110.474-4.516-4.516-9.569-8.462-15.046-11.748l-81.664-48.998c10.87-64.852-15.506-128.818-75.883-189.195-13.83-13.83-36.252-13.83-50.082 0l-95.779 95.751-138.372-138.412c-12.677-12.677-32.575-13.734-46.456-3.169l-3.627 3.169c-12.677 12.677-13.734 32.575-3.169 46.456l3.169 3.627 138.406 138.42-95.74 95.724c-13.83 13.83-13.83 36.252 0 50.082 57.358 57.358 117.955 84.030 179.474 77.234l9.721-1.352 48.998 81.664c22.197 36.994 70.181 48.99 107.175 26.794zM615.219 665.041l-62.448-104.080c-8.54-14.233-25.819-20.625-41.565-15.376-38.301 12.767-76.998 4.313-118.378-28.105l188.658-188.658 6.165 8.241c27.286 38.296 33.856 74.389 21.94 110.137-5.249 15.746 1.143 33.026 15.376 41.565l104.815 62.953 0.668 0.591c2.847 2.847 2.847 7.463 0 10.31l-103.827 103.827-1.404 1.096c-3.452 2.071-7.93 0.952-10.002-2.5z" />
<glyph unicode="&#xe928;" glyph-name="largepause_svg" d="M398.222 760.889c15.709 0 28.444-12.735 28.444-28.444v-568.889c0-15.709-12.735-28.444-28.444-28.444h-142.222c-15.709 0-28.444 12.735-28.444 28.444v568.889c0 15.709 12.735 28.444 28.444 28.444h142.222zM768 760.889c15.709 0 28.444-12.735 28.444-28.444v-568.889c0-15.709-12.735-28.444-28.444-28.444h-142.222c-15.709 0-28.444 12.735-28.444 28.444v568.889c0 15.709 12.735 28.444 28.444 28.444h142.222z" />
<glyph unicode="&#xe929;" glyph-name="largeplay_svg" d="M328.391 789.213l488.252-317.364c13.171-8.561 16.909-26.179 8.347-39.351-2.168-3.335-5.012-6.179-8.347-8.347l-488.252-317.364c-13.171-8.561-30.789-4.824-39.351 8.347-2.999 4.614-4.595 9.999-4.595 15.502v634.727c0 15.709 12.735 28.444 28.444 28.444 5.503 0 10.888-1.596 15.502-4.595z" />
<glyph unicode="&#xe92a;" glyph-name="livelocation_svg" d="M512 917.333c188.684 0 341.333-152.649 341.333-341.333 0-156.334-115.811-350.548-275.703-544.008-34.125-40.95-96.71-40.95-130.872 0.044-159.081 191.421-276.092 387.465-276.092 543.964 0 188.684 152.649 341.333 341.333 341.333zM512 832c-141.556 0-256-114.444-256-256 0-125.035 104.336-303.415 243.817-474.132l12.397-15.042 12.219 14.872c131.982 162.383 231.282 328.602 242.508 451.731l0.793 11.416 0.266 11.155c0 141.556-114.444 256-256 256zM90.13 786.304c21.952-8.566 32.803-33.306 24.236-55.258-19.105-48.958-29.033-101.281-29.033-155.046 0-53.871 9.967-106.294 29.146-155.335 8.583-21.946-2.25-46.694-24.196-55.276s-46.694 2.25-55.276 24.196c-23.037 58.906-35.007 121.866-35.007 186.415 0 64.421 11.923 127.261 34.871 186.068 8.566 21.952 33.306 32.803 55.258 24.236zM989.068 762.222c22.988-58.851 34.932-121.744 34.932-186.222s-11.944-127.372-34.932-186.223c-8.574-21.949-33.317-32.792-55.266-24.218s-32.792 33.317-24.218 55.266c19.138 48.995 29.083 101.363 29.083 155.175s-9.945 106.179-29.083 155.174c-8.574 21.949 2.269 46.693 24.218 55.266s46.693-2.269 55.266-24.218zM512 661.333c47.104 0 85.333-38.229 85.333-85.333s-38.229-85.333-85.333-85.333c-47.104 0-85.333 38.229-85.333 85.333s38.229 85.333 85.333 85.333z" />
<glyph unicode="&#xe92b;" glyph-name="location_svg" d="M512 917.333c188.684 0 341.333-152.649 341.333-341.333 0-156.334-115.811-350.548-275.703-544.008-34.125-40.95-96.71-40.95-130.872 0.044-159.081 191.421-276.092 387.465-276.092 543.964 0 188.684 152.649 341.333 341.333 341.333zM512 832c-141.556 0-256-114.444-256-256 0-125.035 104.336-303.415 243.943-474.32l12.271-14.853 12.22 14.873c140.231 172.532 243.567 349.394 243.567 474.301 0 141.556-114.444 256-256 256zM512 661.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333z" />
<glyph unicode="&#xe92c;" glyph-name="lock_svg" d="M512 917.333c114.72 0 208.291-90.552 213.136-204.079l0.197-9.254v-85.333c70.692 0 128-57.308 128-128v-341.333c0-70.692-57.308-128-128-128h-426.667c-70.692 0-128 57.308-128 128v341.333c0 70.692 57.308 128 128 128v85.333c0 117.821 95.513 213.333 213.333 213.333zM725.333 533.333h-426.667c-23.564 0-42.667-19.103-42.667-42.667v-341.333c0-23.564 19.103-42.667 42.667-42.667h426.667c23.564 0 42.667 19.103 42.667 42.667v341.333c0 23.564-19.103 42.667-42.667 42.667zM512 384c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM519.521 831.783l-7.521 0.217c-68.168 0-123.89-53.287-127.783-120.479l-0.217-7.521v-85.333h256v85.333c0 68.168-53.287 123.89-120.479 127.783v0z" />
<glyph unicode="&#xe92d;" glyph-name="logout_svg" d="M256 874.667h213.333c94.257 0 170.667-76.41 170.667-170.667 0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.521 11.344c-3.095 41.946-36.512 75.46-78.416 78.707l-6.684 0.258h-213.333c-44.986 0-81.842-34.811-85.099-78.965l-0.234-6.369v-512c0-44.986 34.811-81.842 78.965-85.099l6.369-0.234h213.333c44.986 0 81.842 34.811 85.099 78.965l0.521 11.344c2.465 21.22 20.499 37.691 42.38 37.691 23.564 0 42.667-19.103 42.667-42.667 0-91.4-71.849-166.019-162.149-170.458l-8.518-0.209h-213.333c-91.4 0-166.019 71.849-170.458 162.149l-0.209 8.518v512c0 91.4 71.849 166.019 162.149 170.458l8.518 0.209zM798.17 648.837l170.667-170.667c1.51-1.51 2.883-3.105 4.12-4.77l3.058-4.746 2.28-4.81 1.51-4.495 1.059-5.014 0.396-3.806v-5.058l-0.217-2.482-0.879-4.952-1.385-4.615-1.441-3.48-2.232-4.159-3.144-4.469-3.123-3.484-170.667-170.667c-16.662-16.662-43.677-16.662-60.34 0s-16.662 43.677 0 60.34l97.797 97.83h-280.96c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h280.96l-97.797 97.83c-16.662 16.662-16.662 43.677 0 60.34s43.677 16.662 60.34 0z" />
<glyph unicode="&#xe92e;" glyph-name="menu_svg" d="M170.667 277.333h682.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-682.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM170.667 490.667h682.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-682.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM170.667 704h682.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-682.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287z" />
<glyph unicode="&#xe92f;" glyph-name="message_svg" d="M316.34 149.333l-150.886-150.886c-18.329-18.329-48.045-18.329-66.374 0-8.802 8.802-13.746 20.739-13.746 33.187v672.366c0 94.257 76.41 170.667 170.667 170.667h512c94.257 0 170.667-76.41 170.667-170.667v-384c0-94.257-76.41-170.667-170.667-170.667h-451.66zM170.667 124.34l94.081 94.081c10.402 10.402 24.51 16.246 39.221 16.246h464.031c47.128 0 85.333 38.205 85.333 85.333v384c0 47.128-38.205 85.333-85.333 85.333h-512c-47.128 0-85.333-38.205-85.333-85.333v-579.66z" />
<glyph unicode="&#xe930;" glyph-name="microphone_svg" d="M810.667 533.333c23.564 0 42.667-19.103 42.667-42.667 0-174.050-130.27-317.673-298.626-338.687l-0.041-130.646c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976 0.002 130.641c-168.377 20.995-298.669 164.628-298.669 338.693 0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667c0-141.385 114.615-256 256-256s256 114.615 256 256c0 23.564 19.103 42.667 42.667 42.667zM512 874.667c94.257 0 170.667-76.41 170.667-170.667v-213.333c0-94.257-76.41-170.667-170.667-170.667s-170.667 76.41-170.667 170.667v213.333c0 94.257 76.41 170.667 170.667 170.667z" />
<glyph unicode="&#xe931;" glyph-name="microphone2_svg" d="M810.667 533.333c23.564 0 42.667-19.103 42.667-42.667 0-174.050-130.27-317.673-298.626-338.687l-0.041-130.646c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976 0.002 130.641c-168.377 20.995-298.669 164.628-298.669 338.693 0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667c0-141.385 114.615-256 256-256s256 114.615 256 256c0 23.564 19.103 42.667 42.667 42.667zM512 874.667c94.257 0 170.667-76.41 170.667-170.667v-213.333c0-94.257-76.41-170.667-170.667-170.667s-170.667 76.41-170.667 170.667v213.333c0 94.257 76.41 170.667 170.667 170.667zM512 789.333c-47.128 0-85.333-38.205-85.333-85.333v-213.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333v213.333c0 47.128-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe932;" glyph-name="minus_svg" d="M810.667 490.667c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-597.333c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h597.333z" />
<glyph unicode="&#xe933;" glyph-name="more_svg" d="M512 277.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333zM512 533.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333zM512 789.333c47.128 0 85.333-38.205 85.333-85.333s-38.205-85.333-85.333-85.333c-47.128 0-85.333 38.205-85.333 85.333s38.205 85.333 85.333 85.333z" />
<glyph unicode="&#xe934;" glyph-name="download_svg" d="M213.333 149.333h597.333c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-597.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM507.024 831.713l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-408.96l140.497 140.463c15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-213.333-213.333c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-213.333 213.333c-16.662 16.662-16.662 43.677 0 60.34 15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 140.497-140.463v408.96c0 21.881 16.471 39.915 37.691 42.38v0z" />
<glyph unicode="&#xe935;" glyph-name="eats_svg" d="M348.832 898.806c13.342 19.423 39.904 24.352 59.327 11.010 33.446-22.975 65.138-54.661 95.307-94.881 9.357-12.475 17.47-24.268 24.308-35.483 7.542 12.426 17.444 25.949 29.639 40.582 40.837 49.004 97.726 77.455 170.669 85.352-8.832-48.625-25.923-89.734-51.272-123.327l6.436 0.856c60.564 6.345 112.536-4.854 154.549-38.978l16.384-14.111c220.707-196.277 126.127-654.254-158.018-748.969l-4.259-1.178c-43.991-9.751-73.079-7.852-109.154 3.681l-25.15 8.694c-17.645 5.903-28.787 7.947-45.597 7.947-16.795 0-27.935-2.046-45.572-7.953l-25.186-8.717c-36.082-11.546-65.192-13.438-109.182-3.643l-4.219 1.17c-289.524 96.508-379.735 565.602-138.175 758.645 77.415 51.61 141.326 55.739 229.838 31.19l13.32-3.816c-24.135 31.66-48.532 55.808-72.982 72.604-19.423 13.342-24.352 39.904-11.010 59.327zM239.987 670.683c-184.684-147.747-111.593-531.199 112.777-608.175 26.131-5.621 40.407-4.914 61.688 1.837l8.345 2.814 18.109 6.328c25.088 8.293 44.156 11.847 71.093 11.847 26.94 0 46.002-3.548 71.090-11.831l26.426-9.121c18.636-5.906 31.906-7.191 52.451-3.67l9.287 1.804 9.742 3.575c212.168 82.926 284.334 447.443 116.911 599.538l-13.711 11.806c-23.708 18.694-53.002 24.706-92.061 20.614-19.268-2.019-38.538-6-66.596-13.353l-51.84-13.807-14.982-3.716c-17.745-4.186-27.429-5.456-39.45-5.757l-11.772-0.049c-17.461 0.26-28.883 2.268-56.363 10.474l-44.697 13.83c-72.092 21.465-113.983 19.808-166.449-14.986z" />
<glyph unicode="&#xe936;" glyph-name="edit_svg" d="M328.837 76.497c-8.002-8.002-18.854-12.497-30.17-12.497h-128c-23.564 0-42.667 19.103-42.667 42.667v128c0 11.316 4.495 22.168 12.497 30.17l567.163 567.163c31.571 31.571 81.725 33.232 115.252 4.985l5.428-4.985 67.66-67.66c31.571-31.571 33.232-81.725 4.985-115.252l-4.985-5.428-567.163-567.163zM213.333 216.994v-67.66h67.66l426.667 426.667-67.66 67.66-426.667-426.667zM768 771.66l-67.669-67.627 67.669-67.669 67.66 67.636-67.66 67.66z" />
<glyph unicode="&#xe937;" glyph-name="eye1_svg" d="M512.159 725.333c249.485 0 426.508-211.597 426.508-277.333s-176.070-277.333-426.508-277.333c-248.531 0-426.826 211.597-426.826 277.333s179.565 277.333 426.826 277.333zM512 618.667c-94.257 0-170.667-76.41-170.667-170.667s76.41-170.667 170.667-170.667c94.257 0 170.667 76.41 170.667 170.667s-76.41 170.667-170.667 170.667zM512 512c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z" />
<glyph unicode="&#xe938;" glyph-name="eye2_svg" d="M138.557 774.763c14.323 16.37 38.393 19.16 55.959 7.288l4.247-3.274 682.667-597.333c17.734-15.517 19.531-42.472 4.014-60.206-14.323-16.37-38.393-19.16-55.959-7.288l-4.247 3.274-113.642 99.426c-58.284-27.606-125.631-45.983-199.436-45.983-248.531 0-426.826 211.597-426.826 277.333 0 36.906 56.598 119.786 149.999 185.387l-92.761 81.17c-17.734 15.517-19.531 42.472-4.014 60.206zM341.333 448c0-94.257 76.41-170.667 170.667-170.667 35.709 0 68.857 10.967 96.258 29.716l-88.514 77.414c-2.539-0.306-5.123-0.464-7.744-0.464-35.101 0-63.602 28.257-63.996 63.265l-88.501 77.445c-11.623-23.062-18.169-49.121-18.169-76.71zM512.159 725.333c249.485 0 426.508-211.597 426.508-277.333 0-27.128-29.986-79.097-82.81-130.785l-174.596 152.787c-10.435 81.068-77.75 144.323-160.633 148.45l-9.311 0.214-106.655 93.298c34.013 8.496 69.975 13.369 107.496 13.369z" />
<glyph unicode="&#xe939;" glyph-name="flag_svg" d="M500.425 832.631l22.338-12.214c80.817-42.027 176.161-46.937 261.135-12.997l53.608 21.412c28.023 11.193 58.493-9.447 58.493-39.623v-428.019c0-17.54-10.734-33.292-27.058-39.709l-53.573-21.059c-108.687-42.723-230.336-36.060-333.461 17.764l-22.941 12.426c-76.74 39.22-167.453 40.822-245.636 4.124l0.001-313.404c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v768c0 3.617 0.45 7.129 1.297 10.482l1.671 5.032c3.987 10.461 12.185 19.007 22.535 23.56l14.934 7.404c104.95 52.551 228.536 51.136 331.988-3.18zM213.376 762.767l-0.042-336.069 12.85 4.147c90.343 27.394 188.575 18.809 273.487-25.208l22.99-12.458c80.988-41.806 176.293-46.827 261.49-13.337l26.515 10.423v335.997l-12.955-4.724c-104.085-35.929-218.538-27.261-316.108 24.108l-22.47 12.278c-76.646 39.6-167.465 41.459-245.759 4.844z" />
<glyph unicode="&#xe93a;" glyph-name="forward_svg" d="M503.575 755.401c0 36.917 29.927 66.844 66.844 66.844 16.818 0 33.017-6.339 45.368-17.754l332.624-307.401c27.112-25.056 28.779-67.347 2.558-95.67l-2.558-2.511-332.624-307.401c-27.112-25.056-69.403-23.389-94.459 3.723-11.414 12.351-17.754 28.551-17.754 45.368v118.601c-152.889-7.862-256.331-59.141-314.429-152.148l-6.036-10.039c-14.433-25.042-46.434-33.641-71.476-19.208-15.982 9.212-25.934 26.157-26.195 44.602-4.452 315.096 133.606 490.424 404.481 511.228l13.654 0.911v120.852zM588.909 713.138v-120.072c0-23.564-19.103-42.667-42.667-42.667-226.569 0-347.682-104.819-371.281-326.55 85.156 81.425 209.864 121.75 371.281 121.75 23.564 0 42.667-19.103 42.667-42.667v-120.076l286.917 265.121-286.917 265.16z" />
<glyph unicode="&#xe93b;" glyph-name="FullScreen_svg" d="M213.333 362.667c23.564 0 42.667-19.103 42.667-42.667v-128h128c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667h-170.667c-23.564 0-42.667 19.103-42.667 42.667v170.667c0 23.564 19.103 42.667 42.667 42.667zM810.667 362.667c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-170.667c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-170.667c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h128v128c0 23.564 19.103 42.667 42.667 42.667zM213.333 789.333h170.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-128v-128c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v170.667c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM810.667 789.333c23.564 0 42.667-19.103 42.667-42.667v-170.667c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667v128h-128c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667h170.667z" />
<glyph unicode="&#xe93c;" glyph-name="group_svg" d="M341.333 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-34.452c0-58.91-47.756-106.667-106.667-106.667h-469.333c-58.91 0-106.667 47.756-106.667 106.667v34.452c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM765.931 361.234l4.984-0.049c91.863-6.21 162.691-32.125 210.977-79.407 24.687-24.173 39.497-56.524 41.794-90.78l0.314-9.385v-21.612c0-50.81-39.474-92.401-89.427-95.779l-6.573-0.221h-117.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h117.333c5.049 0 9.279 3.509 10.385 8.221l0.282 2.446v21.612c0 14.749-5.939 28.876-16.477 39.195-31.987 31.323-83.828 50.29-157.030 55.239-23.51 1.589-41.281 21.937-39.692 45.447 1.476 21.831 19.126 38.713 40.463 39.741v0zM341.333 320c-118.985 0-199.024-27.459-243.017-79.443-8.383-9.905-12.983-22.462-12.983-35.438v-34.452c0-11.782 9.551-21.333 21.333-21.333h469.333c11.782 0 21.333 9.551 21.333 21.333v34.452c0 12.976-4.6 25.533-12.983 35.438-43.993 51.984-124.033 79.443-243.017 79.443zM725.333 746.667c82.475 0 149.333-66.859 149.333-149.333s-66.859-149.333-149.333-149.333c-82.475 0-149.333 66.859-149.333 149.333s66.859 149.333 149.333 149.333zM341.333 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM725.333 661.333c-35.346 0-64-28.654-64-64s28.654-64 64-64c35.346 0 64 28.654 64 64s-28.654 64-64 64zM341.333 746.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe93d;" glyph-name="help_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM511.057 307.449c28.778 0 52.079-22.114 52.079-50.308 0-27.759-23.751-50.308-52.079-50.308-28.173 0-52.079 22.847-52.079 50.308 0 27.898 23.457 50.308 52.079 50.308zM526.109 665.6c83.153 0 144.605-45.594 144.605-117.6 0-43.294-18.407-70.681-60.741-100.706l-21.333-14.543c-26.658-18.686-36.572-32.531-36.572-52.538v-5.312c0-20.909-16.095-35.699-40.126-35.699-25.25 0-39.241 13.729-39.241 39.241v5.755c0 40.023 17.424 64.886 57.174 92.491l14.635 10.26c31.961 23.045 41.082 35.548 41.082 57.51 0 31.584-24.537 52.4-62.582 52.4-26.89 0-47.284-12.59-62.294-37.483l-11.534-14.591-3.619-4.191c-8.432-9.021-17.048-12.797-31.459-12.797-18.567 0-34.371 14.423-34.371 34.814 0 7.527 1.224 14.868 3.727 23.378 14.121 46.397 69.829 79.613 142.65 79.613z" />
<glyph unicode="&#xe93e;" glyph-name="info_svg" d="M512 917.333c259.206 0 469.333-210.128 469.333-469.333s-210.128-469.333-469.333-469.333c-259.206 0-469.333 210.128-469.333 469.333s210.128 469.333 469.333 469.333zM512 832c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM512 490.667c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-213.333c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v213.333c0 23.564 19.103 42.667 42.667 42.667zM512 682.667c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z" />
<glyph unicode="&#xe93f;" glyph-name="lamp_svg" d="M512 917.333c212.077 0 384-171.923 384-384 0-133.866-72.94-242.659-213.333-323.805v-102.862c0-70.692-57.308-128-128-128h-85.333c-70.692 0-128 57.308-128 128v102.85l-12.964 7.682c-131.917 80.22-200.369 186.382-200.369 316.134 0 212.077 171.923 384 384 384zM426.667 106.667c0-23.564 19.103-42.667 42.667-42.667h85.333c23.564 0 42.667 19.103 42.667 42.667h-170.667zM512 832c-164.949 0-298.667-133.718-298.667-298.667 0-106.492 61.417-192.475 190.647-260.968 13.958-7.398 22.686-21.902 22.686-37.699v-42.667h170.667v42.667c0 15.791 8.721 30.29 22.67 37.691 129.241 68.569 190.663 154.56 190.663 260.976 0 164.949-133.718 298.667-298.667 298.667zM512 497.351l103.883 71.179c19.439 13.319 45.994 8.358 59.314-11.081 12.295-17.944 9.013-41.951-6.853-56.014l-4.227-3.299-109.45-74.968v-103.168c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v103.125l-109.45 75.011c-17.944 12.295-23.551 35.868-13.831 54.711l2.751 4.603c12.295 17.944 35.868 23.551 54.711 13.831l4.603-2.751 103.883-71.179z" />
<glyph unicode="&#xe940;" glyph-name="language_svg" d="M529.497 336.405l-88.75 87.702 1.28 1.28c74.24 82.773 127.147 177.92 158.293 278.613h82.347c23.564 0 42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667h-256v42.667c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667v-42.667h-256.213c-23.446 0-42.453-19.007-42.453-42.453s19.007-42.453 42.453-42.453h434.133c-28.587-82.347-73.813-160.427-135.253-228.693-30.282 33.538-56.589 69.562-78.919 107.312l-7.737 13.608c-7.514 13.583-21.812 22.014-37.335 22.014h-17.235c-14.759 0-26.723-11.964-26.723-26.723 0-4.233 1.006-8.406 2.935-12.175l3.895-7.452c28.121-52.452 63.044-102.252 104.373-148.21l-186.671-184.104c-15.443-15.23-16.79-39.355-3.928-56.135l3.842-4.365c16.662-16.662 43.677-16.662 60.34 0l183.163 183.163 99.854-99.854c11.651-11.651 30.541-11.651 42.192 0 3.027 3.027 5.367 6.669 6.861 10.681l6.582 17.668c5.862 15.734 1.951 33.442-9.992 45.244zM759.765 533.333h-26.197c-17.785 0-33.705-11.032-39.95-27.685l-166.637-444.365c-5.734-15.29 2.013-32.334 17.303-38.067 3.32-1.245 6.836-1.883 10.382-1.883h13.052c17.808 0 33.743 11.060 39.972 27.744l37.429 100.256h202.667l37.807-100.373c6.261-16.622 22.166-27.627 39.928-27.627h13.145c16.33 0 29.568 13.238 29.568 29.568 0 3.546-0.638 7.062-1.883 10.382l-166.637 444.365c-6.245 16.653-22.165 27.685-39.95 27.685zM746.667 419.413l69.12-184.747h-138.24l69.12 184.747z" />
<glyph unicode="&#xe941;" glyph-name="checkboxempty_svg" d="M256 832h512c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-512c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128zM256 746.667c-23.564 0-42.667-19.103-42.667-42.667v-512c0-23.564 19.103-42.667 42.667-42.667h512c23.564 0 42.667 19.103 42.667 42.667v512c0 23.564-19.103 42.667-42.667 42.667h-512z" />
<glyph unicode="&#xe942;" glyph-name="checkboxon_svg" d="M768 832c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-512c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128h512zM737.83 648.837l-311.163-311.163-140.497 140.497c-16.662 16.662-43.677 16.662-60.34 0s-16.662-43.677 0-60.34l170.667-170.667c16.662-16.662 43.677-16.662 60.34 0l341.333 341.333c16.662 16.662 16.662 43.677 0 60.34s-43.677 16.662-60.34 0z" />
<glyph unicode="&#xe943;" glyph-name="close_svg" d="M222.281 730.15l3.549 4.020c15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 225.83-225.797 225.83 225.797c16.662 16.662 43.677 16.662 60.34 0s16.662-43.677 0-60.34l-225.797-225.83 225.797-225.83c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-225.83 225.797-225.83-225.797c-16.662-16.662-43.677-16.662-60.34 0s-16.662 43.677 0 60.34l225.797 225.83-225.797 225.83c-15.381 15.381-16.564 39.583-3.549 56.32v0z" />
<glyph unicode="&#xe944;" glyph-name="colorize_svg" d="M822.912 836.985l5.428-4.985 67.66-67.66c31.571-31.571 33.232-81.725 4.985-115.252l-4.985-5.428-153.003-152.96 33.839-33.864c16.662-16.662 16.662-43.677 0-60.34-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-33.83 33.83-353.83-353.83c-6.668-6.668-15.316-10.901-24.562-12.127l-5.608-0.37h-128c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v128c0 9.43 3.122 18.538 8.793 25.943l3.704 4.227 353.797 353.864-33.797 33.797c-16.662 16.662-16.662 43.677 0 60.34 15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 33.83-33.806 152.994 152.969c31.571 31.571 81.725 33.232 115.252 4.985zM554.667 558.293l-341.333-341.291v-67.627h67.627l341.333 341.291-67.627 67.627zM768 771.66l-153.003-152.96 67.669-67.669 152.994 152.969-67.66 67.66z" />
<glyph unicode="&#xe945;" glyph-name="copy_svg" d="M768 746.667c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-384c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128h384zM768 661.333h-384c-23.564 0-42.667-19.103-42.667-42.667v-512c0-23.564 19.103-42.667 42.667-42.667h384c23.564 0 42.667 19.103 42.667 42.667v512c0 23.564-19.103 42.667-42.667 42.667zM213.333 917.333h426.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-426.667c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976v-512c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v512c0 68.168 53.287 123.89 120.479 127.783l7.521 0.217z" />
<glyph unicode="&#xe946;" glyph-name="data_svg" d="M512 853.333c205.279 0 376.865-73.236 383.783-184.967l0.217-7.033v-426.667c0-115.681-174.444-192-384-192-205.279 0-376.865 73.236-383.783 184.967l-0.217 7.033v426.667c0 115.681 174.444 192 384 192zM810.667 234.667l0.011 89.097c-70.821-42.883-179.026-67.764-298.678-67.764-119.628 0-227.814 24.871-298.636 67.739l-0.031-89.072c0-49.268 131.196-106.667 298.667-106.667 163.284 0 292.084 54.564 298.422 102.957l0.245 3.709zM512 469.333c-119.628 0-227.814 24.871-298.636 67.739l-0.031-89.072c0-49.268 131.196-106.667 298.667-106.667 163.284 0 292.084 54.564 298.422 102.957l0.245 3.709 0.011 89.097c-70.821-42.883-179.026-67.764-298.678-67.764zM512 768c-167.47 0-298.667-57.398-298.667-106.667s131.196-106.667 298.667-106.667c167.47 0 298.667 57.398 298.667 106.667s-131.196 106.667-298.667 106.667z" />
<glyph unicode="&#xe947;" glyph-name="delete_filled_svg" d="M768 682.667c23.564 0 42.667-19.103 42.667-42.667v-448c0-70.692-57.308-128-128-128h-341.333c-70.692 0-128 57.308-128 128v448c0 23.564 19.103 42.667 42.667 42.667h512zM426.667 874.667h170.667c9.43 0 18.538-3.122 25.943-8.793l4.227-3.704 30.203-30.17h152.96c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-597.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h152.917l30.246 30.17c6.668 6.668 15.316 10.901 24.562 12.127l5.608 0.37z" />
<glyph unicode="&#xe948;" glyph-name="delete_svg" d="M768 682.667c23.564 0 42.667-19.103 42.667-42.667v-448c0-70.692-57.308-128-128-128h-341.333c-70.692 0-128 57.308-128 128v448c0 23.564 19.103 42.667 42.667 42.667h512zM725.333 597.333h-426.667v-405.333c0-23.564 19.103-42.667 42.667-42.667h341.333c23.564 0 42.667 19.103 42.667 42.667v405.333zM426.667 874.667h170.667c9.43 0 18.538-3.122 25.943-8.793l4.227-3.704 30.203-30.17h152.96c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-597.333c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h152.917l30.246 30.17c6.668 6.668 15.316 10.901 24.562 12.127l5.608 0.37z" />
<glyph unicode="&#xe949;" glyph-name="deleteuser_svg" d="M384 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-34.452c0-58.91-47.756-106.667-106.667-106.667h-469.333c-58.91 0-106.667 47.756-106.667 106.667v34.452c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM384 320c-118.985 0-199.024-27.459-243.017-79.443-8.383-9.905-12.983-22.462-12.983-35.438v-34.452c0-11.782 9.551-21.333 21.333-21.333h469.333c11.782 0 21.333 9.551 21.333 21.333v34.452c0 12.976-4.6 25.533-12.983 35.438-43.993 51.984-124.033 79.443-243.017 79.443zM682.667 533.333h256c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-256c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287zM384 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM384 746.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe94a;" glyph-name="document_svg" d="M519.32 874.667c33.948 0 66.505-13.486 90.51-37.49l291.346-291.346c24.005-24.005 37.49-56.562 37.49-90.51v-305.987c0-70.692-57.308-128-128-128h-597.333c-70.692 0-128 57.308-128 128v597.333c0 70.692 57.308 128 128 128h305.987zM469.333 789.333h-256c-23.564 0-42.667-19.103-42.667-42.667v-597.333c0-23.564 19.103-42.667 42.667-42.667h597.333c23.564 0 42.667 19.103 42.667 42.667v256h-256c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v256zM835.669 490.667l-281.003 281.003v-238.336c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h238.336z" />
<glyph unicode="&#xe94b;" glyph-name="down_svg" d="M512 337.673l268.497 268.497c16.662 16.662 43.677 16.662 60.34 0s16.662-43.677 0-60.34l-298.667-298.667c-16.662-16.662-43.677-16.662-60.34 0l-298.667 298.667c-16.662 16.662-16.662 43.677 0 60.34s43.677 16.662 60.34 0l268.497-268.497z" />
<glyph unicode="&#xe94c;" glyph-name="attach_svg" d="M497.401 589.342l-160.596-163.813c-57.774-58.931-57.773-153.256 0.002-212.186 54.925-56.023 143.615-58.882 201.973-7.943l7.659 7.175 280.991 286.603c88.906 90.684 88.906 235.835 0 326.519-84.812 86.507-222.148 90.314-311.561 10.427l-10.923-10.427-280.232-285.835c-120.038-122.438-120.038-318.415 0-440.853 114.978-117.276 301.591-121.763 422.020-12.095l12.555 12.098 160.597 163.812c16.496 16.827 16.229 43.84-0.598 60.337s-43.84 16.229-60.337-0.598l-163.664-166.879c-86.351-84.658-224.981-83.286-309.64 3.065-87.505 89.255-87.505 232.119 0 321.373l282.198 287.801c55.399 54.313 144.337 53.433 198.65-1.966 56.374-57.501 56.374-149.539 0-207.039l-281.1-286.702c-24.445-23.966-63.69-23.577-87.656 0.868-25.243 25.747-25.243 66.96-0.001 92.708l160.596 163.813c16.496 16.827 16.228 43.84-0.598 60.337s-43.84 16.228-60.337-0.598z" />
<glyph unicode="&#xe94d;" glyph-name="avatar_archivedchats_svg" d="M411.469 675.556h201.062c25.242 0 48.73-12.547 62.788-33.293l2.254-3.533 32.21-53.683c6.287-10.479 9.938-22.301 10.672-34.454l0.138-4.571v-249.724c0-41.892-33.96-75.852-75.852-75.852h-265.481c-41.892 0-75.852 33.96-75.852 75.852v249.724c0 12.22 2.952 24.236 8.576 35.035l2.234 3.991 32.21 53.683c12.987 21.645 35.83 35.33 60.853 36.711l4.189 0.115zM644.741 561.778h-265.481c-20.946 0-37.926-16.98-37.926-37.926v-227.556c0-20.946 16.98-37.926 37.926-37.926h265.481c20.946 0 37.926 16.98 37.926 37.926v227.556c0 20.946-16.98 37.926-37.926 37.926zM441.702 442.446c6.836 6.836 17.592 7.362 25.031 1.578l1.786-1.578 43.48-43.48 43.48 43.48c7.405 7.405 19.412 7.405 26.818 0 6.836-6.836 7.362-17.592 1.578-25.031l-1.578-1.786-56.889-56.889c-6.836-6.836-17.592-7.362-25.031-1.578l-1.786 1.578-56.889 56.889c-7.405 7.405-7.405 19.412 0 26.818zM612.531 637.63h-201.062c-12.297 0-23.762-5.956-30.844-15.857l-1.677-2.556-12.348-20.564c4.117 0.692 8.346 1.052 12.66 1.052h265.481c4.313 0 8.543-0.36 12.66-1.052l-12.348 20.564c-6.327 10.545-17.332 17.312-29.466 18.29l-3.055 0.123z" />
<glyph unicode="&#xe94e;" glyph-name="avatar_deletedaccount_svg" d="M512 694.519c104.73 0 189.63-84.9 189.63-189.63v-265.481c0-16.894-20.426-25.355-32.372-13.409l-43.48 43.48-43.48-43.48c-7.405-7.405-19.412-7.405-26.818 0l-43.48 43.48-43.48-43.48c-7.405-7.405-19.412-7.405-26.818 0l-43.48 43.48-43.48-43.48c-11.946-11.946-32.372-3.485-32.372 13.409v265.481c0 104.73 84.9 189.63 189.63 189.63zM512 656.593c-83.784 0-151.704-67.92-151.704-151.704v-219.701l24.517 24.517c7.405 7.405 19.412 7.405 26.818 0l43.48-43.48 43.48 43.48c7.405 7.405 19.412 7.405 26.818 0l43.48-43.48 43.48 43.48c7.405 7.405 19.412 7.405 26.818 0l24.517-24.517v219.701c0 83.784-67.92 151.704-151.704 151.704zM436.148 542.815c20.946 0 37.926-16.98 37.926-37.926s-16.98-37.926-37.926-37.926c-20.946 0-37.926 16.98-37.926 37.926s16.98 37.926 37.926 37.926zM587.852 542.815c20.946 0 37.926-16.98 37.926-37.926s-16.98-37.926-37.926-37.926c-20.946 0-37.926 16.98-37.926 37.926s16.98 37.926 37.926 37.926z" />
<glyph unicode="&#xe94f;" glyph-name="avatar_savedmessages_svg" d="M350.543 222.831c-12.639-7.022-28.172 2.118-28.172 16.577v360.296c0 41.892 33.96 75.852 75.852 75.852h227.556c41.892 0 75.852-33.96 75.852-75.852v-360.296c0-14.459-15.533-23.599-28.172-16.577l-161.457 89.699-161.457-89.699zM663.704 599.704c0 20.946-16.98 37.926-37.926 37.926h-227.556c-20.946 0-37.926-16.98-37.926-37.926v-328.068l142.494 79.164c5.727 3.182 12.691 3.182 18.418 0l142.494-79.164v328.068z" />
<glyph unicode="&#xe950;" glyph-name="back_svg" d="M183.163 478.17l298.667 298.667c16.662 16.662 43.677 16.662 60.34 0 15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-225.839-225.83h494.336c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-494.336l225.839-225.83c15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-298.667 298.667c-15.381 15.381-16.564 39.583-3.549 56.32l3.549 4.020z" />
<glyph unicode="&#xe951;" glyph-name="camera_svg" d="M622.327 874.667c22.632 0 44.337-8.99 60.34-24.994l60.34-60.34h67.66c70.692 0 128-57.308 128-128v-469.333c0-70.692-57.308-128-128-128h-597.333c-70.692 0-128 57.308-128 128v469.333c0 70.692 57.308 128 128 128h67.66l60.34 60.34c16.003 16.003 37.708 24.994 60.34 24.994h220.654zM622.327 789.333h-220.654l-60.34-60.34c-16.003-16.003-37.708-24.994-60.34-24.994h-67.66c-23.564 0-42.667-19.103-42.667-42.667v-469.333c0-23.564 19.103-42.667 42.667-42.667h597.333c23.564 0 42.667 19.103 42.667 42.667v469.333c0 23.564-19.103 42.667-42.667 42.667h-67.66c-22.632 0-44.337 8.99-60.34 24.994l-60.34 60.34zM512 661.333c117.821 0 213.333-95.513 213.333-213.333s-95.513-213.333-213.333-213.333c-117.821 0-213.333 95.513-213.333 213.333s95.513 213.333 213.333 213.333zM512 576c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128s-57.308 128-128 128z" />
<glyph unicode="&#xe952;" glyph-name="cameraadd_svg" d="M848.357 277.046l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-85.333h85.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333v-85.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v85.333h-85.333c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h85.333v85.333c0 21.881 16.471 39.915 37.691 42.38v0zM359.006 874.667h220.654c20.117 0 39.502-7.104 54.801-19.922l5.539-5.072 60.34-60.34h67.66c68.168 0 123.89-53.287 127.783-120.479l0.217-7.521v-213.333c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v213.333c0 21.881-16.471 39.915-37.691 42.38l-4.976 0.287h-67.66c-20.117 0-39.502 7.104-54.801 19.922l-5.539 5.072-60.34 60.34h-220.654l-60.34-60.34c-14.225-14.225-32.955-22.909-52.837-24.663l-7.503-0.33h-67.66c-21.881 0-39.915-16.471-42.38-37.691l-0.287-4.976v-469.333c0-21.881 16.471-39.915 37.691-42.38l4.976-0.287h384c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-384c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v469.333c0 68.168 53.287 123.89 120.479 127.783l7.521 0.217h67.66l60.34 60.34c14.225 14.225 32.955 22.909 52.837 24.663l7.503 0.33zM469.333 661.333c117.821 0 213.333-95.513 213.333-213.333s-95.513-213.333-213.333-213.333c-117.821 0-213.333 95.513-213.333 213.333s95.513 213.333 213.333 213.333zM469.333 576c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128s-57.308 128-128 128z" />
<glyph unicode="&#xe953;" glyph-name="car_svg" d="M981.333 106.667c0-70.692-57.308-128-128-128s-128 57.308-128 128h-426.667c0-70.692-57.308-128-128-128-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521v299.298c0 32.477 5.297 64.736 15.682 95.507l75.86 224.771c29.566 87.604 104.073 152.458 194.916 169.665 75.184 14.241 135.961 21.425 182.875 21.425s107.691-7.185 182.874-21.425c90.844-17.206 165.35-82.060 194.917-169.664l75.86-224.772c10.385-30.771 15.682-63.031 15.682-95.507v-299.298zM127.995 129.502l0.005-22.835c0-23.564 19.103-42.667 42.667-42.667 21.881 0 39.915 16.471 42.38 37.691l0.287 4.976c-31.088 0-60.235 8.312-85.338 22.835zM810.667 106.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667l0.047 22.86c-25.113-14.538-54.275-22.86-85.381-22.86zM884.798 474.184l-9.377 27.721c-14.717-7.389-30.81-11.914-47.416-13.217l-10.018-0.392h-611.974c-20.132 0-39.775 4.743-57.435 13.609l-9.377-27.721c-7.418-21.98-11.202-45.022-11.202-68.219v-128.631c0-47.128 38.205-85.333 85.333-85.333h597.333c47.128 0 85.333 38.205 85.333 85.333v128.631c0 23.198-3.784 46.24-11.202 68.219v0zM277.333 405.333c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM746.667 405.333c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM512 832c-40.757 0-96.603-6.602-166.994-19.935-60.562-11.471-110.233-54.707-129.944-113.11l-38.36-113.664c6.592-6.232 14.971-10.175 23.899-11.317l5.412-0.344 311.489 0.005c17.587 62.897 75.322 109.032 143.832 109.032s126.245-46.135 143.832-109.032l12.822-0.005c9.43 0 18.538 3.122 25.943 8.793l3.302 2.964-38.294 113.569c-19.711 58.403-69.382 101.639-129.945 113.11-70.391 13.333-126.236 19.934-166.993 19.934zM661.333 597.333c-20.052 0-37.95-9.222-49.685-23.656h99.37c-11.735 14.434-29.633 23.656-49.685 23.656z" />
<glyph unicode="&#xe954;" glyph-name="channel_svg" d="M789.333 888.385c58.91 0 106.667-47.756 106.667-106.667v-667.437c0-24.74-8.6-48.711-24.327-67.809-37.45-45.475-104.673-51.98-150.148-14.53l-209.525 172.581v-76.524c0-68.168-53.287-123.89-120.479-127.783l-7.521-0.217c-68.168 0-123.89 53.287-127.783 120.479l-0.217 7.521-0.008 110.936c-97.372 19.769-170.659 105.858-170.659 209.064 0 117.821 95.513 213.333 213.333 213.333h176.693l246.165 202.724c19.098 15.728 43.069 24.327 67.809 24.327zM341.333 234.689v-106.689c0-23.564 19.103-42.667 42.667-42.667 21.881 0 39.915 16.471 42.38 37.691l0.287 4.976v106.689h-85.333zM789.333 803.052c-4.948 0-9.742-1.72-13.562-4.865l-246.165-202.724c-15.278-12.582-34.455-19.462-54.247-19.462h-176.693c-70.692 0-128-57.308-128-128s57.308-128 128-128h176.693c19.792 0 38.969-6.88 54.247-19.462l246.165-202.724c9.095-7.49 22.54-6.189 30.030 2.906 3.146 3.82 4.865 8.614 4.865 13.562v667.437c0 11.782-9.551 21.333-21.333 21.333z" />
<glyph unicode="&#xe955;" glyph-name="channelviews_svg" d="M512 717.474c217.604 0 404.211-215.579 404.211-269.474s-186.607-269.474-404.211-269.474c-217.604 0-404.211 215.579-404.211 269.474s186.607 269.474 404.211 269.474zM512 636.632c-104.178 0-188.632-84.453-188.632-188.632s84.453-188.632 188.632-188.632c104.178 0 188.632 84.453 188.632 188.632s-84.453 188.632-188.632 188.632zM512 542.316c52.089 0 94.316-42.227 94.316-94.316s-42.227-94.316-94.316-94.316c-52.089 0-94.316 42.227-94.316 94.316s42.227 94.316 94.316 94.316z" />
<glyph unicode="&#xe956;" glyph-name="chatsplaceholder_svg" d="M938.667 661.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-629.699c0-25.921-21.013-46.933-46.933-46.933-10.669 0-20.964 3.633-29.23 10.214l-3.957 3.533-150.886 150.886h-408.993c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h341.335c114.72 0 208.291 90.552 213.136 204.079l0.197 9.254v213.333l0.285 4.976c2.465 21.22 20.499 37.691 42.38 37.691zM682.667 917.333c70.692 0 128-57.308 128-128v-384c0-70.692-57.308-128-128-128h-408.994l-150.886-150.886c-18.329-18.329-48.045-18.329-66.374 0-8.802 8.802-13.746 20.739-13.746 33.187v629.699c0 70.692 57.308 128 128 128h512z" />
<glyph unicode="&#xe957;" glyph-name="check_svg1" d="M200.837 435.503c-16.662 16.662-43.677 16.662-60.34 0s-16.662-43.677 0-60.34l213.333-213.333c16.662-16.662 43.677-16.662 60.34 0l469.333 469.333c16.662 16.662 16.662 43.677 0 60.34s-43.677 16.662-60.34 0l-439.163-439.163-183.163 183.163z" />
<glyph unicode="&#xe958;" glyph-name="checkbox_svg" d="M768 832c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-512c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128h512zM768 746.667h-512c-23.564 0-42.667-19.103-42.667-42.667v-512c0-23.564 19.103-42.667 42.667-42.667h512c23.564 0 42.667 19.103 42.667 42.667v512c0 23.564-19.103 42.667-42.667 42.667zM448 380.34l225.83 225.83c16.662 16.662 43.677 16.662 60.34 0 15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-256-256c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-106.667 106.667c-16.662 16.662-16.662 43.677 0 60.34 15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 76.497-76.497z" />
<glyph unicode="&#xe959;" glyph-name="checkboxblock_svg" d="M768 832c70.692 0 128-57.308 128-128v-512c0-70.692-57.308-128-128-128h-512c-70.692 0-128 57.308-128 128v512c0 70.692 57.308 128 128 128h512zM682.667 490.667h-341.333c-23.564 0-42.667-19.103-42.667-42.667s19.103-42.667 42.667-42.667h341.333c23.564 0 42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667z" />
<glyph unicode="&#xe95a;" glyph-name="checks_svg" d="M267.767 283.67l352.606 402.978c12.74 14.56 34.872 16.036 49.432 3.295 13.104-11.466 15.61-30.54 6.692-44.854l-3.397-4.578-377.263-431.158c-12.010-13.726-32.215-15.731-46.582-5.549l-4.553 3.846-161.684 161.684c-13.681 13.681-13.681 35.861 0 49.542 12.313 12.313 31.51 13.544 45.2 3.694l4.342-3.694 135.207-135.207zM537.241 283.67l352.606 402.978c12.74 14.56 34.872 16.036 49.432 3.295 13.104-11.466 15.61-30.54 6.692-44.854l-3.397-4.578-377.263-431.158c-12.010-13.726-32.215-15.731-46.582-5.549l-4.553 3.846-53.895 53.895c-13.681 13.681-13.681 35.861 0 49.542 12.313 12.313 31.51 13.544 45.2 3.694l4.342-3.694 27.417-27.417z" />
<glyph unicode="&#xe95b;" glyph-name="activesessions_svg" d="M170.667 874.667h597.333c91.4 0 166.019-71.849 170.458-162.149l0.209-8.518v-85.333c0-23.564-19.103-42.667-42.667-42.667-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v85.333c0 44.986-34.811 81.842-78.965 85.099l-6.369 0.234h-597.333c-44.986 0-81.842-34.811-85.099-78.965l-0.234-6.369v-341.333c0-44.986 34.811-81.842 78.965-85.099l6.369-0.234h426.667c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333v-85.333h85.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-256c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h85.333v85.333h-256c-91.4 0-166.019 71.849-170.458 162.149l-0.209 8.518v341.333c0 91.4 71.849 166.019 162.149 170.458l8.518 0.209zM938.667 490.667c47.128 0 85.333-38.205 85.333-85.333v-298.667c0-47.128-38.205-85.333-85.333-85.333h-128c-47.128 0-85.333 38.205-85.333 85.333v298.667c0 47.128 38.205 85.333 85.333 85.333h128zM938.667 405.333h-128v-298.667h128v298.667z" />
<glyph unicode="&#xe95c;" glyph-name="add_svg" d="M507.024 789.046l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-256h256c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-256v-256c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v256h-256c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h256v256c0 21.881 16.471 39.915 37.691 42.38v0z" />
<glyph unicode="&#xe95d;" glyph-name="addmember_filled_svg" d="M384 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-55.786c0-47.128-38.205-85.333-85.333-85.333h-512c-47.128 0-85.333 38.205-85.333 85.333v55.786c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM805.691 661.046l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-85.333h85.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333v-85.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v85.333h-85.333c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h85.333v85.333c0 21.881 16.471 39.915 37.691 42.38v0zM384 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667z" />
<glyph unicode="&#xe95e;" glyph-name="adduser_svg" d="M384 405.333c141.778 0 245.462-35.572 308.155-109.651 21.423-25.314 33.178-57.402 33.178-90.564v-34.452c0-58.91-47.756-106.667-106.667-106.667h-469.333c-58.91 0-106.667 47.756-106.667 106.667v34.452c0 33.162 11.756 65.25 33.179 90.564 62.693 74.079 166.377 109.65 308.155 109.65zM384 320c-118.985 0-199.024-27.459-243.017-79.443-8.383-9.905-12.983-22.462-12.983-35.438v-34.452c0-11.782 9.551-21.333 21.333-21.333h469.333c11.782 0 21.333 9.551 21.333 21.333v34.452c0 12.976-4.6 25.533-12.983 35.438-43.993 51.984-124.033 79.443-243.017 79.443zM805.691 661.046l4.976 0.287c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976v-85.333h85.333c21.881 0 39.915-16.471 42.38-37.691l0.287-4.976c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287h-85.333v-85.333c0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976v85.333h-85.333c-21.881 0-39.915 16.471-42.38 37.691l-0.287 4.976c0 21.881 16.471 39.915 37.691 42.38l4.976 0.287h85.333v85.333c0 21.881 16.471 39.915 37.691 42.38v0zM384 832c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM384 746.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe95f;" glyph-name="admin_svg" d="M512.239 938.667c16.136 0 28.168-2.465 51.412-9.18l47.256-16.287 47.087-16.644c49.569-17.663 104.683-37.693 148.222-53.908l43.063-16.255c63.073-24.566 89.387-56.573 89.387-121.782v-348.951l-0.233-17.057c-4.188-147.321-66.782-208.095-342.576-364.502l-31.551-17.794c-16.838-9.217-35.485-14.972-52.068-14.972s-35.231 5.755-52.666 15.306l-60.882 34.944-42.742 25.118c-217.318 129.436-266.908 189.449-270.408 322.582l-0.207 16.376v348.951c0 62.416 24.82 95.549 81.356 118.649l31.438 11.945 50.040 18.344 214.085 76.391c19.883 5.925 33.697 8.728 49.987 8.728zM512.028 192c-88.816 0-160.487-12.737-215.108-37.49 40.034-27.548 92.38-59.144 160.59-98.405l43.634-24.946c3.143-1.72 6.294-2.993 8.441-3.736l2.653-0.755 2.628 0.741 5.157 2.071c0.962 0.443 1.947 0.932 2.916 1.462l29.292 16.504c75.824 42.914 133.019 76.962 176.006 106.581-54.767 25.067-126.802 37.975-216.211 37.975zM512.239 853.333c-4.804 0-10.274-0.915-17.595-2.835l-5.856-1.63-232.828-83.297-56.445-21.034-9.304-3.835c-16.276-7.329-19.157-13.355-19.505-31.34v-360.007l0.344-12.405c2.193-49.695 14.501-85.623 54.505-125.457 2.779 2.92 6.075 5.46 9.802 7.524 70.807 39.222 163.076 58.315 276.671 58.315 113.6 0 205.871-19.094 276.679-58.319 3.902-2.161 7.332-4.844 10.252-7.913 43.972 44.414 54.375 84.863 54.375 144.557v348.951c0 23.34-1.807 28.455-24.028 37.849l-10.828 4.353-47.336 17.839-76.084 27.905c-35.59 12.912-72.025 25.955-103.212 36.932l-53.573 18.548-10.307 2.819c-7.258 1.839-11.561 2.477-15.726 2.477zM512 704c94.257 0 170.667-76.41 170.667-170.667s-76.41-170.667-170.667-170.667c-94.257 0-170.667 76.41-170.667 170.667s76.41 170.667 170.667 170.667zM512 618.667c-47.128 0-85.333-38.205-85.333-85.333s38.205-85.333 85.333-85.333c47.128 0 85.333 38.205 85.333 85.333s-38.205 85.333-85.333 85.333z" />
<glyph unicode="&#xe960;" glyph-name="animals_svg" d="M810.667 896c96.926 0 164.419-163.817 129.5-358.876 11.143-29.875 21.422-62.488 28.921-93.111l17.135 3.247c23.156 4.369 45.469-10.861 49.838-34.016 4.057-21.502-8.785-42.277-29.18-48.633l-4.836-1.205-20.804-3.897-0.104-7.182c-0.977-25.593-5.56-50.677-13.28-74.973l26.278-0.021c23.564 0 42.674-19.103 42.674-42.667 0-21.881-16.479-39.915-37.699-42.38l-4.976-0.287-67.99 0.006c-83.817-125.018-250.784-213.339-414.143-213.339s-330.326 88.321-414.143 213.339l-67.99-0.006c-23.564 0-42.674 19.103-42.674 42.667 0 21.881 16.479 39.915 37.699 42.38l4.976 0.287 26.278 0.021c-8.44 26.562-13.131 54.065-13.459 82.145l-20.729 3.907c-23.156 4.369-38.385 26.682-34.016 49.838 4.057 21.502 23.586 36.169 44.895 34.657l4.943-0.64 17.139-3.254c7.503 30.622 17.787 63.242 28.94 93.141-32.379 186.39 46.978 358.852 129.477 358.852 17.359 0 27.61-5.319 45.009-20.338l11.411-10.211 51.843-49.515 12.435-11.368c12.482-11.132 23.107-19.632 31.821-25.401l7.366-4.473 3.826-1.892c54.637 12.584 84.519 16.532 134.955 16.532 45.654 0 74.534-3.24 122.293-13.773l11.715-2.653 1.909 0.839 5.066 2.763c8.029 4.77 17.949 12.241 29.744 22.339l7.302 6.373c5.802 5.155 11.951 10.813 18.875 17.343l45.302 43.032 11.433 10.149c17.439 14.935 27.735 20.254 45.028 20.254zM816.059 806.432l-4.469-3.992-40.247-38.243-18.035-16.832-14.697-13.036c-45.014-38.925-75.751-55.542-108.247-45.254-50.417 11.689-74.298 14.926-118.364 14.926-43.553 0-67.306-3.156-116.584-14.535-34.799-10.775-65.671 5.831-109.757 44.008l-15.176 13.507-14.468 13.503-42.491 40.739c-9.797-11.374-19.612-26.886-27.946-45.412-25.153-55.917-32.966-128.078-15.739-214.28l2.445-12.233-8.611-22.36c-9.343-25.196-18.16-53.218-24.69-78.823l124.928-23.52c23.156-4.369 38.385-26.682 34.016-49.838-4.057-21.502-23.586-36.169-44.895-34.657l-4.943 0.64-119.052 22.448c2.376-22.395 8.77-44.477 18.546-65.818l108.417-0.036c23.564 0 42.667-19.103 42.667-42.667 0-21.881-16.471-39.915-37.691-42.38l-4.976-0.287-48.002 0.021c74.363-75.424 190.446-128.021 304.002-128.021s229.64 52.597 304.002 128.021l-48.002-0.021c-23.564 0-42.667 19.103-42.667 42.667 0 21.881 16.471 39.915 37.691 42.38l4.976 0.287 108.417 0.036c9.775 21.341 16.17 43.423 18.546 65.818l-119.052-22.448c-23.156-4.369-45.469 10.861-49.838 34.016-4.057 21.502 8.785 42.277 29.18 48.633l4.836 1.205 124.936 23.516c-6.533 25.627-15.354 53.67-24.698 78.864l-8.612 22.355 2.446 12.236c17.778 88.944 12.869 162.612-8.444 215.911-8.869 22.18-19.758 37.825-27.087 46.171l-2.571 2.786zM493.627 362.667h39.707l4.538-0.233 4.744-0.779 4.565-1.297 4.54-1.851 2.361-1.215 1.938-1.143 3.074-2.131 4.163-3.588c1.719-1.727 3.209-3.458 4.528-5.255l1.857-2.753c0.853-1.378 1.629-2.808 2.324-4.285l1.611-3.95 1.529-5.451 0.746-5.050 0.149-3.686-0.252-4.708-1.167-6.243-0.771-2.541-18.533-55.598 1.134-3.375c3.276-7.571 10.813-12.868 19.588-12.868 11.782 0 21.333 9.551 21.333 21.333 0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667c0-58.91-47.756-106.667-106.667-106.667-24.032 0-46.207 7.947-64.041 21.357-17.788-13.422-39.946-21.357-63.959-21.357-58.91 0-106.667 47.756-106.667 106.667 0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667c0-11.782 9.551-21.333 21.333-21.333 8.774 0 16.311 5.297 19.588 12.868l1.134 3.375-17.597 52.79c-7.824 23.473 4.861 48.844 28.334 56.668l4.767 1.266 3.304 0.606 6.096 0.427zM661.333 533.333c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM362.667 533.333c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM649.223 772.177l-3.214 0.729-1.561-0.614 1.78 0.168 1.633-0.071 1.363-0.212z" />
<glyph unicode="&#xe961;" glyph-name="archive_svg" d="M320 917.333h384c50.361 0 97.967-22.229 130.279-60.418l6.255-7.849 64-85.333c19.941-26.588 31.636-58.35 33.776-91.357l0.358-11.043v-469.333c0-94.257-76.41-170.667-170.667-170.667h-512c-94.257 0-170.667 76.41-170.667 170.667v469.333c0 33.234 9.701 65.662 27.794 93.351l6.34 9.049 64 85.333c30.217 40.289 76.563 65.036 126.502 67.972l10.032 0.295zM768 661.333h-512c-47.128 0-85.333-38.205-85.333-85.333v-384c0-47.128 38.205-85.333 85.333-85.333h512c47.128 0 85.333 38.205 85.333 85.333v384c0 47.128-38.205 85.333-85.333 85.333zM353.83 478.17c15.381 15.381 39.583 16.564 56.32 3.549l4.020-3.549 97.83-97.83 97.83 97.83c16.662 16.662 43.677 16.662 60.34 0 15.381-15.381 16.564-39.583 3.549-56.32l-3.549-4.020-128-128c-15.381-15.381-39.583-16.564-56.32-3.549l-4.020 3.549-128 128c-16.662 16.662-16.662 43.677 0 60.34zM704 832h-384c-24.418 0-47.54-10.451-63.65-28.495l-4.617-5.638-43.503-57.975c15.158 4.411 31.188 6.775 47.769 6.775h512c16.566 0 32.581-2.36 47.727-6.763l-43.46 57.963c-14.651 19.534-36.885 31.761-60.986 33.823l-7.281 0.311z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 83 KiB

BIN
src/assets/fonts/tgico.ttf Normal file

Binary file not shown.

BIN
src/assets/fonts/tgico.woff Normal file

Binary file not shown.

10
src/assets/img/doc-in.svg Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 53.2 (72643) - https://sketchapp.com -->
<title>doc-in</title>
<desc>Created with Sketch.</desc>
<g id="doc-in" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M54,22 C54,19.790861 52.209139,18 50,18 L40,18 C37.790861,18 36,16.209139 36,14 L36,4 C36,1.790861 34.209139,-4.05812251e-16 32,0 L33.8020203,8.8817842e-15 C35.3933192,1.00028247e-14 36.9194427,0.632141042 38.0446609,1.75735931 L52.2426407,15.9553391 C53.367859,17.0805573 54,18.6066808 54,20.1979797 L54,22 Z" id="Corner" fill="#287ED0"></path>
<path d="M36,4 L36,14 C36,16.209139 37.790861,18 40,18 L50,18 C52.209139,18 54,19.790861 54,22 L54,48 C54,51.3137085 51.3137085,54 48,54 L6,54 C2.6862915,54 0,51.3137085 0,48 L0,6 C0,2.6862915 2.6862915,0 6,0 L32,0 C34.209139,-4.05812251e-16 36,1.790861 36,4 Z" id="Base" fill="#4EA4F6"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<svg width="11" height="20" viewBox="0 0 11 20" xmlns="http://www.w3.org/2000/svg"><g transform="translate(9 -14)" fill="none" fill-rule="evenodd"><path d="M-6 16h6v17c-.193-2.84-.876-5.767-2.05-8.782-.904-2.325-2.446-4.485-4.625-6.48A1 1 0 01-6 16z" transform="matrix(1 0 0 -1 0 49)" id="corner-fill" fill="#FFF"/></g></svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@ -0,0 +1 @@
<svg width="11" height="20" viewBox="0 0 11 20" xmlns="http://www.w3.org/2000/svg"><g transform="translate(9 -14)" fill="none" fill-rule="evenodd"><path d="M-6 16h6v17c-.193-2.84-.876-5.767-2.05-8.782-.904-2.325-2.446-4.485-4.625-6.48A1 1 0 01-6 16z" transform="rotate(180 -3.5 24.5)" id="corner-fill" fill="#EEFFDE"/></g></svg>

After

Width:  |  Height:  |  Size: 328 B

BIN
src/assets/img/photo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

538
src/components/misc.ts Normal file
View File

@ -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 = `
<svg xmlns="http://www.w3.org/2000/svg" class="preloader-circular" viewBox="25 25 50 50">
<circle class="preloader-path" cx="50" cy="50" r="20" fill="none" stroke-miterlimit="10"/>
</svg>`;
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 = `
<svg xmlns="http://www.w3.org/2000/svg" class="preloader-circular" viewBox="25 25 50 50">
<circle class="preloader-path-new" cx="50" cy="50" r="23" fill="none" stroke-miterlimit="10"/>
</svg>`;
if(cancelable) {
this.preloader.innerHTML += `
<svg xmlns="http://www.w3.org/2000/svg" class="preloader-close" viewBox="0 0 20 20">
<line x1="0" y1="20" x2="20" y2="0" stroke-width="2" stroke-linecap="round"></line>
<line x1="0" y1="0" x2="20" y2="20" stroke-width="2" stroke-linecap="round"></line>
</svg>`;
} 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<void>}> = [];
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<void>}) {
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 = `
<div class="document-ico ext-${ext}">${ext}</div>
<div class="document-name">${fileName}</div>
<div class="document-size">${size}</div>
`;
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<string>(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;
});
}

View File

@ -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<br>with the code.';
break;
case 'auth.sentCodeTypeApp':
sentTypeElement.innerHTML = 'We have sent you a message in Telegram<br>with the code.';
break;
case 'auth.sentCodeTypeCall':
sentTypeElement.innerHTML = 'We will call you and voice<br>the code.';
break;
default:
sentTypeElement.innerHTML = `Please check everything<br>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<string>(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<unknown>;
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 * );
});
};

758
src/components/pageIm.ts Normal file
View File

@ -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<MTStickerSet>
} = 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<string>(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<any>;
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);
});
});

View File

@ -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<string>(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) {
}); */
};

View File

@ -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<HTMLLIElement> = [];
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 = `<span class="emoji-inner" style="background: url(${sheetUrl}${sheetNo}.png);background-position:${xPos}% ${yPos}%;background-size:${sizeX}% ${sizeY}%" data-codepoints="${unified}"></span>`;
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<HTMLElement>('.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();
};

View File

@ -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 <HTMLElement>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;
}
});
});
};

1
src/countries.json Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

28
src/dialogsBug.js Normal file
View File

@ -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

1
src/emoji.json Normal file

File diff suppressed because one or more lines are too long

61686
src/emoji_pretty.json Normal file

File diff suppressed because it is too large Load Diff

75
src/format_jsons.js Normal file
View File

@ -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));
} */

612
src/lib/StackBlur.js Normal file
View File

@ -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;
}

View File

@ -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();

View File

@ -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();

View File

@ -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<boolean> {
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 += '<i>Photo' + (lastMessage.message ? ', ' : '') + '</i>';
break;
case 'messageMediaGeo':
lastMessageText += '<i>Geolocation</i>';
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) + '<i>Sticker</i>';
found = true;
break;
case 'documentAttributeFilename':
lastMessageText += '<i>' + attribute.file_name + '</i>';
found = true;
break;
/* default:
console.warn('Got unknown document type!', lastMessage);
break; */
}
}
if(document.type == 'video') {
lastMessageText += '<i>Video</i>';
found = true;
} else if(document.type == 'voice') {
lastMessageText += '<i>Voice message</i>';
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();

View File

@ -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<Blob> {
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<Blob> = 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();

File diff suppressed because it is too large Load Diff

View File

@ -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();

View File

@ -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();

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More